知识点
- 405请求方式错误
- sha1()函数缺陷
启动靶机
打开靶机,页面提示405,405响应码为请求方式错误,于是尝试换一种请求的方式,bp抓包,然后发送了POST请求,得到源码
<?php
error_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: