1. URL 的结构

URL 的结构如下:

URI = scheme:[//authority]path[?query][#fragment]

其中 authority 组件又分为 3 部分:

[userinfo@]host[:port]
  • schema 由一串大小写不敏感的字符组成,表示获取资源所需要的协议。
  • authority 中, userinfo 遇到的比较少,这时一个可选项,一般 HTTP 使用匿名形式来获取数据,如果需要进行身份验证,格式为 username:password,以 @ 结尾。
  • host 表示在哪个服务器上获取资源,一般所见的是以域名形式呈现,如 baidu.com,也有以 IPv4、IPv6 地址形式呈现。
  • port 为服务器端口。各协议都有默认端口,如 HTTP 的为 80、FTP 的为 21。使用默认端口时,可以将端口省略。
  • path 为指向资源的路径,一般使用 / 进行分层。
  • query 为查询字符串,用户将用户输入数据传递给服务端,以 ? 作为标识。例如,向服务端传递用户名密码为 ?username=admin&password=admin123
  • fragment 为片段 ID,与 query 不同的是,其内容不会被传递到服务端,一般用于表示页面的锚点。

2. SSRF 介绍

SSRF形成的原因大都是由于服务端提供了从其他服务器或应用中获取数据的功能,但没有对目标地址、协议等重要参数做出有效的过滤与限制,从而导致攻击者可以自由构造参数,而发起预期外的请求。

3. 绕过

3.1 IP的限制

  • 封闭式字母数字 (Enclosed Alphanumerics) 代替IP中的数字或网址中的字母。例如:用 ① 代替 1
  • 使用句号代替点
  • IP地址转为进制(八进制、十进制、十六进制)及IP地址省略写法。
    127.0.0.1 为例:
    0177000001 (八进制)
    2130706433 (十进制)
    0x7f000001 (十六进制)
    127.1 (IP地址省略写法)
  • IP地址的特殊写法,在Windows下,0 代表 0.0.0.0,而在Linux下,0 代表 127.0.0.1 。某些情况下 http://0 可以用来请求 127.0.0.1
  • 配置域名。如果我们手中有可控域名,则可将域名A记录只想欲请求的IP进行绕过:
    evil.com => 10.0.18.3

3.2 302跳转

  • 网络上存在一个名叫xip.io的服务,当访问这个服务的任意子域名时,都会重定向到这个子域名,如 127.0.0.1.xip.io 将解析为 127.0.0.1
  • 上面的方式存在的问题是传入的URL中存在关键字 127.0.0.1 ,一般会被过滤,可以使用短网址将其重定向到指定的IP地址。
  • 有时服务端可能过滤了很多协议,如传入的URL中只允许出现 http 或 https ,那么可以在自己的服务器上写一个 302 跳转,利用 Gopher 协议攻击内网的 Redis 。

3.3 URL的解析问题

使用http://example.com@evil.comhttp://a@127.0.0.1:80@baidu.com。可能实现的结果是检测IP时是正常的一个网站域名而实际请求的确实构造的evil.com或127.0.0.1,以此实现了SSRF攻击。

3.4 DNS Rebinding

在某些情况下,针对 SSRF 的过滤可能出现下述情况:通过传入的 URL 提取出 host ,随即进行 DNS 解析,获取 IP 地址,对此 IP 地址进行检验,判断是否合法,如果检测通过,则再使用 curl 进行请求。那么,这里再使用 curl 请求的时候会做第二次请求,即对 DNS 服务器重新请求,如果在第一次请求时其 DNS 解析返回正常地址,第二次请求时的 DNS 解析却返回了恶意地址,那么就完成了 DNS Rebinding 攻击。

DNS 重绑定的攻击首先需要攻击者自己有一个域名,通常有两种方式。第一种是绑定两条记录。这时解析是随机的,但不一定会交替返回。所以,这种方式需要一定的概率才能成功。第二种方式则比较稳定,自己搭建一个 DNS Server ,在上面运行自编的解析服务,使其每次返回的都不同。先给域名添加两条解析,一条 A 记录指向服务器地址,一条 NS 记录指向上条记录地址。

4. 危害

  • 端口扫描
    如: http://example.com/ssrf.php?url=http://192.168.252.130:21/
    可以通过应用响应时间、返回的错误信息、返回的服务 Banner 来判断端口是否开放。

  • 攻击内网或本地存在漏洞的服务
    值得注意的是 Gopher 协议(分布式的文档传递服务):Gopher 协议是 HTTP 出现之前。在 Internet 上常见且常用的一种协议。当然现在 Gopher 协议已经慢慢淡出历史。 Gopher协议可以做很多事情,特别是在 SSRF 中可以发挥很多重要的作用。利用此协议既可以攻击内网的 FTP、Telnet、Redis、Memcache,也可以进行 GET、POST 请求。这无疑极大地拓宽了 SSRF 的攻击面。——《利用 Gopher 协议拓展攻击面》-长亭科技

    补充:Gopher 协议还可以用来攻击 MySQL、PHP-FPM 攻击、攻击内网中的脆弱 Web 应用(如任意命令执行漏洞的 Web 应用)。

    自动组装Gopher。目前已经有人总结出多种协议并写出自动转化的脚本:https://github.com/tarunkant/Gopherus

  • 文件读取 (file协议)

  • 命令执行 (expect协议)

  • 访问字典源(dict协议,字典服务器协议)。在SSRF中可以获取目标服务器上运行的服务版本等信息。

References:

《从0到1 CTFer成长之路》
《CTF特训营》

SSRF (Server Side Request Forgery;服务端请求伪造)相关推荐

  1. 【网络安全工程师面试】—SSRF服务端请求伪造漏洞及利用方法

    目录 4.4. SSRF 4.4.1. 简介 4.4.1.1. 漏洞危害 4.4.2. 利用方式 4.4.3. 相关危险函数 4.4.4. 过滤绕过 4.4.4.1. 更改IP地址写法 4.4.4.2 ...

  2. 渗透测试-SSRF服务端请求伪造(Server-Side Request Forgery)

    SSRF服务端请求伪造 漏洞原理 本次靶场的设计拓扑图 x.x.x.x:8080 - 判断 SSRF 是否存在 172.72.23.21 - SSRF 获取本地信息 172.72.23.1/24 - ...

  3. Weblogic服务端请求伪造漏洞(SSRF)和反射型跨站请求伪造漏洞(CSS)修复教程...

    一.服务端请求伪造漏洞 服务端请求伪造(Server-Side Request Forgery),是指Web服务提供从用户指定的URL读取数据并展示功能又未对用户输入的URL进行过滤,导致攻击者可借助 ...

  4. SSRF服务端请求伪造

    SSRF服务端请求伪造 背景 在做一个需求,需要通过url与库内数据做匹配,然后记录匹配结果.但是部分url是重定向的url,重定向之前的url与库中无法匹配,重定向之后的url可以与库中匹配,所以代 ...

  5. web渗透测试----15、SSRF漏洞(服务端请求伪造漏洞)

    SSRF漏洞是一种在未能获取服务器权限时,利用服务器漏洞,由攻击者构造请求,服务器端发起请求的安全漏洞,攻击者可以利用该漏洞诱使服务器端应用程序向攻击者选择的任意域发出HTTP请求. 很多Web应用都 ...

  6. Web Hacking 101 中文版 十七、服务端请求伪造

    十七.服务端请求伪造 作者:Peter Yaworski 译者:飞龙 协议:CC BY-NC-SA 4.0 描述 服务端请求伪造,或者 SSRF,是一种类型,它允许攻击者使用目标服务器来代表攻击者自己 ...

  7. CSRF(Cross-site request forgery 跨站请求伪造)

    CSRF(Cross-site request forgery 跨站请求伪造,也被称成为"one click attack"或者session riding,通常缩写为CSRF或者 ...

  8. 【burpsuite安全练兵场-服务端9】服务端请求伪造SSRF漏洞-7个实验(全)

    前言: 介绍: 博主:网络安全领域狂热爱好者(承诺在CSDN永久无偿分享文章). 殊荣:CSDN网络安全领域优质创作者,2022年双十一业务安全保卫战-某厂第一名,某厂特邀数字业务安全研究员,edus ...

  9. CSRF(Cross-site request forgery)跨站请求伪造

    为什么80%的码农都做不了架构师?>>>    CSRF 背景与介绍 CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2 ...

最新文章

  1. [转贴]世上最强的中国式英文
  2. hdu 4305 概率dp
  3. Leetcode--55. 跳跃游戏
  4. STM32之独立看门狗例程
  5. 微信支付官方SDK V3 .NET版的坑
  6. 如何安装dubbo的管理控制台
  7. Arp Scan和局域网隐身
  8. 软考高级系统分析师下午历年真题
  9. 植被净初级生产力(NPP)的计算
  10. Jetson Nano python中文语音播报数字距离 基于pyttsx3
  11. 自己推荐的经典好书展示(计算机、企业管理学、生存)
  12. Win10系统设置开机默认开启数字小键盘
  13. Python的三个引号作用
  14. 在线网站\本地软件拓扑图\复杂网络绘制
  15. 大觉山漂流,男人的欢笑女人的尖叫
  16. JVM内存管理------GC算法精解(五分钟让你彻底明白标记/清除算法)(4)
  17. html文字抖动效果,CSS实现TikTok文字抖动效果示例
  18. 华清远见-重庆中心-JavaScript知识点梳理
  19. .考试倒计时43天!来提分啦!
  20. int 长度 mysql_MySQL int 类型的长度和范围解惑

热门文章

  1. android usb 开个电灯,通过IOIO-OTG使用Android手机的照明灯
  2. IOIO OTG开发板
  3. forever 中文解释
  4. SpringBoot 飞书通知处理器
  5. 梦幻日常技巧(种摇钱树,刷宝宝窝地点,拓本,合成变身卡)
  6. Dijkstra(迪杰斯特拉)算法(单源最短路径算法)的理解
  7. 全国英语二级计算机考试,全国计算机等级考试网上报名流程(国二,计算机二级)...
  8. 计算机无法启用媒体流,电脑流媒体打不开怎么回事?电脑打开媒体流的方法
  9. [转]STUN和TURN技术浅析
  10. 为什么要用NoSQL