Java 审计之SSRF篇(续)
发布日期:2021-05-09 05:32:20 浏览次数:11 分类:博客文章

本文共 2153 字,大约阅读时间需要 7 分钟。

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);
上一篇:Java 审计 之过滤器防御xss
下一篇:Java 审计之SSRF篇

发表评论

最新留言

不错!
[***.144.177.141]2025年03月26日 09时33分35秒