SWPUCTF 2021 新生赛 babyrce
附题目链接:https://www.nssctf.cn/problem/425

源码
a. 代码审计
error_reporting(0):这是 PHP 的内置报错控制函数,无论代码哪里出现错误都不会显示。$_COOKIE['admin'] == 1的意思是当 cookie 中 admin 的值为 1 的时候,执行包含一个 php 文件。
b. 具体执行
根据前面的代码审计,给 cookie 的 admin 赋值为 1:

操作之后包含了一个名为 rasalghul.php 的文件,我们将它添加到端口之后获得以下源码:

通过 GET 传参的方式获取一个叫 url 的参数,随后将这个参数赋给变量 ip。preg_match 是 PHP 的内置函数,将变量 ip 和 "/ /" 里面的东西比较,如果说有相同就执行 die——这里的话是跟空格比较,也就是过滤了空格:

我们试着执行 ls 命令,查看到有两个 php 文件。前面我们说过系统过滤了空格,那我们就使用 ${IFS} 代替空格,执行结果如下:

我们发现这个命令没有任何回显,但是也没有任何异常,就猜测系统是不是把 flag 这个关键词给过滤了,这时就要用到通配符 * 来代替 flag:

最终 flag 为:
本文采用
CC BY-NC-SA 4.0
协议,由
Jay's CTF life
发布。







