文章插图
前言登场的目标虽不是SRC,但是整个漏洞的利用手法很有学习意义 。目前在很多大厂的http数据包中都会添加sign值对数据包是否被篡改进行校验,而sign算法的破解往往是我们漏洞测试的关键所在 。
本人在一些漏洞挖掘实战中经常发现在破解sign值后,在测试各类越权,重放等漏洞时一马平川,今天特此为大家带来这样一个精彩的实战案例 。
【学习资料】→私发背景学校每学期的体育成绩中会有10%来源于某跑步App的打卡数据,本人作为一个体测只能勉强及格的废物,自然得想办法拿到这10分,以防挂科
无奈这个app后台设置的是每学期男生总共要求跑120公里才能完整地拿到10分,非常恶心 。一学期跑120公里,你还不如鲨了我,于是便有了此文对于其app的crack
初步测试手机装好https证书,挂好Burpsuite的代理,随后我们直接去抓取该APP上传校园跑步数据时的请求
文章插图
请求如下
文章插图
我们发现单次跑步距离对应的POST参数为FormatSportRange,自然二话不说对其进行修改,将0.000修改为5.000
此时悲剧发生了,直接提示认证失败~
定神细看,发现POST数据末尾有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加密的,我们随后对其进行解密
文章插图
GG了,看样厂商的安全意识不算太差~没有使用时间戳或者随机数加密后的值作为sign,导致sign可以被无脑遍历猜解
随后我们尝试第二种方法,置空sign值
文章插图
发现依然鉴权认证失败,gg了 。
看样两种常规的对抗sign的方法已经废了,我们只能从app下手了,逆向尝试去寻找其sign的算法
逆向apk文件取得其sign值算法拿到程序apk直接查壳,运气不错,apk没加壳,省了不少功夫
文章插图
直接将apk文件拖到jadx中,对其进行逆向分析
文章插图
全局搜索sign,在仔细挨个查看后,成功定位到了其sign生成的关键算法
代码过长,关键部分代码如下
文章插图
文章插图
可以看到,其sign值的签名算法为
创建一个链表, 将全部已有的参数加入进去, 然后再加上一些键值对(其中timestamp时间戳我们已知,appID,appSecret两个键值对我们均未知)
推荐阅读
- 社区公共秩序维护技巧
- 浅析王者荣耀李白的实用技巧
- 铁路12306提醒!抢票时,请认准官方APP候补功能
- Apple TV 到底是个什么东西,国内买来能干嘛?
- 白帽黑客如何使用Baidu搜索引擎高级搜索技巧
- 钓鱼技巧|钓鱼技巧:长短浮漂的优缺点,巧用浮漂“长短”,让渔获轻松翻倍
- SQL去重的三种方法技巧 你知道吗
- 微软|Win11看图App是残疾!教你找回Win7照片查看器
- 7个办公常用的Word小技巧,简单实用,工作效率快速提升
- 两个修改 Word 显示样式的小众技巧