Command Injection(命令行注入)
前言
主要集合dvwa对命令行注入进行学习
内容比较基础简单
练习
Low
可以看到这是一个可以输入ip,测试连通性的界面
我觉得这个看代码来审计就很清楚了,这里我们输入(这里是Linux系统)会与’ping -c 4’拼接在一起,然后当做命令执行…这就给了我们很大的操作空间
&& 可以用来执行多条命令
可以看到这里我加上 && pwd后爆出了当前路径
这里只要有权限很多命令都是可以执行的,尤其是读取文件
上图可以看到,这里和文件包含时出现了一样的情况,/etc/passwd 有权限可以读出来
/etc/shadow没有权限所有无法读取。
Medium
这里命令行注入也是一种注入所以和sql注入,xss一样这里的防护手段主要是过滤,黑名单机制
还是直接看代码来审计吧
可以看到这里把"&&“和”;“替换成了”"
所以这里可以用&
注意的是”&&”与” &”的区别:
Command 1&&Command 2
先执行Command 1,执行成功后执行Command 2,否则不执行Command 2
Command 1&Command 2
先执行Command 1,不管是否成功,都会执行Command 2
我们可以看到不管ping是否执行成功,第二条命令都顺利执行了,但输出的时候第二条命令的输出在上面
然后在前面我们使用过双写绕过,这里我们可以同理,用&;&来绕过…
High
high级别主要是完善了黑名单
可以看到上面的黑名单基本是十分完善了,但是’| '这后面有个空格…这是故意留的后门吧…
“|”是管道符,表示将Command 1的输出作为Command 2的输入,并且只打印Command 2执行的结果。
Impossible
对输入进行了严格限制,只有数字.数字.数字.数字才行
总结
看漏洞会觉得这个漏洞很厉害,这相当于拿到了一个shell
但最大的问题啊,我觉得不是权限问题
最大的问题是这样的漏洞很难见到啊,不像sql注入,xss这样具有很强的通用性
毕竟sql查询,留言等操作,基本上是web很常见的操作,而像这样的cmd的操作,让用户输入,然后把用户输入直接cmd运行很少见,一下都想不出什么例子…