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

背景

近期正值多事之秋,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.”之类的资产扫描进度会很慢,所以要考虑如何兼顾效率和准确性的问题。

帮助网安学习,全套资料S信免费领取:
① 网安学习成长路径思维导图
② 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一样的工具。

接下来我将给各位同学划分一张学习计划表!

学习计划

那么问题又来了,作为萌新小白,我应该先学什么,再学什么?
既然你都问的这么直白了,我就告诉你,零基础应该从什么开始学起:

阶段一:初级网络安全工程师

接下来我将给大家安排一个为期1个月的网络安全初级计划,当你学完后,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web渗透、安全服务、安全分析等岗位;其中,如果你等保模块学的好,还可以从事等保工程师。

综合薪资区间6k~15k

1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)

2、渗透测试基础(1周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等

3、操作系统基础(1周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)

4、计算机网络基础(1周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现

5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固

6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)

那么,到此为止,已经耗时1个月左右。你已经成功成为了一名“脚本小子”。那么你还想接着往下探索吗?

阶段二:中级or高级网络安全工程师(看自己能力)

综合薪资区间15k~30k

7、脚本编程学习(4周)
在网络安全领域。是否具备编程能力是“脚本小子”和真正网络安全工程师的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力。

零基础入门的同学,我建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习
搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP,IDE强烈推荐Sublime;

Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,没必要看完

用Python编写漏洞的exp,然后写一个简单的网络爬虫

PHP基本语法学习并书写一个简单的博客系统

熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选)

了解Bootstrap的布局或者CSS。

阶段三:顶级网络安全工程师

这部分内容对于咱们零基础的同学来说还太过遥远了,由于篇幅问题就不展开细说了,我给大家贴一个学习路线。感兴趣的童鞋可以自行研究一下哦,当然你也可以点击这里加我与我一起互相探讨、交流、咨询哦。

学习资料分享

当然,只给予计划不给予学习资料的行为无异于耍流氓,这里给大家整理了一份【282G】的网络安全工程师从入门到精通的学习资料包,可点击下方二维码链接领取哦。

在这里插入图片描述
《网络安全实战特训营》快来占座!👇

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

网络安全技术库

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值