链接: https://www.python-spider.com/challenge/3
题目:
一、抓包分析
看起来是可以拿到数据的
过了一会重放攻击,发现数据失效
网页再去下一页,会说风控不存在
通过上面,初步得出是某些参数过期检测,一般作为凭证,去查看cookie,可以发现其中m参数,还有Hm_lpvt 是有变化的
重新执行网页,依次删除2个参数,再点击其它页,可以确认下来是m参数
二、定位m参数逻辑代码
开启script监听,
删除m参数,然后F5刷新,直到找到生成cookie的js,搜索cookie,docuemnt关键词
调试后可以找到此处的m生成,确认是这个js文件了
或者通过hook
// ==UserScript==
// @name cookie set
// @namespace http://tampermonkey.net/
// @version 0.1
// @description eval-everything
// @author An-lan
// @include *
// @grant none
// @run-at document-start
// ==/UserScript==
Object.defineProperty(document,'cookie',{
set:function(val){
debugger;
return val}
})
成功看到堆栈后,逻辑代码在此处
三、本地调试
复制生成方式代码,定义cookies,而后就是扣代码了
1、过检测
当扣完了一运行,程序直接卡死,且内存上升
这种时候只有2中可能:
1、浏览器指纹检测
2、格式化检测
复制整个代码到console浏览器页运行,可以看到卡死,且报错,提示length
可以将复制后的代码,从开始前加上debugger一步一步缩小卡死位置,放置debugger确认位置
在js中,都是经过压缩代码的,而调试过过程中,都是对代码格式化了,存在了检测长度
搜索toString、RegExp,
可以看到有3处,第一处指向了removeCookie
扣下来的代码长的是这样的
模拟,测试下长度,压缩过后的是与格式化的长度是有差别的
通过上述去完格式化检测。
再次运行,缺少M,补完M
再运行 缺少B
再次运行又卡死
注释掉B函数,再运行,是补了B函数后卡死的,所以在此处打上断点
取消注释B函数后,复制代码到网站上的console执行,会进入到一个虚拟机debugger位置
接着单步调试,在这个位置卡死
将debugger放置这边,去掉之前那个debugger,再调试
复制到网页再调试,追进去看
一直单步调试后,到这一步卡死(卡死了,可以重走前面步骤看堆栈)
可以重走前面步骤,看堆栈到这一步的时候,可以看到a6是一个正则
并且调用test方法
正则返回的都是 True 或者 False,这个时候替换成 return True,且上面加上debugger(去掉之前的debugger,不然是重那边开始调试的)
再次运行,K没有定义
补完K代码,H没有定义
补完H,L没有定义
补完L再运行 ,缺少navigator
2、navigator 浏览器指纹
可以选择将这个位置代码换成空 “”,出现V没有定义
补完V,运行提示Y没有定义
点击报错位置,复制(V, Y)
Y是一个时间戳
实际上这个Y是 W传进来的,那么堆栈上一级是 $c
实际上这个内容就是 函数X
补完Y再运行,提示 U 没有定义
补完U,R没有定义
R补完,T没有定义
补完T,Q没定义
补完Q,S没有定义
然后就是O 没有定义
补完O 然后就是N没有定义
补完N,P没有定义
然后是F没有定义
后面面省略。。。。。补完I最后运行不报错
打印cookies,出现新问题
3、hook console.log
将代码复制到浏览器,同样卡死,那么这时候console.log 不是原来那个console.log了
代码顶部,重写
再执行代码
4、封装测试SDK代码
在这里插入代码片