安全测试中的js逆向实战
一、简介对于常见的web或者h5的场景中,一些重要的系统都会对于参数或者敏感数据进行校验,防止被恶意篡改而利用。因此在安全测试过程中,对于一些越权、注入等测试,需要对参数值进行修改重放,那么这个过程是否能够成功第一步取决于是否可以搞定校验算法并成功绕过。因此本文主要先容安全测试中常用的一些js逆向的技术手段。
当然对于web场景中安全测试会遇到的一些校验场景,一般包括如下两类:
1)哀求参数签名验证
2)哀求、相应内容加密
二、常见欣赏器调试方法
js中校验算法的查找定位以及逆向分析,需要对欣赏器中的部分功能模块纯熟掌握,接下来对此中的面板功能、断点调试方法以及断点天机方法进行先容。
2.1 欣赏器面板功能
chrome欣赏器中的面板包括元素、控制台、源代码、网络、性能、内存以及应用等多个。重点先容常晤面板功能。
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202502260902383.png
元素(Elements):可以查看DOM结构、编辑CSS样式,用于测试页面布局和计划页面;
控制台(Console):实行JavaScript脚本,也可以通过Console和页面中的Javascript对象交互;
源代码(Sources):查看Web应用加载的所有文件;编辑CSS和JavaScript文件内容,包括如下:(page: 所有资源文件;filesystem: 关联本地文件;overrides:可以做文件更换,比如更换JS;代码段:可以编写脚本,影响页面,代码记录);
网络(Network):展示页面中所有的哀求内容列表,能查看每项的哀求头、哀求行、哀求体、时间线以及网络哀求的瀑布图等信息;
性能(Performance):分析网页的性能表现,包括加载时间,CPU利用率、内存占用等。可以录制网页的运行过程,进行具体的性能分析;
内存(Memory):用于记录和分析页面占用内存的情况;
应用(Application):查看Web应用的数据存储情况;IndexedDB;WebSQL;本地和会话存储;Cookie;应用程序缓存图像字体和样式表等。
2.2 断点添加方式
js逆向分析中有一个非常重要的功能需要掌握,就是下断点,接下来对常用断点方式进行先容。
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202502260902384.png
1)点击关键代码进行进行断点:通过点击代码便可以下断点
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202502260902385.png
2)XHR断点:实行比力靠后,距离加密函数相对较近,可以根据栈快速定位
点击+号后直接输入需要定位的接口地址即可
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202502260902386.png
3)DOM变乱断点:实行的比力靠前,距离加密函数比力远
在Chrome开发者工具的Elements标签页中,找到你想要设置断点的DOM元素,右键点击该元素,选择"Breakon"选项,然后根据需要选择以下三种断点之一:
Subtree Modifications:当该节点的子树发生变化时触发断点。
Attributes Modifications:当该节点的属性发生变化时触发断点。
Node Removal:当该节点被移除时触发断点
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202502260902387.png
2.3 断点调试方法
通过设置断点,运行程序后就会断在设置好的断点处,这时就需要跟进代码实行,分析代码和数据的变化,梳理判断出校验的算法和逻辑,好进行利用。
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202502260902388.png
图中红框依次功能如下:
跳过子函数(次态函数)实行(只在主函数内一步一步实行,不进入子函数内部)
进入子函数(次态函数)实行(在主函数内部一步一步实行,如果遇到子函数,会跳转到子函数内部一步一步实行)
跳出当前函数,回到调用位置
单步实行,会进入到函数内部 更加的细致
屏蔽断点
【----资助网安学习,以下所有学习资料免费领!加vx:yj520400,备注 “博客园” 获取!】
① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC毛病分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权势巨子CISSP 认证考试指南+题库
⑥ 超1800页CTF实战本事手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)
三、js逆向分析实战
了解了一些底子的调试操纵内容,接下来针对js的逆向分析进行实操,本次主要以哀求参数的签名验证和相应内容的加密两方面进行分析和绕过实战,这也是平常安全测试过程中最常见的两种场景。
3.1 哀求参数签名验证实战
通过抓包可以看到该哀求体中存在sign参数,值为一段数字字母
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202502260902389.png
修改page内容,重新进行提交哀求,返回错误,那么这时候想要测试注入等手法都是无法成功的,由于当重放是sign值是未变的,所以后端验证也是不通过的。接下来起首就需要找出sign的算法逻辑,尝试绕事后才可以进行测试。
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202502260902390.png
3.1.1 算法分析
通过数据包分析判断为sign参数为参数校验,因此在调试解密直接搜索关键词sign=,成功在代码中查询到,
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202502260902391.png
可以看到sign=Xt(a)这个方法,在此处点击下断点
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202502260902392.png
通过断点可以看到Xt()方法中传入了n,n为一系列用户端数据和key值天生,
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202502260902393.png
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202502260902394.png
继续进入下一个函数调用,可以看到为Vt(),并传入了上边的t作为参数
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202502260902395.png
查看Vt()方法实际名称为Et
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202502260902396.jpeg
进入Et函数,发现分别实行Rt->At->Tt三个方法,将终极实行完的效果返回。
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202502260902397.jpeg
三个方法具体内容也是在一起,依次进行实行,实行完Rt进入At实行
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202502260902398.jpeg
可以看到At中又包括Lt->Nt->Dt三个函数
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202502260902399.jpeg
依次进行下一个函数进行实行
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202502260902400.jpeg
进入Lt函数实行,可以发现大量循环操纵等实行,如果没有太多意义可以跳出当前函数,进行下一个函数的实行
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202502260902401.jpeg
通用的实行方法进行Nt和Dt两个函数的实行和分析
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202502260902402.jpeg
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202502260902403.jpeg
当At函数实行完,可以看到返回了一串值
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202502260902405.jpeg
再进入Tt中实行
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202502260902406.jpeg
可以看出其实是一个字符串的对比操纵
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202502260902407.jpeg
继续实行完Et后可以看出返回了遗传字符,应该就是我们的sign的值
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202502260902408.jpeg
继续跟进,可以看到对于这段值有做了一次大写的操纵
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202502260902409.jpeg
完成后进行了返回
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202502260902410.jpeg
那这个时候也就分析完成了,我们可以确认Xt函数将入参实行完成后就会返回为sign用来做校验
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202502260902411.jpeg
在控制台获取传入的n值,并打印Xt(n)方法,额可以看到成功打印出我们需要的sign值
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202502260902412.jpeg
3.1.2 算法逆向绕过实战
通过上述的分析,可以看出该程序中的sign的获取是通过Xt()函数传入n值进行天生的,n为一个固定格式的用户的参数,那么便可以通过修改n的值天生sign来绕过校验了,接下来我们通过三种方法进行实操。
3.1.2.1 欣赏器校验调用
抓包获取到具体数据包
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202502260902413.png
修改参数重放失败
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202502260902414.png
在获取到的n中将对应的参数page的值进行修改,打印Xt(n)天生一个新的sign
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202502260902415.png
修改burp中的sign进行重放,成功得到数据,那么接下来便可以进行各类payload的参数测试了。
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202502260902416.png
3.1.2.2 在线算法天生
通过该sign的值内容和长度可以开端判断出为md5加密所得,及Xt()方法为一个md5算法,因此利用在线md5平台,传入n的值,修改page参数重新天生大写的sign值
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202502260902417.png
修改burp中的sign,成功重放
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202502260902418.png
3.1.2.3 js代码补环境复用
通过算法分析可以看出主要调用Et()方法后进行一系列的函数调用,最后返回了需要的sign值,那么这时我们将该js中调用实行过的方法进行复制,在本地新建一个js,粘贴此中,终极打印Et()方法,Et中传入需要的值,也就是n,然后进行运行,如果存在报错缺少方法,缺哪个便去js中复制谁人。
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202502260902419.png
完成后实行该js文件,发现成功天生需要的值。
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202502260902420.png
具体代码如下:
var St = 0; function Et(s) { return Tt(At(Rt(s))) } function At(s) { return Dt(Nt(Lt(s), 8 * s.length)) } function Tt(input) { for (var t, e = St ? "0123456789ABCDEF" :"0123456789abcdef", output = "", i = 0; i < input.length; i++) t = input.charCodeAt(i), output += e.charAt(t >>> 4 & 15) + e.charAt(15 & t); return output } function Rt(input) { for (var t, e, output = "", i = -1; ++i < input.length; ) t = input.charCodeAt(i), e = i + 1 < input.length ? input.charCodeAt(i + 1) : 0, 55296 > 6 & 63, 128 | 63 & t) : t >> 18 & 7, 128 | t >>> 12 & 63, 128| t >>> 6 & 63, 128 | 63 & t)); return output } function Lt(input) { for (var output = Array(input.length >> 2), i = 0; i <output.length; i++) output = 0; for (i = 0; i < 8 * input.length; i += 8) output |= (255 & input.charCodeAt(i / 8)) > 5] >>> i %32 & 255); return output } function Nt(t, e) { t |= 128 >> 9 >32 - r, b); var n, r } function qt(a, b, t, e, n, s, r) { return Mt(b & t | ~b & e, a, b, n, s, r) } function Ft(a, b, t, e, n, s, r) { return Mt(b & e | t & ~e, a, b, n, s, r) } function Ut(a, b, t, e, n, s, r) { return Mt(b ^ t ^ e, a, b, n, s, r) } function Bt(a, b, t, e, n, s, r) { return Mt(t ^ (b | ~e), a, b, n, s, r) } function zt(t, e) { var n = (65535 & t) + (65535 & e); return (t >> 16) + (e >> 16) + (n >> 16) ></strong></p>
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]