1.漏洞原理
?????????由于开发人员编写源码,没有针对代码中可执行的特殊函数入口做过滤,导致客户端可以提交恶意构造语句提交,并交由服务器端执行。命令注入攻击中WEB服务器没有过滤类似system(),eval(),exec()等函数是该漏洞攻击成功的最主要原因。
?2.命令链接符
windows:&&??||??&??|
linux:&&??||??&??;
&&?(逻辑与):只有?&&?前面的命令执行成功后,它后面的命令才被执行
||?(逻辑或):只有?||?前面的命令执行失败后,它后面的命令才被执行
&?(后台任务符):同时执行所有命令
|?(管道符):当第一条命令失败时,它仍然会执行第二条命令
;?:命令按照顺序(从左到右)被执行,并且可以用分号进行分隔。当有一条命令执行失败时,不会中断其它命令的执行
利用:可尝试进行反弹shell,搭建服务执行wget下载webshell
?3.LOW级别
?3.1 源码分析
?
- $_REQUEST[]具用$_POST[] $_GET[]的功能,但是$_REQUEST[]比较慢。通过post和get方法提交的所有数据都可以通过$_REQUEST数组获得
- PHP_uname —?返回运行?PHP?的系统的有关信息
- stristr()?函数搜索字符串在另一字符串中的第一次出现
- PHP_uname(‘s‘):返回操作系统名称
?????????大致意思是当我们输入一个IP之后它会做一个判断选择windows还是linux来做一个ping包动作,那么可以尝试构造语句尝试注入命令。
3.2 漏洞利用
4. Medium
4.1源码分析
?与Low级别相比,只过滤了&&与;,过滤不够严格。
4.2漏洞利用
?
5.High?级别
5.1源码分析
?
?????????stripslashes(string):函数会删除字符串string中的反斜杠,返回已剥离反斜杠的字符串。 ????????explode(separator,string,limit):把字符串打散为数组,返回字符串的数组。参数separator规定在哪里分割字符串,参数string是要分割的字符串,可选参数limit规定所返回的数组元素的数目。 ????????is_numeric(string):检测string是否为数字或数字字符串,如果是返回TRUE,否则返回FALSE。 ????????可以看到,对参数ip进行了严格的限制,只有诸如“数字.数字.数字.数字”的输入才会被接收执行。
?????????目前不会,哈哈哈哈,请教大佬以后更新。
|