SSRF(Server-Side Request Forgery:服务器端请求伪造)
是由攻击者构造形成的由服务端发起请求的一个安全漏洞。
一般情况下,SSRF的攻击是目标网站的内部系统。(因为他是从内部系统访问,所有可以通过它攻击外网无法访问的内部系统,也就是把目标网站当做中间人)
通俗来讲,有两个网站:
A网站,所有人都可以访问的外网网站
B网站,只能内部访问的网站
A网站能访问B网站
所以,作为普通用户,我们可以访问A网站,然后篡改获取资源的来源,请求从B网站获取资源。A网站没有检测我的请求合不合法,以自己A网站的身份去访问B网站,于是我们就有机会攻击B网站。
只要当前服务器有发送请求的地方都可能存在ssrf,如:
在早期
,Web应用的分享功能,会获取目标URL地址网页内容中标签或标签中content的文本内容,来为用户提供更好的体验。所以可以查看通过URL地址分享网页内容的地方是否有此漏洞
通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览
通过URL地址加载或下载图片,有的站长为了对图片进行加水印、打码等处理,会将图片下载到服务器上,就出现了SSRF漏洞
还有富文本编辑器中的点击下载图片到本地功能
这其实不算一个新的场景,图片收藏功能同4
,文章收藏同1
利用google 语法加上这些关键字去寻找SSRF漏洞
一些厂商会远程执行一些命令来判断网站是否存活,如果可以捕获相应的信息,就可以测试是否存在ssrf漏洞
一些网站会针对用户输入的url进行信息采集工作
比如mongodb的copyDatabase函数
比如接收邮件服务器的地址
share
wap
url
link
src
source
target
u
3g
display
sourceURl
imageURL
domain
……
1.禁止私有Ip访问
2.限制远程连接的域名
3.防火墙限制
4.限制请求方式
5.过滤协议使用https
url只解析@后面的域名 ,例如,在url栏里输入
https://[email protected]
浏览器会跳到www.baidu.com界面,在这个过程中,火狐浏览器会提示你有风险
IE浏览器则报错,不能进入
360浏览器、谷歌浏览器则直接跳转到百度界面(所以一个好的浏览器是很重要的)
显然,服务器认为@前面的www.qq.com是账号,所以进入的是www.baidu.com站点
在php里,@是屏蔽错误信息,所以匹配到@前面的www.qq.com符合要求,就不匹配@后面内容。当然也可能是后端的正则表达式没表达正确
不只是@,?
,#
,\
,/
……都能绕过,用法和@差不多
通过dns解析绕过私有地址限制,探测内网
有个很神奇的网站xip.io
当访问这个网站的子域名,例如127.0.0.1.xip.io,它会给你重定向到127.0.0.1
例如:127.0.0.1
利用八进制绕过: http://0177.0.0.1
利用十六进制绕过: http://0x7f.0.0.1
利用十六进制整数格式绕过: http://0x7f000001
利用十进制整数格式绕过: http://2130706433
特殊的IP地址,如果中间两位是0,可以省略掉:
如127.0.0.1还可以写成http://127.1
对于常见的IP限制,后端服务器可能通过下图的流程进行IP过滤:
对于用户请求的URL参数,首先服务器端会对其进行DNS解析,然后对于DNS服务器返回的IP地址进行判断,如果在黑名单中,就pass掉。
但是在整个过程中,第一次去请求DNS服务进行域名解析到第二次服务端去请求URL之间存在一个时间查,利用这个时间差,可以进行DNS 重绑定攻击。
要完成DNS重绑定攻击,我们需要一个域名,并且将这个域名的解析指定到我们自己的DNS Server,在我们的可控的DNS Server上编写解析服务,设置TTL时间为0。这样就可以进行攻击了,完整的攻击流程为:
(1)、服务器端获得URL参数,进行第一次DNS解析,获得了一个非内网的IP
(2)、对于获得的IP进行判断,发现为非黑名单IP,则通过验证
(3)、服务器端对于URL进行访问,由于DNS服务器设置的TTL为0,所以再次进行DNS解析,这一次DNS服务器返回的是内网地址。
(4)、由于已经绕过验证,所以服务器端返回访问内网资源的结果。
http:// 可以用来探测是否存在ssrf
gopher:// 一个分布型的文件搜集获取网络协议,人称万能协议,没有默认端口,在WWW出现之前,Gopher 是Internet上最主要的检索工具,可以利用Gopher攻击Redis、攻击Fastcgi
dict:// 字典服务器协议,查看端口,软件版本信息,操作内网redis服务等
ftp:// 只能探测是否存在ftp,不能进行暴力破解
file:// 本地文件传输协议,可以读取本地文件
ldap:// 轻量目录访问协议
ssh:// 一种加密的网络传输协议,在不安全的网络中为网络服务提供安全的传输环境
telent:// 可以匿名访问及爆破
tftp:// UDP协议 发送UDP数据包
php:// 访问各个输入/输出流(I/O streams)
…………
http://www.52bug.cn/hkjs/3100.html
https://www.t00ls.net/articles-41070.html