m4bln


  • 首页

  • 归档

  • 标签

  • hint

  • 关于

  • 搜索

远程打挂所有的apple设备 — CVE-2018-4407分析

发表于 2018-11-01 | 阅读次数:
简述Kevin Backhouse 发现了一个iOS和mac OS的内核漏洞 —— CVE-2018-4407,该漏洞出现在XNU内核中,可以远程攻击使所有的apple设备挂掉。 漏洞演示demo:https://www.youtube.com/watch?v=aV7yEemjexk 漏洞已经上报给了Apple并在iOS12(9月17日)和macOS Mojave(9月24日)系统更新中已经修复完成。该漏洞影响以下版本的设备: iOS 11以及之前的所有设备 (upgrade to iOS 12) macOS High Sierra 10.13.6以及以下所有设备(patched in security update 2018-001) macOS Sierra 10.12.6以及之前所有的设备(patched in security update 2018-005) OS X El Capitan以及之前所有设备 漏洞分析漏洞出现在icmp_error代码中, (bsd/netinet/ip_icmp.c:339): 我们知道,ICMP报文主要有两大功能:查询报文和差错报文。在互联网传输过程中,IP数据报难免会出现差错,通常出现差错时处理方法就是丢弃,但一般出现差错后,接收方会发送ICMP报文给主机,告诉它一些差错信息,而icmp_error就是这一部分的实现。 产生漏洞的代码为:1m_copydata(n, 0, icmplen, (caddr_t)&icp->icmp_ip); m_copydata为一个简单的指定长度的数据拷贝,其实现如下: icmp_error中的m_copydata是将出错ip数据包的包头复制到icmp的消息体中,其中n为接收到的出错的ip数据包,icp->icmp_ip为要拷贝的目的地址,如果n的包头过大,超过了icp分 ...
阅读全文 »

CVE-2018-9488 - 从zygote到init

发表于 2018-09-17 | 阅读次数:
概述上一篇文章中利用cve-2018-9445实现了Android系统在mount外设时的目录穿越CVE-2018-9445 —— Android挂载外设的目录穿越,由于字符长度限制,只有5个字符可控,利用极其有限。 PJ0的Jann Horn,也就是漏洞的原作者对该漏洞进一步分析,发现了更精巧的利用方法,能够基于该漏洞进一步从zygote提权到init,Goole为这一新的利用分配了新的cve编号 —— CVE-2018-9488。 漏洞分析cve-2018-9445能够利用的前提是USB设备有MBR分区表,且格式为vfat,这样内核的vfat文件系统才会mount。此外,如需进一步利用,还需要绕过以下几种安全措施: 路径穿越5个字符的限制 SELinux限制了vold进程的操作 权限限制,如果目录权限不是0700,fs_prepare_dir和chmod会失败 vfat文件系统限制。vfat格式的U盘被mount后,所有文件会被标记为u:object_r:vfat:s0,这意味着即使mount后的目录为/system或/data等一些系统级别的目录,SELinux Context下的进程(如zygote和system_server)是无法和其交互的。 media_rw组的进程需要绕过DAC检测 漏洞利用1.伪造一个USB设备如上篇文章所述,blkid支持各种不同的文件系统,在解析文件头得到type, label和 UUID之后,fsck_msdos会再次读取文件,检测文件系统是否为vfat格式,我们只需要构造一个动态可控的USB设备使系统在两次读取信息时,返回不同的值即可满足这两种条件。即blkid在读取时,构造一个长字符串的label,使blkid认为是romfs格式;fsck_msdos在读取时,再修改自己成为一个vfat格式的USB设备。 这里使用一个树莓派Z ...
阅读全文 »

历史上能使iPhone设备Crash的案例

发表于 2018-09-17 | 阅读次数:
历史上的iPhone crash事件1. 2018年5月,点击黑点表情卡死https://baijiahao.baidu.com/s?id=1600048067011062679&wfr=spider&for=pc 影响iOS 10/11 2. 2018年1月 chaiOS bughttps://www.idownloadblog.com/2018/01/18/a-fix-for-chaios-messages-bug-will-arrive-next-week/ 影响 iOS 10 - 11.2.5 3. 2017年1月,发送“白旗+0+彩虹”表情卡死https://www.leiphone.com/news/201701/GDXeBJxyggxGoe7O.html iOS 10.0到10.2.1 4. 2017年5月,gif导致iPhone重启https://www.leiphone.com/news/201705/pUQ6Rzdo26OHWgm7.html 5. 2016年,一段美拍视频导致iPhone崩溃https://www.zhihu.com/question/51630274 6. 2015年5月,“Effective Power” Unicode解码https://metro.co.uk/2015/05/27/theres-a-way-of-crashing-someones-iphone-with-a-text-message-5217671/ 7. 2018年,打开某网站Crashhttps://www.bleepingcomputer.com/news/security/new-css-attack-restarts-an-iphone-or-freezes-a-mac/ 概述使用iPhone打开https://xssle.com ...
阅读全文 »

CVE-2018-9489分析

发表于 2018-09-07 | 阅读次数:
概述CVE-2018-9489是一个很简单,很鸡肋的漏洞,但漏洞无贵贱,在一些特殊的场景中往往会利用这些漏洞完成不可思议的利用。 简而言之,CVE-2018-9489这个漏洞就是一个0权限的app可以读到系统的mac地址、wifi信息,而这些信息如果是一个普通的app去读取的话是需要申请权限的。 CVE-2018-9489漏洞通过监听NETWORK_STATE_CHANGED_ACTION和WIFI_P2P_THIS_DEVICE_CHANGED_ACTION这两个广播来获得这些信息。 漏洞分析Android系统通过WifiManager.NETWORK_STATE_CHANGED_ACTION和WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION这两个广播发送系统的MAC地址、BSSID、wifi名称、IP地址、DNS等信息。 正常情况下,通过WifiManager类访问这些信息时,需要注册“ACCESS_WIFI_STATE”权限。我们知道搜集了mac地址和BSSID信息时,就可以进行wifi定位,而正常的wifi定位时需要注册“ACCESS_FINE_LOCATION” 和 “ACCESS_COARSE_LOCATION”权限的。 此外,Android为了数据隐私,从这个6.0版本开始, Android 移除了通过 WiFi 和蓝牙 API 来在应用程序中可编程的访问本地硬件标示符。现在 WifiInfo.getMacAddress() 和 BluetoothAdapter.getAddress() 方法都将返回 “02:00:00:00:00:00”。 然而通过监听系统广播的方式,一个普通App可以不用申请任何权限去获得这些信息。当然,如上所述,利用CVE-2018-9489可以进行wifi定位、读取MAC地址、内网扫 ...
阅读全文 »

Chrome远程调试

发表于 2018-09-01 | 阅读次数:
远程调试Chrome的调试目标主要分两种:Chrome PC 浏览器和 Chrome Mobile 调试PC端chrome除了使用“审查元素”外,还可以用一个进程的chrome调试另一个进程的chrome。利用命令行启动chrome,并开启调试端口即可:1sudo /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=2333 需要注意被调试端暴露的端口只接受来自127.0.0.1 或者localhost 的端口请求。 调试Android端chrome调试Android端Chrome需要: adb连接(USB线连接或adb网络调试) 手机端webview需要打开调试模式1webview.setWebContentsDebuggingEnabled(true) 满足上述2点后,在PC上的chrome中输入chrome://inspect或about://inspect,即可进入调试界面。 调试实现Chrome的调试本质上通过端口来实现,PC端chrome在开启调试模式时会指定端口,Android端通过adb forward来实现:1adb forward tcp:2333 localabstract:webview_devtools_remote_6784 被调试的webview在手机上创建一个Unix Domain Socket, 这个socket的名字为 webview_devtoolsremote,其中pid为webview所处的进程号,执行adb forward命令后,adb将这个Unix Domain Socket转发到PC上一个本地端口,进而实现了调试。 调试权限Google 为了限制调试端口的接入范围,对于 Chrome PC 浏览 ...
阅读全文 »

在iOS上使用Frida

发表于 2018-08-24 | 阅读次数:
准备Frida环境 越狱设备1.在你的iOS设备上打开Cydia应用程序。2.添加一个源,URL为:https://build.frida.re3.打开Source或搜索Frida,单击Modify,然后单击Install。 非越狱设备需要将frida-garget打包到app中,参考之前的文章《iOS应用安全- 非越狱下使用Frida》 frida用法1.注入到进程注入进程有两种方式: 通过frida-tools的REPL 1frida -U Safari -l NSURL_openURL_hook.js 通过frida-bindings以python为例: 12345678jscode='''console.log("add js code here");'''process = frida.get_usb_device().attach("Safari")script = process.create_script(jscode)script.on('message', on_message)print('[*] dump all class into obclass.txt')script.load() 2.列出所有运行的进程1frida-ps -U frida-ps -Uai 以pid、名称、进程名称的格式输出 3.打印调用栈在hook到的函数中加入以下代码:123console.log('\tBacktrace:\n\t' + Thread.backtrace(this.context,Backtracer.ACCURATE).map(DebugSymbol.fromAddress).join( ...
阅读全文 »

利用ollvm进行代码混淆

发表于 2018-08-23 | 阅读次数:
OLLVM简介OLLVM(Obfuscator-LLVM)是瑞士西北应用科技大学于2010年6月份发起的一个项目,该项目旨在提供一套开源的针对LLVM的代码混淆工具,以增加对逆向工程的难度。 OLLVM是基于LLVM实现的,LLVM是一个编译器框架,它也采用经典的三段式设计。前端可以使用不同的编译工具对代码文件做词法分析以形成抽象语法树AST,然后将分析好的代码转换成LLVM的中间表示IR(intermediate representation);中间部分的优化器只对中间表示IR操作,通过一系列的Pass对IR做优化;后端负责将优化好的IR解释成对应平台的机器码。LLVM的优点在于,不同的前端语言最终都转换成同一种的IR。 OLLVM的混淆操作就是在中间表示IR层,通过编写Pass来混淆IR,然后后端依据IR来生成的目标代码也就被混淆了。得益于LLVM的设计,OLLVM适用LLVM支持的所有语言(C, C++, Objective-C, Ada 和 Fortran)和目标平台(x86, x86-64, PowerPC, PowerPC-64, ARM, Thumb, SPARC, Alpha, CellSPU, MIPS, MSP430, SystemZ, 和 XCore)。 OLLVM的几种混淆方式OLLVM默认支持 -fla -sub -bcf 三个混淆参数,这三个参数可以单独使用,也可以配合着使用。-fla 参数表示使用控制流平展(Control Flow Flattening)模式,-sub参数表示使用指令替换(Instructions Substitution)模式,-bcf参数表示使用控制流伪造(Bogus Control Flow)模式 -sub instruction substitution(指令替换) -fla control flow flatten ...
阅读全文 »

Android基于OpenMemory的脱壳

发表于 2018-08-22 | 阅读次数:
OpenMemoryAndroid ART加载外部dex本质上调用DexFile::OpenMemory()加载到内存:123456789101112131415std::unique_ptr<const DexFile> DexFile::OpenMemory(const uint8_t* base, size_t size, const std::string& location, uint32_t location_checksum, MemMap* mem_map, const OatDexFile* oat_dex_file, std::string* error_msg) { CHECK_ALIGNED(base, 4); // various dex file structures must be word aligned std::unique_ptr<DexFile> dex_file( new DexFile(base, size, location, location_checksum, mem_map, ...
阅读全文 »

c++filt - 还原so中的函数名

发表于 2018-08-22 | 阅读次数:
C++的name manglingC++是允许函数重载的,也就引出了编译器的name mangling(名字修饰)机制,其目的是给同名的重载函数不同的签名。 例如,对于如下代码:12345678int test(int a,int b){ return a+b;}int test(int a){ return a;} 使用g++编译成so后,使用nm -a (ldd -r命令也可以)查看so中的符号: 发现两个test函数名字变为Z4testi和Z4testii, 这就是name mangling机制产生的。其中_Z是一个前缀,4表示函数名长度(test长度为4),i表示参数类型。 C++的name mangling遵循一定的规则,因此是可逆的,即通过符号还原出原来的函数定义。这个工具就叫c++filt。 c++filt对于上述例子中的符号我们使用c++filt 可以看到还原出来我们定义的函数。 当然,工程中的函数并没有我们给出的例子中那么简单,例如Android中有那么多的类和命名空间,其编译生成的符号也是很复杂的,例如123$c++filt __ZN3art7DexFile10OpenMemoryEPKhjRKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEjPNS_6MemMapEPKNS_10OatDexFileEPS9_输出:art::DexFile::OpenMemory(unsigned char const*, unsigned int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> ...
阅读全文 »

Robust热修复框架原理分析

发表于 2018-08-21 | 阅读次数:
关于RobustRobust(https://github.com/Meituan-Dianping/Robust/blob/master/README-zh.md)是美团推出的一个热补丁框架,可兼容Android2.3-8.0版本,据称补丁修补成功率高达99.9%。 Robust使用环境配置 在App的build.gradle,加入如下依赖 12345apply plugin: 'com.android.application'//制作补丁时将这个打开,auto-patch-plugin紧跟着com.android.application//apply plugin: 'auto-patch-plugin'apply plugin: 'robust'compile 'com.meituan.robust:robust:0.4.82' 在整个项目的build.gradle加入classpath 123456789buildscript { repositories { jcenter() } dependencies { classpath 'com.meituan.robust:gradle-plugin:0.4.82' classpath 'com.meituan.robust:auto-patch-plugin:0.4.82' }} 在项目的src同级目录下配置robust.xml文件,具体项请参考DEMOapp/robust.xml 1234567891011121314151617181920212223242526 ...
阅读全文 »
1234…9

m4bln

影后入林到驿前

84 日志
2 标签
© 2021 m4bln
由 Hexo 强力驱动
|
主题 — NexT.Mist v5.1.3