前言
SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)
SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。
一、为什么会存在SSRF?
SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,且没有对目标地址做过滤与限制。
SSRF漏洞就是通过篡改获取资源的请求发送给服务器,但是服务器并没有检测这个请求是否合法的,然后服务器以他的身份来访问其他服务器的资源。
二、攻击手法
1、访问其他站点、内网获取信息
在其可输入的地方尝试输入网址看可否跳转,如果可以跳转则可以利用该漏洞访问一些其他站点而不利用自己信息访问;
而在其输入网址地方输入本地地址127.0.0.1观察可否执行,如果可以访问则可以访问服务器本地,利用伪协议读取或写入文件。
伪协议有
file://
读取文件
以kail为例
file:///var/www/html/index.php就会在开发者工具显示php源码
http://和https://
远程请求
ftp://
主要作用来探测端口
ftp://127.0.0.1:3306
反应块则没开该端口反之则开了
dict://
主要用于探测目标主机的服务版本
dict://192.168.101.22:3306/info
gopher://
称为万金油,主要主要作用构造服务器发起的请求
可构造请求包
同时可利用SSRF实现经典漏洞redis的未授权访问漏洞写入计划任务来反弹shell
1.1可利用途径
1.可以对外网服务器所在内网、本地进行端口扫描,获取一些服务的banner信息
2.攻击运行在内网或本地的应用程序(比如溢出)
3.对内网web应用进行指纹识别,通过访问默认文件实现
4.攻击内外网的web应用,主要是使用get参数就可以实现的攻击(比如struts2,sql注入)等
5.利用file协议读取本地文件等
2、如何挖掘SSRF
1.能够对外发起网络请求的地方,就可能存在SSRF漏洞
2.从远程服务器请求资源(Upload from URL,Import & Export RSS feed)
3.数据库内置功能(Oracle、MongoDB、MSSQL、Postgres、CouchDB)
4.Webmail收取其他邮箱邮件(POP3/IMAP/SMTP)
5.文件处理,编码处理,属性信息处理(ffpmg,ImageMaic,DOCX,PDF,XML处理器)
通常来说就是一下几个地方
分享:通过URL地址分享网页内容
转码服务
在线翻译
图片加载与下载:通过URL地址加载或下载图片
图片、文章收藏功能
未公开的api实现以及其他调用URL的功能
从URL关键字中寻找
3、防范手法
1.过滤10.0.0.0/8 、172.16.0.0/12、192.168.0.0/16、localhost私有地址、IPv6地址
2.过滤file:///、dict://、gopher://、ftp:// http:// https:// php:///危险schema
3.白名单过滤
4.对返回的内容进行识别
3.1 SSRF的特征码
1.篡改url后的链接 http://ip:port/fi/?url=https://www.baidu.com
2.访问端口 http://ip:port/fi/?url=http://127.0.0.1:3306
3.2 绕过方法
1.更改IP地址写法
8进制
16进制
10进制
2.利用解析URL所出现的问题
http://www.oldboyedu.com@192.168.0.1
前面域名错误的话直接访问后面ip 不一定有效