1、漏洞概述php
命令注入是指在易受攻击的应用程序中注入和执行攻击者指定的命令,执行的命令具备与web 服务相同的权限和环境。web
产生缘由:windows
web服务器没有对用户提交的参数进行有效的检测过滤服务器
操做系统容许一条语句在使用链接符和管道符后执行多条命令函数
windows下几种的管道符或者链接符:工具
command1&command2 不管command1是否执行成功都要执行command2测试
command1&&command2 只有command1执行成功后才执行command2spa
command1||command2 只有command1执行失败后才执行command2操作系统
command1|command2 将command1的执行结果传递给command2firefox
2、工具
firefox
3、测试过程
一、级别:low
首先输入一个IP观察一下
能够看到在下方返回了对127.0.0.1进行Ping检测的内容,所以猜想这里有一个能够执行系统命令的函数,则这里可能存在命令注入漏洞,且执行的命令为Ping 输入的内容。
利用链接符&&进行测试,输入127.0.0.1&&dir
能够看见这里不单单返回了127.0.0.1的Ping检测信息,还返回了刚刚拼接dir命令的结果。而后咱们就能够经过拼接其余命令进行攻击。
Low级别代码分析
stristr(string,search,before_search)函数:搜索字符串在另外一字符串中的第一次出现。
php_uname(mode)函数:返回运行php的操做系统的相关描述,参数mode可取值
a:此为默认,包含序列”s n r v m”里的全部模式
s:返回操做系统名称 n:返回主机名 r:返回版本名称
v:返回版本信息 m:返回机器类型
这段代码是判断该操做系统为哪一种操做系统并按操做系统的不一样执行其对应的Ping命令。
二、级别MEDIUM
一样先试一下输入127.0.0.1&&dir,发现失败了。
试一下利用&进行链接,咱们输入127.0.0.1进行测试,发现下方成功显示出了命令结果,表示注入成功。
Medium级别代码分析
能够发现比low级别多了一段代码,这段代码的做用就是对输入的字符进行判断若出现‘&&’或‘;’字符则用‘’代替。这是明显的黑名单作法,仍是不能有效的阻挡命令注入。
三、级别High
依次使用不一样的链接符或管道符进行测试,发现只有 ‘|’ 才能成功。
High级别代码分析
发现同样采用的是黑名单方法,只是扩大了限制的字符,仍是有效的阻挡命令注入。
四、级别Impossible
发现各类连接符都没法成功
Impossible级别代码分析
发现采用了白名单的作法,只有输入的格式跟白名单的同样才能经过验证,其余的都不行,这样基本上杜绝了命令注入。