宝塔人机识别验证

本文详细解析了一种站点使用的人机识别机制,通过分析JavaScript代码和HTTP请求,揭示了识别过程中的关键参数生成逻辑。在本地环境中复现了该流程,并提供了测试代码以获取验证用的cookie。强调了尽管当前key和value是固定的,但可能随时变化,建议动态解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

在这里插入图片描述

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

 <script type="text/javascript" src="/renji_296d626f_32f3b5e96be67b639c72b3614aaac541.js?id=1660718301"></script>

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

在这里插入图片描述
复制后的内容如下

在这里插入图片描述

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

在这里插入图片描述
那么着重分析这段 c.get
在这里插入图片描述
c.get 是XMLHttpRequest的GET请求,那么再次清空cookie,查看数据包。

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

"/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 (){}

再次运行成功输出结果。

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。

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


测试代码:

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'))
### 宝塔面板未识别服务器的解决方案 当宝塔面板未能正确识别服务器上的磁盘或其他资源时,通常是因为底层文件系统或分区表的变化未被操作系统及时更新至面板中。以下是针对该问题的具体分析与解决办法: #### 一、确认基础环境配置 确保服务器的基础环境已满足宝塔面板的要求: - **检查网络连接**:验证外网和内网面板地址是否可以正常访问[^2]。 ```bash curl http://<公网IP>:8888 ``` - 如果无法访问,请检查防火墙设置或安全组规则,确保开放了`8888`端口。 --- #### 二、排查磁盘扩容后未同步的原因 如果服务器进行了磁盘扩容而宝塔面板未显示最新容量,则需手动调整分区及文件系统大小。具体步骤如下: 1. **安装必要工具** 使用以下命令安装必要的软件包来支持磁盘管理操作: ```bash apt update && apt install -y cloud-guest-utils xfsprogs ``` 2. **罗列当前磁盘信息** 执行以下命令获取磁盘及其分区详情,并记录扩容前的相关参数(如起始扇区位置): ```bash fdisk -l ``` 此处的信息有助于后续判断新旧分区差异[^5]。 3. **扩展逻辑卷** 对于LVM类型的磁盘,先通过`pvdisplay`, `vgdisplay`, 和`lvdisplay`命令了解现有逻辑卷结构;随后利用`resize2fs`或者`xfs_growfs`完成实际空间增长过程: ```bash resize2fs /dev/vda1 # 针对ext4格式化过的根目录所在设备节点为例说明 或者 xfs_growfs /mnt/data # 假设挂载点位于/mnt/data下且采用XFS作为文件系统类型 ``` 4. **刷新宝塔缓存** 登录到SSH终端重新加载服务状态以反映最新的硬件变动情况: ```bash bt restart ``` --- #### 三、处理其他潜在错误 对于某些特殊场景下的异常现象也需要特别关注,比如MongoDB启动失败可能间接影响整个平台功能表现。遇到此类状况时应单独诊断其根本原因并采取相应措施修复之[^3]。 --- ### 总结 综上所述,在面对“宝塔面板无法识别服务器”的情况下,我们应当依次从以下几个方面入手解决问题——首先是核实基本通信条件完好无损;其次是按照标准流程实施物理存储单元尺寸增大后的适配工作;最后还要留意是否存在第三方应用程序干扰因素的存在从而进一步优化整体运行效率。 ```python # 示例代码片段用于演示如何自动化检测磁盘健康度 import os def check_disk_health(disk_path='/'): total, used, free = shutil.disk_usage(disk_path) usage_percent = (used / total) * 100 return f'Disk Usage on {disk_path}: Total={total}, Used={used}, Free={free}, Percent={usage_percent:.2f}%' print(check_disk_health()) ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

考古学家lx(李玺)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值