民工心事 发表于 2024-12-24 14:25:30

cookie反爬----普通服务器,阿里系

目录

一.常见COOKIE反爬
普通:
1. 简介
2. 加密原理
二.实战案例
1. 服务器相应cookie信息
1. 逆向目的
2. 逆向分析
2. 阿里系cookie逆向
1. 逆向目的
2. 逆向分析
实战:
无穷debugger原理
1. Function("debugger").call()
2. XXX.constructor("debugger").call("action")
3. (function(){return !![];})["constructor"]("debugger")["call"]("action")
总结
如何过
通杀代码:

一.常见COOKIE反爬

普通:

1. 简介



[*] Cookie 反爬虫指的是服务器端通过校验哀求头中的 Cookie 值来区分正常用户和爬虫程序的本领,这种
本领被广泛应用在 Web 应用中。
[*]
https://img-blog.csdnimg.cn/img_convert/d41bf9b08ce5efe0c5ffd3377ec86724.png
2. 加密原理



[*] cookie加密分为大致两种方式

[*] 欣赏器向服务器发送哀求,服务器在相应头带上相应cookie,下次哀求的时候需要再带上cookie去举行哀求
[*] 欣赏器向服务器发送哀求,服务器返回的是一段js代码,欣赏器需要解析js代码,在通过js代码在生成cookie信息
 

二.实战案例

1. 服务器相应cookie信息



[*] 学习相应cookie和session的处置惩罚
[*] 学习基于首页返回的cookie值
1. 逆向目的



[*] 地点:互动交流 - 麻章区政府网站
[*] 接口:http://www.zjmazhang.gov.cn/hdjlpt/letter/pubList
[*] 对抗: cookie 反爬虫处置惩罚
2. 逆向分析



[*] 可以先测试当前网站的接口,可以发现,当前的接口需要一个cookie值,一个token值

https://img-blog.csdnimg.cn/img_convert/a4ce2418325823e1274650117e4d1409.png

https://img-blog.csdnimg.cn/img_convert/80e63c57b6451edee83f6037c0a82271.png
确定为cookie反爬,第一步先清除cookie
[*]
https://img-blog.csdnimg.cn/img_convert/7bbb0517286a3258d3b461b79e92601d.png
[*] 重新哀求

https://img-blog.csdnimg.cn/img_convert/186ef931252b2945df4afa83c33e3ef5.png
[*] 发现published中的
https://img-blog.csdnimg.cn/img_convert/e8216d42e4d2e06047a9e7c431a5808d.png
[*] _csrf为
https://img-blog.csdnimg.cn/img_convert/f9ed3d66fc31a078c2cb0579ec824b62.png
publist中的X_Csrf-Token
先哀求published这个接口
https://img-blog.csdnimg.cn/img_convert/aea5149f6d123ec0420a06d8c5dbea34.png
[*] 发现publist中的cookie也是这个里面带出来的
[*] 那我们起首哀求published,再哀求publist即可

https://img-blog.csdnimg.cn/img_convert/83bca5faafeceb098f19343db0000a73.png
[*] import requests
import re

def get_cookie():
    url = 'http://www.zjmazhang.gov.cn/hdjlpt/published?via=pc'
    headers = {
      'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'
    }
    res = requests.get(url, headers=headers)
    csrf = re.findall("var _CSRF = '(.*?)';", res.text)
    # print(res.cookies)
    cookie = res.cookies.get('szxx_session')
    return csrf, cookie


csrf, cookie = get_cookie()
url = 'http://www.zjmazhang.gov.cn/hdjlpt/letter/pubList'
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36',
    'X-Csrf-Token': csrf
}

cookies = {'szxx_session': cookie}
data = {
    "offset": "0",
    "limit": "20",
    "site_id": "759010",
    "time_from": "1669564800",
    "time_to": "1701014399"
}
res = requests.post(url, headers=headers, cookies=cookies, data=data)

print(res.text) 2. 阿里系cookie逆向
[*] 阿里系cookie

    请求两次    第一次会得到一个响应的cookie   会返回一个js代码   通过js代码会生成一个新的cookie
    第二次请求需要拿到两次生成的cookie才能访问
    自动的断点

[*] 学习JS设置的cookie处置惩罚
[*] 学习轻度JS混淆处置惩罚
1. 逆向目的

   

[*] 首页:aHR0cHM6Ly90YW5nLmNkdC1lYy5jb20vbm90aWNlL21vcmVDb250cm9sbGVyL3RvTW9yZT9nbG9ibGVUeXBlPTA=
[*] 目的:cookie: acw_sc__v2
2. 逆向分析

   

[*] 逆向cookie时需要先清空cookie,让网页重新生成
[*] 阿里系的cookie在重新刷新之后,会进入到debugger模式
[*] 过无穷debugger
Function.prototype.__constructor_back = Function.prototype.constructor;
Function.prototype.constructor = function() {
 if(arguments && typeof arguments==='string'){
     if("debugger" === arguments){
         return
     }
 }
  return Function.prototype.__constructor_back.apply(this,arguments);
}   

[*] 可以直接通过调试断点的方式,找到加密的位置
实战:


[*] 发现他是getlist这个哀求,加密参数是要带上cookie的acw_sc_v2
[*]
https://img-blog.csdnimg.cn/img_convert/7b99fdf7b5ce41891932c73ade70d083.png
[*]
https://img-blog.csdnimg.cn/img_convert/f62909d67617f4aec1b3f48e6dbfce44.png
我们先把这个cookie去掉,重发哀求
[*]
https://img-blog.csdnimg.cn/img_convert/8fd350c4ae2daaf1dfb618a79d787718.png
[*]
https://img-blog.csdnimg.cn/img_convert/6693c038f8541f32c696e7d014a202a7.png
[*] 如我们所料,发了两个包,第一个是js代码,第二个是正常的包
[*]
https://img-blog.csdnimg.cn/img_convert/e7b02238ce0ab75621abfef833c4b357.png
[*]
https://img-blog.csdnimg.cn/img_convert/b0158457f63f9793f6f6385bd8b23c60.png
下面我们下script断点:

https://img-blog.csdnimg.cn/img_convert/c257bd4bd63515572c499ad80213dfa9.png
断到这个地方了,继承实行接下来断到
[*]
https://img-blog.csdnimg.cn/img_convert/19328fad2be6ebd34b974cb976e9eae9.png
继承实行会到无穷debugger里面去
[*]
https://img-blog.csdnimg.cn/img_convert/e148665ee697dd74247c74924652a85f.png
[*] 进去,看是如何调用的
https://img-blog.csdnimg.cn/img_convert/8d5b339dafe6f3b915643bfe88b56c1e.png
[*] 发现debugger是这样的
[*] 无穷debugger原理
[*] 下面是基本原理:
[*] 这些代码示例使用了JavaScript中的Function构造函数和对象的constructor属性来动态实行字符串形式的代码。这些方法通常用于实行恣意代码,但也可以用于注入和实行恶意代码。下面我将表明每个示例的原理,并提供一些例子。
1. Function("debugger").call()

这个示例使用Function构造函数来创建一个新的函数,该函数包罗一个debugger语句。然后使用call方法实行这个新函数。
// 创建并执行一个包含debugger的函数
Function("debugger").call(); 这行代码会立即实行debugger,导致欣赏器在调试模式下暂停实行。
2. XXX.constructor("debugger").call("action")

这个示例起首获取某个对象XXX的constructor属性,这是一个指向创建该对象的构造函数的引用。然后,它使用这个构造函数来创建一个新的函数,该函数包罗一个debugger语句,并尝试用call方法实行这个新函数。
// 假设有一个对象obj
const obj = {};

// 使用obj的constructor(即Object)来创建并执行一个包含debugger的函数
obj.constructor("debugger").call(); 这行代码同样会实行debugger,导致欣赏器在调试模式下暂停实行。
3. (function(){return !![];})["constructor"]("debugger")["call"]("action")

这个示例轻微复杂一些。它起首创建一个立即实行函数表达式(IIFE),该函数返回一个布尔值。然后,它获取这个函数的constructor属性,这是一个指向Function构造函数的引用。接着,它使用这个构造函数来创建一个新的函数,该函数包罗一个debugger语句。最后,它使用call方法实行这个新函数。
// 创建一个IIFE,返回一个布尔值
const boolFunc = (function() {
    return !![];
})();

// 使用boolFunc的constructor(即Function)来创建并执行一个包含debugger的函数
boolFunc.constructor("debugger").call(); 这行代码也会实行debugger,导致欣赏器在调试模式下暂停实行。
总结

这些示例展示了如何使用Function构造函数和对象的constructor属性来动态实行代码。这些技能可以用于测试、调试或执举措态代码,但也大概被用于恶意目的,如代码注入和实行恶意代码。因此,在使用这些技能时需要谨慎,并确保代码的安全性。
   这段代码是一个混淆过的JavaScript代码片断,它使用了多种技巧来隐蔽其真实意图。让我们逐步分析这段代码:

[*] (function() {}:这是一个空的立即实行函数表达式(IIFE)。
[*] ['\x63\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72']:这是一个数组,其中包罗一个字符串,该字符串是"constructor"的十六进制编码。
[*] (undefined + ''):这是一个技巧,用于获取字符串"undefined"的第三个字符,即d。
[*] (!![] + ''):这是一个技巧,用于获取字符串"true"的第四个字符,即e。
[*] ([]() + ''):这部分代码看起来是调用了一个名为_0x55f3的函数(大概是一个混淆后的函数名),并传递了两个参数。这个函数大概返回一个方法名,然后调用该方法,并将其结果与空字符串拼接,最后取第二个字符。由于_0x55f3函数的具体实现未知,我们无法确定这部分代码的确切活动。
[*] (![] + + String):这是一个技巧,用于获取字符串"false"的第十五個字符,即s。
[*] (!![] + ''):这是一个技巧,用于获取字符串"true"的第四个字符,即e。
[*] (!![] + ''):这是一个技巧,用于获取字符串"true"的第二个字符,即r。
将这些部分组合起来,这段代码实际上是在构造一个字符串,该字符勾通过毗连上述字符来形成"constructor"。然后,它使用这个字符串作为键来访问当前上下文中的一个对象的constructor属性。
如何过

我们可以这么过:
Function.prototype.__constructor_back = Function.prototype.constructor;
Function.prototype.constructor = function() {
 if(arguments && typeof arguments==='string'){
     if("debugger" === arguments){
         return
     }
 }
  return Function.prototype.__constructor_back.apply(this,arguments);
} 过了这个进入我们之前打的断点

https://img-blog.csdnimg.cn/img_convert/3cc5695785cb9a1e713229ce37a01455.png
看上一层堆栈,发现是由settimeout实行函数,加密位置在arg2,arg2加密也在上面

https://img-blog.csdnimg.cn/img_convert/9286586c7bfaa96d37512f69a9759ba6.png
开始扣代码
      var _0x23a392 = arg1();
      arg2 = _0x23a392(_0x5e8b26); 扣的过程中随时更换

https://img-blog.csdnimg.cn/img_convert/03f3db6a3633ce6c188807e6180973b5.png
arg1是变化的
扣完的成品:

https://img-blog.csdnimg.cn/img_convert/5cd7fd8601ea433163a442bc956cd9c0.png
通杀代码:

​​​​​https://articles.zsxq.com/id_bblrs5mvwdit.html,见知识星球
包装成一个方法后,在python先把加密参数删除掉,哀求第一次,用re提取arg1形成加密参数,哀求第二次

https://img-blog.csdnimg.cn/img_convert/aae335d84bc01ad9bf38bf2f830ded8b.png
完结。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: cookie反爬----普通服务器,阿里系