文中知识仅供学习参考,禁止非法用途。否则后果自负
SSRF漏洞整理
什么是SSRF?
SSRF(Sever-side Request Forge) 是 服务端请求伪造漏洞
SSRF主要是构造恶意载荷(payload)攻击脚本,并诱导服务器发起请求,让目标服务器执行非本意的操作
SSRF常被用于,探测攻击者无法访问到的网络区域,比如服务器所在的内网,或是受防火墙访问的主机。
当程序执行逻辑代码时,没有经过严格的过滤。比如没有限制可以构建恶意访问的敏感协议头或内网访问资源权限时。攻击者可以构造恶意语句,向服务端发送包含恶意URL链接的请求,此时借由服务端去访问构建的恶意URL,以成功获取目标服务端中受保护网络内的资源的一种安全漏洞。
1.SSRF是服务端请求伪造,SSRF是诱导服务器访问,欺骗的是服务端(服务器)
2.CSRF是跨站请求伪造,CSRF是通过诱导用户点击,欺骗的是客户端(浏览器)
假设是一台存在远程代码执行漏洞的内网机器,借助SSRF漏洞,可以绕过WAF、策略等限制,且可以直接获取目标的最高权限。哪怕是通过外网隔离的内网机器,借由SSRF也无法保证内网机器的绝对安全
可能造成的危害:
- 内网探测:对内网服务器办公机器进行端口扫描 资产扫描 漏洞扫描
- 窃取本地和内网敏感数据(访问和下载内网的敏感数据):利用file协议
- 攻击服务器本地或内网应用:利用发现的漏洞,可以进一步发起攻击利用
- 跳板攻击: 利用SSRF漏洞,对内或对外发起攻击,以隐藏自己的真实IP(肉鸡)
- 绕过安全防御: 比如防火墙 CDN
当危险函数(PHP)在攻击者层面是可控的,即可能存在SSRF漏洞。
一般在白盒测试、代码审计中去发现
-
file_get_contents():
将整个文件或一个URL指向的文件,以字符串的性质展示给用户 -
fsockopen():
用于打开一个网络连接,该函数会使用socket跟服务器建立TCP连接,进行传输原始数据 -
curl_exec():
对远程的URL发起请求访问,并将请求的结果返回至前端页面
##SSRF漏洞挖掘 SSRF漏洞特点:访问一个URL。如下图所示,一般通过构造URL来判断该网站是否存在SSRF
-
白盒测试:
寻找可能构成SSRF漏洞的危险函数 -
黑盒测试:
(1)观察攻击web 应用程序的集成平台(burpsuite)的网站请求消息报文中是否存在URL,并对该URL进行构造payload进行测试
(2)DNS外带(常用于测试没有回显的网站)
DNSlog平台 测试
1. 设置协议头的白名单或黑名单,过滤除了HTTP和HTTPS之外的所有协议头
2. 设置URL的白名单或黑名单(比如百度翻译:不允许访问DNSlog和bbc)
3. 设置访问IP的白名单或黑名单,过滤访问的IP(看需求)
##SSRF漏洞常见利用方法 ####1. 伪协议,读取敏感的文件的信息
(1)file:///etc/passwd Linux用户基本配置信息
(2)file:///c:/windows/win.ini windows系统基本配置信息
(3)file:///etc/shadow Linux用户密码等敏感信息(一般需要root用户才能查看 web服务的一般权限是apache)
2.内网服务探测(dict伪协议)web服务
(1)dict://127.0.0.1:3360 (探测MySQL服务)
(2)dict://127.0.0.1:22 (探测SSH服务)
(3)dict://127.0.0.1:6379 (探测redis服务)
(4)dict://127.0.0.1:1433 (探测SQL server服务)
3.攻击内网服务(gopher伪协议)
gopher作用:发送TCP数据 默认端口70
所有的WEB服务中间件都支持gopher协议,gopher可以发送任何的TCP数据包
gopher常用于攻击redis服务(内存数据库——拿到该服务即是最高权限)
使用规范:gopher://ip/_+数据
HTTP协议与gopher协议的区别:
http://www.baidu.com
gopher://%0D%0AGET%20/%20HTTP/1.1%0D%0AHOST:www.baidu.com%0D%0A
利用gopher发起请求的一般步骤:
1.构造HTTP的请求消息
2.对请求消息进行URL编码
3.对编码后的%0a替换成%0D%0a
4.将替换后的数据再进行一次URL编码(双重URL编码)
5.拼接协议头