前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >宝塔人机识别验证

宝塔人机识别验证

作者头像
李玺
发布2022-09-23 16:47:48
5870
发布2022-09-23 16:47:48
举报
文章被收录于专栏:爬虫逆向案例

案例地址:https://www.amec-inc.com 案例内容:某站点宝塔人机识别的cookie分析。(案例很简单,清空cookie后刷新页面可触发人机识别)

通过观察,可以发现在人机识别后多了一个cookie参数 e50222e9c8393a251cb491679ef73186。

从本地请求返回的代码中进行分析,先查看加载的Js代码。

代码语言:javascript
复制
 <script type="text/javascript" src="/renji_296d626f_32f3b5e96be67b639c72b3614aaac541.js?id=1660718301"></script>

把代码复制到本地后格式化,(不能直接从浏览器页面复制,代码不全),需要从response里面复制。

复制后的内容如下

格式化后,观察代码可以发现进入人机识别的逻辑

那么着重分析这段 c.get

c.get 是XMLHttpRequest的GET请求,那么再次清空cookie,查看数据包。

发现在加载完Js后,发起了一次请求,Params中有三个参数

请求成功后返回了检验cookie。

接下来看一下请求的params是如何生成的,目前来看,似乎是固定的。

代码语言:javascript
复制
"/a20be899_96a6_40b2_88ba_32f1f75f1552_yanzheng_ip.php?type=96c4e20a0e951f471d32dae103e83881&key=" + key + "&value=" + md5encode(stringtoHex(value)

把代码拿出来运行,发现有报错。

报错: ReferenceError: window is not defined 补上:window = {}

报错:TypeError: window.addEventListener is not a function 补上:window.addEventListener = function (){}

再次运行成功输出结果。

代码语言:javascript
复制
window = {}
window.addEventListener = function (){}

// 代码过长省略掉
// 此处为从renji.js文件的response中复制出的代码

var key = "32f3b5e96be67b639c72b3614aaac541";

var value = "b20f96e5878b0a47ff8626c8f757e35b";

function stringtoHex(acSTR) {
var val = "";
for (var i = 0; i <= acSTR.length - 1; i++) {
    var str = acSTR.charAt(i);
    var code = str.charCodeAt();
    val += code
}
;return val
};

function md5encode(word) {
return cx.MD5(word).toString()
};

var s="/a20be899_96a6_40b2_88ba_32f1f75f1552_yanzheng_ip.php?type=96c4e20a0e951f471d32dae103e83881&key=" + key + "&value=" + md5encode(stringtoHex(value))
console.log("https://www.amec-inc.com"+s)

流程分析清楚后,在本地复现代码即可。

需要注意的是目前key和value是固定值,所以不需要去js中提取,可直接请求接口获取cookie。

但是说不好什么时间就变了,大家记得动态解析。


测试代码:

代码语言:javascript
复制
import requests
from lxml import etree

headers={
    "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
    "Accept-Encoding":"gzip, deflate",
    "Accept-Language":"zh-CN,zh;q=0.9,en;q=0.8,en-US;q=0.7",
    "Cache-Control":"no-cache",
    "Connection":"keep-alive",
    "Host":"www.amec-inc.com",
    "Pragma":"no-cache",
    "Referer":"http://www.amec-inc.com/index/Lists/index/catid/97.html",
    "Upgrade-Insecure-Requests":"1",
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"
}

url = 'https://www.amec-inc.com/index/Lists/index/catid/97.html'
curl = 'https://www.amec-inc.com/a20be899_96a6_40b2_88ba_32f1f75f1552_yanzheng_ip.php?type=96c4e20a0e951f471d32dae103e83881&key=32f3b5e96be67b639c72b3614aaac541&value=3bf9901397de25f7fc8d5c31e2059f5d'

sess = requests.session()
sess.get(curl, headers=headers)
html = sess.get(url, headers=headers).text

e = etree.HTML(html)
print(e.xpath('//div[@class="mews_Eone_ul"]/ul/li/a'))
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-08-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档