今天我们来测试请求中参数的篡改,这个在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")