知识点

  • 405请求方式错误
  • sha1()函数缺陷

启动靶机

打开靶机,页面提示405,405响应码为请求方式错误,于是尝试换一种请求的方式,bp抓包,然后发送了POST请求,得到源码
image.png

  1. <?php
  2. error_reporting(0);
  3. if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
  4. header("HTTP/1.1 405 Method Not Allowed");
  5. exit();
  6. } else {
  7. if (!isset($_POST['roam1']) || !isset($_POST['roam2'])){
  8. show_source(__FILE__);
  9. }
  10. else if ($_POST['roam1'] !== $_POST['roam2'] && sha1($_POST['roam1']) === sha1($_POST['roam2'])){
  11. phpinfo(); // collect information from phpinfo!
  12. }
  13. }

观察源码可以发现,如果不使用POST请求,就会出现405 Method Not Allowed的报错信息;
接着分析源码,第一个if条件中的isset很容易绕过,只需要传参roam1roam2就可以了;
到了else if判断,要求roam1roam2两个变量不能相等,并且经过sha1之后的值是相等的。这就
用到了sha1函数的缺陷,即不能处理数组。于是我们用数组绕过构造payload:

  1. roam1[]=1&roam2[]=2

用hackbar发送一下post请求,得到了一个phpinfo()的界面,在这个页面中找到了flag:
image.png