学习SSRF之前,需要先了解下什么是SSRF!
原理:SSRF漏洞(Server-Side Request Forgery:服务端请求伪造)是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。
形成原因:由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制
漏洞原理演示:
使用百度查询本机IP:
同样是本机IP,但是如果使用百度翻译这个网页:
出现这样的情况,就是SSRF漏洞,百度翻译这个网页执行了本身的翻译服务,而搜索IP也执行了他本身的搜索服务,这样百度翻译就把自己的IP发送给www.ip138.com这个网址,IP翻译出来的结果就是百度翻译服务器所在的外网IP。
几种可利用的攻击:
1、端口扫描(可扫描内网,本地等设备,可通过端口banner信息进行判断)
2、对内网,本地运行的程序进行溢出攻击等
3、获取本地文件(file协议)
4、对内网,外网的web应用进行攻击(get提交)
5、内网应用指纹识别(通过判断特定文件来识别web应用使用的框架,平台,模块及CMS等)
6、邮件系统(接受邮件服务器地址)
7、请求远程服务器资源的地方
漏洞常见出现点:
1、通过URL地址分享网页内容:如http://example.com/**/resourceURL=https://www.target.com
2、转码服务:手机调优服务{通过URL地址把源地址的网页进行调整到适合手机屏幕浏览}
3、在线翻译:通过URL地址翻译文本内容(如百度翻译)
4、图片加载与下载:通过URL地址加载或下载图片(有的公司为了给用户更好的体验而对图片做微小调整)
5、通过关键字{如:share、wap、url、link、src、source、target、display、sourceURL等}查找
SSRF漏洞验证:
1、先使用排除法判断漏洞是否存在:
http://www.example.com/**/service?image=http://www.target.com/img/img.png这个IP中,如果跳转到的IP地址和直接打开图片img.png的地址相同,则一般不存在SSRF漏洞
或者可以通过抓包软件burpsuite来实现,原理是因为请求图片是由服务端发起的,理论上本机发出去的请求中不包含有请求图片的数据包,如果发现主机存在图片请求包,则可判断该地址不存在SSRF,即没有通过服务器跳转。
2、再使用实例验证漏洞是否可行:
先通过漏洞平台或搜索引擎找出历史存在的该服务器能够访问到内网地址
再将该内网地址放在http://www.example.com/**/service?image=内网地址,观察是否有返回其他信息
如何防御漏洞:
1、在内网设备上建立黑名单内网IP,禁止公开服务器的访问
2、过滤返回信息,对响应用户请求的返回信息进行验证
3、禁用端口banner信息
4、禁用不必要的协议,防止file协议等
5、根据业务需求设定URL格式。防止攻击者构建攻击语句
6、统一错误信息,避免攻击者根据错误信息判断端口状态
7、限制请求端口
常见绕过方法:
1、攻击本地:http://localhost:22
2、利用[::]绕过localhost:http://[::]:80
3、利用@绕过:http://[email protected]
4、利用短地址(short URL):http://dwz.cn/11SMa来代替http://127.0.0.1
5、利用特殊域名来绕过:特殊域名如http://127.0.0.1.xip.io
6、利用封闭式字母数字(Enclosed alphanumerics)
7、利用句号绕过:如127。0。0。1代替127.0.0.1
8、利用进制转换
9、利用特殊地址:http://0/
10、利用协议绕过:http://example.com/url=sftp://example.com:12345
11、可以尝试上述绕过组合