【web安全】——SSRF服务器端请求伪造

1.SSRF漏洞基础

1.1SSRF漏洞概述与成因

SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。

一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)

1.2SSRF攻击流程

1.攻击者向易受 SSRF 攻击且与目标服务器位于同一内部网络的 Web 服务器发送伪造请求。

2.易受攻击的 Web 服务器将攻击者控制的请求发送到受害者的服务器,绕过防火墙。

3.受害者的服务器用请求的数据响应网络服务器。

4.如果特定的 SSRF 漏洞允许,数据将被发送回攻击者。在大多数情况下,攻击者需要通过其他方式(带外)泄露或推断此信息。

1.3SSRF与CSRF的区别

CSRF是服务器端没有对用户提交的数据进行随机值校验,且对http请求包内的refer字段校验不严,导致攻击者可以利用用户的cookie信息伪造用户请求发送至服务器;

SSRF是服务器对用户提供的可控URL过于信任,没有对攻击者提供的URL进行地址限制和足够的检测,导致攻击者可以以此为跳板攻击内网或者其它服务器

由攻击者构造的攻击链接传给服务端执行造成的漏洞,一般用来在外网探测或攻击内网服务

1.4漏洞危害

  • 对外网、服务器所在内网、本地进行端口扫描;
  • 攻击运行在内网或本地的服务、应用;
  • 对内网web应用进行指纹识别、识别内网资产信息;
  • 实现 CRLF 注入:利用 Redis 未授权访问,HTTP CRLF 注入实现 getshell。

1.5漏洞挖掘

1.5.1从web页面的功能去查找

  • 分享:通过URL地址分享网页内容
  • 转码服务:通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览:由于手机屏幕大小的关系,直接浏览网页内容的时候会造成许多不便,因此有些公司提供了转码功能,把网页内容通过相关手段转为适合手机屏幕浏览的样式。例如百度、腾讯、搜狗等公司都有提供在线转码服务。
  • 在线翻译:通过URL地址翻译对应文本的内容。提供此功能的国内公司有百度、有道等。

1.5.2通过URL关键字查找

  • share
  • wap
  • url
  • link
  • src
  • source
  • target
  • 3g
  • displaysourceURL
  • imageURL
  • domain

1.6产生SSRF漏洞的函数

1.6.1file get contents

使用file_get_contents函数从用户指定的url获取图片。然后把它用一个随即文件名保存在硬盘上,并展示给用户

1.6.2.fsockopen():

使用fsockopen函数实现获取用户制定url的数据(文件或者html)。这个函数会使用socket跟服务器建立tcp连接,传输原始数据。

1.6.3.curl_exec():

CURL这是另一个非常常见的实现,它通过 PHP获取数据。文件/数据被下载并存储在“curled”文件夹下的磁盘中,并附加了一个随机数和“.txt”文件扩展名。

注意事项

1.一般情况下PHP不会开启fopen的gopher wrapper

2.file_get_contents的gopher协议不能URL编码

3.file_get_contents关于Gopher的302跳转会出现bug,导致利用失败

4.curl/libcurl 7.43 上gopher协议存在bug(%00截断) 经测试7.49 可用

5.curl_exec() 默认不跟踪跳转

6.file_get_contents() file_get_contents支持php://input协议

2.漏洞利用

2.1.SSRFURL的伪协议

1.file:// 从文件系统中获取文件内容,如,file:///etc/passwd

2.dict://字典服务器协议,访问字典资源,如aict://ip:6379/info

3.sftp://ssh文件传输协议或安全文件传输协议

4.dap://轻量级目录访问协议

5.tftp:// 简单文件传输协议

6.gopher://分布式文档传递服务,可使用gopherus生成payload

2.2.本地文件读取

windows:file://c:windows\system.ini

linux:file:///etc/hosts

2.3.探测内网端口

使用dict探测哪些端口是开放的,可以结合burp使用,通过添加端口号字典,接着通过回显去判断哪些端口是开放的

3gopher协议利用

3.1gopher简介与原理

Gopher是Internet上一个非常有名的信息查找系统,它将Internet上的文件组织成某种索引,很方便地将用户从Internet的一处带到另一处。在WWW出现之前,Gopher是Internet上最主要的信息检索工具,Gopher站点也是最主要的站点,使用tcp70端口。

gopher协议支持发出GET、POST请求:可以先截获get请求包和post请求包,在构成符合gopher协议的请求。gopher协议是ssrf利用中最强大的协议

3.2限制

3.3gopher协议格式

URL:gopher://<host>:<port>/<gopher-path>_后接TCP数据流

接受时候,接受方默认从第二个字符即下划线后开始接受,因此可以利用这点进行拼接

3.4gopher协议反弹shel

4. 绕过

部分存在漏洞,或者可能产生SSRF的功能中做了白名单或者黑名单的处理,来达到阻止对内网服务和资源的攻击和访问。因此想要达到SSRF的攻击,需要对请求的参数地址做相关的绕过处理

4.1. @绕过白名单限域名制

限制为http://www.xxx.com 域名时(利用@)

可以尝试采用http基本身份认证的方式绕过

如:http://www.aaa.com@www.bbb.com@www.ccc.com,在对@解析域名中,不同的处理函数存在处理差异

在PHP的parse_url中会识别www.ccc.com,而libcurl则识别为www.bbb.com。

4.2. 采用短网址绕过

比如百度短地址https://dwz.cn/

4.3. 采用进制转换

4.4. 利用特殊域名

原理是dns解析。ceye.io可以指向任意域名,即127.0.0.1.ceye.io

4.5. 利用[:]

可以利用[::]来绕过localhost

4.6. 利用封闭的数字

利用Enclosed alphanumerics

ⓔⓧⓐⓜⓟⓛⓔ.ⓒⓞⓜ >>> example.com

http://169.254.169.254>>>http://[::①⑥⑨。②⑤④。⑯⑨。②⑤④]

List:

① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳

⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇

⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛

⒜ ⒝ ⒞ ⒟ ⒠ ⒡ ⒢ ⒣ ⒤ ⒥ ⒦ ⒧ ⒨ ⒩ ⒪ ⒫ ⒬ ⒭ ⒮ ⒯ ⒰ ⒱ ⒲ ⒳ ⒴ ⒵

Ⓐ Ⓑ Ⓒ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ Ⓚ Ⓛ Ⓜ Ⓝ Ⓞ Ⓟ Ⓠ Ⓡ Ⓢ Ⓣ Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ

ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ⓠ ⓡ ⓢ ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ

⓪ ⓫ ⓬ ⓭ ⓮ ⓯ ⓰ ⓱ ⓲ ⓳ ⓴

⓵ ⓶ ⓷ ⓸ ⓹ ⓺ ⓻ ⓼ ⓽ ⓾ ⓿

5.防御

通常有以下5个思路:

1,过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。

2, 统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态。

3,限制请求的端口为http常用的端口,比如,80,443,8080,8090。

4,黑名单内网ip。避免应用被用来获取获取内网数据,攻击内网。

5,禁用不需要的协议。仅仅允许http和https请求。可以防止类似于file:///,gopher://,ftp:// 等引起的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你怎么睡得着的!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值