前言:命令执行和代码执行也是web安全中常见的一种漏洞,这次就先来学习一下命令执行漏洞。
Command Execution
一、简介
由于开发人员在编写源代码时,没有对源代码中可执行的特殊函数入口做过滤,导致客户端可以提交一些cmd命令,并交由服务器程序执行。导致攻击者可以通过浏览器或者其他客户端软件提交一些cmd命令(或者bash命令)至服务器程序,服务器程序通过system、eval、exec等函数直接或者间接地调用cmd.exe执行攻击者提交的命令。
二、常用的连接符
1 | A;B 先执行A,再执行B |
三、常用的函数
1 | exec() — 执行一个外部程序 |
具体可以参考php中文网
四、windows net命令
1 | Net ViewI |
具体可以参考大师傅的博客CMD-NET命令详解这个漏洞是真的恐怖,可以任意修改你的计算机里的内容。
在了解了基础的知识后,下面就通过DVWA来练习一下Command Execution.
DVWA——Command Injection
在此之前先来解决乱码的问题
在DVWA\dvwa\includes
目录下找到dvwaPage.inc.php
文件中所有的”charset=utf-8
”,修改”charset=gb2312
”,即可解决乱码问题。
low
观察源码1
2
3
4
5
6
7
8
9stristr() 函数搜索字符串在另一字符串中的第一次出现,不区分大小写
php_uname() 返回了运行 PHP 的操作系统的描述。
参数:
'a':此为默认。
's':操作系统名称。
'n':主机名。
'r':版本名称。
'v':版本信息。
'm':机器类型。
通过源码可以看出,源码只是针对不同的操作系统执行不同的ping命令
而已,没有对ip参数
并未做任何的过滤,因此存在命令注入漏洞。
输入
1 | 127.0.0.1&&echo "Hello" |
回显结果执行了我输入的echo "Hello"
命令
接下来输入
1 | 127.0.0.1&&net user |
命令执行成功,但这个漏洞是真的恐怖,如果攻击者利用这个漏洞修改电脑用户、更改系统配置。。。,可见危害之大。
medium
观察源码
发现这段代码
1 | $target = str_replace( array_keys( $substitutions ), $substitutions, $target ); |
过滤了&&
、;
,但是没有过滤掉&
、|
,所以依旧有漏洞存在
输入
1 | 127.0.0.1 | net user |
也可以输入1
127.0.0.1& net user
一样会执行成功
除此之外,也可以采用拼接的方法进行绕过
1 | 127.0.0.1&;&net user |
High
观察源码
这次过滤的更狠,几乎过滤了所有的常用连接符,拼接的方法也是不起作用的,但是观察代码发现
|+空格
多出一个空格,所以不会过滤|
那就利用这个漏洞进行命令执行
输入
1 | 127.0.0.1 |net user |
impossible
观察源码
1 | stripslashes(string) |
Impossible级别的代码加入了Anti-CSRF token
,同时对参数ip
进行了严格的限制,只有“数字.数字.数字.数字
”的输入才会被接收执行,因此不存在命令注入漏洞。
总结:通过这次学校了解了命令执行漏洞的一些知识,确实很有意思,接下来学习代码执行漏洞。