寒假刷题(1)

寒假刷题(1)

hctf_2018_warmup

打开题目是一张图,下意识地F12查看页面源码

发现隐藏的网页

source.php

然后就是代码审计

<?php 
    highlight_file  (  __FILE__  ); 
    class   emmm 
      { 
      public static function   checkFile  (&  $page  ) 
      { 
          $whitelist   = [  "source"  =>  "source.php"  ,  "hint"  =>  "hint.php"  ]; #定义白名单
        if (! isset(  $page  ) || !  is_string  (  $page  )) { 
          echo   "you can't see it"  ; 
          return   false  ; 
        } 
 
        if (  in_array  (  $page  ,   $whitelist  )) { 
          return   true  ; 
        } #判断有没有输入,是不是空字符串
 
          $_page   =   mb_substr  ( 
            $page  , 
            0  , 
            mb_strpos  (  $page   .   '?'  ,   '?'  )
        );
        if (  in_array  (  $_page  ,   $whitelist  )) { 
          return   true  ; 
        } 
 
          $_page   =   urldecode  (  $page  ); #解码page已经编码的字符
          $_page   =   mb_substr  ( 
            $_page  , 
            0  , 
            mb_strpos  (  $_page   .   '?'  ,   '?'  ) 
        ); #截取两个?之间的内容
        if (  in_array  (  $_page  ,   $whitelist  )) { 
          return   true  ; 
        } 
        echo   "you can't see it"  ; 
        return   false  ; 
      } 
    } 
 
    if (! empty(  $_REQUEST  [  'file'  ]) 
      &&   is_string  (  $_REQUEST  [  'file'  ]) 
      &&   emmm  ::  checkFile  (  $_REQUEST  [  'file'  ]) 
    ) { 
      include   $_REQUEST  [  'file'  ]; 
      exit; 
    } else { 
      echo   "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />"  ; 
    }  
  ?>

几个关键函数:

https://www.runoob.com/php/func-string-mb_substr.html

https://www.feiniaomy.com/post/388.html

构造的两个?之间的内容必须是白名单上的内容,且需要利用file传入

同时我们访问hint.php得知了flag所在

因为不知道flag准确的存放地址,所以需要../来返回上一级目录,不断尝试最后尝试出的payload是
http://www.bmzclub.cn:23874/?file=source.php?../../../../../flaaagg
拿到flag

这道题是复现了CVE-2018-12613Phpmyadmin后台任意文件包含漏洞,这里附上参考链接,有机会尝试复现一下
https://blog.csdn.net/Mikasa_/article/details/88594749

posted @ 2022-01-17 11:52  willing-sir  阅读(52)  评论(0编辑  收藏  举报