渗透测试里,渗透最容易被新手高估的和渗是工具,最容易被低估的透剂是“渗透剂”的选择。工具决定你打多快,种类渗透剂决定你能打多深。渗透
所谓渗透剂,和渗不是透剂指某种液体化学品,而是种类指你在不同阶段投递的载荷、脚本、渗透Payload或利用代码。和渗它的透剂种类划分,远比“反弹Shell”四个字复杂得多。种类实战中,渗透我见过太多人拿着MSF生成一个exe就往目标环境扔,和渗结果被杀软秒杀,透剂连日志都没留下——这不是技术问题,是渗透剂选型出了问题。
按投递阶段分,渗透剂大体能分成三类:初始投递剂、权限维持剂、横向移动剂。初始投递剂负责撕开第一道口子,常见的有宏文档、LNK快捷方式、钓鱼链接里的HTML smuggling。这类渗透剂的核心要求是“免杀”和“诱导性”。宏文档在2023年之后被微软默认禁用,但针对老版本Office或启用了宏的国企内网,依然有效。我做过一次测试,把宏代码塞进一份《2024年绩效考核办法》的Word里,点击率超过七成——人永远是最薄弱的环节。
权限维持剂又是另一套逻辑。你拿到一个WebShell,目标服务器重启后可能就没了。这时候需要的是持久化渗透剂,比如注册表自启动项、计划任务、WMI事件订阅。这类东西讲究“隐蔽性”,越像正常系统行为越好。我记得有次攻防演练,红队在一台Windows Server上用了计划任务执行PowerShell脚本,每五分钟回连一次,蓝队查了两天日志都没发现——因为脚本名伪装成“WindowsUpdateCheck.ps1”,而且路径放在C:\ProgramData\Microsoft\Network\下面,跟系统自带目录几乎混在一起。
横向移动剂的逻辑就更讲究了。它不能是单个文件,往往是一套组合拳。最常见的是利用SMB共享配合PsExec,或者用WMI远程执行命令。但这类渗透剂有个致命弱点——特征明显。现在EDR对PsExec的默认端口445流量监控很敏感,稍微有点规模的防守方都会盯着。我更喜欢用DCOM远程调用,或者利用WinRM的5985端口,因为很多运维人员压根不知道这个端口开着,更不知道它也能执行命令。
换个角度,按技术实现划分,渗透剂还有无文件型和落地型两种。无文件型渗透剂直接运行在内存里,不写磁盘,比如PowerShell的Invoke-Mimikatz、Cobalt Strike的Stageless Payload。这类渗透剂对杀软是降维打击,因为传统杀软主要扫磁盘文件。但无文件型不是万能的——如果目标机器没有PowerShell,或者被GPO策略禁用了脚本执行,你就得换思路。落地型渗透剂虽然容易暴露,但胜在稳定,比如把PE文件加密后分块传到目标,再在内存中解密执行。这种方式可以绕过文件大小限制,也能避开流量检测。
实战里最让我印象深刻的是一次内网渗透。目标是一个制造业企业的MES系统,Windows Server 2012,没打补丁。我用了EternalBlue的变种——MS17-010的利用代码作为初始投递剂,直接拿到SYSTEM权限。但问题来了,内网有隔离,我不能直接连外网。这时候我换了思路,用Bitsadmin从内网的一台FTP服务器上下载后续渗透剂。Bitsadmin是Windows自带的工具,流量走HTTP,防守方根本不会注意。这个案例说明,渗透剂的选择不是越高级越好,而是越“贴合环境”越好。
再聊聊渗透剂的语言载体。C/C++编译的原生Payload体积小、执行效率高,但开发周期长。PowerShell脚本灵活,但容易被AMSI(反恶意软件扫描接口)拦截。最近两年,我越来越喜欢用C#编写的渗透剂,配合.NET Framework的InstallUtil或RegAsm白名单机制,可以绕过AppLocker。而且C#可以直接调用Win32 API,不需要额外依赖,比PowerShell更隐蔽。
别迷信那些所谓“全功能”渗透框架。Cobalt Strike的Beacon确实强大,但默认特征早就被各大安全厂商盯死了。真正好用的渗透剂往往是定制化的——你根据目标环境,临时改一个编译参数,或者换一种加密方式。比如用AES加密通信流量,密钥硬编码在Payload里,每次渗透都换一个新密钥。这样即使流量被截获,对方也解不出来。
还有一点,渗透剂不是投出去就完事了。你得考虑“后渗透”阶段。拿到权限后,需要上传提权辅助工具、抓密码的脚本、内网扫描器。这些统统属于渗透剂的范畴。我习惯把所有工具打包成一个加密的压缩文件,传到目标机器的临时目录,然后用内存加载的方式解压执行,避免在磁盘上留下太多痕迹。
说到种类,还得提一句针对Web应用的渗透剂。SQL注入的Payload、XSS的脚本、文件上传的WebShell——它们跟系统层的渗透剂完全是两个世界。WebShell里最经典的是“一句话木马”,用中国菜刀或蚁剑连接。但现在的WAF对这类连接特征识别得很快。我最近用了一种基于WebSocket的WebShell,流量不经过HTTP明文,而是走WebSocket的二进制帧,WAF基本失效。
最后说点实在的。渗透剂的本质是“对抗思维”的产物。你选什么种类的渗透剂,取决于你面对的是什么样的防守。如果目标只是装了免费版火绒的普通PC,一个简单的MSF马就够了。但如果是金融行业的核心系统,背后有全流量审计和EDR,你就得考虑用定制的无文件型渗透剂,配合合法的系统管理工具做Living off the Land。没有万能药,只有最合适的工具。多试,多观察目标环境的反馈,比背诵任何渗透剂清单都管用。