首先,可能看到本文的标题,会具有一定的疑惑,对SSRF一点都不了解的小伙伴,可能根据标题还以为是查看内网的一个什么好工具。先澄清一下,SSRF并不是工具,而是web安全的一种漏洞。
1. 小插曲---漏洞与攻击
漏洞
是指一个系统存在的弱点或缺陷。
攻击
是指某人非法使用或破坏某一信息系统中的资源,以及非授权使系统丧失部分或全部服务功能的行为。
自己在刚刚接触SSRF时,不知道SSRF是属于攻击手段还是安全漏洞,而且自己查看很多的文章标题也是分不清。
例如有叫称呼为SSRF漏洞:
简述CSRF、SSRF的区别
例如有叫称呼为SSRF攻击:
SSRF攻击原理与技巧
对此问题我还请教了自己的好朋友
为了验证朋友的答案,我专门去找了百度百科,然而万能的百度百科也没能帮上忙,我很诧异,百度百科无所不知,无所不能,高数答案应有尽有。。。。
对此我在国外进行检索,果然找到了答案,原文描述如下
SSRF, Server-Side Request Forgery, server request forgery, is a vulnerability that is constructed by an attacker to form a request initiated by the server. In general, the target of an SSRF attack is an internal system that is inaccessible from the external network.
原文中明显提到了关键词 vulnerability
有人肯定会说为什么要较真漏洞还是攻击,只要学会其原理,会挖洞,会利用,会防御,岂不是就行了?我想说的是,从应用层面来说是这样没有任何问题,但是从学术角度讲,这很容易产生概念错误,比个例子,弱口令是漏洞,暴力破解是攻击手段,两者之间的关系就是,攻击方式的选择是根据系统存在什么样的漏洞而决定。再说个不恰当的例子,如果系统存在弱口令(不存在注入漏洞),攻击手段会采用SQL注入吗?
2. SSRF简介
SSRF, Server-Side Request Forgery 服务站点请求伪造
SSRF核心思想:一般web服务器会布上web业务对外网进行开放,能够让外部的用户,通过这个web业务来进行办理相关的事务。此时的web服务器可以说是暴露在公网的内网服务器,这就是给外部提供访问内部的关键节点。由于web服务器本身布置在所属的内网环境中,所以同一内网的服务器或其他网络节点一般默认信任
该web服务器一般外部用户是无法访问除该web服务器外同一内网环境的其他服务器,但是如果利用该web服务器进行访问,确是可以进行访问,探测等功能。
外部用户虽无法直接进行内网服务器访问,但是可通过web服务器为跳板,进行间接访问。就比如你没办法去你对象宿舍里,但是你可以挖到你对象同寝室的舍友,可以通过这个舍友(web服务器)来获取你对象宿舍的东西(真实基于你对象对该舍友的
信任
或者说是这个舍友拥有拿你对象物品的相关权限
)
3. 漏洞危害(可以使用的攻击手段)
- 利用SSRF漏洞可以对对外网开发的服务器所在内网进行端口扫描,获取一些服务信息。
- 利用SSRF漏洞攻击内网web应用(通过get传参就可以实现的攻击,如:struct2,Sqli等)。
- 利用SSRF漏洞配合使用file协议对本地文件进行读取。
- 利用SSRF漏洞攻击fastcgi 反弹shell。
- 利用SSRF漏洞进行未授权访问(redis、mysql等)
- 利用SSRF漏洞攻击运行在内网或本地的应用程序(比如溢出)
4. CVE漏洞公布情况
Apache Olingo SSRF : CVE-2020-1925
CloudBees Jenkins SSRF : CVE-2019-1003047
5. 代码审计
PHP
<?php
curl();
file_get_contents();
fsockopen();
//等函数
?>
Java
HttpURLconnection();
HttpClient.execute();
HttpClient.executeMethod();
HttpURLConnection.connect();
HttpURLConnection.getInputStream();
URL.openStream();
HttpServletRequest();
getParameter();
URL;
HttpClient();
Request();
URLConnection();
okhttp();
BasicHttpEntityEnclosingRequest();
DefaultBHttpClientConnection();
BasicHttpRequest();
URI
6. 漏洞挖掘
- 通过URL关键字
share
、wap
、url
、link
、src
、source
、target
、u
、3g
、display
、sourceURL
、imageURL
、domain
- 常见web功能着重关注
- 分享:通过URL地址分享网页内容
- 转码服务
- 在线翻译
- 图片加载与下载:通过URL地址加载或下载图片
- 图片、文章收藏功能
- 未公开的api实现以及其他调用URL的功能
- 通用的SSRF漏洞公告
- Weblogic配置不当,天生ssrf漏洞
- Discuz x2.5/x3.0/x3.1/x3.2 ssrf漏洞
7. SSRF filter ByPass
-
ip地址转换成进制来访问
例如:ping 127.0.0.1 可以进行替换
-
ip地址采用短地址访问
@ 符号致使解析URL错误绕过
例如:https://www.baidu.com@fanyi.baidu.com会跳入至翻译页面添加端口号测试
-
URL短地址
URL短地址生成器
非HTTP/HTTPS协议
GOPHER协议
File协议:File协议主要用于访问本地计算机中的文件-
DNS解析利用
8. 工具介绍
- WeblogicScan-master : 漏洞自动化检测工具
-
Ground-Control :能够检测XSS,SSRF以及XXE漏洞工具
后续继续补充。。。。。
9. 漏洞防御
- 限制协议为HTTP、HTTPS。
- URL黑名单限制访问内网IP(不建议通过正则,建议转整数后比较)。
- 禁止30x跳转。
- 统一错误信息,避免通过错误信息来判断远端服务器的端口状态
- 限制请求的端口为http常用的端口,比如,80,443,8080,8090
10. 参考资料
- SSRF学习笔记
- 安全客 : SSRF漏洞的挖掘经验
- CSDN : Web安全之SSRF漏洞
- Baidu:SSRF漏洞总结和防御方法
- Freebuf :简述CSRF、SSRF的区别
- 先知社区 :Web安全Day4 - SSRF实战攻防