2023长城杯Web赛题解析:从SSRF到Pickle反序列化的实战攻防
1. 从SSRF漏洞到内网渗透的实战突破去年参加长城杯时遇到一道名为seeking的Web题目让我对SSRF漏洞的利用有了全新认识。题目一开始给出了一个看似简单的PHP文件但隐藏着精妙的设计。代码中通过file_get_contents函数获取图片内容时没有对image参数做任何过滤这就为SSRF攻击埋下了伏笔。我当时尝试用file://协议读取/etc/passwd文件发现系统中有个名为secret的用户。这个发现很关键因为题目描述中提到了小朱的secret朋友。顺着这个线索我读取了/home/secret/.bash_history文件找到了一个Python Flask应用的路径。这里有个实用技巧在CTF比赛中.bash_history、.viminfo这类隐藏文件往往藏着重要线索。通过分析历史命令我发现目标服务器上运行着一个使用Pickle序列化的Flask应用这为后续的攻击链奠定了基础。2. Pickle反序列化漏洞的巧妙利用找到Flask应用后我注意到它有两个关键路由/和/pickle。主路由会将一个User对象序列化后存入session而/pickle路由则会反序列化session中的数据。题目很贴心地给出了SECRET_KEY这意味着我们可以伪造session。Pickle反序列化的危险性在于它能执行任意Python代码。但题目设置了过滤if bR in code or bbuilt in code or bsetstate in code or bflag in code: return what do you want???我尝试用o操作码绕过这些限制构造了如下payloadpayload b(cos system Scat /f* /tmp/a o.这个payload的作用是将flag文件内容写入/tmp/a。为什么要这样做因为直接读取flag会被过滤但写入临时文件再读取就能绕过限制。在实际渗透测试中这种曲线救国的思路很常见。3. Gopher协议在SSRF中的高级应用有了Pickle的反序列化payload接下来需要通过SSRF将其发送到内网的Flask服务。这里我使用了Gopher协议它能构造任意TCP请求。关键步骤是构造包含恶意session的HTTP请求对请求进行URL编码替换换行符为%0D%0A通过Gopher协议发送具体实现如下a GET /pickle HTTP/1.1 Host: 127.0.0.1:5555 Cookie: sessioneyJhIjp7ImIiOiJLR052Y3dwemVYTjBaVzBLVXlkallYUWdMMllxSUQ0Z0wzUnRjQzloSndwdkxnPT0ifX0.ZPlszQ.mXPJEIl_a5JbUlHndOy5WOceS2s tmp urllib.parse.quote(a) new tmp.replace(%0A,%0D%0A) result gopher://127.0.0.1:5555/ _ new这个技巧在实战中非常实用特别是当目标服务器存在SSRF漏洞且内网服务没有适当防护时。4. 从PHP扩展漏洞到RCE的完整链条另一道题easy_extension展示了如何通过SSRF结合PHP扩展漏洞实现RCE。题目在calc.php中使用了一个自定义的Cmd\Calc::exe()方法这个方法实际上来自一个用Zephir编写的PHP扩展。通过黑盒测试我发现这个方法会对两个输入参数进行异或操作。于是我用Python脚本fuzz所有可能的字符组合import requests import string dic string.printable for i in dic: for j in dic: data {one: i, two: j} r requests.post(url, datadata) print(r.text, i, j)最终发现可以通过精心构造的参数绕过WAF限制。例如使用require $_GET[x]这样的payload实现文件包含进而读取flag。这个案例告诉我们在CTF和实际渗透中对目标系统组件的深入理解往往能发现意想不到的攻击面。5. 防御建议与实战思考通过这两道题目我总结了几个重要的安全防护点。对于SSRF漏洞应该严格校验用户输入的URL禁用危险的协议如file、gopher设置白名单限制访问范围对于反序列化漏洞避免使用不安全的序列化方式使用签名验证序列化数据考虑使用JSON等更安全的格式替代在开发PHP扩展时更要注意对输入参数进行严格过滤避免直接将用户输入作为代码执行实现完善的日志记录机制这些防御措施在实际项目开发中都是必不可少的。我在工作中就遇到过因为忽略这些细节而导致的安全事件教训深刻。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2493426.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!