首页 > 其他分享 >如何通过组合手段大批量探测CVE-2024-38077

如何通过组合手段大批量探测CVE-2024-38077

时间:2024-09-10 11:27:21浏览次数:8  
标签:nmap IP 2024 38077 new CVE

背景

近期正值多事之秋,hvv中有CVE-2024-38077专项漏洞演习,上级police也需要检查辖区内存在漏洞的资产,自己单位领导也收到了情报,在三方共振下这个大活儿落到了我的头上。Windows Server RDL的这个漏洞原理就不过多介绍,本文重点关注如何满足大批量探测的需求。

问题

CVE-2024-38077自披露以来流传过几个poc工具,但使用过后留下的只有某某服的exe版本。可能出于保密原因,这个工具不支持的功能太多,本文就不一一列举,采用排除法自行脑补。支持的参数是指定某个IP或者某个IP段进行扫描,然后没了,就像这样:

但是这样扫来扫去无法满足需求,遇到的几个典型问题就是:

  • 扫的为什么很慢?

  • 从外部导入IP怎么办?

  • 如何从大批量资产中筛选出有漏洞的?

空间测绘

探测辖区内或者某一地区的资产当然离不开空间测绘工具,fofa、鹰图、shaodan、zoomeye等著名的自然要尝试一遍,搜索的关键词首先是国内+3389和135端口+windows server操作系统,协议的话可以组合RDP/RDL,这样一来搜出的资产会多达几百万条,百万量级的数据处理起来对于我们这种小散户而言属于天方夜谭。况且这些空间测绘平台中有的甚至不支持非会员大数据量查询,像shaodan这样能够显示出来已经是仁慈的了:

结果虽然搜索出来了,但是百万级的数据是拿不到的。一是不支持多端口筛选,二是不支持导出(非会员)。

这里先解决第二个问题,如何导出搜索结果?突然想起了许久未用的空间测绘工具——kunyu(坤舆)。运行起来,进去执行搜索是这样:

检查了好多遍,语法没问题。不明觉厉之际,联系了kunyu的作者@风起。询问才知道ZoomEye的普通账号权限已经不支持kunyu了。唉,只能厚着脸皮借来账号一用。

然后就是重新初始化、配置输出目录、配置查询页数......这次导出的关键就在page参数上。kunyu默认的page是1,每次显示10条,即输出的Excel中有10条数据。如果设置为1000,则会显示10000条数据,导出的数据也就是10000条,但是这样一来查询效率会大大降低。经过测试,将page设置为100是较为合适的,也就是每次显示1000条。另外配合时间参数after、before以及区域参数city、subvisions将单次搜索总量控制在1000条以内,这样就可以不漏掉资产。

最后经过一番折腾,搜索了60多次,合并多个文件后,终于生成了一份5万条左右的Excel......既然有了一堆IP,接下来该进行的就是如何把这些IP导入工具开扫。但此时的poc工具是不支持外部IP导入的,并且对于“Can Not Reach Host.”之类的资产扫描进度会很慢,所以要考虑如何兼顾效率和准确性的问题。

【----帮助网安学习,以下所有学习资料免费领!加vx:dctintin,备注 “博客园” 获取!】

 ① 网安学习成长路径思维导图
 ② 60+网安经典常用工具包
 ③ 100+SRC漏洞分析报告
 ④ 150+网安攻防实战技术电子书
 ⑤ 最权威CISSP 认证考试指南+题库
 ⑥ 超1800页CTF实战技巧手册
 ⑦ 最新网安大厂面试题合集(含答案)
 ⑧ APP客户端安全检测指南(安卓+IOS)

Nmap

由于之前经过测试,对于确实存在漏洞的资产,poc的响应是很快的。CVE-2024-38077的利用条件之一是同时开放135和3389端口,而空间测绘工具搜索的结果是未验证135的,所以接下来的思路是使用Nmap对5万个资产探测一下两个端口的开放情况,然后根据输出结果筛选出两个端口均为open状态的IP,最后尝试将筛选出的IP导入poc工具扫描。

这个阶段也尝试过fscan等其他工具,但是比较下来Nmap的输出是最整齐的(前提是控制输入参数),方便后续处理:

从输出文件可以看出,除了第一行是注释,下面的内容都很有规律,每六行是对一个IP的描述,包含135和3389两个端口,而且格式都固定。由于需求要的是开放两个端口的所有IP,现成的工具没有能够满足的,只能自己写,又一次掏出了idea......

胶水代码

从Nmap的输出结果不难分析,如果要写代码处理的话,每六行可以看成是一个Nmap类,而这个类里面只需要3个属性,IP、port-135、port-3389。直接上代码:

//读取外部文件
BufferedReader reader = new BufferedReader(new FileReader(file));
​
MNmap nmap = null;
ArrayList<MNmap> list = new ArrayList();
int count = 0;
String line;
​
//循环读取每一行
while ((line = reader.readLine()) != null) {
​
    //ip
    if (line.startsWith("Nmap")) {
        nmap = new MNmap();
        nmap.ip = TNmap.findIp(line);
    }
    //135
    if (line.startsWith("135") && nmap != null) {
        nmap.p135 = TNmap.findP135(line);
    }
    //3389
    if (line.startsWith("3389") && nmap != null) {
        nmap.p3389 = TNmap.findP3389(line);
        //将每一个nmap对象加入list
        list.add(nmap);
    }
}

到这里整个任务已经完成了一半,精准的资产已经筛选出来了,大概2400多个。接下来就是使用poc工具扫描了,毕竟两千多条数据,总不能手动设置两千多次吧,所以还是要写代码:

//循环执行exe工具,参数是nmap的IP,并逐个获取执行结果
for (int i = 0; i < list.size();i++) {
    MNmap nmap1 = list.get(i);
    if ("open".equals(nmap1.p135) && "open".equals(nmap1.p3389)) {
​
        try {
            // 指定要执行的exe文件及其参数
            ProcessBuilder processBuilder = new ProcessBuilder(exeFile, nmap1.ip);
            // 启动进程
            Process process = processBuilder.start();
            // 读取标准输出
            BufferedReader r = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String l;
            while ((l = r.readLine()) != null) {
                if (l.contains("Vulnerability"))
                    System.out.println(l);
            }
​
            // 读取标准错误(如果需要)
            BufferedReader errorReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
            String errorLine;
            while ((errorLine = errorReader.readLine()) != null) {
                System.out.println("Standard Error: " + errorLine);
            }
​
            // 等待外部程序执行完成
            int exitCode = process.waitFor();
            if (exitCode == 0) {
                System.out.println("程序执行完成");
            } else {
                System.out.println("程序执行出错,退出码:" + exitCode);
            }
​
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
        //计数
        count++;
    }
}
System.out.println("total: " + count);

这里贴出的只是关键的两段代码,完整项目见文末链接。最后将项目打成jar包,与CVE-2024-38077.exe和Nmap输出文件放在同一目录下:

开启powershell运行jar包,设置poc参数为CVE-2024-38077,同时指定输入IP的文件路径和输出文件路径,等待扫描完后得到存在漏洞的资产列表。

总结

CVE-2024-38077漏洞的探测难点在于一是没有成型的工具,二是空间测绘出来的大批量资产如何导出与二次筛选。本文的思路只是临时方案,相信后面会有大神公开其exp,最终出现像MS17010一样的工具。

需要此项目加V:dctintin,发地址。

更多网安技能的在线实操练习,请点击这里>>

  

标签:nmap,IP,2024,38077,new,CVE
From: https://www.cnblogs.com/hetianlab/p/18406065

相关文章

  • 小鹅通课程视频下载 绝对有效2024
    具体步骤及代码注释(仅支持已购买课程):步骤1:导入所需库importrequests#用于发送HTTP请求frombs4importBeautifulSoup#用于解析HTML步骤2:登录小鹅通账号#输入用户名和密码username='your_username'password='your_password'#发送POST请求,模拟登录login......
  • 2024年最好用的AI工具整合平台
    引言在快速发展的数字时代,高效工作和创意产出对许多企业和个人都至关重要。然而,面对日益复杂的任务,如何才能真正简化工作流程并激发灵感呢?2024年最好用的AI工具应运而生,它将ChatGPT、MJ(MidJourney)、Suno等领先的AI模型集成在一个平台中,提供了一站式解决方案,让你的生产力和创意......
  • 2024企业站群搜狗秒收录站群程序二开版--码山侠
    在SEO领域,站群策略是一种通过构建多个网站来提高搜索引擎排名和增加流量的方法。百度快排玩法,特别是针对搜狗搜索引擎的秒收录站群程序,是许多SEO从业者关注的焦点。以下是对这种策略的深度解析。站群策略的核心站群策略的核心在于构建多个网站,这些网站通常围绕同一主题或相关......
  • 2024最新专用站群seo官网程序源码二级泛程序——码山侠
    发布站专用站群seo推广网站源码·支持泛解析无限扩张功能:打开i5i.net1、支持伪静态功能,减少生成静态页增加网站内容,比动态网站更有利于网站收录。2、支持seo优化效果,主动提交某百收录,可生成sitemap.xml文件提交某百减少网站收录时间。3、网站简洁大气,占用内存小,访问速度极快......
  • 2024年Ai智能绘画Stable Diffusion软件+整合包+保姆式教程
    前言在2024年的科技浪潮中,一款名为StableDiffusion的AI智能绘画软件吸引了全球的目光。它不仅为艺术家和设计师提供了无限创意的可能,也让我们每个人都能轻松体验绘画的乐趣。那么,StableDiffusion究竟有何魅力?它又是如何工作的呢?让我们一起揭开这款神奇软件的神秘面纱!一......
  • [稳定检索|投稿优惠]2024年计算机视觉与电子信息工程国际会议(CVEIE 2024)
    2024年计算机视觉与电子信息工程国际会议2024InternationalConferenceonComputerVisionandElectronicInformationEngineering【1】大会信息会议名称:2024年计算机视觉与电子信息工程国际会议会议简称:CVEIE2024大会时间:请查看官网大会地点:中国·丽江截稿时间:请......
  • 2024-第02周 预习、实验与作业:Java基础语法2、面向对象入门
    课前问题列表1.方法相关问题publicclassMain{staticvoidchangeStr(Stringx){x="xyz";}staticvoidchangeArr(String[]strs){for(inti=0;i<strs.length;i++){strs[i]=strs[i]+""+i;......
  • 2024ccpc线性基与校赛线性基
    异或空间线性基我终于意识到写题解有多重要了2024CCPC网络赛ProblemJ.找最小Mandy发现了两个很好玩的长度为\(n\)的序列,记为\(a,b\),她觉得一个序列的无趣度为序列内所有元素的异或和。现在她想要这两个序列尽可能有趣,具体来说,她希望最无趣的序列尽可能有趣。她觉得交......
  • 2024-09-04:用go语言,给定一个长度为n的数组 happiness,表示每个孩子的幸福值,以及一个正
    2024-09-04:用go语言,给定一个长度为n的数组happiness,表示每个孩子的幸福值,以及一个正整数k,我们需要从这n个孩子中选出k个孩子。在筛选过程中,每轮选择一个孩子时,所有尚未选中的孩子的幸福值都会减少1。需要注意的是,幸福值不能降低到负数,只有在其为正数时才能减少。我们的目标是尽可......
  • CCPC Online 2024China, September, 8, 2024三道签到题
    网络赛复现地址:https://codeforces.com/gym/105336 L网络预选赛:做法:直接枚举两行两列即可代码:#include<bits/stdc++.h>usingnamespacestd;constintN=510;chara[N][N];intmain(){intn,m;cin>>n>>m;for(inti=0;i<n;i++)for......