您当前的位置:首页 > 电脑百科 > 安全防护 > 移动

APP渗透技巧 | 逆向app破解数据包sign值,实现任意数据重放添加

时间:2021-11-10 09:26:26  来源:  作者:IT野涵
APP渗透技巧 | 逆向app破解数据包sign值,实现任意数据重放添加

 

前言

登场的目标虽不是SRC,但是整个漏洞的利用手法很有学习意义。目前在很多大厂的http数据包中都会添加sign值对数据包是否被篡改进行校验,而sign算法的破解往往是我们漏洞测试的关键所在。

本人在一些漏洞挖掘实战中经常发现在破解sign值后,在测试各类越权,重放等漏洞时一马平川,今天特此为大家带来这样一个精彩的实战案例。

【学习资料】→私发

背景

学校每学期的体育成绩中会有10%来源于某跑步App的打卡数据,本人作为一个体测只能勉强及格的废物,自然得想办法拿到这10分,以防挂科
无奈这个app后台设置的是每学期男生总共要求跑120公里才能完整地拿到10分,非常恶心。一学期跑120公里,你还不如鲨了我,于是便有了此文对于其app的crack

初步测试

手机装好https证书,挂好Burpsuite的代理,随后我们直接去抓取该APP上传校园跑步数据时的请求

APP渗透技巧 | 逆向app破解数据包sign值,实现任意数据重放添加

 

请求如下

APP渗透技巧 | 逆向app破解数据包sign值,实现任意数据重放添加

 

我们发现单次跑步距离对应的POST参数为FormatSportRange,自然二话不说对其进行修改,将0.000修改为5.000
此时悲剧发生了,直接提示认证失败~
定神细看,发现POST数据末尾有sign签名….

APP渗透技巧 | 逆向app破解数据包sign值,实现任意数据重放添加

 

此时老开发或老安全肯定就知道发生什么事了,为了让本文对新手友好一些,下面简单讲一下sign校验手法

何为Sign签名校验?

Sign签名校验法本质上是对客户端传输数据合法性的一种校验手段
其常用手法为,在用户客户端传输的数据中额外加上时间戳以及特殊字符,随后一起得出整体数据的加密值(常用MD5,SHA1等加密算法)
这就导致了用户在不知晓程序的原始数据生成sign值的方法情况下,若对传输到服务端的数据进行篡改,在后端都会鉴权失败,导致用户篡改后的数据无效。

sign值的安全对抗方法

针对有sign签名值的数据包,本人常用的测试手法有两个:
1.检测sign值是否为弱凭据
2.检测sign值是否可以置空
第一种类型通常有两种情况
①看sign值是否采用了一些弱加密/编码方法(例如base64),我们解码后可以直接看到sign的原始数据。
②测试sign值是否为时间戳/随机数加密后的密文值,在一些实战情况中,很多厂商安全开发意识不足,会将sign值的算法直接暴露在前端未加密的js中,或者直接将用户进行某操作的时间戳进行md5加密后作为sign凭据,导致sign凭据在一段时间内可以通过遍历时间戳进行猜解
第二种类型就比较好理解,我们直接将sign参数以及值删掉,看后端程序是否可以不校验sign直接执行我们传输的数据
上述概念可能看起来比较抽象,下面我们继续来看本案例

二次测试

我们先尝试第一种方法,上方添加跑步记录获取到的sign值为
5ded7f11f080fb5a9d403c9d0963ebaa
拿眼一看,大概率sign值是使用md5加密的,我们随后对其进行解密

APP渗透技巧 | 逆向app破解数据包sign值,实现任意数据重放添加

 

GG了,看样厂商的安全意识不算太差~没有使用时间戳或者随机数加密后的值作为sign,导致sign可以被无脑遍历猜解
随后我们尝试第二种方法,置空sign值

APP渗透技巧 | 逆向app破解数据包sign值,实现任意数据重放添加

 

发现依然鉴权认证失败,gg了。
看样两种常规的对抗sign的方法已经废了,我们只能从app下手了,逆向尝试去寻找其sign的算法

逆向apk文件取得其sign值算法

拿到程序apk直接查壳,运气不错,apk没加壳,省了不少功夫

APP渗透技巧 | 逆向app破解数据包sign值,实现任意数据重放添加

 

直接将apk文件拖到jadx中,对其进行逆向分析

APP渗透技巧 | 逆向app破解数据包sign值,实现任意数据重放添加

 

全局搜索sign,在仔细挨个查看后,成功定位到了其sign生成的关键算法

代码过长,关键部分代码如下

APP渗透技巧 | 逆向app破解数据包sign值,实现任意数据重放添加

 


APP渗透技巧 | 逆向app破解数据包sign值,实现任意数据重放添加

 

可以看到,其sign值的签名算法为
创建一个链表, 将全部已有的参数加入进去, 然后再加上一些键值对(其中timestamp时间戳我们已知,appID,appSecret两个键值对我们均未知)
之后再将全部的键值对根据键的字母顺序进行排序, 之后使用 querystring 方式对键值对进行编码.
最后再对编码后的字符串求 MD5 值, 就是最终的签名了, 麻烦的一比

继续逆向apk文件获取未知键值对

我们继续来找appID,appSecret两个我们未知的键值对
发现其获取方法如下

APP渗透技巧 | 逆向app破解数据包sign值,实现任意数据重放添加

 

①appID键值对的获取方法:
如果请求的url是 https://m.xxxxx.com 则为move,否则调用getAppId方法
后面我搜索了一下getAppId方法,发现其本质上是获取某接口openId的参数值,随后赋值给AppID
我去burpsuite走了一遍这个apk的业务,然后去http history搜索了一下openId,直接获取到了我们学校的openId参数值,也就是说我们获取到了AppID

APP渗透技巧 | 逆向app破解数据包sign值,实现任意数据重放添加

 

②appSceret键值对获取方法
在jadx中提示appSecre键t对应的值来源于g.b,我们在import的包中成功找到了g.b(即appSecret)

APP渗透技巧 | 逆向app破解数据包sign值,实现任意数据重放添加

 

Nodejs编写计算sign的Exploit

sign的算法已经有了,未知的键值对我们也拿到了,下面就是直接编写计算sign的exploit的时刻啦~
我们选择用nodejs来还原整个sign的加密算法(注意,我们将formatSportRange跑步距离改为了5.003)

var parseQueryString = function( url ){
    var reg_url =/^[^?]+?([wW]+)$/,
        reg_para=/([^&=]+)=([wW]*?)(&|$)/g, //g is very important
        arr_url = reg_url.exec( url ),
        ret        = {};
    if( arr_url && arr_url[1] ){
        var str_para = arr_url[1],result;
        while((result = reg_para.exec(str_para)) != null){
            ret[result[1]] = result[2];
        }
    }
    return ret;
}
var url ="www.xxx.com/index.php?userId=34263&runType=2&startTime=1635573372448&endTime=1635573425940&gitudeLatitude=%5B%7B%22latitude%22%3A34.383468%2C%22locationType%22%3A4%2C%22longitude%22%3A108.976148%2C%22puase%22%3Afalse%2C%22speed%22%3A0.0%2C%22time%22%3A1635573372480%7D%2C%7B%22latitude%22%3A34.383484%2C%22locationType%22%3A4%2C%22longitude%22%3A108.976155%2C%22puase%22%3Atrue%2C%22speed%22%3A0.0%2C%22time%22%3A1635573373314%7D%2C%7B%22latitude%22%3A34.383489%2C%22locationType%22%3A2%2C%22longitude%22%3A108.976155%2C%22puase%22%3Atrue%2C%22speed%22%3A1.55%2C%22time%22%3A1635573378344%7D%2C%7B%22latitude%22%3A34.383408%2C%22locationType%22%3A2%2C%22longitude%22%3A108.976193%2C%22puase%22%3Atrue%2C%22speed%22%3A1.55%2C%22time%22%3A1635573398400%7D%2C%7B%22latitude%22%3A34.383479%2C%22locationType%22%3A2%2C%22longitude%22%3A108.976152%2C%22puase%22%3Atrue%2C%22speed%22%3A1.55%2C%22time%22%3A1635573418403%7D%5D&identify=12cc1557-f226-4d19-a01f-58f492620818&formatSportTime=00%3A00%3A01&formatSportRange=5.003&avgspeed=0.0&speed=0%270%22&okPointList=%5B%5D&brand=Xiaomi&model=Mi%2010&system=Android&version=10&appVersion=1.5.73&stepNumbers=%5B0%5D&isFaceStatus=0&points=%5B%5D&uploadType=0×tamp=1635573451940";
var obj = parseQueryString(url);
//console.log(obj)   //querystring序列化
const crypto = require('crypto')
const APP_ID = "ec74df4f7ea14f1fa585bbc9f936fc23"
const data = obj
console.log(data)
const timestamp = '1635573451940'
function ff(data, timestamp, appId = APP_ID){
  const d = { ...data, appId, timestamp: '1634356066432',appSecret: 'e8167ef026cbc5e456ab837d9d6d9254' }
  const ans = crypto.createHash('md5').update(Object.keys(d).sort().map(k => k + '=' + d[k]).join('&')).digest('hex')
  console.log("sign is",ans)
}
ff(data, timestamp, APP_ID)
```
APP渗透技巧 | 逆向app破解数据包sign值,实现任意数据重放添加

 

大功告成,我们成功序列化queryString后计算出了sign值,我们现在可以篡改任意数据并根据算法生成伪造的sign值

测试

我们将原来的formatSportRange跑步距离改为了从0.000修改为5.003,并使用程序生成的sign值

APP渗透技巧 | 逆向app破解数据包sign值,实现任意数据重放添加

 

如图,大功告成,跑步记录保存成功,我们成功使用伪造的sign签名增加了一条5.003 km的跑步记录
返回app查看~

APP渗透技巧 | 逆向app破解数据包sign值,实现任意数据重放添加

 

后言

遇到可能的漏洞点莫要轻言放弃,再坚持一下,曙光就在前方~

免责声明:

本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。禁止任何人转载到其他站点,禁止用于任何非法用途。如有任何人凭此做何非法事情,均于笔者无关,特此声明。



Tags:APP渗透   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
公众号:白帽子左一 领取配套练手靶场、安全全套课程及工具...前言在日常渗透项目中,app渗透可以说是家常便饭了。但由于安卓7以后不信任用户安装的证书,很多时候无法正常抓取数...【详细内容】
2021-12-07  Tags: APP渗透  点击:(31)  评论:(0)  加入收藏
前言登场的目标虽不是SRC,但是整个漏洞的利用手法很有学习意义。目前在很多大厂的http数据包中都会添加sign值对数据包是否被篡改进行校验,而sign算法的破解往往是我们漏洞测...【详细内容】
2021-11-10  Tags: APP渗透  点击:(91)  评论:(0)  加入收藏
一、准备环境Burpsuite、夜神模拟器二、步骤运行burpsuite,打开代理后,访问 http://burp/ 下载CA证书点击右上角位置下载CA证书将下载的CA证书导入到浏览器中,打开浏览器选择设...【详细内容】
2021-10-08  Tags: APP渗透  点击:(66)  评论:(0)  加入收藏
App渗透 - 人脸识别登录绕过打开APP是一个登录框 抓包后发现参数被加密了 使用Jadx脱源码发现,并没有加壳也没有混淆,运气很好 根据经验,先搜索Encrypt、Decrypt等关键字,发现在...【详细内容】
2020-11-19  Tags: APP渗透  点击:(371)  评论:(0)  加入收藏
IOS端的APP渗透测试在整个互联网上相关的安全文章较少,前几天有位客户的APP数据被篡改,导致用户被随意提现,任意的提币,转币给平台的运营造成了很大的经济损失,通过朋友介绍找到...【详细内容】
2019-12-26  Tags: APP渗透  点击:(130)  评论:(0)  加入收藏
▌简易百科推荐
公众号:白帽子左一 领取配套练手靶场、安全全套课程及工具...前言在日常渗透项目中,app渗透可以说是家常便饭了。但由于安卓7以后不信任用户安装的证书,很多时候无法正常抓取数...【详细内容】
2021-12-07  暗网视界    Tags:APP渗透   点击:(31)  评论:(0)  加入收藏
前言登场的目标虽不是SRC,但是整个漏洞的利用手法很有学习意义。目前在很多大厂的http数据包中都会添加sign值对数据包是否被篡改进行校验,而sign算法的破解往往是我们漏洞测...【详细内容】
2021-11-10  IT野涵    Tags:APP渗透   点击:(91)  评论:(0)  加入收藏
一、知识点详解msfconsole,进入msf控制端show options,查看设置的ip地址和端口号是否写入run,根据写入的ip地址和端口号,开启监听服务help,在进入安卓手机的控制端,查看可以使用的...【详细内容】
2021-10-08  Kali与编程    Tags:木马渗透   点击:(63)  评论:(0)  加入收藏
一、准备环境Burpsuite、夜神模拟器二、步骤运行burpsuite,打开代理后,访问 http://burp/ 下载CA证书点击右上角位置下载CA证书将下载的CA证书导入到浏览器中,打开浏览器选择设...【详细内容】
2021-10-08  往右走    Tags:APP渗透测试   点击:(66)  评论:(0)  加入收藏
Apple 设备系统最近面临了许多安全性方面的考验,好在在研究组织 Citizen Lab 地帮忙揭露下,最近一个名为「ForcedEntry」的攻击漏洞,已经被官方确认并提出了建议,建议所有用户安...【详细内容】
2021-09-15  科技洞见未来    Tags:苹果漏洞   点击:(70)  评论:(0)  加入收藏
一、知识点详解webcam_list 查看摄像头的序号Webcam_snap -i 摄像头序号,根据摄像头序号,使用该摄像头拍照二、操作详解在我们的kali虚拟机已经成功连接到安卓手机终端后,调用...【详细内容】
2021-08-26  Kali与编程    Tags:黑客   点击:(71)  评论:(0)  加入收藏
前言众所周知,在互联网信息化时代,各种APP、游戏都需要进行“实名制”,所以人们的“个人信息”也变得十分的重要。而互联网又是一把双刃剑,虽然给人们带来了很多的便利、但同时...【详细内容】
2021-07-29  IT影子    Tags:监听   点击:(209)  评论:(0)  加入收藏
你的手机可能被入侵的方式有几种种。让我们分解每一个,看看一些可能的预防措施。1:手机丢失或被盗如果你丢失了手机,它可能会落入坏人之手。如果他们还有关于你的其他信息,他们...【详细内容】
2021-06-01  视频二爷  今日头条  Tags:网络攻击   点击:(131)  评论:(0)  加入收藏
来源:金融界网骚扰电话接不完?信箱里的垃圾短信堆成山?莫名其妙被扣费?网络诈骗玩起“剧本杀”?近日,360联合中国信息通信研究院发布了《2020年中国手机安全状况报告》(以下简称《...【详细内容】
2021-02-02      Tags:手机安全   点击:(146)  评论:(0)  加入收藏
道高一尺,魔高一丈!科技的发展,在推动社会进步的同时,也让无良之徒有机可乘。随着手机扫码的普及,不法分子也纷纷打起了二维码的主意,让你扫进他的陷阱,落入他的圈套。曾经听说某...【详细内容】
2020-12-02      Tags:二维码   点击:(216)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条