DVWA系列(二)——使用BurpSuite进行Command injection(命令行注入)

Command Injection(命令行注入)简介:

1、命令执行概念:

命令执行漏洞是指可以随意执行系统命令,属于高危漏洞之一,也属于代码执行范围;PHP命令注入攻击漏洞是PHP应用程序中常见的脚本漏洞之一。也就好比一句话

2、分类:

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() 不会直接返回执行结果,而是返回一个文件指针;
3、&&、&、|、||

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 ;
4、Windows和Linux相关命令知识:
Windows:
  • dir、ipconfig、arp -a(查看arp欺骗)、calc、regedit(注册表)、netstat -ano(查看端口)

注意:如何发现arp欺骗的,如果发现IP地址不同,但是MAC地址不同时,说明已经受到ARP攻击,应该断网、杀毒,或者重装软件,可以将IP地址和MAC地址绑定死;

Linux
  • cat /etc/passwd(查看当前用户)、id(查看当前用户的所有ID)、groups(查看当前用户组)、cat /etc/group、netstat -pantu、 net -nr、whoami、pwd、uname -a

一、命令行注入(Command Injection)

实验环境:

1、Windows服务器:Win7 ,IP地址:192.168.85.199

DVWA系列(二)——使用BurpSuite进行Command injection(命令行注入)_第1张图片

2、测试机:Win10物理机,开启代理,远程登录DVWA

DVWA系列(二)——使用BurpSuite进行Command injection(命令行注入)_第2张图片

实验步骤:

安全等级:Low

1、设置安全等级为:Low

DVWA系列(二)——使用BurpSuite进行Command injection(命令行注入)_第3张图片

2、查看安全等级Low的命令注入源码;

DVWA系列(二)——使用BurpSuite进行Command injection(命令行注入)_第4张图片

源码如下:

DVWA系列(二)——使用BurpSuite进行Command injection(命令行注入)_第5张图片

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参数并未做任何的过滤,从而导致了严重的命令注入漏洞;
  • 源码的总和分析:
  • 首先判断目标主机的操作系统,如果是Windows,则执行第一个命令;若是linux,指定ping目标IP四次,因为linux中ping命令是一直执行的,只有加了-c参数,指定发送的次数才能停止;
  • 可以看到在接收用户输入的地方,对用户的输入的内容没有做任何的处理。不难看出这就是一个典型的命令注入漏洞,而且是最容易的;
4、实验操作:

命令行执行漏洞:(在服务器上执行命令并返回)

  • 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即可。

DVWA系列(二)——使用BurpSuite进行Command injection(命令行注入)_第6张图片

DVWA系列(二)——使用BurpSuite进行Command injection(命令行注入)_第7张图片

DVWA系列(二)——使用BurpSuite进行Command injection(命令行注入)_第8张图片

DVWA系列(二)——使用BurpSuite进行Command injection(命令行注入)_第9张图片

DVWA系列(二)——使用BurpSuite进行Command injection(命令行注入)_第10张图片

DVWA系列(二)——使用BurpSuite进行Command injection(命令行注入)_第11张图片

DVWA系列(二)——使用BurpSuite进行Command injection(命令行注入)_第12张图片

安全等级:Medium

DVWA系列(二)——使用BurpSuite进行Command injection(命令行注入)_第13张图片

1、查看源码

DVWA系列(二)——使用BurpSuite进行Command injection(命令行注入)_第14张图片

源码分析:

  • $target = str_replace( array_keys( $substitutions ), $substitutions, $target );如果用户输入的内容中含有&&或;会将其替换为空。其他的部分基本和安全等级为LOW时相差不大。Str_replace()函数,以其他字符替换字符串中的一些字符(区分大小写)。
  • 这里的源码对用户的输入进行了初步的过滤,过滤掉了一些能够同时执行命令的符号,但是我们知道,拥有同样作用的符号不止&&和;。所以依然可以进行命令注入。
  • Medium级别的过滤方式本质上采用的是黑名单机制,相比白名单依旧存在安全问题;
2、命令执行漏洞;

执行命令——127.0.0.1 && dir,失败。

DVWA系列(二)——使用BurpSuite进行Command injection(命令行注入)_第15张图片

3、绕过方法
  • 127.0.0.1 & dir
  • 127.0.0.1 | dir
  • 127.0.0.1 &&& arp -a
  • 127.0.0.1 &;& arp -a

DVWA系列(二)——使用BurpSuite进行Command injection(命令行注入)_第16张图片

DVWA系列(二)——使用BurpSuite进行Command injection(命令行注入)_第17张图片

DVWA系列(二)——使用BurpSuite进行Command injection(命令行注入)_第18张图片

DVWA系列(二)——使用BurpSuite进行Command injection(命令行注入)_第19张图片

安全等级:High

1、设置安全级别为High;

DVWA系列(二)——使用BurpSuite进行Command injection(命令行注入)_第20张图片

2、查看源码;

DVWA系列(二)——使用BurpSuite进行Command injection(命令行注入)_第21张图片

源码分析:

  • 这个级别的源码和安全等级为medium级别的源码相差不大,只是将更多的符号加入黑名单;
  • 总之,只是做黑名单的话,还是不够安全的。只要黑名单不够完整,就不是很安全。即使你认为名单已经很完整了。可能还有你不知道的存在可以利用;
3、命令之执行漏洞
  • 127.0.0.1 &&& arp -a——> 只要有&符号都被过滤掉
  • 127.0.0.1 && arp -a
  • 127.0.0.1 & arp -a
  • 127.0.0.1 | arp -a

DVWA系列(二)——使用BurpSuite进行Command injection(命令行注入)_第22张图片

DVWA系列(二)——使用BurpSuite进行Command injection(命令行注入)_第23张图片

DVWA系列(二)——使用BurpSuite进行Command injection(命令行注入)_第24张图片

DVWA系列(二)——使用BurpSuite进行Command injection(命令行注入)_第25张图片

4、绕过方法
  • 127.0.0.1 |calc

DVWA系列(二)——使用BurpSuite进行Command injection(命令行注入)_第26张图片

安全等级:Impossible

DVWA系列(二)——使用BurpSuite进行Command injection(命令行注入)_第27张图片

1、查看源码

DVWA系列(二)——使用BurpSuite进行Command injection(命令行注入)_第28张图片

2、源码分析
  • explode()函数,将字符串变为数组。这里将我们输入的IP以 . 进行拆分,变成数组;
  • 然后判断数组中的每个值是否为数字,且是否是四个对象;
  • 如果结果为true的话,就会将这四组数通过 . 连接起来,执行ping命令。这样就杜绝了所有命令注入。
3、命令执行

DVWA系列(二)——使用BurpSuite进行Command injection(命令行注入)_第29张图片

你可能感兴趣的:(DVWA系列(二)——使用BurpSuite进行Command injection(命令行注入))