知识点
- 405请求方式错误
- sha1()函数缺陷
启动靶机
打开靶机,页面提示405,405响应码为请求方式错误,于是尝试换一种请求的方式,bp抓包,然后发送了POST请求,得到源码
<?phperror_reporting(0);if ($_SERVER['REQUEST_METHOD'] !== 'POST') {header("HTTP/1.1 405 Method Not Allowed");exit();} else {if (!isset($_POST['roam1']) || !isset($_POST['roam2'])){show_source(__FILE__);}else if ($_POST['roam1'] !== $_POST['roam2'] && sha1($_POST['roam1']) === sha1($_POST['roam2'])){phpinfo(); // collect information from phpinfo!}}
观察源码可以发现,如果不使用POST请求,就会出现405 Method Not Allowed的报错信息;
接着分析源码,第一个if条件中的isset很容易绕过,只需要传参roam1、roam2就可以了;
到了else if判断,要求roam1和roam2两个变量不能相等,并且经过sha1之后的值是相等的。这就
用到了sha1函数的缺陷,即不能处理数组。于是我们用数组绕过构造payload:
roam1[]=1&roam2[]=2
用hackbar发送一下post请求,得到了一个phpinfo()的界面,在这个页面中找到了flag:
