WarmUp
查看源文件,提示了source.php,那我们就去看看source.php有什么东西。
/source.php
一堆代码,我们慢慢看,很明显,有一个emm的类,类里面有一个checkFile函数,需要传入一个参数page,并返回布尔值。接下来简单了解一些基本函数。
isset:判断是否为空
in_array:判断是否在数组中
mb_substr:获取字符串的指定字段
mb_strpos:获取指定字符出现在字符串的位置
is_string:判断是否全为字符
来,我们再来看看这段程序。
程序获取了file的值,将其作为参数调用了emm类中的checkFile函数。首先判断参数不能为空和非字符串,并且是指定数组中的数据,否则返回假。其次截取参数?前的字符串作为参数的新值,判断是否是指定数组中的数据,是则返回真,否则将其解码,再次截取参数?前的字符串,判断是否是指定数组中的数据。是则返回真,否则返回假。若checkFile执行结果为真,正确执行,若为假,输出表情包。
好,我们来看看checkFile函数中数组提到的hint
/hint.php
提示flag在ffffllllaaaagggg中,我们需要找到并且查看这个提示的值。我想到了这个东西
../../../../../../ffffllllaaaagggg
光这个肯定不行,我们还需要包装一下,它不是检测?,那就给一个?
?file=hint.php?../../../../../../ffffllllaaaagggg
成功拿到flag
随便注
运用了堆叠注入,有一个大佬总结出来了三种解法,具体可以去看这个博客。
- 修改表名和表结构
通过show tables
和show columns
,我们可以大概知道,这里一共有两个表words和1919810931114514
,这个输入的查询是在words中直接查询,而flag大概在1919810931114514
中,那我们可以通过将1919810931114514
名称修改成words,从而直接通过输入查询。需要注意的是,我们需要先将原words修改成别的名字,再修改1919810931114514
成words,然后要注意的是在之前的columns中我们可以看到两个表的结构不太一样,我们还要将结构修改成一致。 - 预编译
mysql在预编译中会将十六进制转化为字符,这样一来,我们可以通过用十六进制编码来达到逃过检测,然后用预编译将十六进制转化为字符,执行语句。 - hanlder
hanlder 的作用和select很像,但是它又像一个指针(官方名叫句柄,具体可以看这个博客,设置句柄,可以直接通过句柄查询,从而达到不用select就能实现查询的作用。
secret file
打开是一张图片,查看源码
去看看这个Archive_room.php
我就直接点,直接跳到一个end.php
回去看看源码
可以看到点击secret,理应跳到action.php,怎么跳到end.php
用burp抓包,直接去action.php看看。
一个注释掉的代码,那我们就去secr3t.php看看
审计代码,提示flag再flag.php中,有一个file变量,那我们可以通过file构造payload。同时对flag有过滤,不允许出现…/\tp\input\data。
strstr:查找子串出现的位置。
stristr:查找子串第一次出现的位置
include:将目标网页代码插入当前页面输出。
直接莽一波看看flag.php有什么。?file=flag/php
大佬说可以用php伪协议中的filter,具体可以参考这位大佬博客,用?file=php://filter/read=convert.base64-encode/resource=flag.php
,成功拿到base64编码的flag.php页面,复制到这个网页解码,成功拿到flag。
Ping Ping Ping
开始随便试试?ip=1
后台可能将ping和输入ip的值拼接起来执行。那好,试试?ip=;ls
那直接试试?ip=;cat flag.php
怎么骂人,提示空格的问题,空格我们用?ip=;cat${IFS}$flag.php
又骂人,那就是{}问题,?ip=;cat$IFS$1flag.php
这应该是过滤了flag,那我们看看index.php里有什么,?ip=;cat$IFS$1index.php
可以看到过滤了含有-f-l-a-g(-表示任意字符)的字符串,那我们可以先用一个变量代表其中一个字母,然后在flag中用变量表示该字母。?ip=;a=g;$IFS$1fla$a.php
,没有报错,再查看网页源代码,可以拿到flag。
更多的解法和详细的解释,可以看看 这位大佬的博客。
knife
打开,页面有提示
很明显一句话木马,密码是Syc,网址要加上?knife,到蚁剑上连接就好了。蚁剑的安装自己找吧,网上免费资源很多的。
backup file
这个题目的英文意思是备份文件,这就和文件扫描有关,需要用到dirsearch-master。跑了一下,得到一个
直接/index.php.bak
就下载了index.php.bak,用文档格式打开。
网上冲会浪,发现重点是$key == $str。大佬说这是弱类型比较。当我们输入一个key为数字时,会把str也转换为对应的数字“123”,再进行值比较,会得出true 的结论。成功拿到flag。