SSRF漏洞
背景
SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。
SSRF的划分界限:
- 只要能发起网络请求就是存在漏洞,因为有风险。
- 只有访问到内网和本机(本机比内网更脆弱)才算存在SSRF。
CSRF与SSRF
CSRF跨站请求伪造,浏览器偷偷发包。
SSRF你可以控制目标站点,往其他网站发包。
概述
很多web应用都提供了从其他服务器上获得数据的功能。使用用户指定的url,web应用可以获取图片,下载文件,读取文件内容登。这个功能如果被恶意使用,可以利用存在缺陷的web应用作为代理攻击远程和本地服务器。
原理
服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤和限制。
大部分的web服务器架构中,web服务器自身都可以访问互联网和服务器所在的内网。
SSRF可以做什么
- 可以对外网服务器所在的内网、本地进行端口扫描,获取一些服务的banner信息 。
- 攻击运行在内网或者本地的应用程序。
- 对内网web应用进行指纹识别,通过访问默认文件实现 。
- 攻击内外网的web应用。sql注入、struct2、redis等。
- 利用file dict sftp ladp gopher ftp http等协议
dict协议:dict协议可以查看端口,版本信息这些。向服务器端口请求curl命令。
怎么去寻找SSRF:
- 看功能(出现外部访问,翻译)。
- 看传参。如果说传参中存在有后缀的东西,就很有可能。(为什么有这些东西?1.读取文件显示给你 2.包含文件 3.下载文件)
- 传参中出现协议名,也很有可能。
SSRF是有防护手段的。例如
- 正则匹配,不允许传内网地址。
怎么绕过?
- 域名肯定要是解析成ip的,我们自己申请个域名,把地址指向127.0.0.1(比如dnslog可以去查找)
- 通过
@
可以把访问强行拉到后面。(比如:http://www.baidu.com@127.0.0.1/1.php)
SSRF漏洞如何防御
- 统一错误信息
- 限制请求的端口
- 过滤返回的信息
- 黑名单内网ip
- 禁用其他协议