概述
SSRF(Server-Side Request Forgery,服务器端请求伪造) 是一种由攻击者构造请求,由服务端发起请求的一个安全漏洞。一般情况下,SSRF 攻击的目标是从外网无法访问的内部系统,因为服务器请求天然的可以穿越防火墙。漏洞形成的原因大多是因为服务端提供了从其他服务器应用获取数据的功能且没有对目标地址作正确的过滤和限制。
原理
SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,文档等等。SSRF漏洞通过篡改获取资源的请求发送给服务器(服务器并没有检测这个请求是否合法的),然后服务器以他的身份来访问服务器的其他资源。SSRF利用存在缺陷的Web应用作为代理攻击远程和本地的服务器。
PHP中下面函数的使用不当会导致SSRF:
- file_get_contents()
- fsockopen()
- curl_exec()
伪协议
- file://:从文件系统中获取文件内容,如,file:///etc/passwd
- dict://:字典服务器协议,访问字典资源,如,dict:///ip:6739/info
- gopher://:分布式文档传递服务,可使用gopherus生成payload。
挖掘SSRF漏洞
能够对外发起网络请求的地方,就可能存在SSRF漏洞。
- 从远程服务器请求资源(Upload from URL,Import &Export RSS feed)
- 数据库内置功能(Oracle[UTL_HTTP]、MongoDB、MSSQL、Postgres、CouchDB)
- 数据库内置功能(Oracle[UTL_HTTP]、MongoDB、MSSQL、Postgres、CouchDB)
- Webmail 收取其它邮箱邮件(POP3/IMAP/SMTP)
- 文件处理,编码处理,属性信息处理(ffpmg,ImageMaic,DOCX,PDF,XML处理器)
利用技巧
利用条件:被攻击的服务等没有开启加密传输与鉴权。
- 端口扫描(扫描内网)
- 攻击内网存在漏洞的服务
- 攻击Web应用进行指纹识别及其中的漏洞
- 如果PHP安装了expect扩展,可以通过expect协议执行系统命令
- dos攻击
- file 协议暴力枚举敏感文件
Redis未授权漏洞的6种利用方法
- 保存文件到www目录,形成webshell
- 创建authorized_keys文件,利用ssh 私钥登录服务器
- 写计划任务(/var/spool/cron/ & /etc/cron.d/)
- slave of 8.8.8.8 主从模式利用
- 写入到/etc/profile.d/ 用户环境变量修改
- 开启AOF持久化纯文本记录 appendfilename
攻击举例
使用靶机:pikachu
curl
我们可以看到一个url参数。
我们修改一下
url=file:///C:/Windows/win.ini
查看到win.ini文件
我们进行了SSRF攻击,成功查看到服务器的敏感文件内容。关于Windows和Linux的敏感文件路径,可以百度一下。
同样
绕过
正则绕过
配置域名
手上有可控域名,可将域名指向想要请求的IP
进制、特殊ip绕过
IP地址转为八、十、十六进制及IP地址省略写法(以下均代表127.0.0.1)
- 0177.00.00.01
- 2130706433
- 0x7f.0x0.0x0.0x1
- 127.1
库绕过
利用检测时使用的URL parse库与请求时使用的parse库的差异绕过,如 http://1.1.1.1 &@2.2.2.2# @3.3.3.3/ 不同的parse库的解析结果不一样
urllib2 : 1.1.1.1
requests + browsers : 2.2.2.2
urllib : 3.3.3.3
dns重定向绕过
设置两条A记录,利用dns重绑定绕过检测,第一次解析返回正常ip,第二次返回内网地址(dns解析记录缓存存活的时间为0,相当于每次解析都要去重新请求dns服务器,无法在本地缓存)
一个很有趣的网站,域名解析为ip,例子如下:
10.0.0.1.xip.io resolves to 10.0.0.1
www.10.0.0.1.xip.io resolves to 10.0.0.1
mysite.10.0.0.1.xip.io resolves to 10.0.0.1
foo.bar.10.0.0.1.xip.io resolves to 10.0.0.1
192.168.20.46.xip.io resolves to 192.168.20.4
30x重定向
利用30x重定向去访问内网
CRLF 编码绕过
%0d->0x0d->\r回车
%0a->0x0a->\n换行
进行HTTP头部注入
example.com/?url=http://eval.com%0d%0aHOST:fuzz.com%0d%0a
防御
限制请求的端口只能为Web端口,只允许访问HTTP和HTTPS的请求。
限制不能访问内网的IP,以防止对内网进行攻击
屏蔽返回的详细信息
更多内容查看:网络安全-自学笔记
工具
利用gopher协议,可以攻击
- MySQL (Port-3306)
- FastCGI (Port-9000)
- Memcached (Port-11211)
- Redis (Port-6379)
- Zabbix (Port-10050)
- SMTP (Port-25)
参考
喜欢本文的请动动小手点个赞,收藏一下,有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。