DVWA-命令注入

Command Injection 命令注入

一、什么是命令注入

 命令注入是指由于嵌入式应用程序或者 web应用程序对用户提交的数据过滤不严格,导致黑客可以通过构造特殊命令字符串的方式,将数据提交至应用程序中,并利用该方式执行外部程序或系统命令实施攻击,非法获取数据或者网络资源等。

原理:web应用在调用这些函数执行系统命令的时候,在没有做好过滤用户输入的情况下,如果用户将自己的输入作为系统命令的参数拼接到命令行中,就会造成命令注(命令执行)的漏洞。
##二、命令注入相关的特殊字符
; 前后命令依次执行 注意前后顺序,若更变目录,则必须在“一句”指令内
|| 前命令执行失败后才执行后命令 -
&& 前命令执行成功后才执行后命令 -
& 前台执行后任务,后台执行前任务 如 a&b&c 则显示c的执行信息,a b在后台执行
| 管道,只输出后者的命令 当第一条命令失败时,它仍然会执行第二条命令
(反引号,仅linux) 即命令替换,echodate,输出系统时间 使用反引号运算符的效果与函数shell_exec()相同,但在激活了安全模式或者关闭了shell_exec()时是无效的
$(command) 这是命令替换的不同符号。与反引号效果一样。echo $(date),输出系统时间. 按理说更推荐用这种方法,而不是反引号。

三、命令注入测试

实验环境:DVWA

3.1 DVWA-LOW等级下的命令注入

第一步:在command injection中输入IP地址

在这里插入图片描述

结果与在本机使用ping命令完全一致,说明这里可以让我们执行ping命令。

第二步:源码分析

对输入的ip地址进行ping操作,源码只让我们进行ping操作,没有其他动作,但它给了我们一个利用系统命令的平台。
在这里插入图片描述

第三步:输入一个命令拼接符号再加上需要执行的命令

这里我想查询一下用户名
在这里插入图片描述

命令注入成功,可以看到用户名为adminstrator

3.2 DVWA-medium等级下的命令注入

第一步:在command injection中输入IP地址

与low等级一致

第二步:分析源码看看和Low等级有什么区别

源码分析:发现在Low等级源码的基础上添加了一个黑名单,把‘&&’字符和‘;’字符过滤掉了,但我们可以使用黑名单之外的命令连接符命令注入
在这里插入图片描述

第三步:使用源码中黑名单之外的连接符进行注入

这里使用&进行注入
在这里插入图片描述

注入成功;

3.3 DVWA-high等级下的命令注入

第一步:在command injection中输入IP地址

同上

第二步:源码分析

发现还是一样的套路,只是过滤字符过滤得更多了。但仔细观察发现有一个过滤是’| ‘,这个过滤是加了空格的,说明这个过滤其实是没用的,只需要’|’后面直接加入参数,不保留空格,我们依然可以用这个命令连接符进行命令注入
在这里插入图片描述

第三步:使用连接符进行注入

命令:127.0.0.1 |ipconfig
在这里插入图片描述

注入成功

3.4 DVWA-impossible等级下的命令注入

第一步:在command injection中输入IP地址

同上

第二步:源码分析

这里防止命令注入的思路是白名单,也就是说对输入进行过滤,只允许输入ip地址。
将输入根据点分成4段,每一段都判断一下是不是数字,总共是不是4段,如果是的话,再用点把4段数字拼接起来,因此不存在命令注入。
在这里插入图片描述

安全防护:
1.token机制:同之前的暴力破解一样,使用了token机制(基于token的身份验证),由于token值,每次交互都是随机的,客户端和服务端都为随机值。
2.stripslashes()函数:过滤字符串中的反斜杠
3.explode()函数:将所有的字符串打散成为数组
4.is_numeric() 函数:用于检测变量是否为数字或数字字符串

第三步:使用命令连接符进行注入

这里我使用的是||
命令:127.0.0.1||ipconfig
在这里插入图片描述

提示错误:输入了无效ip;注入失败

四、命令注入的防御

到目前为止,防止操作系统命令注入漏洞最有效的方法是永远不要从应用层代码调用操作系统命令。
如果认为使用用户提供的输入调用操作系统命令是不可避免的,则必须执行强输入验证。一些有效验证的例子包括:

  • 对允许值的白名单进行验证。
  • 验证输入是否为数字。
  • 验证输入是否只包含字母数字字符,不包含其他语法或空白。
<think>好的,我现在需要处理用户关于DVWA命令注入漏洞的查询,包括示例和防御方法。首先,我需要回顾一下命令注入的基本概念以及DVWA中的相关设置。根据用户提供的引用内容,DVWA在低安全级别下没有防护措施,攻击者可以执行任意系统命令,这可能导致严重的安全问题。 接下来,我应该整理漏洞的示例。用户提供的引用中提到了一些具体的例子,比如查看系统文件、显示当前路径和写入文件。需要将这些例子用清晰的中文描述出来,并确保代码部分符合LaTeX格式要求。同时,注意用户提到的系统级指令,比如行内数学表达式用$...$,独立公式用$$...$$,但这里可能更多涉及代码块,所以需要正确使用代码块格式。 然后是关于防御方法的部分。引用3中提到禁用危险函数、输入过滤、参数转义和使用替代方法。需要将这些点分条列出,并确保每个防御方法都有对应的解释,可能还需要引用对应的引用来源。 用户还要求生成相关问题,我需要思考与DVWA命令注入相关的其他问题,比如如何检测漏洞、不同安全级别的区别、实际案例等。这些问题应该能够帮助用户进一步深入学习。 需要注意引用的正确使用,在回答中提到的每个示例或防御方法后,自然地添加引用标识,例如[^1]、[^2]或[^3]。同时,检查LaTeX语法是否正确,虽然这里可能更多是代码块而非数学公式,但如果有数学表达式的话要正确应用格式。 最后,确保回答结构清晰,符合用户要求的可见层结构,分步骤解释漏洞示例和防御方法,保持语言口语化,避免使用专业术语过多,必要时进行解释。同时,验证引用的信息是否准确,确保示例和防御方法与提供的引用内容一致,避免错误信息。</think>### DVWA命令注入漏洞解析 #### 一、漏洞示例(DVWA Low安全级别) 1. **执行系统命令** 攻击者可注入`&&`或`|`拼接恶意命令: ```bash # 查看系统hosts文件 && type c:\windows\system32\drivers\etc\hosts # 显示当前路径 | cd # 写入Webshell && echo "<?php phpinfo();?>" > D:\xampp\htdocs\shell.php ``` 2. **命令链利用** Windows/Linux通用语法: ```bash # Linux查看用户列表 ; cat /etc/passwd # Windows创建文件 & echo test > C:\hack.txt [^2] ``` #### 二、防御方法 1. **禁用危险函数** 在`php.ini`中禁用高危函数: ```ini disable_functions = system, exec, shell_exec, passthru ``` 2. **输入过滤机制** 使用正则表达式过滤特殊字符: ```php $input = preg_replace('/[;&|]/', '', $_GET['cmd']); [^3] ``` 3. **参数转义处理** 对参数进行引号包裹和转义: ```php $cmd = escapeshellarg($_GET['cmd']); system("ping -n 3 " . $cmd); ``` 4. **使用安全替代方案** 改用非命令执行方式实现功能,例如PHP内置的`file_get_contents()`代替`cat`命令。 #### 三、渗透测试验证流程 1. 写入文件后访问`http://靶机地址/shell.php`验证Webshell 2. 检查系统进程列表确认命令执行效果: ```bash && tasklist /V ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值