ssrf漏洞随笔
一、ssrf漏洞定义
SSRF漏洞:SSRF是一 种由攻击者构造请求,由服务端发起请求的安全漏洞。一般情况下,ssrf攻击的目标是外网无法访问的内部系统
SSRF漏洞( 服务器端请求伪造 )也被称为跨站点端口攻击,主要用于端口扫描 。
二、ssrf漏洞产生原因
三、ssrf漏洞原理
SSRF原理:大多是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制,从而导致出现了SSRF漏洞,导致本地文件泄露,可以攻击到内网,获取账号密码等信息。
四、ssrf漏洞常用函数
协议: file协议, gopher协议,dict协议,sftp协议,tftp协议,http/https协议,ldap协议
五、ssrf漏洞危害
1、可以对服务器所在的内网、本地进行端口扫描,获取一些服务的banner信息
2、攻击运行在内网或本地的应用程序(比如溢出)
3、对内网web应用进行指纹识别,通过访问应用存在的默认文件实现;
4、攻击内外网的web应用,主要是使用get参数就可以实现的攻击(比如struts2漏洞利用等)
5、利用file协议读取本地文件
6、利用Redis未授权访问,HTTP CRLF注入达到getshell
7、DOS攻击(请求大文件,始终保持连接keep alive always)等等
六、ssrf漏洞可能出现的地点
1、 通过url地址分享网页内容功能处
2、转码服务
3、在线翻译
4、图片加载与下载(一般通过url地址加载或下载图片处)
5、图片、文章收藏功能
6、未公开的api实现以及其他调用url的功能
7、云服务器商(它会远程执行一些命令来判断网站是否存活等,所以如果可以捕获相应的信息,就可以进行ssrf测试)
8、有远程图片加载的地方(编辑器之类的远程图片加载处)
9、网站采集、网页抓取的地方(一些网站会针对你输入的url进行一些信息采集工作)
10、头像处(某易就喜欢远程加载头像,例如:http://www.xxxx.com/image?url=http://www.image.com/1.jpg)
11、邮件系统(比如接收邮件服务器地址)
12、编码处理, 属性信息处理,文件处理(比如ffpmg,ImageMagick,docx,pdf,xml处理器等)
13、从远程服务器请求资源(upload from url 如discuz!;import & expost rss feed 如web blog;使用了xml引擎对象的地方 如wordpress xmlrpc.php)
七、如何验证ssrf漏洞
1、排除法:浏览器f12查看源代码看是否是在本地进行了请求
比如:该资源地址类型为 http://www.xxx.com/a.php?image=URL,URL参数若是其他服务器地址就可能存在SSRF漏洞
2、dnslog等工具进行测试,看是否被访问(可以在盲打后台,用例中将当前准备请求的url和参数编码成base64,这样盲打后台解码后就知道是哪台机器哪个cgi触发的请求)
3、抓包分析发送的请求是不是通过服务器发送的,如果不是客户端发出的请求,则有可能是存在漏洞。接着找存在HTTP服务的内网地址
3.1、从漏洞平台中的历史漏洞寻找泄漏的存在web应用内网地址
3.2、通过二级域名暴力猜解工具模糊猜测内网地址
3.3、通过file协议读取内网信息获取相关地址
4、直接返回的Banner、title、content等信息
5、留意布尔型SSRF,通过判断两次不同请求结果的差异来判断是否存在SSRF,类似布尔型sql盲注方法。
八、ssrf漏洞的绕过方法
1、直接攻击本地地址,127.0.0.1
2、利用[::]绕过localhost,http://[::]:80/ >>> http://127.0.0.1
3、@绕过,http://example.com@127.0.0.1
4、短地址绕过,http://dwz.cn/11SMa >>> http://127.0.0.1
5、使用特效域名绕过( DNS解析 ),http://127.0.0.1.xip.io/
6、利用DNS解析, 在域名上设置A记录,指向127.0.0.1
7、修改"type=file"为"type=url",如:上传图片处修改上传,将图片文件修改为URL
8、利用Enclosed alphanumerics
9、使用句号绕过,127。0。0。1 >>> 127.0.0.1
10、利用进制转换绕过,115.239.210.26 >>> 016373751032
方法:将这个IP地址的4位十进制数分别转换成16进制数,然后将这个16进制数转换一起转为8进制数
八进制在最前面加0,十六进制在最前面加0x
11、使用特效地址绕过,http://0/
12、使用相关协议绕过, file协议, gopher协议,dict协议等相关协议
13、30x跳转绕过
14、多种绕过方法一同组合使用, 各种绕过进行自由组合
九、SSRF新型攻击手法的流程
1. 利用服务器发起一个 HTTPS 请求。
2. 请求时会发起一个 DNS 解析请求,DNS 服务器回应一个 TTL 为 0 的结果,指向攻击者的服务器。
3. 攻击者服务器响应请求,并返回一个精心构造过的 SessionID,并延迟几秒后回应一个跳转。
4.客户端接收到这个回应之后会进行跳转,这次跳转时由于前面那一次 DNS 解析的结果为 TTL 0,则会再次发起一次解析请求,这次返回的结果则会指向 SSRF 攻击的目标
举例:例如本地的memcache数据库
5. 因为请求和跳转时的域名都没有变更,本次跳转会带着之前服务端返回的精心构造过的 SessionID 进行,发送到目标的那个端口上。
6. 则达到目的,成功对目标端口发送构造过的数据,成功 SSRF。
十、如何防御和修复ssrf漏洞
1、过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。
2、在返回结果展示给用户之前先验证返回的信息是否符合标准。
3、禁用不需要的协议,仅仅允许http和https请求。
4、设置URL白名单, 对URL参数进行过滤,或者使得URL参数用户不可控
5、限制内网IP(使用gethostbyname( )判断是否为内网IP)
6、限制请求的端口为http常用的端口,比如 80、443、8080、8090
7、统一配置错误信息,避免用户可以根据错误信息来判断远程服务器的端口状态
8、 去除url中的特殊字符 ,更改ip地址写法,严格检验服务器的请求
9、 如果是域名的话,将url中的域名改为ip,对协议和地址进行验证(http改为ip,防止dns rebinding)
10、请求的url为3中返回的url
11、请求时设置host header为ip,防止以ip请求时,某些网站无法访问的问题
12、 不跟随30x跳转(跟随跳转需要从1开始重新检测)