前言
在挖洞的时候,对于一些web站点,经常遇到一些防御措施,如签名、防重放、抓包工具检测等,最近刚好遇到一个防重放的站点,这里就记录一下,这个站点将数据包放到Reapeter进行重放时,会提示非法请求,此时我去尝试换掉burp采用yakit抓包,发现也是一样的效果。
Burp检测与绕过
为什么会想到换yakit? 因为现在一些网站会对burp进行检测,遇到很多案例了,burp抓不了包,换用yakit即可抓包,当然你也可以尝试一些修改burp特征、指纹的burp插件,如: burp-awesome-tls
https://github.com/sleeyax/burp-awesome-tls
该扩展可劫持 Burp 的 HTTP 和 TLS 堆栈,让您可以欺骗任何浏览器的 TLS 指纹 (JA3)。它增强了 Burp Suite 的功能,同时降低了各种 WAF(如 CloudFlare、PerimeterX、Akamai、DataDome 等)识别指纹的可能性。
手工
我们都知道我们在挂上burp代理时是可以访问到http://burpsuit和http://burpsuit/favicon.ico的,网站开发者可以基于此对我们是否使用了burp进行检测,具体细节可参考https://b1ue.cn/archives/495.html。
1.在burpsuite的proxy的opions中选上Disable web interface at http://burpsuite,即禁用掉http://burpsuite
2.删除jar包中的favicon.ico
zip -d burpsuite_pro.jar "resources/Media/favicon.ico"
防重放绕过
回到开始,此处换掉后也是一样的效果,于是考虑是否是做了防重放校验,通过对数据包观察,发现比较眼熟的有sign和timestamp两个参数,这两个参数在防重放或者防数据包篡改的场景中是经常出现的,即签名和时间戳,对于这两个参数比较常见的手段有:
sign
对请求体中的一些参数或参数值进行拼接或其他自定义处理后对最后的字符串进行计算签名,得到一个唯一值,一旦数据包被篡改那签名肯定就对不上,这样就可以防止数据包被篡改和重放,这是一种。如之前有一次遇到的,当时去逆向跟了一下,跟出来的逻辑还是有一点复杂,先是打乱顺序,再加入固定值、再加特殊字符、最后去掉后再对字符串调用函数进行签名,这个案例有机会给大家讲一下。
案例
本次提到的案例是另一种,随机参数+时间戳+sign签名,重放,提示非法请求,通过观察数据包,尝试寻找相关防重放的参数,首先观察到sign、timestamp这种常见的参数
这时候就尝试去看下这两个参数怎么来的,通过下XHR断点(断点技巧+动态调试之前直播时有讲到),便很快找到生成这俩参数的代码位置,通过观察代码,发现此时还有一个nonceStr参数是随机值,反过来看数据包也有这个参数,经过测试FUZZ后发现确实 是需要三个参数都正确才能绕过防重放
nonceStr = Math.random().toString(36).slice(-8)
这是找到的签名的代码段,比较简单
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getSignature", function() { return getSignature; });
/* harmony import */ var core_js_modules_es6_regexp_to_string__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es6.regexp.to-string */ "./node_modules/core-js/modules/es6.regexp.to-string.js");
/* harmony import */ var core_js_modules_es6_regexp_to_string__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_regexp_to_string__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var md5_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! md5.js */ "./node_modules/md5.js/index.js");
/* harmony import */ var md5_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(md5_js__WEBPACK_IMPORTED_MODULE_1__);
var HEX = '1234567890';
var getSignature = function getSignature(token) {
var timestamp = Date.now();
var nonceStr = Math.random().toString(36).slice(-8);
var signature = genSignature(token, nonceStr, timestamp);
return signature;
};
var genSignature = function genSignature(token, nonceStr, timestamp) {
var str = "token=".concat(token, "&nonceStr=").concat(nonceStr, "×tamp=").concat(timestamp); // 加密方式
var sign = new md5_js__WEBPACK_IMPORTED_MODULE_1___default.a().update("".concat(str).concat(HEX)).digest('hex');
return {
token: token,
nonceStr: nonceStr,
timestamp: timestamp,
sign: sign
};
};
对于这种,下个断点
将代码抠出来,这有两种思路,因为这个代码引用了其他js里面的代码,所以要么去抠取补全,要么选择下断点,内存中取,我这里选择第二种更为简单,断点下到上图箭头位置,将代码import部分删除,改写一下代码,这里代码缺token,原生代码是通过函数传参进来的,由于token短时间内是固定值,我们直接定义一个token参数
let token = '9345c87c-68xxxxx-b50b2e15fd86';
改写后就是下面这样,逻辑比较简单sign参数是由token+nonceStr(随机值)+timestamp拼接后计算的md5值
let HEX = '123abc90';
let token = '9345c87c-68xxxxx-b50b2e15fd86';
let timestamp = Date.now();
let nonceStr = Math.random().toString(36).slice(-8);
// let genSignature = function genSignature(token, nonceStr, timestamp) {
let str = "token=".concat(token, "&nonceStr=").concat(nonceStr, "×tamp=").concat(timestamp);
// 加密方式
let sign = new md5_js__WEBPACK_IMPORTED_MODULE_1___default.a().update("".concat(str).concat(HEX)).digest('hex');
//let signature = genSignature(token, nonceStr, timestamp);
console.log("Noncestr: " + nonceStr + "nTimestamp: " + timestamp + "nSign: "+sign);
我们在浏览器新建代码段(断点记得要下),将写好的代码放进去,运行,即可模拟生成绕重放需要的三个参数
再放到burp里进行重放,可以看到就绕过了,这是当前用户的id,已经可以实现重放
修改用户id,进行重放提示无权限,说明也已经绕过了重放检测
如果没下断点就会出现这种情况,提示这个没有定义,因为我们没有手工去引入,下了断点在控制台就不需要去手工引用。
02
📌Wiki一览
TODAY
03
📌关于知识库&知识星球
视频展示:40天,从零到百,知识库数量突破100+
SRC&众测漏洞:更新团队日常挖到的漏洞案例并配套直播或录屏讲解(不论简单或复杂的),接收投稿,给予现金奖励。
攻防案例:更新团队攻防案例并配套直播或录屏讲解,接收投稿,给予现金奖励。
知识干货:更新日常总结的一些经验、干货、工具
目前星球包含:
内部&公开直播录屏
SRC、众测、渗透测试、攻防实战案例
渗透测试、红队相关原创知识笔记
今年将会新增车联网相关内容
Wiki部分内容展示:
球友评价:
加入星球&知识库-两种方式二选一
1.免费加入:原创首发文章投稿
0x01 SRC实战报告类型≥2篇,非水文,需具备学习价值
0x02 其余类型≥1000字,非水文,需具备学习价值
以上两种投稿方式任选其一满足即可免费加入
投稿邮箱:cf_sec@163.com
审核通过后会以邮件回复
2.付费加入:现价239元,价格随内容和人数增长而适当提高
加入联系(备注来意):
交流群:
原文始发于微信公众号(长风安全):防重放与burp检测绕过
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论