一、简介
对于常见的web或者h5的场景中,一些重要系统会对接口请求和相应内容进行加密处理,防止直接通过接口查看或者篡改数据信息,本文主要介绍常见安全测试中针对常见js逆向基础以及请求响应内容加密逆向提示技巧。
二、常见浏览器调试方法
js中校验算法的查找定位以及逆向分析,需要对浏览器中的部分功能模块熟练掌握,接下来对其中的面板功能、断点调试方法以及断点天机方法进行介绍。
2.1 浏览器面板功能
chrome浏览器中的面板包括元素、控制台、源代码、网络、性能、内存以及应用等多个。重点介绍常见面板功能。
元素(Elements):可以查看DOM结构、编辑CSS样式,用于测试页面布局和设计页面;
控制台(Console):执行JavaScript脚本,也可以通过Console和页面中的Javascript对象交互;
源代码(Sources):查看Web应用加载的所有文件;编辑CSS和JavaScript文件内容,包括如下:(page : 所有资源文件;filesystem: 关联本地文件;overrides: 可以做文件替换,比如替换JS;代码段:可以编写脚本,影响页面,代码记录);
网络(Network):展示页面中所有的请求内容列表,能查看每项的请求头、请求行、请求体、时间线以及网络请求的瀑布图等信息;
性能(Performance):分析网页的性能表现,包括加载时间,CPU使用率、内存占用等。可以录制网页的运行过程,进行详细的性能分析;
内存(Memory):用于记录和分析页面占用内存的情况;
应用(Application):查看Web应用的数据存储情况;IndexedDB;Web SQL;本地和会话存储;Cookie;应用程序缓存图像字体和样式表等。
2.2 断点添加方式
js逆向分析中有一个非常重要的功能需要掌握,就是下断点,接下来对常用断点方式进行介绍。
1)点击关键代码进行进行断点:通过点击代码便可以下断点
2)XHR断点:执行比较靠后,距离加密函数相对较近,可以根据栈快速定位
点击+号后直接输入需要定位的接口地址即可
3)DOM事件断点:执行的比较靠前,距离加密函数比较远
在Chrome开发者工具的Elements标签页中,找到你想要设置断点的DOM元素,右键点击该元素,选择“Break on”选项,然后根据需要选择以下三种断点之一:
-
Subtree Modifications:当该节点的子树发生变化时触发断点。
-
Attributes Modifications:当该节点的属性发生变化时触发断点。
-
Node Removal:当该节点被移除时触发断点
2.3 断点调试方法
通过设置断点,运行程序后就会断在设置好的断点处,这时就需要跟进代码执行,分析代码和数据的变化,梳理判断出校验的算法和逻辑,好进行利用。
图中红框依次功能如下:
-
跳过子函数(次态函数)执行(只在主函数内一步一步执行,不进入子函数内部)
-
进入子函数(次态函数)执行(在主函数内部一步一步执行,如果遇到子函数,会跳转到子函数内部一步一步执行)
-
跳出当前函数,回到调用位置
-
单步执行,会进入到函数内部 更加的细致
-
屏蔽断点
三、js逆向分析实战
3.1 请求、响应内容加密
安全测试中,针对请求或者响应内容的加密,那么需要测试就必须先解密,看到原始内容才可以进行,本次以响应内容加密作为案例进行分析实操。
3.2.1 算法分析
通过截图可以看到,利用系统可以做翻译,
但是实际接口返回值是加密的,因此需要通过抓包接口测试,必须找到解密算法,获取响应内容
在源代码中进行XHR断点设置,添加uri为断点
输入数据,成功断下,可以看到断到了send函数,这个其实是向服务器发包的一个方法
跳过到下一个函数进行执行
可以看到data为key值等
继续跳过执行,可以看到成功获取到返回的加密值
再跳过执行可以看到执行该函数da.A.decodeData(),从名称也可以看出为一个解码的函数,分别传入了o和key以及iv,那么o为加密的值,key和iv分别为前面获取到的内容,执行完成后成功返回了解密后的明文数据
那么通过控制台面板,出入o为加密值,复制da.A.decodeData()进行执行,成功获得解密的数据。
3.2.2 算法逆向绕过
通过上述算法成功获取到具体的解密函数,这时利用burp抓包,修改参数为各类payload,进行重放
将获取到的加密数据,通过控制台面板传入o,并调用da.A.decodeData()成功获取原始数据,达到测试的效果。
当然,通过该解密方法的传值和分析,其实也可以看出是什么加密算法,也可以直接通过编写本地算法代码进行解密,具体不再详细赘述。
原文始发于微信公众号(白帽少年):安全测试中的js逆向基础实战
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论