[GXYCTF2019]Ping Ping Ping
Imported from BUUCTF/CTFd challenge #1680
一、进入环境
/?ip=,先是随便试了几个数字1,2什么的,
he,全丢了,试试127.0.0.1
嗯嗯,这样就全通了。
我还去尝试了?ip=flag
小嘴不太干净…,这应该是过滤了,那肯定还有其他过滤词,(这里可以用bp去循环尝试试出来被过滤掉的字符,但是我看了别人的wp,就不费事了
空格被拦,可以用$IFS代替,cat,ls,env都可以使用,bash不行。
ls查看一下
居然有flag.php,但是flag被过滤了,必须尝试去构造payload,应该能得到flag
env查看有惊喜
显示了
FLAG=not_flag(最有用
PWD=/var/www/html
USER=www-data
,可以使用$FLAG去得到not_flag也就是可以得到flag(通过cut -u-5去切除第五个字符后的->flag)
($FLAG取出环境变量FLAG得到值)
同时因为空格被过滤所以使用$IFS代替,结果就是
?/ip=127.0.0.1;cat$IFS`echo$IFS$FLAG|cut$IFS-c5-`.php之后再源码中看到flag
本题的难点主要再于尝试被过滤词汇,以及寻找代替,构造出cat flag.php的效果,还有就是一点思路的问题
要不然也不用去看别人的flag
抄一下别人的知识点总结
四、知识点总结
- 多层过滤的分工提示语:不同层给不同报错,把提示语收集齐 = 直接拿到黑名单全貌。触发一次比 fuzz 一遍便宜得多。
- 判据要分清"扫输入"还是"扫输出":
fxck your flag!扫的是输入原文。这决定了不能写not_flag字面量,必须借服务端变量展开来构造敏感串。 $IFS绕空格:通用性极强。{}被禁时用$IFS而非${IFS};$9也是 IFS 引用形式。- 环境变量是免费的字符来源:
$FLAG、$PWD、$PATH、$HOME往往含被禁字符(/、_、flag),配cut/tr/rev可"洗"出任意子串。 - 反引号 vs
$():)被禁时`是唯一可用的命令替换。 /被禁不等于无解:命令不带参数时默认作用于 CWD,ls即可出文件名。- 纠错纪律:定位黑名单时一次只改一个变量,否则会把 A 字符的拦截误归因给 B。
这题做的不烧心