一)参考:
1 . 谢公子(命令执行和代码执行漏洞)
2 . 谢公子(DVWA之命令执行漏洞)
代码执行漏洞(常见函数+原理)
PHP代码执行漏洞总结
任意代码执行漏洞
二)基本的cmd命令:
在Windows的cmd中操作:
注:&& 前后两个语句均正确则两个都执行、前面正确后面错误则只执行前面的、前面错误后面正确则都不执行
& 前后两个语句均正确则两个都执行、前面正确后面错误则只执行前面的、前面错误后面正确则执行后面的(谁对执行谁)
|| 前后两个语句均正确则只执行前面的、前面正确后面错误则只执行前面的、前面错误后面正确则执行后面的(前面对则只有前面,只有前面错才会执行后面的)
| 前后两个语句均正确则只执行后面的、前面正确后面错误则均不执行、前面错误后面正确则执行后面的(后面正确则执行后面的,后面错则都不执行)
; Windows不能使用,Linux才可以
三)DVWA——low
low级别的代码接收了用户输入的ip,然后根据服务器是否是Windows NT系统,对目标ip进行不同的ping测试。但是这里对用户输入的ip并没有进行任何的过滤,所以我们可以进行命令执行漏洞。
此时尝试ping 127.0.0.1提交,会返回有效信息结果:
接着尝试输入:127.0.0.1 && ipconfig 提交,会返回有效信息结果:
把ipconfig换成其他的系统命令进行尝试:
执行 127.0.0.1 && net user zxj /add ,尝试ping完后新建一个用户,结果被360给拦截了(如果服务器没有装杀毒软件,那么命令就可以成功被执行,那么就可以成功创建用户了。)
Win7虚拟机中实现:
用burpsuite实现自动化测试:
先准备好一个要利用的命令集合的文本:
burpsuite抓包之后将它send to intruder,options选项中清除默认设置的变量只设置ip:
payload选项中把提前准备好的文本添加进去:
此时开始攻击测试:
使用commix工具:
DVWA——medium
medium级别的代码在low级别的代码上增加量了对 && 和 ;的过滤,但是这并没有什么软用。我们根本就不用 && ,我们直接用 &。&&和&的区别在于,&&是执行完前面的命令然后执行后面的命令,&是不管前面的命令是否值执行,后面的都执行。
尝试输入同low的命令: 127.0.0.1 & ipconfig
DVWA——high:
这个等级所设置的过滤的黑名单比medium多了很多,把一些常见的命令连接符给过滤了。黑名单过滤看似安全但如果黑名单不全是话,就很容易进行绕过。我们仔细看黑名单过滤中的| ,|后面还有一个空格,也就是说只过滤了 “| ” 没有过滤“|”,所以我们可以进行绕过,尝试输入:127.0.0.1 |ipconfig
用burpsuite实现自动化测试(自动检测那个语句是符合的):
先准备好一个要利用的命令集合的文本:
输入 127.0.0.1提交进行抓包并send to intruder:
DVWA——Impossible
stripslashes(string) : 该函数会删除字符串string中的反斜杠,返回已剥离反斜杠的字符串。
explode(separator,string,limit): 该函数把字符串打散为数组,返回字符串的数组。参数separator规定在哪里分割字符串,参数string是要分割的字符串,可选参数limit规定所返回的数组元素的数目。
is_numeric(string): 该检测string是否为数字或数字字符串,如果是返回TRUE,否则返回FALSE。
可以看到,Impossible级别的代码加入了Anti-CSRF token,同时对参数ip进行了严格的限制,只有诸如“数字.数字.数字.数字”的输入才会被接收执行,因此不存在命令注入漏洞。