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)未授权远程代码执行漏洞复现分析

https://xz.aliyun.com/t/6560

漏洞原理

漏洞出现在e-cology的组件beanshell上,由于beanshell这个接口可被未授权访问,同时这个接口在接受用户请求时未进行相应过滤,最终导致远程命令执行

那beanshell是什么呢?

官网地址:https://github.com/beanshell/beanshell
简单说,就是一个微型的java解释器,可嵌入到其他程序中,用于动态的执行java代码,类似于csharp中的动态编译特性,我们通过一个例子来了解beanshell,如下图
image

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"

image

待研究

posted @ 2022-06-13 23:41  壹個人坐在角落  阅读(453)  评论(0编辑  收藏  举报