推荐
关注
TOP
Message

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的过程还是挺繁琐的。

结果

posted @ 2023-08-30 14:48  始識  阅读(431)  评论(2编辑  收藏  举报