天天看點

java中的SSRF問題如何解決_Java 審計之SSRF篇(續)

搜尋熱詞

Java 審計之SSRF篇(續)

0x00 前言

先來說說為啥會有該篇章,在剛剛碼完上篇文章後,後來又去找了找在Java中的一些遠端請求的類。果然翻到了一些有意思的東西,在這裡就拿出來給大家分享一下。

0x01 imageIO中的SSRF

imageIO類是jdk中自帶的一個類,主要用于操作一些圖檔檔案。比如讀寫、壓縮圖檔。

ssrf 類:

public class ssrf {

public static BufferedImage read(URL url) throws IOException {

if (url == null) {

System.out.println("輸入内容為空");

}

InputStream istream = url.openStream();

ImageInputStream stream = ImageIO.createImageInputStream(istream); //擷取檔案流

BufferedImage bi = ImageIO.read(stream); //傳回 BufferedImage作為供給的解碼結果

return bi;

}

}

servlet:

@WebServlet("/httpclientServlet")

public class httpclientServlet extends HttpServlet {

protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException {

}

protected void doGet(HttpServletRequest request,IOException {

String geturl = request.getParameter("url");

ServletOutputStream outputStream = response.getOutputStream();

ByteArrayOutputStream os = new ByteArrayOutputStream();

URL url = new URL(geturl);

BufferedImage image = ssrf.read(url);

ImageIO.write(image,"png",os);

InputStream input = new ByteArrayInputStream(os.toByteArray());

int len;

byte[] bytes = new byte[1024];

while ((len = input.read(bytes)) > 0) {

outputStream.write(bytes,len);

}

}

}

寫完後來測試一下,先來測試一下傳入一個圖檔的url試試。

java中的SSRF問題如何解決_Java 審計之SSRF篇(續)

成功輸出出來了。證明遠端請求圖檔的功能是沒問題的。

再來讀取一下本地檔案試試

java中的SSRF問題如何解決_Java 審計之SSRF篇(續)

發現報錯了 貌似讀取不了除了圖檔以外的檔案。

再來嘗試一下讀取本地的圖檔試試

java中的SSRF問題如何解決_Java 審計之SSRF篇(續)

讀取成功,看來隻能讀取圖檔。

但這裡發現一個東西,就是檔案雖然不能讀取,但是可以看到該檔案存不存在。

java中的SSRF問題如何解決_Java 審計之SSRF篇(續)
java中的SSRF問題如何解決_Java 審計之SSRF篇(續)

如果檔案不存在的話會顯示找不到指定檔案,而存在但檔案不為圖檔檔案的話則顯示image==null。

HttpClient下的SSRF

CloseableHttpClient httpClient = HttpClients.createDefault();

HttpClient client = new HttpClient();

HttpGet getRequest = new HttpGet(url);

HttpResponse response = httpClient.execute(getRequest);

OkHttp 下的SSRF

Request request = new Request.Builder()

.url("http://publicobject.com/helloworld.txt")

.build();

Response response = client.newCall(request).execute();

HttpRequest

HttpRequest request = HttpRequest.get("http://www.baidu.com",true,'q',"baseball gloves","size",100);

相關文章

總結

以上是程式設計之家為你收集整理的Java 審計之SSRF篇(續)全部内容,希望文章能夠幫你解決Java 審計之SSRF篇(續)所遇到的程式開發問題。

如果覺得程式設計之家網站内容還不錯,歡迎将程式設計之家網站推薦給程式員好友。

本圖文内容來源于網友網絡收集整理提供,作為學習參考使用,版權屬于原作者。

如您喜歡交流學習經驗,點選連結加入交流1群:1065694478(已滿)交流2群:163560250