菜鸟渗透日记22——DVWA下使用Command Injection(命令行注入)
1.命令行注入介绍
命令执行概念
命令执行漏洞指在可以随意执行系统命令,属于高危漏洞之一,也属于代码执行范围内,好比说一句话木马<[email protected]($_POST[‘cmd’]);?>
分类
代码过滤不严格或者无过滤
系统漏洞造成的命令执行,bash破壳漏洞,该漏洞可以构造环境变量的值来执行具有攻击力的脚本代码,会影响到bash交互的多种应用,例如http,ssh,dhcp
调用第三方组件,例如php(system(),shell_exec(),exec(),eval()),java(struts2),thinkphp(老牌的php框架)
&&和&和|和||
&&: command1&&command2
命令执行顺序:两个都执行,如果第一个命令不可执行第二个也不执行了。
&:command1&command2
命令执行顺序:两个都执行第一个命令不可执行第二个也可以执行
|:command1|command2
命令执行顺序:只执行command2的命令
||:command1||command2
命令执行顺序:只执行command1的命令,如果第一个执行不了,就执行第二个命令
一些常用命令
windows下
dir,
ipconfig,
arp-a,
calc,
regedit,
netstat-ano
arp-a:(arp欺骗攻击)在这个表里面假设
linux下
cat /etc/passwd,
id,
groups,
cat /etc/group,whoami,pwud,
name-a,
netstat-pantu,
netstat-nr
2.Command Injection(命令行注入)
实验环境
- Windows服务器:Windows xp,IP地址:192.168.65.128;
2.测试机:Windows10物理机(开启代理,代理服务器为burpsuit)
实验过程
安全级别:Low
- 设置安全级别;
2.查看源码;
3.源码分析;
stristr(string,search,before_search)
string |
必需。规定被搜索的字符串。 |
search |
必需。规定要搜索的字符串。 如果该参数是数字,则搜索匹配该数字对应的 ASCII 值的字符。 |
before_search |
可选。默认值为 "false" 的布尔值。 如果设置为 "true",它将返回 search 参数第一次出现之前的字符串部分。 |
php_uname(mode)
这个函数会返回运行php的操作系统的相关描述,参数mode可取值”a” (此为默认,包含序列”s n r v m”里的所有模式),”s ”(返回操作系统名称),”n”(返回主机名),” r”(返回版本名称),”v”(返回版本信息), ”m”(返回机器类型)。
可以看到,服务器通过判断操作系统执行不同ping命令,但是对ip参数并未做任何的过滤,从而导致了严重的命令注入漏洞;
4.实验操作;
命令行执行漏洞
127.0.0.1
127.0.0.1&&ipconfig
127.0.0.1&ipconfig
127.0.01|ipconfig
127.0.0.1||ipconfig
安全级别:Medium
- 设置安全级别;
2.查看源码;
3.源码分析;
Medium级别相比Low级别的代码,服务器端对ip参数做了一定过滤,把”&&”“ ;”;”替换为空;
Medium级别的过滤方式本质上采用的是黑名单机制,相比白名单依旧存在安全问题;
4.实验过程
4.1 尝试使用&&,被过滤;
4.2 服务器过滤了&&,并未过滤&;
4.3 服务器过滤了&&,并未过滤 | ;
绕过方法
4.4 绕过方法1 : 采用&&&的方式;这种方法实际就是&模式;
4.5 绕过方法2 : 采用&;&的方式;(没有循环检测机制,所以这里相当于还是过滤了;于是还可以用&&);
安全级别:High
1.设置安全级别;
2.查看源码;
3.源码分析;
'&' => '',
';' => '',
'| ' => '', #“| ”后面有个空格;
'-' => '',
'$' => '',
'(' => '',
')' => '',
'`' => '',
'||' => '
服务器对IP参数做了限制,过滤了如上字符,将如上字符都替换为空;
注:源码中是将“| ”替换为空,并不是“|”,所以可以采用“|”的方式绕过;
4.实验过程;
4.1 尝试采用"&","| "等方式实现命令行注入;
绕过方式
4.2 绕过方法“|”;
安全级别:Impossible
1.设置安全级别;
2.查看源码;
3.源码分析;
在Impossible级别中,代码加入了Anti-CSRF token,同时对参数ip进行了严格的限制,只有诸如“数字.数字.数字.数字”的输入才会被接收执行,杜绝了命令注入漏洞;
4.实验过程;