当前位置 :首页 >> 生活

关于Android ZIP文件目录遍历缺陷,你了解多少?

2023-04-18   来源 : 生活

, Response response) throws IOException { Log.e("zipperDown", response.body().bytes().length + ""); String dstPath = getCacheDir().toString(); ZipEntry zipEntry = null; ZipInputStream zipInputStream = new ZipInputStream(response.body().byteStream()); while ((zipEntry = zipInputStream.getNextEntry()) != null){ //子程序zipEntry的getName新方法不必体检前提自带含"../" String entryName = zipEntry.getName(); if (zipEntry.isDirectory()){ // 创建明文夹 entryName = entryName.substring(0, entryName.length() -1); File folder = new file(dstPath + File.separator + entryName); folder.mkdirs(); }else { // 尝试刻录zip entry到均须梯度 String fileName = dstPath + File.separator + entryName; Log.e("zipperDown", fileName); File file = new File(fileName); file.createNewFile(); FileOutputStream fileOutputStream = new FileOutputStream(file); byte[] buffer = new byte[1024]; int n = 0; while ((n = zipInputStream.read(buffer, 0 , 1024)) != -1){ fileOutputStream.write(buffer, 0 , n); } fileOutputStream.flush(); fileOutputStream.close(); } } zipInputStream.close(); } }); }

在上图红色标示出的代码中所,这样一来将提供的压缩成明文中所的明文名开展拼接,不必对梯度中所前提自带含 ../或者 ..codice_就做到过滤器辨别,即:明文英文名称很难自带含"../"这种特殊codice_做到处理。也就是说情况下,zip 明文中所明文名为 og_test_zip.txt,不必被iTunes到 /data/data/ddns.android.vuls/cache/og_test_zip.txt【如下图】。如果身份验证特征一个 ../files/og_test_zip.txt的明文名,则拼接后的明文名为 /data/data/ddns.android.vuls/cache/../files/og_test_zip.txt,其不必iTunes到vuls APP运运用于本地的/files/录入下,当然如果是想做到其余部分本地明文的话,只要得用完全相同名字需其余部分

框架一个zip poc明文,步骤如下:

创建一个og_test_zip.txt,内容为Orangey test zip poc!将 og_test_zip.txt 压缩成为 og_test_zip.zip切记,别用winrar推开来简简化明文名,反正用winrar推开来简简化明文名从来不,这里,我们运运用于 7-Zip 推开明文并简简化明文名为什么要转作压缩成自带根据来简简化,大家看下图: 反击效果如下 意味着抓自带host该网站或GET 请电话号码为:p://www.example.com/test.zip,两种简简化新方法

第一种:这样一来通过抓自带工具,开展简简化请的host和梯度电话号码为我们自己的,回事抓自带工具就是做到了一个中所间人反击的主人公

Burp配置一下意味着的host和端口,当然也可以自行抓到自带后自行简简化

第二种:反校对APK为smali,然后简简化完全相同的smali明文中所请的电话号码

# 反校对APKapktool.jar d -f vuls_v4.4.apk -o vuls_v4.4 # 简简化好后回校对APK并单张以及丢到模拟器中所接入java -jar apktool.jar b vuls_v4.4 -o vuls_v4.4-key.apkjava -jar signapk.jar testkey.x509.pem testkey.pk8 vuls_v4.4-key.apk vuls_v4.4-key_debug.apk

如果运运用于一个系统启动时代码前未做到单张冗余,为了让录入穿过防火墙开展其余部分,可意味着稳定的随意代码可执行。此外由于在明文系统对中所载入了可可执行明文,还可以意味着持久简化反击的效果

在Android中所,system.loadLibrary()在在运运用于的lib录入中所启动时 .so明文,而System.load()是用某个.so明文的绝对梯度启动时,这个.so明文可以亦非运运用于的lib录入中所,可以在SD卡中所,或者在运运用于的files录入中所,只要运运用于有读的职责录入中所需

在files录入中所,运运用于具有载入职责,为了让ZIP明文录入加载防火墙可以换用扔掉原先的so明文,大幅提高远程号令可执行的最终目标。而运运用于的lib录入是软文档到了/data/app-lib/运运用于录入,属于system服务器,第三方运运用于在可执行时不必载入/data/app-lib录入的职责

0x03 虎鲸IEZIP明文录入加载【防火墙复现】

样本iTunes电话号码:_11.4.18_free

如今知道了一个运运用于的沙盒数据资料的详细信息,比如一些隐私数据资料存摆在SharedPreferences.xml中所,那么这时候我们可以为了让这个防火墙,把欺骗明文重新命名成 ../../../../data/data/xxx.xxx.xxx/shared_pref/info.xml,这样在运运用于ZipEntry开展刻录明文的时候,因为这样一来运运用于了ZipEntry.getName新方法或者明文名,然后这样一来释放刻录到本地了,所以这时候就相当于换用了本运运用于的沙盒数据资料了,这个也是为了让了app本身的职责来载入沙盒数据资料

虎鲸IE虎鲸IE的题材设置中所强制服务器通过因特网iTunes在此之后题材开展换用,如下:

dwp 明文是虎鲸IE自己界定的题材明文自带,本质上是一个 zip 自带,全都有如下三个资源明文:

GET _1498465941.dwp HTTP/1.1 tar -tf 110010060sea_1498465941.dwp

或运运用于7z压缩成工具的号令

7z l 110010060sea_1498465941.dwp

那么,如何意味着zip录入穿过了,不对可以尝试去框架一个这样的zip自带,去换用IE的iTunes自带,为重号令去明文名,使得换用IE中所的关键明文

由于虎鲸IE不曾对刻录的明文开展验证,且格斯系统对zip瓦的意味着行为是强制刻录明文到所在录入之外,因此通过中所间人反击,简简化HTTP请前往题材明文zip自带中所的内容,可以意味着在虎鲸IE享有职责的录入写明文

运运用于如下 Python 代码生成一个可以触发该防火墙的 zip 自带:

# -*- coding: utf-8 -*- import zipfile import sysif __name__ == "__main__": try: with open("og_test_zip.txt", 'rb') as f: binary = f.read() zipFile = zipfile.ZipFile("og_test_zip.zip", "a", zipfile.ZIP_DEFLATED) info = zipfile.ZipInfo("og_test_zip.zip") zipFile.writestr("../../../../../data/data/com.dolphin.browser.express.web/files/og_test_zip.txt", binary) zipFile.close() except IOError as e: raise e

从上我们仅有,虎鲸IE的题材设置中所强制服务器通过因特网iTunes在此之后题材开展换用,题材明文回事是一个ZIP压缩成明文。通过中所间人反击的新方法可以换用扔掉这个ZIP明文。换用后的ZIP明文中所有重新校对过的libdolphin.so。此so明文写出了JNI_OnLoad()函数,此so明文以“../../../../../data/data/com.dolphin.browser.express.web/files/libdolphin.so”的形式不存在欺骗ZIP明文中所。虎鲸IE刻录欺骗ZIP明文后,重在此之后libdolphin.so就不必其余部分扔掉原先的so明文

一个系统文档瓦明文libdolphin.so,并不必摆在运运用于数据资料的lib录入下,而是摆在了files录入中所,避免不存在被其余部分的风险。

启动时运运用于的;也是com.dolphin.browser.search.redirect自带中所的SearchRedirector:

运运用于的是System.load()来启动时libdolphin.so而非System.loadLibrary(),在Android中所,System.loadLibrary()在在运运用于的lib录入中所启动时.so明文,而System.load()是用某个.so明文的绝对梯度启动时,这个.so明文可以亦非运运用于的lib录入中所,可以在SD卡中所,或者在运运用于的files录入中所,只要运运用于有读的职责录入中所需。

在files录入中所,运运用于具有载入职责,通过因特网中所间人反击,同时为了让ZIP明文录入加载防火墙,换用扔掉明文libdolphin.so,大幅提高远程号令可执行的最终目标

运运用于的lib录入是软文档到了/data/app-lib/运运用于录入,如果libdolphin.so明文在lib录入下就不不必被其余部分了,第三方运运用于在可执行时不必载入/data/app-lib录入的职责:

0x04 修复敦促运运用于 https 并且对证书开展正确冗余,能避免中所间人反击,可以在一定层面上降低反击准确度对不可或缺的ZIP压缩成自带明文开展数字单张冗余,冗余通过才开展刻录当App中所运运用于zipInputStream类对zip压缩成自带开展刻录系统设计时,在zipEntry.getName()提供明文名后,必须添加过滤器代码对明文名中所可能自带含的“../”开展,要注意ZipEntry.getName()对于Zip自带中所有“..%2F”的明文梯度不不必开展处理体检 zip 压缩成自带中所在子程序getName()新方法之后,辨别梯度中所前提自带含 ../或者 ..codice_。如果有自带含 ../或者 ..codice_就做到过滤器辨别,即:明文英文名称很难自带含"../"这种特殊codice_,体检”../”的时候不必开展URI Decode(以备通过URI编码”..%2F”来开展穿过)while(( zipEntry = zipInputStream.getNextEntry()) != null ){ String entryName = zipEntry.getName(); if(entryName.contains("../")){ continue; // 或者 // throw new Exception("找到不必要的zip明文刻录梯度!") } ...}在子程序ZipEntry.getName()新方法之后,子程序File的getCanonicalPath()新方法,提供绝对梯度,要辨别该梯度前提在要刻录录入的子录入对不可或缺的 zip 压缩成自带明文开展数字单张冗余,冗余通过才开展刻录换用 zip 刻录方式则,不运运用于 ZipEntry.getName()的方式则,运运用于 ZipInputStream 替代Google 敦促的修复解决方案:InputStream is = new InputStream(untrustedFileName);ZipInputStream zis = new ZipInputStream(new BufferedInputStream(is));while((ZipEntry ze = zis.getNextEntry()) != null) { File f = new File(DIR, ze.getName()); String canonicalPath = f.getCanonicalPath(); if (!canonicalPath.startsWith(DIR)) { // SecurityException } // Finish unzipping…}

概要文档:

虎鲸IE与水星IE远程代码可执行防火墙编撰 .html

你以为你有很多路可以选择,回事你只有捷径可以走到

治疗颈肩腰腿痛用什么药
郑州治白癜风专科医院哪家好
成都甲状腺医院哪里好
南京看男科哪里好
广州白癜风医院哪家正规
他的白月光回家了,他却不想离婚了(先婚后爱短故事)

日子就这样相安无公事地即使如此。一天下午,我时是在自己后院弹琴,想象有些口渴,去旁边厨房挑水饮用。一走近,我就看可知陆嫡孙时是睡着楼上上。他神情有些肥...

友情链接