背景
近期正值多事之秋,hvv中有CVE-2024-38077专项毛病演习,上级police也必要检查辖区内存在毛病的资产,自己单元领导也收到了谍报,在三方共振下这个大活儿落到了我的头上。Windows Server RDL的这个毛病原理就不过多介绍,本文重点关注如何满足大批量探测的需求。
标题
CVE-2024-38077自披露以来流传过几个poc工具,但使用过后留下的只有某某服的exe版本。大概出于保密缘故原由,这个工具不支持的功能太多,本文就不一一列举,采取清除法自行脑补。支持的参数是指定某个IP大概某个IP段进行扫描,然后没了,就像如许:
[img=720,438.17945383615086]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202409091547788.png[/img]
但是如许扫来扫去无法满足需求,遇到的几个典型标题就是:
- 扫的为什么很慢?
- 从外部导入IP怎么办?
- 如何从大批量资产中筛选出有毛病的?
空间测绘
探测辖区内大概某一地区的资产当然离不开空间测绘工具,fofa、鹰图、shaodan、zoomeye等著名的天然要尝试一遍,搜索的关键词首先是国内+3389和135端口+windows server操作体系,协议的话可以组合RDP/RDL,如许一来搜出的资产会多达几百万条,百万量级的数据处置惩罚起来对于我们这种小散户而言属于天方夜谭。何况这些空间测绘平台中有的甚至不支持非会员大数据量查询,像shaodan如允许以或许显示出来已经是仁慈的了:
[img=720,359.3594306049822]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202409091547745.png[/img]
结果固然搜索出来了,但是百万级的数据是拿不到的。一是不支持多端口筛选,二是不支持导出(非会员)。
这里先办理第二个标题,如何导出搜索结果?突然想起了许久未用的空间测绘工具——kunyu(坤舆)。运行起来,进去执行搜索是如许:
[img=720,384.6575342465753]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202409091547765.png[/img]
检查了很多多少遍,语法没标题。不明觉厉之际,联系了kunyu的作者@风起。扣问才知道ZoomEye的普通账号权限已经不支持kunyu了。唉,只能厚着脸皮借来账号一用。
然后就是重新初始化、设置输出目录、设置查询页数......这次导出的关键就在page参数上。kunyu默认的page是1,每次显示10条,即输出的Excel中有10条数据。假如设置为1000,则会显示10000条数据,导出的数据也就是10000条,但是如许一来查询效率会大大低落。经过测试,将page设置为100是较为符合的,也就是每次显示1000条。另外配合时间参数after、before以及区域参数city、subvisions将单次搜索总量控制在1000条以内,如许就可以不遗漏资产。
[img=720,401.5068493150685]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202409091547809.png[/img]
最后经过一番折腾,搜索了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的输出是最整齐的(条件是控制输入参数),方便后续处置惩罚:
[img=720,377.53797799895233]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202409091547774.png[/img]
从输出文件可以看出,除了第一行是注释,下面的内容都很有规律,每六行是对一个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输出文件放在同一目录下:
[img=720,173.33333333333334]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202409091547724.png[/img]
开启powershell运行jar包,设置poc参数为CVE-2024-38077,同时指定输入IP的文件路径和输出文件路径,等待扫描完后得到存在毛病的资产列表。
[img=720,405.38505419281233]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202409091547759.png[/img]
总结
CVE-2024-38077毛病的探测难点在于一是没有成型的工具,二是空间测绘出来的大批量资产如何导出与二次筛选。本文的思路只是临时方案,相信后面会有大神公开其exp,最终出现像MS17010一样的工具。
必要此项目加V:dctintin,发地址。
更多网安技能的在线实操训练,请点击这里>>
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |