About

命令注入命令执行漏洞是指可以执行系统或者应用指令(CMD 命令或者 bash 命令)的漏洞,主要是由于 WEB 应用基于一些函数的参数过滤不严导致。

我们可以先输入127.0.0.1这个 IP 地址:

0-1.png

可以看到这是一个经典的 Ping 命令。解决乱码我们有两个方案:

  • DVWA-master\dvwa\includes目录下找到dvwaPage.inc.php文件中所有的charset=utf-8,修改charset=gb2312,即可;
  • 或修改系统区域设置,增加 UTF-8 支持。

0-2.png


对于命令执行漏洞,我们有一些常见的连接符总结:

连接符 举例 效果
; A;B 先执行 A,再执行 B
& A&B 先执行 A 再执行 B,如果 A 执行失败,还会继续执行 B
| A|B 先执行 A 再执行 B,不管 A 成功与否都会去执行 B
&& A&&B A 执行成功,然后才会执行 B
|| A||B A 执行失败,然后才会执行 B

命令执行漏洞的防御方式:

  1. 尽量不去执行外部的应用程序或命令;
  2. 使用自定义函数或函数库实现外部应用程序或命令的功能;
  3. 在执行systemeval等命令执行功能的函数前,校验参数内容;

Object

通过 RCE 远程查找操作系统上 web 服务的用户,以及机器的主机名。

001 Low

由于服务器是搭建在 Windows10 上的,我们尝试输入0.0.0.0 & whoami & hostname,得到如下结果:

1-1.png


观察源码可知:

1-2.png

参数由 POST 请求得到,并且开发者没有对输入进行任何形式的安全检查,就直接放入shell_exec()函数了。

002 Medium

观察源代码:

2-1.png

该级别下仅仅是增加了&&;的替换,我们前面介绍了 4 个命令连接符,没被替换的连接符依旧能成功注入。比如输入0.0.0.0 & type index.php后:

2-2.png

003 High

观察源代码:

3-1.png

在该等级下,开发者对输入的 IP 先trim掉开头和结尾的空白符,然后进行模式替换,把大部分的连接符给替换成空字符串。

但我们注意观察,subsitutions变量中的|是带了一个空格的,如果我们输入:0.0.0.0 |dir ..也能执行成功:

3-2.png

References