Web常见中间件复现
记录自己复现中间件漏洞的一点记录
Apache HTTPD 换行解析漏洞(CVE-2017-15715)
原理
Apache HTTPD是一款HTTP服务器,它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,1.php\x0A
将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。
上传一个1.php的文件,然后burp抓包可以修改,在1.php后插入一个0a
便可以成功上传,再访问1.php%0a,就可以执行了php文件
修复
- 升级到最新版本
- 对上传文件重命名
- 禁用上传文件的执行权限
Apache HTTPD 多后缀解析漏洞
原理
Apache文件解析漏洞涉及到一个解析文件的特性:
Apache默认一个文件可以有多个以点分隔的后缀,当右边的后缀无法识别,则继续向左识别,当我们请求这样一个文件:shell.xxx.yyy
若给.php
后缀增加了处理器:
AddHandler application/x-httpd-php .php |
那么,在有多个后缀的情况下,只要一个文件含有.php
后缀的文件即将被识别成PHP文件,没必要是最后一个后缀。利用这个特性,将会造成一个可以绕过上传白名单的解析漏洞。
修复
将AddHandler application/x-httpd-php .php的配置文件删除。
利用正则表达式
1、使用SetHandler,写好正则
<FileMatch “.+.php$”>
SetHandler application/x-httpd-php
2、禁止.php这样的文件执行
<FileMatch “.+.ph(p[3457]?|t|tml).”>
Require all denied
Tomcat PUT方法任意写文件漏洞(CVE-2017-12615)
原理
由于配置不当(非默认配置),将配置文件conf/web.xml
中的readonly
设置为了 false,导致可以使用PUT方法上传任意文件,但限制了jsp后缀的上传
根据描述,在 Windows 服务器下,将 readonly 参数设置为 false 时,即可通过 PUT 方式创建一个 JSP 文件,并可以执行任意代码
通过阅读 conf/web.xml 文件,可以发现,默认 readonly 为 true,当 readonly 设置为 false 时,可以通过 PUT / DELETE 进行文件操控
搭建好环境后可以,进入docker的shell里查看一下
可以看到readonly
是false
,抓个包,改为PUT看能否写入一个文件
状态码是201,应该是写入成功
于是我们就可以写入一个jsp木🐎,用蚁剑生成一下,但是直接传,发现会报404,应该是对jsp有限制
绕过方式有三种
- Windows下不允许文件以空格结尾以PUT /a001.jsp%20 HTTP/1.1上传到 Windows会被自动去掉末尾空格
- Windows NTFS流Put/a001.jsp::$DATA HTTP/1.1
- /在文件名中是非法的,也会被去除(Linux/Windows)Put/a001.jsp/http:/1.1
便可以上传成功
拿到shell
修复
检测当前版本是否在影响范围内,并禁用PUT方法。
更新并升级至最新版。
最好的解决方式是将 conf/web.xml 中对于 DefaultServlet 的 readonly 设置为 true,才能防止漏洞。
Tomcat7+ 弱口令 && 后台war文件getshell漏洞
原理
Tomcat 支持在后台部署war文件,可以直接将webshell部署到web目录下。
若后台管理页面存在弱口令,则可以通过爆破获取密码。
启动环境后,访问/manage/html
可以认证登录
经过base64编码,可以爆破弱口令,登录后,在这里可以看到有上传war包的地方
生成jsp🐎后,用jar打包成war文件
上传成功,访问200,应该没问题
拿到shell
修复
- 在系统上以低权限运行Tomcat应用程序。创建一个专门的 Tomcat服务用户,该用户只能拥有一组最小权限(例如不允许远程登录)。
- 增加对于本地和基于证书的身份验证,部署账户锁定机制(对于集中式认证,目录服务也要做相应配置)。在CATALINA_HOME/conf/web.xml文件设置锁定机制和时间超时限制。
- 以及针对manager-gui/manager-status/manager-script等目录页面设置最小权限访问限制。
- 后台管理避免弱口令。
Weblogic WLS Core Components 反序列化命令执行漏洞(CVE-2018-2628)
原理
修复
打补丁
在绝⼤多数应⽤的使⽤场景中,⽤户只需要在公⽹能够使⽤HTTP(S)协议访问web应⽤服务器即可。
对于weblogic服务器,在绝⼤多数情况下,只需要能够在公⽹访问weblogic提供的HTTP(S)协议的服务即可,并不需要访问T3协议。
少数情况下,运维⼈员需要使⽤weblogic的T3协议:
- 在weblogic服务器本机执⾏weblogic的停⽌脚本;
- 通过WLST对weblogic进⾏脚本化配置;
- 编写使⽤T3协议通信的程序对weblogic进⾏状态监控及其他管理功能。
T3协议与HTTP协议均基于TCP协议,T3协议以”t3″开头,HTTP协议以“GET”、“POST”等开头,两者有明显的区别。
因此可以限定只允许特定服务器访问weblogic服务器的T3协议,能够修复weblogic的JAVA反序列化漏洞。即使今后发现了weblogic的其他类存在JAVA反序列化漏洞,也能够防护
Apache Log4j2 lookup JNDI 注入漏洞(CVE-2021-44228)
原理
Apache Log4j是一个基于Java的日志记录组件,通过重写Log4j引入了丰富的功能特性,该日志组件被广泛应用于业务系统开发,用以记录程序输入输出日志信息。
主要由于它log4j2提供了lookup的功能
日志中包含 ${}
,lookup功能就会将表达式的内容替换为表达式解析后的内容,而不是表达式本身。
常见的解析有:
${ctx:loginId} |
除了这个解析,还有涉及到一个jndi注入
复现
启动环境后,我们在管理员接口的action
参数处进行漏洞利用
在dns平台可以收到回显
进一步利用可以运用这两个工具
利用如下
修复
- Apache官方已发布新版本完成漏洞修复,建议及时升级至最新版本
- 添加jvm启动参数-Dlog4j2.formatMsgNoLookups=true
- 在应用classpath下添加log4j2.component.properties配置文件,文件内容为log4j2.formatMsgNoLookups=true;
- JDK使用11.0.1、8u191、7u201、6u211及以上的高版本;
- 部署使用第三方防火墙产品进行安全防护。
Spring Cloud Function SpEL表达式命令注入(CVE-2022-22963)
原理
Spring Cloud Function将请求头中的“spring.cloud.function.routing-expression”参数作为 SpEL表达式进行处理,造成SpEL表达式注入漏洞,成功利用此漏洞可实现任意代码执行。
复现
发送如下请求包
POST /functionRouter |
等待一会在vps上得到回连
修复
根据业务情况,更新版本修复
Spring Cloud Gateway Actuator API SpEL Code Injection (CVE-2022-22947)
原理
Spring cloud GateWay的actuator相关端点:
- 获取所有路由:Get请求:http://localhost:xxxx/actuator/gateway/routes/
- 添加路由:POST请求:http://localhost:xxxx/actuator/gateway/routes/路由编号
- 删除路由:DELETE请求:http://localhost:xxxx/actuator/gateway/routes/路由编号
- 获取指定路由:GET请求:http://localhost:xxxx/actuator/gateway/routes/路由编号
- 刷新路由:POST请求:http://localhost:xxxx/actuator/gateway/refresh
其中,调用添加路由的端点时,可以向路由中加入filters
,过滤器的值允许为spEL表达式,且会解析这个spEL表达式。可以通过构造spEL进行远程命令执行。构造的filters
可以直接利用gateway自带的AddResponseHeader
,将spEL的执行结果添加到响应头中,直接通过响应头进行查看。
复现
第一个请求,发送恶意的SpEL表达式的路由
POST /actuator/gateway/routes/qqw |
第二个请求刷新
POST /actuator/gateway/refresh |
然后访问,之前恶意请求的路由,可以看到已经执行了命令
修复
- 如果不需要Actuator,可以通过management.endpoint.gateway.enable:false配置将其禁用。
- 如果需要Actuator,则应使用Spring Security对其进行保护。
- 官方已发布漏洞补丁及修复版本,请评估业务是否受影响后,酌情升级至安全版本。
Web常见中间件复现