请不要利用文章内的相关知识点进行非法渗透,仅做学习使用,产生的一切后果与文章作者和本公众号无关。
知识补充
判断一个网站系统是否存在log4j远程命令执行漏洞需要判断一下几个条件:
1、 是否使用了存在漏洞版本的log4j组件
2、是否使用类似这种危险函数:logger.debug ,logger.info ,logger.warn , logger.error ,logger.fatal
3、函数内的参数值是否用户可控
案例演示
下面我们根据上面的方法来实战审计一下某个前台系统
首先我们观察一下pom.xml发现使用了log4j-core2.10.0如下所示:
这时我们就可以判断出来该网站系统使用的log4j2.10.0组件存在远程代码执行漏洞,然后我们全局搜索一下logger. 开头的方法
这时我们发现有好几处都调用了危险方法,但是有些都是用户不可控,因为这些logger方法中的参数值都不是用户传递过来的都是固定的,例如:
这时我们选用参数值为用户可控的方法跟踪一下,看看这些的logger方法的参数值有没有被过滤,我们就选ForeOrderController类中的logger.info(“订单地址字符串:{}”, builder); 进行跟踪
这时我发现build变量是一个字符串对象。
首先new一个字符串对象StringBuilder然后使用 builder.append(addressStack.pop());
把订单地址进行拼接,然后使用logger.info方法把builder打印出来。通过订单支付成功页面我们可以判断出,该漏洞的功能点在前台提交订单时输入信息处, 这时我们打开前台购买一件东西把订单地址里面我们能修改的东西全部改成log4j测试代码
经过测试发现只有详细地址这一项我们可以加上测试代码,这时我们在logger.info(“订单地址字符串:{}”, builder);打上断点,下面我们开始提交订单,然后点击确认支付。
这时我们发现我们打的断点成功被触发
dns平台也成功解析log4j漏洞成功被触发
原文始发于微信公众号(探幽安全):代码审计之某前台log4j远程代码执行漏洞