赞
踩
命令执行漏洞是指可以随意执行系统命令,属于高危漏洞之一,也属于代码执行范围;PHP命令注入攻击漏洞是PHP应用程序中常见的脚本漏洞之一。也就好比一句话<?php @eval($_POST[cmd]);?>
1、 代码过滤不严或无过滤;
2、 系统漏洞可以构造环境变量的值来执行具体攻击力的代码脚本,会影响到bash交互的多种应用,例如:http、ssh、dhcp等;
3、 调用第三方组件,例如:PHP — exec()、system()、popen()、passthru()、proc_open()、pcntl_exec()、shell_exec(),java — struts 2,thinkphp(老牌的PHP框架);
- system() 输出并返回最后一行shell的结果;
- exec() 不输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的数组里面;
- passthru() 只调用命令,把命令的运行结果原样的直接输出到标准输出设备上;
- popen()、proc_open() 不会直接返回执行结果,而是返回一个文件指针;
Windows支持:
- 命令1 && 命令2 ——> 命令1执行成功才会执行命令2;
- 命令1 & 命令2 ——> 不管命令1是否执行成功,命令2都会执行;
- 命令1 | 命令2 ——> 直接执行命令2;
- 命令1 || 命令2 ——> 命令1执行失败,才会执行命令2;
Linux支持:
- 命令1 ; 命令2 ——> 命令1 执行完后执行命令2;
- 命令1 && 命令2 ——> 命令1执行成功了才会执行命令2;
- 命令1 & 命令2 ——> 不管命令1是否执行成功,命令2都会执行;
- 命令1 | 命令2 ——> 将命令1的输出结果作为命令2的输出内容(管道符);
- 命令1 || 命令2 ——> 命令1执行失败了,才会执行命令2 ;
注意:如何发现arp欺骗的,如果发现IP地址不同,但是MAC地址不同时,说明已经受到ARP攻击,应该断网、杀毒,或者重装软件,可以将IP地址和MAC地址绑定死;
源码如下:
string | 必需。规定被搜索的字符串。 |
---|---|
search | 必需。规定要搜索的字符串。如果该参数是数字,则搜索匹配该数字对应的 ASCII 值的字符。 |
before_search | 可选。默认值为 “false” 的布尔值。如果设置为 “true”,它将返回 search 参数第一次出现之前的字符串部分。 |
- 这个函数会返回运行php的操作系统的相关描述,参数mode可取值”a” (此为默认,包含序列”s n r v m”里的所有模式),”s ”(返回操作系统名称),”n”(返回主机名),” r”(返回版本名称),”v”(返回版本信息), ”m”(返回机器类型)。
- 可以看到,服务器通过判断操作系统执行不同ping命令,但是对ip参数并未做任何的过滤,从而导致了严重的命令注入漏洞;
- 首先判断目标主机的操作系统,如果是Windows,则执行第一个命令;若是linux,指定ping目标IP四次,因为linux中ping命令是一直执行的,只有加了-c参数,指定发送的次数才能停止;
- 可以看到在接收用户输入的地方,对用户的输入的内容没有做任何的处理。不难看出这就是一个典型的命令注入漏洞,而且是最容易的;
命令行执行漏洞:(在服务器上执行命令并返回)
- 127.0.0.1
- 127.0.0.1 && dir ——> //文件路径
- 127.0.0.1 | ipconfig ——> //网卡
- 127.0.0.1 | arp -a ——> //查看arp缓存表
- 127.0.0.1 | regedit ——> //打开注册表
- 127.0.0.1 | netstat -ano ——> //端口信息
以上这些命令都是Windows 服务器win7的相关的信息。
切记:如果命令执行结果出现乱码, …/DVWA/dvwa/includes目录下,有个dvwaPage.inc.php文件,打开文件在277行修改。
将UTF-8改为GBK或者GB2312即可。
源码分析:
- $target = str_replace( array_keys( $substitutions ), $substitutions, $target );如果用户输入的内容中含有&&或;会将其替换为空。其他的部分基本和安全等级为LOW时相差不大。Str_replace()函数,以其他字符替换字符串中的一些字符(区分大小写)。
- 这里的源码对用户的输入进行了初步的过滤,过滤掉了一些能够同时执行命令的符号,但是我们知道,拥有同样作用的符号不止&&和;。所以依然可以进行命令注入。
- Medium级别的过滤方式本质上采用的是黑名单机制,相比白名单依旧存在安全问题;
执行命令——127.0.0.1 && dir,失败。
- 127.0.0.1 & dir
- 127.0.0.1 | dir
- 127.0.0.1 &&& arp -a
- 127.0.0.1 &;& arp -a
源码分析:
- 这个级别的源码和安全等级为medium级别的源码相差不大,只是将更多的符号加入黑名单;
- 总之,只是做黑名单的话,还是不够安全的。只要黑名单不够完整,就不是很安全。即使你认为名单已经很完整了。可能还有你不知道的存在可以利用;
- 127.0.0.1 &&& arp -a——> 只要有&符号都被过滤掉
- 127.0.0.1 && arp -a
- 127.0.0.1 & arp -a
- 127.0.0.1 | arp -a
- 127.0.0.1 |calc
- explode()函数,将字符串变为数组。这里将我们输入的IP以 . 进行拆分,变成数组;
- 然后判断数组中的每个值是否为数字,且是否是四个对象;
- 如果结果为true的话,就会将这四组数通过 . 连接起来,执行ping命令。这样就杜绝了所有命令注入。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。