JS逆向实战22——某政府采购网简单cookie反爬
声明
本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!
目标网站
网站:aHR0cDovL3d3dy55bmdwLmNvbS8=
目标
类似于这种 进入前检查浏览器... 如何跳转
页面分析
我们发现这种网站有点类似于5s盾。但是和5s盾不一样的是,这个网站是依靠cookie进行的一个判断。
我们去看看cookie到底有什么猫腻
经过反复用代码测试。
得知这个PYCCS
是请求的关键。那其实很简单了。如何得到这个值就是我们的目标了
JS分析
我们请求页面。
页面返回了一段JS。和一个cookie
然后通过转换一些列操作。
得到第一个传参 P的值
var _$ = ['\x23\x63\x68\x61\x6c\x6c\x65\x6e\x67\x65', '\x23\x77\x61\x66\x5f\x61\x6e\x73\x77\x65\x72', '\x23\x43\x68\x61\x6c\x6c\x65\x6e\x67\x65\x46\x6f\x72\x6d'];
$(_$[0])["\x73\x68\x6f\x77"]();
$(function () {
setTimeout(function () {
var x06dd1a = {};
var x0fcad9;
var x08c924 = 0x26;
var x01c264 = navigator["\x75\x73\x65\x72\x41\x67\x65\x6e\x74"]["\x74\x6f\x4c\x6f\x77\x65\x72\x43\x61\x73\x65"]();
x08c924 = x08c924 * 0x63;
(x0fcad9 = x01c264["\x6d\x61\x74\x63\x68"](/msie ([\d.]+)/)) ? x06dd1a["\x69\x65"] = x0fcad9[0x1]
: (x0fcad9 = x01c264["\x6d\x61\x74\x63\x68"](/firefox\/([\d.]+)/)) ? x06dd1a["\x66\x69\x72\x65\x66\x6f\x78"] = x0fcad9[0x1]
: (x0fcad9 = x01c264["\x6d\x61\x74\x63\x68"](/chrome\/([\d.]+)/)) ? x06dd1a["\x63\x68\x72\x6f\x6d\x65"] = x0fcad9[0x1]
: (x0fcad9 = x01c264["\x6d\x61\x74\x63\x68"](/opera.([\d.]+)/)) ? x06dd1a["\x6f\x70\x65\x72\x61"] = x0fcad9[0x1]
: (x0fcad9 = x01c264["\x6d\x61\x74\x63\x68"](/version\/([\d.]+).*safari/)) ? x06dd1a["\x73\x61\x66\x61\x72\x69"] = x0fcad9[0x1]
: 0x0;
x08c924 = x08c924 + 0x2e;
if (x06dd1a["\x69\x65"]
|| x06dd1a["\x66\x69\x72\x65\x66\x6f\x78"]
|| x06dd1a["\x63\x68\x72\x6f\x6d\x65"]
|| x06dd1a["\x6f\x70\x65\x72\x61"]
|| x06dd1a["\x73\x61\x66\x61\x72\x69"]) {
x08c924 = (x08c924 * 0x3 + 0x7);
if (x08c924 < 0x7b) x08c924 = x08c924 + 0x929;
var x0b515d = $(_$[1]);
if (x08c924 > 0x929) x08c924 = Math["\x66\x6c\x6f\x6f\x72"](x08c924 / 0x7b);
x0b515d["\x76\x61\x6c"](x08c924);
$(_$[2])["\x73\x75\x62\x6d\x69\x74"]()
}
}, 0x3e8)
});
然后通过AST去解码
var _$ = ["#challenge", "#waf_answer", "#ChallengeForm"];
$(_$[0])["show"]();
$(function () {
setTimeout(function () {
var x06dd1a = {};
var x0fcad9;
var x08c924 = 38;
var x01c264 = navigator["userAgent"]["toLowerCase"]();
x08c924 = x08c924 * 99;
(x0fcad9 = x01c264["match"](/msie ([\d.]+)/)) ? x06dd1a["ie"] = x0fcad9[1]
: (x0fcad9 = x01c264["match"](/firefox\/([\d.]+)/)) ? x06dd1a["firefox"] = x0fcad9[1]
: (x0fcad9 = x01c264["match"](/chrome\/([\d.]+)/)) ? x06dd1a["chrome"] = x0fcad9[1]
: (x0fcad9 = x01c264["match"](/opera.([\d.]+)/)) ? x06dd1a["opera"] = x0fcad9[1]
: (x0fcad9 = x01c264["match"](/version\/([\d.]+).*safari/)) ? x06dd1a["safari"] = x0fcad9[1]
: 0;
x08c924 = x08c924 + 46;
if (x06dd1a["ie"]
|| x06dd1a["firefox"]
|| x06dd1a["chrome"]
|| x06dd1a["opera"]
|| x06dd1a["safari"]) {
x08c924 = x08c924 * 3 + 7;
if (x08c924 < 123) x08c924 = x08c924 + 2345;
var x0b515d = $(_$[1]);
if (x08c924 > 2345) x08c924 = Math["floor"](x08c924 / 123);
x0b515d["val"](x08c924);
$(_$[2])["submit"]();
}
}, 1000);
});
然后我删掉有关JQuery的操作 形成如下代码
navigator = {
"userAgent":'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36',
}
var _$ = ["#challenge", "#waf_answer", "#ChallengeForm"];
var x06dd1a = {};
var x0fcad9;
var x08c924 = 38;
var x01c264 = navigator["userAgent"]["toLowerCase"]();
x08c924 = x08c924 * 99;
(x0fcad9 = x01c264["match"](/msie ([\d.]+)/)) ? x06dd1a["ie"] = x0fcad9[1]
: (x0fcad9 = x01c264["match"](/firefox\/([\d.]+)/)) ? x06dd1a["firefox"] = x0fcad9[1]
: (x0fcad9 = x01c264["match"](/chrome\/([\d.]+)/)) ? x06dd1a["chrome"] = x0fcad9[1]
: (x0fcad9 = x01c264["match"](/opera.([\d.]+)/)) ? x06dd1a["opera"] = x0fcad9[1]
: (x0fcad9 = x01c264["match"](/version\/([\d.]+).*safari/)) ? x06dd1a["safari"] = x0fcad9[1]
: 0;
x08c924 = x08c924 + 46;
if (x06dd1a["ie"]
|| x06dd1a["firefox"]
|| x06dd1a["chrome"]
|| x06dd1a["opera"]
|| x06dd1a["safari"]) {
x08c924 = x08c924 * 3 + 7;
if (x08c924 < 123) x08c924 = x08c924 + 2345;
if (x08c924 > 2345) x08c924 = Math["floor"](x08c924 / 123);
}
console.log(x08c924 )
打印下这个x08c924
这个值 发现是92。
到这里 貌似进行不下去了。进行不下去的时候。我们重新回去看页面。
我们搜索set-cookie 看看哪里是设置cookie的地方
然后发现 诶嘿 还真有个请求里有设置 PYCCS
的值。我们点进请求再看看。
我们发现这是个post的302请求。并且有个data传参是45。
同样是数字,我们上文也拿到了一个值92。那这两个数字之间有没有什么关系呢?
我们反复请求这个页面。重复上面的操作几次。
对比所得到的的x08c924
本人所用的方法是通过正则提取几个不一样的值。然后再放入JS中。从而拿到cookie
但是我觉得这种方法太笨了。可能不是最优解。如果有大佬知道有什么更好的方法。希望告诉我下。
到这里 已经很清楚了。
其实这个网站还是挺简单的。但是从0到1的过程还是挺繁琐的。
结果