在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

URLConnection()和openStream()兩個方法產(chǎn)生SSRF的原理和修復(fù)方法

哆啦安全 ? 來源:哆啦安全 ? 2023-04-28 15:45 ? 次閱讀

0x00 前言

SSRF 形成的原因大都是由于服務(wù)端提供了從其他服務(wù)器應(yīng)用獲取數(shù)據(jù)的功能且沒有對目標(biāo)地址做過濾與限制。比如從指定 URL 地址獲取網(wǎng)頁文本內(nèi)容,加載指定地址的圖片,下載等等。這里主要介紹javaURLConnection()openStream()兩個方法產(chǎn)生SSRF的原理和修復(fù)方法

0x01 URLConnection

    @RequestMapping(value = "/urlConnection/vuln", method = {RequestMethod.POST, RequestMethod.GET})
    public String URLConnectionVuln(String url) {
        return HttpUtils.URLConnection(url);
    }

這里調(diào)用的是HttpUtils.URLConnection(url)

    public static String URLConnection(String url) {
        try {
            URL u = new URL(url);
            URLConnection urlConnection = u.openConnection();
            BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); //send request
            // BufferedReader in = new BufferedReader(new InputStreamReader(u.openConnection().getInputStream()));
            String inputLine;
            StringBuilder html = new StringBuilder();

            while ((inputLine = in.readLine()) != null) {
                html.append(inputLine);
            }
            in.close();
            return html.toString();
        } catch (Exception e) {
            logger.error(e.getMessage());
            return e.getMessage();
        }
    }

跟進URLConnection方法,而URLConnection里又調(diào)用了URL.openConnection()來發(fā)起請求, 這個請求可以直接執(zhí)行url協(xié)議(偽協(xié)議)
漏洞利用:
使用file協(xié)議讀文件

e54b8f3e-e572-11ed-ab56-dac502259ad0.png


使用http協(xié)議訪問百度

e56505e0-e572-11ed-ab56-dac502259ad0.png


修復(fù)方法:
這里先是對url調(diào)用了SecurityUtil.isHttp()來進行檢查

    @GetMapping("/urlConnection/sec")
    public String URLConnectionSec(String url) {

        // Decline not http/https protocol
        if (!SecurityUtil.isHttp(url)) {
            return "[-] SSRF check failed";
        }

        try {
            SecurityUtil.startSSRFHook();
            return HttpUtils.URLConnection(url);
        } catch (SSRFException | IOException e) {
            return e.getMessage();
        } finally {
            SecurityUtil.stopSSRFHook();
        }

    }

SecurityUtil.isHttp()比較簡單,就是判斷url是否是以http://或https://開頭

    public static boolean isHttp(String url) {
        return url.startsWith("http://") || url.startsWith("https://");
    }

單純的ban掉其他協(xié)議顯然是不夠的,還不能夠防止對內(nèi)網(wǎng)進行探測,于是在獲取url內(nèi)容之前,開啟了一個hook來對用戶行為進行監(jiān)聽,SecurityUtil.startSSRFHook(),就有效防止了ssrf攻擊

0x02 openStream

openStream()方法的實現(xiàn)也是調(diào)用了openConnection生成一個URLConnection對象,然后再通過這個對象調(diào)用的getInputStream()方法的

    @GetMapping("/openStream")
    public void openStream(@RequestParam String url, HttpServletResponse response) throws IOException {
        InputStream inputStream = null;
        OutputStream outputStream = null;
        try {
            String downLoadImgFileName = WebUtils.getNameWithoutExtension(url) + "." + WebUtils.getFileExtension(url);
            // download
            response.setHeader("content-disposition", "attachment;fileName=" + downLoadImgFileName);

            URL u = new URL(url);
            int length;
            byte[] bytes = new byte[1024];
            inputStream = u.openStream(); // send request
            outputStream = response.getOutputStream();
            while ((length = inputStream.read(bytes)) > 0) {
                outputStream.write(bytes, 0, length);
            }

        } catch (Exception e) {
            logger.error(e.toString());
        } finally {
            if (inputStream != null) {
                inputStream.close();
            }
            if (outputStream != null) {
                outputStream.close();
            }
        }
    }

通過WebUtils.getNameWithoutExtension(url) + "." + WebUtils.getFileExtension(url)來獲取下載文件名,然后執(zhí)行inputStream = u.openStream();來看一下openStream(),也是調(diào)用了openConnection(),也會根據(jù)傳入的協(xié)議的不同來進行處理

    public final InputStream openStream() throws java.io.IOException {
        return openConnection().getInputStream();
    }

由此可以得知,openStream()方法同樣也可以進行ssrf來探測內(nèi)網(wǎng)以及文件下載,修復(fù)方案同上

0x03 總結(jié)

關(guān)鍵詞:
URLConnection、openConnection、openStream
漏洞利用:
關(guān)于SSRF漏洞利用相關(guān)可以看這篇文章,總結(jié)的很詳細!
從一文中了解SSRF的各種繞過姿勢及攻擊思路


審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    9272

    瀏覽量

    85809
  • URL
    URL
    +關(guān)注

    關(guān)注

    0

    文章

    139

    瀏覽量

    15405

原文標(biāo)題:0x03 總結(jié)

文章出處:【微信號:哆啦安全,微信公眾號:哆啦安全】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    筆記本電池損耗修復(fù)方法

    筆記本電池損耗修復(fù)方法
    發(fā)表于 08-20 12:59

    linux無法開機的修復(fù)方法概述

    概述:我們在使用linux的時候如果遇到無法開機了怎么辦呢?難道要重裝系統(tǒng)了嗎?是不是看著那滿屏幕的亂碼(其實很有用)束手無策,本次博客,我來給大家盡量詳盡的介紹幾種linux常見錯誤的修復(fù)方法
    發(fā)表于 07-11 07:28

    GitHub圖片加載失敗的修復(fù)方法是什么

    HATEOAS是什么意思?UUID是什么?UUID有何作用?GitHub圖片加載失敗的修復(fù)方法是什么?
    發(fā)表于 08-17 07:25

    手機電池修復(fù)方法

    手機電池修復(fù)方法   修復(fù)手機電池的方法 對目前網(wǎng)上流行的幾招修復(fù)手機鋰離子電池的方法的測試!  &n
    發(fā)表于 10-26 16:54 ?304次下載

    電瓶修復(fù)方法簡介

    電瓶修復(fù)方法簡介 蓄電池壞損是可以修復(fù)的,就象人病了需要看病一樣,如果只是一般的壞損,如硫化,采取適當(dāng)?shù)?b class='flag-5'>方法就可以修復(fù);如果是致命的壞損,如極板鉛粉
    發(fā)表于 11-09 17:41 ?4.1w次閱讀

    基于自動程序修復(fù)方法研究

    自動程序修復(fù)幫助開發(fā)者降低人工修復(fù)bug的成本.基于測試集的修復(fù)方法旨在生成能夠通過測試集的代碼補丁,以使程序正常運行.回顧了基于測試集的程序修復(fù)的現(xiàn)有文獻,按照自動
    發(fā)表于 01-15 15:51 ?0次下載

    軸頸磨損原因及修復(fù)方法

    目前針對于軸頸磨損修復(fù)方法也有很多,比如補焊機加工、電刷鍍、熱噴涂等等,但是考慮到修復(fù)時間、修復(fù)成本、修復(fù)效果,小編并不建議采用以上
    發(fā)表于 05-12 16:27 ?2759次閱讀

    風(fēng)力發(fā)電機軸磨損的在線修復(fù)方法

    風(fēng)力發(fā)電機軸磨損的在線修復(fù)方法
    發(fā)表于 01-20 09:42 ?2次下載

    淺析電機軸磨損的原因及修復(fù)方法

    淺析電機軸磨損的原因及修復(fù)方法
    發(fā)表于 01-24 16:55 ?2次下載

    大軸磨損了修復(fù)方法有哪些?

    大軸磨損了修復(fù)方法有哪些?
    發(fā)表于 02-25 11:34 ?18次下載

    減速機軸孔磨損修復(fù)方法有哪些?

    減速機軸孔磨損修復(fù)方法有哪些?
    發(fā)表于 03-25 15:22 ?9次下載

    脫硫泵泵殼腐蝕原因分析及修復(fù)方法

    脫硫泵泵殼腐蝕原因分析及修復(fù)方法
    發(fā)表于 03-28 15:33 ?12次下載

    破碎機軸承位磨損原因及修復(fù)方法

    破碎機軸承位磨損原因及修復(fù)方法
    發(fā)表于 06-14 15:41 ?1次下載

    振動篩軸承位修復(fù)方法

    振動篩軸承位修復(fù)方法
    發(fā)表于 06-17 15:02 ?0次下載

    大軸磨損的原因及修復(fù)方法

    大軸磨損是什么原因?qū)е碌模?b class='flag-5'>修復(fù)方法有哪些?
    發(fā)表于 10-26 16:23 ?1次下載
    主站蜘蛛池模板: 特黄特级高清免费视频毛片| 亚洲伊人久久大香线蕉综合图片| 加勒比精品视频| 天天操精品视频| 久久天天躁夜夜躁狠狠躁2015| 日本高清视频色| 国产18到20岁美女毛片| 天天色色网| 五月婷婷丁香在线观看| 四虎影院台湾辣妹| 女张腿男人桶羞羞漫画| 亚洲成a人片在线网站| 天堂资源中文官网| 欧美网站视频| 欧美一区二区三区四区在线观看| 青草青视频在线观看| 久久精品夜色国产| 欧美精品亚洲网站| 日本老师xxxxxxxxx79| 欧美ww| 国产日韩精品欧美一区色| 看真人一级毛多毛片| 国产三区视频| 国产美女在线精品观看| 中文在线资源链接天堂| 777国产精品永久免费观看| 天堂在线资源最新版| 5252欧美在线观看| 女的扒开尿口让男人桶| 四虎最新在线| 黄色三级三级三级免费看| 最近观看免费高清视频| 国产午夜a理论毛片在线影院| 一区免费视频| 欧美亚洲网站| 天天寡妇色| 久久精品视频免费播放| 午夜国产片| 免费高清成人啪啪网站| 123成人网| 性欧美护士18xxxxhd|