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, HttpServletResponse response) throws ServletException, 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, 0, len);
        }


    }

}

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

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

再來讀取一下本地文件試試

發現報錯了 貌似讀取不了除了圖片以外的文件。

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

讀取成功,看來只能讀取圖片。

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

如果文件不存在的話會顯示找不到指定文件,而存在但文件不為圖片文件的話則顯示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);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM