XCTF攻防世界web新手练习—command_execution
题目
题目为command_execution,是命令执行的意思,可见这道题应该跟命名执行有关。
打开题目,看到一个功能框,根据题目,是用来实现ping功能的。
首先先尝试ping一下127.0.0.1,成功ping通,并回显执行的命令为
ping -c 3 127.0.0.1
于是我们尝试用&&
符号执行多个命令,先尝试一下ls
命令,输入127.0.0.1 &&ls
可见,成功执行ls命令。于是顺理成章查找所有以 .txt 结尾的文件。
用find命令。输入127.0.0.1 &&find / -name "*.txt"
看到第一个就是flag.txt,于是利用命令cat 直接查看它
127.0.0.1 && cat /home/flag.txt
得到flag!
命令执行漏洞
命令执行漏洞是什么:
当应用需要调用一些外部程序去处理内容的情况下,就会用到一些执行系统命令的函数。如PHP中的system,exec,shell_exec等,当用户可以控制命令执行函数中的参数时,将可注入恶意系统命令到正常命令中,造成命令执行攻击。
比如题目中,直接把用户输入的参数不经过过滤直接放在ping命令之后,而恶意攻击者可以在输入的参数中用&&截断,而执行下一个恶意命令
常见连接符
;A;B 先执行A,再执行B
& A&B 简单拼接,A B之间无制约关系
| A|B 显示B的执行结果
&& A&&B A执行成功,然后才会执行B
|| A||B A执行失败,然后才会执行B
常见连接符 | 举例 | 效果 |
---|---|---|
; | A;B | 先执行A,再执行B |
& | A&B | 简单拼接,A B之间无制约关系 |
| | A|B | 显示B的执行结果 |
&& | A&&B | A执行成功,然后才会执行B |
|| | A||B | A执行失败,然后才会执行B |
另外,%0A
是换行符的url编码形式,有的时候可以用来绕过对以上常见的连接符过滤了的情况。