android-exploitme(四):参数篡改

今天我们来测试请求中参数的篡改,这个在web安全测试中是常用的,拦截请求包,修改参数,提交

 

1.  首先我们需要启动模拟器,并使用本机的代理(加上参数-partition-size的目的是为了可以往android的/system中拷贝数据,要不然会提示“out of memory”错误)。

如果是linux需要加上sudo,emulator需要制定路径。

2. 设置charles,代理端口改为8008(charles破解:http://www.52pojie.cn/thread-218687-1-1.html)

3.  执行exploitme的server端,ssl,端口8443


4. 打开android中的emm软件,设置bank service address为本机的ip,并已经勾选“https enabled”

5. 在emm is locked界面中输入密码解锁,进入软件首页。

如果报错,“could not  connect to server”,有可能是你没有设置android信任代理软件charles的证书。

    为了完成向android中加入信任证书动作,我们先看看系统用的什么格式来保存证书。

    a. 如果下面这样的证书保存在cacerts的文件夹里

root@android:/ # ll /system/etc/security                                       
drwxr-xr-x root     root              2013-02-13 15:22 cacerts
-rw-r--r-- root     root         1125 2013-02-13 15:20 otacerts.zip

    * 下载charles的证书:http://www.charlesproxy.com/ssl.zip,解压后得到“charles-proxy-ssl-proxying-certificate.crt”

    * 运行spenssl命令:

openssl x509 -inform PEM -subject_hash -in charles-proxy-ssl-proxying-certificate.crt#得到hash值 51b1a81b

     *  运行命令openssl x509 -inform PEM -text -in yourcert.crt > yourcert.txt,得到证书的txt值

     *  运行gedit,将txt文件中text和PEM部分位置对调,编程如下的样子:

    * 然后将txt文件改名为51b1a81b.0 上文中生成的hash值加上“.0”

    * 将51b1a81b.0上传到/system/etc/security/cacerts中(这个过程可能会出错,错误一就是启动模拟器的时候没有加上-partition-size参数,或者指定的大小太小,导致system没有可用空间。另外如果提示read-only,需要执行命令“adb  remount”使/system可写)
    b. 如果证书保存在/system/etc/security/cacerts.bks

*   将文件拉去到pc

adb pull /system/etc/security/cacerts.bks cacerts.bks

*   使用keytools将charles的证书导入到keystore中

keytool
-keystore cacerts.bks
-storetype BKS
-provider org.bouncycastle.jce.provider.BouncyCastleProvider
-storepass changeit
-importcert
-trustcacerts
-alias <##CERT ALIAS HERE##>
-file <##YOUR PROXY .CRT HERE##>

*    使系统目录可写

adb  remount

*    将文件上传到虚拟机中,覆盖

adb push cacerts.bks /system/etc/security/

    c   上面的方法可以使得charles代理ssl的内容,但是重启虚拟机后就重置了,有个方法是将系统镜像拷贝出来。

*    下载工具

http://code.google.com/p/android-group-korea/downloads/detail?name=mkfs.yaffs2.arm&can=2&q=

*    将工具上传到虚拟机中

santoku@santoku-virtual-machine:/disk4/tmp$ adb push mkfs.yaffs2.arm /system/xbin/mkfs.yaffs2

*    制作镜像

root@android:/system/xbin # ll mkfs.yaffs2                                 
-rw-rw-rw- root     root       463072 2014-07-15 01:12 mkfs.yaffs2
root@android:/system/xbin # chmod 777 ./mkfs.yaffs2                            
root@android:/system/xbin # ./mkfs.yaffs2 /system/ /sdcard/system.img          
mkfs.yaffs2: Android YAFFS2 Tool,Build by PowerGUI 
        at http://www.openhandsetalliance.org.cn
Building...
lBuild Ok.

* 将镜像下载到pc

santoku@santoku-virtual-machine:/disk4/tmp$ adb pull /sdcard/system.img
903 KB/s (206438400 bytes in 223.080s)

* 以后启动虚拟机的时候用如下命令

santoku@santoku-virtual-machine:/usr/share/adt-bundle/sdk/tools$ emulator -avd avd1  -partition-size 300 -system /disk4/tmp/system.img -http-proxy 192.168.118.140:8008

 

 6.  进入软件界面后,点击transfer,完成转账操作。

 

7.   charles中可以看到传输的数据

8.  然后你可以尝试修改from_account,重新发送这个包,看看结果

 

对于这一问题,解决的方案有:

1. 判断账户是否属于该用户

if to_account.user != session.user or from_account.user != session.user:
    return error("E6")

2. 判断金额是否合法,是否大于0.

if total_cents < 0:
    return error("E5")

 

 

posted @ 2014-07-15 13:20  马僧  阅读(853)  评论(0编辑  收藏  举报