91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ES文件瀏覽器CVE-2019-6447的漏洞分析是怎樣的

發布時間:2021-12-22 23:42:07 來源:億速云 閱讀:295 作者:柒染 欄目:安全技術

ES文件瀏覽器CVE-2019-6447的漏洞分析是怎樣的,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

漏洞名稱

ES File Explorer Open Port Vulnerability - CVE-2019-6447

漏洞簡介

ES文件瀏覽器在啟動時創建了一個HTTP服務器,在本地打開了59777端口。攻擊者通過構造指定的payload可以獲取用戶手機文件,安裝apk等操作。

影響范圍

4.1.9.7.4 and below(部分版本可能不支持,也可能和應用市場有關)

漏洞分析

從fs0c131y所給出的信息來說CVE-2019-6447影響的ES應用版本為4.1.9.7.4以下,但是在某些版本的應用該漏洞卻無法利用,例如從華為和google play商店下載的ES就無法順利復現該漏洞,向59777端口發送payload一直會回復500 ERROR報錯,下面將詳細對該漏洞進行分析。

4.1.9.4版本應用分析

以下是選擇了4.1.9.4版本的ES文件瀏覽器進行了分析,該版本ES能夠成功利用該漏洞。

ES文件瀏覽器CVE-2019-6447的漏洞分析是怎樣的

首先對APK解包后發現存在三個DEX文件。

ES文件瀏覽器CVE-2019-6447的漏洞分析是怎樣的

先簡單看了下lib中的庫發現應用沒有加殼,用grep篩查以下59777確定相關代碼可能在classes2.dex中。

把classses2.dex反編譯后,全局搜索command發現存在漏洞的類在com/estrongs/android/f/a之中,而觸發漏洞的函數為com/estrongs/android/f/a.a。

ES文件瀏覽器CVE-2019-6447的漏洞分析是怎樣的

簡單看下來a.class,b.class,c.class可能都和該漏洞的服務相關,其中a.class繼承了c.class。

ES文件瀏覽器CVE-2019-6447的漏洞分析是怎樣的

ES文件瀏覽器CVE-2019-6447的漏洞分析是怎樣的

下面來看下整個漏洞的觸發過程,由于混淆代碼不管是丟進jeb中還是smali閱讀起來都比較費力,為此我們可以先動態的將程序跑一邊后記錄trace,分析android trace文件來查看函數調用棧(利用TraceReader讀取)。

記錄trace的方法如下:

ES文件瀏覽器CVE-2019-6447的漏洞分析是怎樣的

ES文件瀏覽器CVE-2019-6447的漏洞分析是怎樣的

在DDMS上成功打開Trace之后,我們就要去構造payload去觸發該漏洞,漏洞具體利用payload見github(https://github.com/fs0c131y/ESFileExplorerOpenPortVuln)。

curl --header "Content-Type: application/json" --request POST --data "{\"command\":getDeviceInfo}" http://192.168.13 7.10:59777 -vvv

把tracer文件丟到TraceReader查看調用棧,可以發現程序進入com/estrongs/android/f/c$a.run()V來處理了我們的請求,注意這里的類的實例化對象其實是a.class而不是c.class。:

ES文件瀏覽器CVE-2019-6447的漏洞分析是怎樣的

首先接受socket然后讀到buffer中提取數據

ES文件瀏覽器CVE-2019-6447的漏洞分析是怎樣的

然后判斷是不是post數據,如果是post請求則對content-type進行解析,當所有的前置解析完成后最后程序會來到label_189處

ES文件瀏覽器CVE-2019-6447的漏洞分析是怎樣的

label_189中,執行了v2_7 = this.a.a_parse_url_other_data(v9, v10, v11, v6, v7);來進一步解析并執行相應的command。

ES文件瀏覽器CVE-2019-6447的漏洞分析是怎樣的

這里有一個問題,如果JEB直接雙擊來跟蹤函數會跳轉到自己類中的函數,而實際真正調用的是a.class(com/com/estrongs/android/f/a)中的函數a_parse_url_other_data(這里我對混淆函數名重命名了實際上原本的函數名是a)。

下圖是JEB錯誤跳轉到函數的位置,實際上我們應該分析的是a.class中的a_parse_url_other_data:

ES文件瀏覽器CVE-2019-6447的漏洞分析是怎樣的

繼續追蹤下去來到就來到了我們一開始漏洞觸發的地方(com/estrongs/android/f/a.a):

ES文件瀏覽器CVE-2019-6447的漏洞分析是怎樣的

關于這個地方的分析其實有很多文章以及做過了,這里就不再過多提及了。

解析對應的command調用對應的功能函數后返回json:

ES文件瀏覽器CVE-2019-6447的漏洞分析是怎樣的

最后進入com/estrongs/android/f/c$a.a(Ljava/lang/String;Ljava/lang/String;Ljava/util/Properties;Ljava/io/InputStream;)V將response寫回。

ES文件瀏覽器CVE-2019-6447的漏洞分析是怎樣的

該函數將輸出的結果寫入到OutputStream中然后將其返回。
ES文件瀏覽器CVE-2019-6447的漏洞分析是怎樣的

該ES版本整個漏洞的觸發流程大致就如上所示。

這里有一個需要注意的地方,如果是不存在漏洞的ES應用v2_7是為null的也就會進入this.a("500 Internal Server Error", "SERVER INTERNAL ERROR: Serve() returned a null response.");中,這也是很多應用市場上的ES應用都會到報500錯誤的原因。

4.1.6.6.1版本應用分析

以下將對4.1.6.6.1版本ES文件管理器進行分析,該版本的ES文件管理器沒有順利觸發漏洞。

ES文件瀏覽器CVE-2019-6447的漏洞分析是怎樣的

直接curl個看看,500報錯了。

ES文件瀏覽器CVE-2019-6447的漏洞分析是怎樣的

拆包靜態看一遍,代碼基本上還是在f包中,但是多了很多其他的類,a.class依然是ESHttpServer實現的地方。

ES文件瀏覽器CVE-2019-6447的漏洞分析是怎樣的

ES文件瀏覽器CVE-2019-6447的漏洞分析是怎樣的

再curl一個包抓取一下調用棧。

curl --header "Content-Type: application/json" --request POST --data "{\"command\":getDeviceInfo}" http://192.168.0. 122:59777 -vvv

ES文件瀏覽器CVE-2019-6447的漏洞分析是怎樣的

錯略比對發現在這個版本的ES中多了一些函數,可能是做了某一些的校驗邏輯。

靜態分析代碼,發現前面的邏輯和之前app差不多,但是在執行完com.estrongs.android.f.h.a(Ljava/lang/String;Ljava/util/Properties;)V后又調用了bJ。

ES文件瀏覽器CVE-2019-6447的漏洞分析是怎樣的

ES文件瀏覽器CVE-2019-6447的漏洞分析是怎樣的

跟入bJ,bJ驗證了了url并且ap.a()方法檢測當前環境是否處于WIFI環境下。

ES文件瀏覽器CVE-2019-6447的漏洞分析是怎樣的

ES文件瀏覽器CVE-2019-6447的漏洞分析是怎樣的

繼續往下跟蹤,我們來到問題點!bp.q() || !f.e(v8)) && !f.a(v8, v2_5)這里返回了true導致flag_object為null值所以服務器返回了500。

ES文件瀏覽器CVE-2019-6447的漏洞分析是怎樣的

bq.q()為true或者f.e以及f.a為true才能進入邏輯

跟蹤進入bq.q(),要滿足bp.p()和cw.e()都為true。

而FexApplication.a().getSystemService("uimode").getCurrentModeType() == 4成立的時候bp.p()才能為true,根據官方文檔4的uimode為UI_MODE_TYPE_TELEVISION。

ES文件瀏覽器CVE-2019-6447的漏洞分析是怎樣的

ES文件瀏覽器CVE-2019-6447的漏洞分析是怎樣的

在cw.e中需要滿足一定的界面長寬需求

boolean v0_1 = Math.sqrt(Math.pow((((double)v0.heightPixels)) * 1 / (((double)v0.densityDpi)), 2) + Math.pow((((double)v0.widthPixels)) * 1 / (((double)v0.densityDpi)), 2)) >= 20 ? true : false;

ES文件瀏覽器CVE-2019-6447的漏洞分析是怎樣的

而另外的f.e(v8),f.a(v8, v2_5)函數則負責校驗了我們的ip。

ES文件瀏覽器CVE-2019-6447的漏洞分析是怎樣的

此外存在另外一種情況是當我們的ip為127.0.0.1時候flag_object能不為null,但首先你要滿足v4=null這個先覺條件。

ES文件瀏覽器CVE-2019-6447的漏洞分析是怎樣的

查看v4 = as.bJ(v9),之前已經說過bJ函數負責校驗了url,我們再重新回到bJ發現return null好像不太可能,v9不管uri如何構造都會以'/'開始。

ES文件瀏覽器CVE-2019-6447的漏洞分析是怎樣的

也就是說在應用市場上的ES版本不管是走if((!bp.q() || !f.e(v8)) && !f.a(v8, v2_5))還是走if(v4 != null && as.I(v4) != 0)似乎都不能出發到flag_object = v8_1.a(v9, v10, v11, v6, v7)的邏輯,這樣該漏洞就沒法觸發,但說不定還有其他的繞過方法,希望大家能夠多多補充。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

武陟县| 马尔康县| 桐梓县| 铜山县| 永清县| 清苑县| 东阳市| 英山县| 沿河| 鹿泉市| 噶尔县| 隆昌县| 凤凰县| 五家渠市| 汕尾市| 马鞍山市| 台中市| 闸北区| 百色市| 日照市| 屯门区| 陵川县| 社旗县| 微山县| 凌云县| 博白县| 齐齐哈尔市| 特克斯县| 松桃| 潞西市| 怀化市| 广水市| 科技| 揭阳市| 建阳市| 土默特右旗| 连山| 周口市| 长子县| 攀枝花市| 崇明县|