考点
思路
首先我拿到了一款支付软件的安装包,我们先在模拟器中安装好这个软件,我们发现这里的注册按钮是无法使用的,如下图:
这时,我们要利用移动端逆向的知识,patch掉禁用注册按钮的的代码
工具:apktool 解包:apktool.bat d 文件命.apk 文件名 打包:apktool.bat b 文件名 文件命.apk 签名(必要)
if-nez vA, :cond_" 如果vA不等于0则跳转到:cond_
使用的三个软件都是免费的,下载地址Google一下也能轻易的搜到 apktool下载地址 dex2jar下载地址 jd-gui下载地址
重新打包后,我们在模拟器中安装好这个apk程序,运行他。
一共是4个按钮,不同的按钮是有不同的用处,我们也了解到整个程序的使用是基于web服务的,根据上级给的IP地址,我们使用漏扫工具对其进行扫描,发现其存在git源码泄露漏洞,利用漏洞我们下载源码,一共是4个php页面。
因为平时一直从事re的题目,所以我将代码审计理解为逆向中的静态分析,简单的来说就是检查源代码中的安全缺陷,是否存在安全隐患。git源码泄露的php页面分别是:api.php,key.php,notify.php.index.php.
通过代码审计我们发现了,其中的核心代码是在notify.php,整个程序的流程是,充值,钱够数,买flag,而notify.php中就是充值的过程。
这里,我们看到了充值成功的信息,我们再向上看充值成功的条件是sign值为5个字符串拼接后md5加密。
appid是通过阅读可以得到的,“wx”
deposit的信息获取位于api.php中,显示的flag价格是9999999999
nonce_str是通过openssl函数计算,返回值为1
session_id是登录时,返回包中的信息,每次登录的时候都会改变
sign值是通过计算得来的,脚本如下
<?php
$key="668f4f4db2ac706137639bfc3ca70fe1";
$appid='wx';
$deposit="19999999999";
$nonce_str="1";
$session_id="9ang9ja5l7o7paicmi4j49q6ke";
$aa=$appid.$deposit.$nonce_str.$session_id.$key;
//echo $aa;
echo md5($aa);
?>
libxml_disable_entity_loader(false)//为ture,则表示禁用外部实体
开启burp的拦截功能,然后访问该IP地址,当访问请求被burp拦截后,讲如下的XML文本直接卸载数据包内容的下面
<?xml version="1.0" encoding="ISO-8859-1"?> <xml> <appid>wx</appid> <deposit>19999999999</deposit> <nonce_str>1</nonce_str> <session_id>njorlgicrcr9j21bqp1n5f1jou</session_id> <sign>3cf7d98cac07de65bbc94d4f18c4798c</sign> </xml>
(对应XML中的标签)
将XML内容发送给服务器,服务器讲XML解析完成后,就会依照解析的内容工作,这段XML中的内容就被应用到了目标服务器下(192.168.32.187),服务器解析XML内容后,会将这一文件内容存入&xxe中,然后将数据返回给恶意访问者。
下面一些图片就是步骤的演示:
刚刚登陆后的界面如图
在burp中开启拦截,点击充值,出现界面如下图,session_id出现了,之后我们利用脚本求出sign值。
再点击充值,这个时候我们要将拦截的信息进行修改了。
关闭拦截,我们的余额发生了变化,这个时候就可以购买flag了
整个题目的过程就是这样,希望大家可以有所收获