读完需要
分钟
速读仅需 2 分钟
视频教程:( https://www.bilibili.com/video/BV1KT421k7ZE )
主要内容:
1、Java 中发起网络请求的常见类
2、不同类支持的不同协议
3、防御手法
4、绕过手法
/ SSRF /
1 定义
SSRF 译为服务器端请求伪造,是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。并且 SSRF 攻击的目标是外网无法访问到的内部系统,同时请求都是又服务端发起的,所以服务端能够请求到与其自身相连接的与外网隔离的内部系统。类似于当作跳板进行攻击。
2 攻击流程
攻击者与服务器构建请求。
服务器向客户端发送构建的请求。
客户端响应服务器发送的请求。
服务器向攻击者返回客户端的请求。
3 危害
可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的 banner 信息。
攻击运行在内网或本地的应用程序(比如溢出)。
对内网 web 应用进行指纹识别,通过访问默认文件实现。
攻击内外网的 web 应用,主要是使用 get 参数就可以实现的攻击(比如 struts2,sqli 等)。
利用 file 协议读取本地文件等。
4 利用
4.1 URL 关键字挖掘
share、wap、url、link、src、source、target、u、display、sourceURl、imageURL、domain
5 伪协议
file:/// 从文件系统中获取文件内容,如,file:///etc/passwd
dict:// 字典服务器协议,访问字典资源,如,dict:///ip:6739/info
sftp:// SSH文件传输协议或安全文件传输协议
gopher:// 分布式、文档传递服务,可使用gopherus生成payload
sftp:// SSH文件传输协议或安全文件传输协议
ldap:// 轻量级目录访问协议
tftp:// 简单文件传输协议
6 Java 中发起网络请求的常见类
关键词:
HttpURLConnection.getInputStream
URLConnection.getInputStream
Request.Get.execute
Request.Post.execute
URL.openStream
ImageIO.read
OkHttpClient.newCall.execute
HttpClients.execute
HttpClient.execute
BasicHttpEntityEnclosingRequest()
DefaultBHttpClientConnection()
BasicHttpRequest()
6.1 URLConnection
包: java.net
简介: URLConnection 是 Java 中所有代表应用程序与 URL 之间通信链接的抽象类。它是网络请求类的基类。
支持的协议有:file 、 ftp 、 mailto 、 http 、 https 、 jar 、 netdoc 、 gopher
public static void testURLConnect(){
try {
// 创建一个URL对象,指向需要访问的网页地址
URL url = new URL("http://www.baidu.com");
// 通过URL对象打开一个连接
URLConnection connection = url.openConnection();
// 实际执行连接操作
connection.connect();
// 获取连接后的输入流,用于读取网页内容
InputStream inputStream = connection.getInputStream();
// 使用BufferedReader读取输入流中的内容,这样可以按行读取
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
// 循环读取每一行,直到没有内容为止
while ((line = reader.readLine()) != null) {
// 输出读取的每一行内容
System.out.println(line);
}
// 关闭BufferedReader以释放资源
reader.close();
} catch (Exception e) {
// 捕获并处理所有异常
e.printStackTrace();
}
}
6.2 HttpURLConnection
包: java.net
简介: HttpURLConnection 是 URLConnection 的子类,专门用于处理 HTTP 协议。它提供了额外的功能,如设置请求方法(GET、POST 等)、获取响应代码等。
支持 GET、POST、PUT、DELETE 等方式
6.3 HttpClient
Java 11 引入了 HttpClient 作为一个新的 API,用于在 Java 应用程序中进行 HTTP 通信。HttpClient 提供了发送 HTTP 请求和接收 HTTP 响应的功能,并且相比于依赖第三方库如 Apache HttpClient 或 OkHttp,它提供了一种简单、一致且更加集成的方式来处理 HTTP 通信。作为 Java 的一部分,HttpClient 被设计成与 Java 平台更好地集成,使得开发者能够更轻松地处理 HTTP 请求和响应,同时减少了对外部库的依赖。
包: java.net.http
简介: HttpClient 是在 Java 11 中引入的新的 HTTP 客户端 API,支持异步请求、WebSocket、HTTP/2 等现代功能。如果在使用 Java 11 之前的版本,并且想要使用类似的功能,你可能需要引入第三方库的依赖,如 Apache HttpClient。以下是使用 Apache HttpClient 的一个示例依赖项:
<!-- Apache HttpClient依赖 -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
7 防御代码写法
8 绕过
8.1 dns 重绑定
https://xz.aliyun.com/t/7495?time__1311=n4%2BxnD0Dy7GQ3AKeD5DsA3rcC%3D%2FjO4boTD
原文始发于微信公众号(安全随心录):第十五课-系统学习代码审计:SSRF漏洞利用和常见防御写法以及绕过方式
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论