Penetration_Testing_POC/books/Apache mina CVE-2024-52046漏洞分析复现.html

343 lines
2.6 MiB
HTML
Raw Normal View History

add 代码审计、漏洞复现、burpsuite使用等文章 add Apache NiFi 高版本命令执行利用 Apache mina CVE-2024-52046漏洞分析复现 CVE-2024-3408 D-tale bypassRCE分析 CVE-2024-42327:Zabbix SQL注入漏洞分析 Fastjson反序列化漏洞深度解析与利用和修复 IoT 安全从零到掌握:超详尽入门指南(基础篇) IoT 安全从零到掌握:超详尽入门指南(实战篇) JAVA代码审计-jfinal JAVA安全-Classloader:理解与利用一篇就够了 JAVA安全之命令执行研究分析 JDBC Attack漫谈 Java 安全-反序列化 URLDNS+CC+自己挖一条链+CB Java安全-WebShell免杀的多种方式 Linux系统下反弹shell的理解 Nacos2.4.3新版漏洞利用方式总结 Spring FatJar写文件到RCE分析 TOTOLINK远程代码执行漏洞分析(CVE-2024-51228) Windows应急响应之USBDevices日志 burpsuite数据包自动加解密插件,autoDecoder详细安装+使用 cjson&json 二进制漏洞利用总结 ecology checkPassword 代码执行 kkFileView历史漏洞总结 pyramid 框架无回显挖掘 sql注入报错分享(mssql+mysql) 【喜庆2025征文】路由器漏洞挖掘 - 原创文章发布(Original Article) - T00ls | 低调求发展 - 潜心习安全 亿赛通 电子文档安全管理系统getSoftWareIssuance非授权访问的XXE漏洞 - 原创文章发布(Original Article) - T00ls " 低调求发展 - 潜心习安全 代码审计 - MCMS v5.4.1 0day挖掘 代码审计-JetLinks物联网系统RCE 代码审计-九思oa dl.jsp任意文件读取 以AJ-Report为例从0以AJ-Report为例从0开始学习Java代码审计开始学习Java代码审计 使用burpsuite爆破带有验证码和随机uuid的密码的一次经验 分享SRC漏洞挖掘中js未授权漏洞挖掘的小技巧 分析某杀软规则库绕过certutil免杀实践 初探webshell免杀的艺术(PHP) 基于增加复杂逻辑数组混淆的webshell绕过 实战自动化加解密&加密场景下的暴力破解 实现xxl-job-executor 1.9.2阉割版Jetty服务的Handler内存马 小程序sign逆向和渗透两种思路,总有一款适合你 应用内存中的后渗透利用-远程工具密码读取 泛微e-office 11.0 RCE - 先知社区 浅析实战攻防中的信息收集 用友NC 漏洞分析--cartabletimeline存在SQL注入 禅道18.x-20.x版本漏洞挖掘思路分析 端口扫描工具横向对比测评 自动化patch shellcode到EXE实现免杀 若依一把梭哈工具源码分析 蓝凌EKP V16 fsscCommonPortlet未授权SQL注入漏洞分析 记一次某CMS审计(PHPCMS V9 block_admin.php 文件包含RCE漏洞) 记一次渗透测试实战之Sea 记某app使用autodecoder插件绕过加密数据包_重放防护 达梦数据库DMSQL-SQL注入小记 金和OA jc6代码审计(imagefield SQLI_viewConTemplate freemarker模板注入RCE)
2025-01-05 00:12:04 -08:00
<!DOCTYPE html> <html lang=en data-arp style><!--
Page saved with SingleFile
url: https://xz.aliyun.com/t/16923
--><meta charset=utf-8>
<title>Apache mina CVE-2024-52046漏洞分析复现</title>
<meta name=description content=先知社区,先知安全技术社区>
<meta name=viewport content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">
<style>/*!
* Bootstrap v2.3.1
*
* Copyright 2012 Twitter, Inc
* Licensed under the Apache License v2.0
* http://www.apache.org/licenses/LICENSE-2.0
*
* Designed and built with all the love in the world @twitter by @mdo and @fat.
*/.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}footer{display:block}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}img{height:auto;vertical-align:middle;-ms-interpolation-mode:bicubic}input{margin:0}button{-webkit-appearance:button}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#333}a{text-decoration:none}a:hover,a:focus{color:#005580;text-decoration:underline}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}.container{width:940px}.span10{width:780px}.container{margin-right:auto;margin-left:auto}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}p{margin:0 0 10px}.text-right{text-align:right}.text-center{text-align:center}h4{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:inherit;text-rendering:optimizelegibility}h4{font-size:17.5px}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}blockquote p{font-size:17.5px;font-weight:300;line-height:1.25}q:before,q:after,blockquote:before,blockquote:after{content:""}pre{color:#333;-webkit-border-radius:3px;-moz-border-radius:3px}pre{display:block;margin:0 0 10px;white-space:pre-wrap;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:4px;-moz-border-radius:4px}input{font-weight:normal}input{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}input[type="text"]{display:inline-block;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;vertical-align:middle;-webkit-border-radius:4px;-moz-border-radius:4px}input{width:206px}input[type="text"]{background-color:#fff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}input{margin-left:0}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear}.collapse{position:relative;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.btn{text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(
<style>/*! Editor.md v1.5.0 | editormd.min.css | Open source online markdown editor. | MIT License | By: Pandao | https://github.com/pandao/editor.md | 2015-06-09 *//*! prefixes.scss v0.1.0 | Author: Pandao | https://github.com/pandao/prefixes.scss | MIT license | Copyright (c) 2015 */@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2){}@media only screen and (-webkit-min-device-pixel-ratio:3),only screen and (min-device-pixel-ratio:3){}/*! prefixes.scss v0.1.0 | Author: Pandao | https://github.com/pandao/prefixes.scss | MIT license | Copyright (c) 2015 *//*!
* Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome
* License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
*/@font-face{font-family:FontAwesome;src:url(data:font/woff2;base64,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
<style>/*!
* Bootstrap Responsive v2.3.1
*
* Copyright 2012 Twitter, Inc
* Licensed under the Apache License v2.0
* http://www.apache.org/licenses/LICENSE-2.0
*
* Designed and built with all the love in the world @twitter by @mdo and @fat.
*/.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}@-ms-viewport{width:device-width}@media (min-width:768px) and (max-width:979px){}@media (max-width:767px){}@media (min-width:1200px){.row{margin-left:-30px}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:30px}.container{width:1170px}.span10{width:970px}input{margin-left:0}}@media (min-width:768px) and (max-width:979px){.row{margin-left:-20px}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container{width:724px}.span10{width:600px}input{margin-left:0}}@media (max-width:767px){body{padding-right:0px;padding-left:0px}.container{width:auto}.row{margin-left:0}[class*="span"]{display:block;float:none;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.modal{position:fixed;right:20px;left:20px;width:auto;margin:0}.modal.fade{top:-100px}}@media (max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.modal{top:10px;right:10px;left:10px}}@media (max-width:979px){body{padding-top:0}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px}.nav-collapse{clear:both}.nav-collapse.collapse{height:0;overflow:hidden}}@media (min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}}</style>
<style>a:hover{text-decoration:none}.post-user-action>span{margin-right:10px;line-height:21px;border:none}.post-user-action .i-seprator{color:rgba(0,0,0,0.1);margin:0 2px}.navbar .brand{padding:0;height:50px;margin-left:0;display:inline-block!important;background-repeat:no-repeat;width:120px;background-size:207px 50px;background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDIxLjEuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IuWbvuWxgl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB2aWV3Qm94PSIwIDAgODAwLjQgMTMwLjQiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDgwMC40IDEzMC40OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cgkuc3Qwe2ZpbGw6IzM3M0Q0MTt9Cjwvc3R5bGU+Cjx0aXRsZT7lhYjnn6XmioDmnK/npL7ljLo8L3RpdGxlPgo8Zz4KCTxwb2x5Z29uIGNsYXNzPSJzdDAiIHBvaW50cz0iMCwxMjEuNCAwLDI3LjMgNTYuMywyNy4zIAkiLz4KCTxwb2x5Z29uIGNsYXNzPSJzdDAiIHBvaW50cz0iODkuOSw4LjQgODkuOSwxMDIuNSAzMy41LDEwMi41IAkiLz4KPC9nPgo8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTMwLjcsNTguNGMtMi4zLTEuNC00LjctMi45LTcuMi00LjVjNi02LjksMTAuNy0xNi4yLDE0LjEtMjcuOWw4LjMsMS43Yy0wLjcsMS42LTEuNiwzLjktMi44LDYuOQoJYy0wLjcsMi4zLTEuMywzLjktMS43LDQuOGgxNy41VjI0aDguM3YxNS41aDI5LjZWNDdoLTI5LjZ2MTUuMWgzNC43VjcwaC0yNi41djIxLjNjLTAuMiwzLjQsMS42LDUsNS41LDQuOGg3LjIKCWMzLjIsMC4yLDUuMy0xLjMsNi4yLTQuNWMwLjItMS40LDAuNS00LjEsMC43LTguM2MwLDAuNywwLjEtMC4xLDAuMy0yLjRsNy42LDIuOGMtMC4yLDQuMS0wLjcsNy45LTEuNCwxMS40CgljLTEuNiw2LTUuOCw4LjgtMTIuNyw4LjZoLTEwLjdjLTcuNiwwLjItMTEuMi0zLjItMTEtMTAuM1Y3MC4xaC0xNS44djMuMWMwLDE1LjQtOS4xLDI2LjQtMjcuMiwzM2MtMS40LTIuMS0zLTQuNi00LjgtNy42CglDMTM1LjEsOTQsMTQzLDg1LjQsMTQzLDcyLjhWNzBoLTIyLjd2LTcuOWgzOC41VjQ3aC0yMS4zQzEzNS41LDUxLjEsMTMzLjIsNTQuOSwxMzAuNyw1OC40eiIvPgo8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMjEzLjIsNTQuNmMtMC41LTAuMi0xLjItMC43LTIuMS0xLjRjLTEuOC0xLjQtMy4yLTIuMy00LjEtMi44YzQuOC04LjksOC4xLTE3LjksMTAtMjYuOGw3LjYsMS40CgljLTAuNSwxLjgtMS4zLDQuNC0yLjQsNy42Yy0wLjIsMS4yLTAuNSwyLTAuNywyLjRoMjQuMXY3LjJoLTEyYzAsOC43LTAuMSwxNC45LTAuMywxOC42aDE0LjFWNjhoLTE0LjhjMCwyLjMtMC4yLDQuNS0wLjcsNi41CgljMS42LDEuNiwzLjgsNCw2LjUsNy4yYzQuNiw0LjgsOCw4LjYsMTAuMywxMS40bC01LjgsNS4yYy0wLjktMS4yLTIuMy0yLjgtNC4xLTQuOGMtMS44LTIuMy00LjgtNS44LTguOS0xMC43CgljLTIuNSw3LjgtOC40LDE1LjUtMTcuNSwyMy4xYy0yLjMtMi44LTQuMS00LjgtNS41LTYuMmMxMS4yLTguOSwxNy4zLTE5LjUsMTguMi0zMS43aC0xNy4ydi03LjJoMTcuNWMwLjItMy45LDAuMy0xMC4xLDAuMy0xOC42CgloLTYuOUMyMTcuMSw0Ni4zLDIxNS4zLDUwLjQsMjEzLjIsNTQuNnogTTI1MS40LDEwMi43VjMxLjloMzUuOHY3MC41aC04LjN2LTcuNmgtMTkuNnY3LjlDMjU5LjMsMTAyLjcsMjUxLjQsMTAyLjcsMjUxLjQsMTAyLjd6CgkgTTI1OS4zLDM5LjR2NDcuOGgxOS42VjM5LjRIMjU5LjN6Ii8+CjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0yOTcuMiw4MS4xYy0wLjItMC45LTAuNi0yLjMtMS00LjFjLTAuNy0xLjgtMS4yLTMuMi0xLjQtNC4xYzkuMi02LjIsMTYuNC0xNC4zLDIxLjctMjQuNGgtMTkuNnYtNi45aDI3LjV2Ny4yCgljLTIuNSw1LjUtNS40LDEwLjQtOC42LDE0Ljh2NDIuM2gtNy42VjcyLjFDMzA1LDc1LjEsMzAxLjQsNzguMSwyOTcuMiw4MS4xeiBNMzExLjcsNDAuNWMtMC4yLTAuNS0wLjYtMS4xLTEtMi4xCgljLTIuOC02LTQuNi05LjctNS41LTExLjRsNi45LTMuMWMwLjcsMS4yLDEuOCwzLjMsMy40LDYuNWMxLjYsMywyLjgsNS4yLDMuNCw2LjVMMzExLjcsNDAuNXogTTMyNi44LDgwLjcKCWMtMS42LTIuMS00LjctNS42LTkuMy0xMC43Yy0wLjItMC4yLTAuNS0wLjUtMC43LTAuN2w0LjgtNC41YzIuMSwxLjgsNC45LDQuNiw4LjYsOC4zYzEuMSwxLjIsMS45LDIsMi40LDIuNEwzMjYuOCw4MC43egoJIE0zMjguNSw1Ni42VjQ5aDE4LjZWMjQuM2g4LjN2MjQuOEgzNzV2Ny42aC0xOS42djM5LjJoMjIuNHY2LjloLTUzdi02LjloMjIuNFY1Ni42SDMyOC41eiIvPgo8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMzg5LjgsMTAxLjRWMjkuMUg0NjJ2Ny42aC02NC4zdjU3LjhoNjUuN3Y2LjlIMzg5Ljh6IE00NTAuMyw5MC40Yy02LjItNi42LTEyLjYtMTMtMTkuMy0xOC45CgljLTYsNS43LTEzLjQsMTIuMy0yMi40LDE5LjZjLTEuNC0xLjYtMy40LTMuOC02LjItNi41YzguMy01LjcsMTUuOC0xMiwyMi43LTE4LjljLTYuOS02LjQtMTMuOC0xMi43LTIwLjYtMTguOWw2LjItNS4yTDQzMSw2MC4yCgljNS41LTYuMiwxMC45LTEyLjgsMTYuMi0yMGw3LjIsNC41Yy01LjcsNy42LTExLjYsMTQuNC0xNy41LDIwLjZjNi45LDYuNywxMy42LDEzLDIwLjMsMTguOUw0NTAuMyw5MC40eiIvPgo8L3N2Zz4K)}.brand-box{position:absolute}.related-section{min-height:42px;padding:5px 0;margin-top:25px;border-top:1px solid #eee}.related-section>.related-box{margin-top:17p
<style>a{color:#778087}.topic-list p{margin:0 0 0 0}.topic-content{min-height:40px}.collapse form{position:relative;width:300px;float:right}div.search{padding:10px 0}.d1 input{height:20px;padding-left:18px;border:1px solid #ddd;border-radius:15px;outline:none;background:#ffffff;color:#9E9C9C;float:right}.vote{font-weight:normal;margin-left:6px}.topic-list{word-break:break-all;word-wrap:break-word}/*!*border-bottom: solid #eee 1px;*!*/.user-info{padding:5px 0 5px 0}.topic-info a,.topic-info{padding-top:5px}.topic-info a:hover{text-decoration:solid}</style>
<style>body{background-color:#eee}form{margin:0!important}a:focus{text-decoration:none}.box a:hover{text-decoration:none}#Wrapper .row.box{margin-left:0px}.navbar-inner{border-radius:0px;min-height:40px;padding-right:0px;padding-left:0px;outline:none;margin-bottom:0;list-style:none;z-index:1050;background:#fff;-webkit-box-shadow:0 1px 4px rgba(0,21,41,0.08);box-shadow:0 1px 4px rgba(0,21,41,0.08);line-height:46px;-webkit-transition:background .3s,width .2s;-o-transition:background .3s,width .2s;transition:background .3s,width .2s}.bs-docs-footer{text-align:left;color:#99979c;height:64px;background-color:#FFF;border-top:1px solid rgba(0,0,0,0.22);line-height:64px}.bs-docs-footer .links>a{display:inline-block;padding:0 12px;border-left:1px solid #e8e8e8;color:#8c8c8c;line-height:1}.bs-docs-footer .links>a:first-child{border-left:none}.box-container .user-info{margin-bottom:10px;background:#fff}.content-title{font-size:24px;color:#333;text-decoration:none;line-height:24px;text-shadow:0 1px 0#fff}.box-container{padding:20px}.label{background-color:#f4f4f4;line-height:12px;display:inline-block;padding:4px 4px 4px 4px;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;text-decoration:none;text-shadow:none;font-weight:normal}.topic-info{color:#999!important;font-size:12px!important}.topic-info a{padding:0px;color:#555!important;font-size:12px!important}.topic-info a:hover{color:#4d5256;text-decoration:underline}.topic-info .cell{padding-left:0!important;margin-left:0px;font-size:10px;font-weight:bold}.markdown-body img{max-width:90%!important;text-align:center;margin-left:auto;margin-right:auto;display:block;padding:10px 0px 10px 0px}.topic-info span{margin-left:0px;font-size:10px;color:rgba(0,0,0,0.45)}.btn{display:inline-block;padding:4px 12px;margin-bottom:0;font-size:14px;line-height:20px;background-color:#f4f4f4;color:#444;border-color:#ddd;font-family:"Helvetica Neue For Number",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Helvetica Neue",Helvetica,Arial,sans-serif;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;list-style:none;font-weight:400;text-align:center;cursor:pointer;background-image:none;white-space:nowrap;border-radius:2px;height:32px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.box{font-family:Monospaced Number,Chinese Quote,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;line-height:1.5;color:rgba(0,0,0,0.65);-webkit-box-sizing:border-box;box-sizing:border-box;margin-top:0!important;margin-bottom:20px;padding:0;list-style:none;background:#fff;border-radius:2px;position:relative;-webkit-transition:all .3s;-o-transition:all .3s;transition:all .3s;-moz-box-shadow:0 1px 1px rgba(0,0,0,0.15);-webkit-box-shadow:0 1px 1px rgba(143,168,191,.35);box-shadow:0 1px 1px rgba(143,168,191,.35);border-bottom:1px solid #e2e2e9}.span10{float:left;min-height:1px}#Wrapper .span10{margin-left:0px!important;max-width:960px}@media (min-width:1200px){.container{width:82%!important}}@media screen and (min-width:1500px){#Wrapper.container,.navbar .navbar-inner .container,.bs-docs-footer .container{max-width:1100px!important}#Wrapper .span10{max-width:810px!important}}@media screen and (min-width:980px) and (max-width:1499px){#Wrapper.container,.navbar .navbar-inner .container,.bs-docs-footer .container{max-width:1100px!important}#Wrapper .span10{max-width:74%!important}}@media screen and (min-width:768px) and (max-width:979px){#Wrapper.container,.navbar .navbar-inner .container,.bs-docs-footer .container{width:90%!important}#Wrapper .span10{width:77%!important}.nav-collapse{clear:none!important;height:auto!important;overflow:auto!important;float:right}}@media screen and (max-width:767px){#Wrapper.container,.navbar .navbar-inner .container,.bs-docs-footer .container{width:100%!important}.topic-info .info-left,.topic-info .info-right{display:block}.topic-info .info-right{margin-top:10px}.topic-info span{margin-left:0px}}@medi
<style>/*! prefixes.scss v0.1.0 | Author: Pandao | https://github.com/pandao/prefixes.scss | MIT license | Copyright (c) 2015 */@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2){}@media only screen and (-webkit-min-device-pixel-ratio:3),only screen and (min-device-pixel-ratio:3){}/*! prefixes.scss v0.1.0 | Author: Pandao | https://github.com/pandao/prefixes.scss | MIT license | Copyright (c) 2015 *//*!
* Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome
* License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
*/@font-face{font-family:"FontAwesome";src:url(data:font/woff2;base64,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
<style>.highlight .k{color:#204a87;font-weight:bold}.highlight .n{color:#000000}.highlight .o{color:#ce5c00;font-weight:bold}.highlight .c1{color:#8f5902;font-style:italic}.highlight .kd{color:#204a87;font-weight:bold}.highlight .kn{color:#204a87;font-weight:bold}.highlight .kt{color:#204a87;font-weight:bold}.highlight .s{color:#4e9a06}.highlight .na{color:#c4a000}.highlight .nc{color:#000000}.highlight .nd{color:#5c35cc;font-weight:bold}.highlight .nf{color:#000000}.highlight .nn{color:#000000}.highlight .mi{color:#0000cf;font-weight:bold}</style>
<style>@-webkit-keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@media (max-width:800px){}</style>
<!--[if lte IE 8]>
<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
<![endif]-->
<!--[if !IE]> -->
<style>#waf_nc_block{position:fixed;width:100%;height:100%;top:0;bottom:0;left:0;z-index:99999}</style><style data-id=immersive-translate-input-injected-css>@-webkit-keyframes immersive-translate-loading-animation{from{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(359deg)}}@keyframes immersive-translate-loading-animation{from{transform:rotate(0deg)}to{transform:rotate(359deg)}}@keyframes immersiveTranslateShadowRolling{0%{box-shadow:0px 0 rgba(255,255,255,0),0px 0 rgba(255,255,255,0),0px 0 rgba(255,255,255,0),0px 0 rgba(255,255,255,0)}12%{box-shadow:100px 0 var(--loading-color),0px 0 rgba(255,255,255,0),0px 0 rgba(255,255,255,0),0px 0 rgba(255,255,255,0)}25%{box-shadow:110px 0 var(--loading-color),100px 0 var(--loading-color),0px 0 rgba(255,255,255,0),0px 0 rgba(255,255,255,0)}36%{box-shadow:120px 0 var(--loading-color),110px 0 var(--loading-color),100px 0 var(--loading-color),0px 0 rgba(255,255,255,0)}50%{box-shadow:130px 0 var(--loading-color),120px 0 var(--loading-color),110px 0 var(--loading-color),100px 0 var(--loading-color)}62%{box-shadow:200px 0 rgba(255,255,255,0),130px 0 var(--loading-color),120px 0 var(--loading-color),110px 0 var(--loading-color)}75%{box-shadow:200px 0 rgba(255,255,255,0),200px 0 rgba(255,255,255,0),130px 0 var(--loading-color),120px 0 var(--loading-color)}87%{box-shadow:200px 0 rgba(255,255,255,0),200px 0 rgba(255,255,255,0),200px 0 rgba(255,255,255,0),130px 0 var(--loading-color)}100%{box-shadow:200px 0 rgba(255,255,255,0),200px 0 rgba(255,255,255,0),200px 0 rgba(255,255,255,0),200px 0 rgba(255,255,255,0)}}@media screen and (max-width:768px){}@media screen and (max-width:768px){}@media screen and (max-width:768px){}@keyframes image-loading-rotate{from{transform:rotate(360deg)}to{transform:rotate(0deg)}}</style><meta name=referrer content=no-referrer><link rel=icon href="data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAADDUExURUxpcVVVVUNDVT5CTz1BUEBVVT1BUD1BTz5CTz5GT0BDUVVVVT5CTz5BUj1CTz5BT05OYj1CUD5GVUJCUj5CUD5BTz5BT0lJbT5CUEJCVT9DUUBHVT5CUD5CTz9CUD5BTz1BTz5CUEREUz5CUD5BUD5DTz5CUD5BT0BDUT5CTz1CUD5EUUBgYEBDUT5CUT1CTz1BUD5BUD9DUT1CT0REVT5BUENDUT1BUEBGUz1BUD9DT0FBUz1CTz5BTz1CUD1BUD1BT5JdbS4AAABAdFJOUwAJKr76DPbywR1MBuRO5fsNsyEfvdtKB4MbfiTa+FnegYwitbBXfPdYrt0pCEiL9XmsRdgeVhO8KI2KK45a2b/ePQx7AAAAwUlEQVQ4y4XTxw7CQAwE0A2E0BN67733Xv3/X4U0kYgimKxP9vgdfNhVildaBVfmpQGPaPD+7mjAW74g5q8Ewqd4QHy1T+JCm4IdsqswsEUUchhYHxCFhYENkpYw0MCFEZuCJYKuMDB1LzQZsPLehX/BCONEGCiWcWGKghKmlTAwwDA3GbByGArCQA39UBiYLfwX/gD3mdyEgSy6i8nAuIfuLAx00ByFgbaB5hT3VdUDmk8mfc0fa9Y1oKLZKyNo+QEJQV3gLnHrKwAAAABJRU5ErkJggg==" type=image/x-icon><style>.sf-hidden{display:none!important}</style><link rel=canonical href="https://xz.aliyun.com/t/16923?time__1311=Gui%3D0KYKY5DKGKDs674Cq7I4SZtdddDOfeD"><meta http-equiv=content-security-policy content="default-src 'none'; font-src 'self' data:; img-src 'self' data:; style-src 'unsafe-inline'; media-src 'self' data:; script-src 'unsafe-inline' data:; object-src 'self' data:; frame-src 'self' data:;"></head>
<body>
<div class="navbar navbar-default">
<div class=navbar-inner>
<div class=container style=text-align:center;position:relative>
<!--[if lte IE 8]>
<span style="display:inline-block;margin:0 auto;color:red;">为了更好的体验请使用IE10及以上版本</span>
<![endif]-->
<div class=brand-box>
<a class=brand href=https://xz.aliyun.com/tab/1></a>
</div>
<a href="https://account.aliyun.com/login/login.htm?oauth_callback=https%3A%2F%2Fxz.aliyun.com%2Ft%2F16923&amp;from_type=xianzhi" class="pull-right anonymous-user hh_loding sf-hidden">
登录</a>
<div class="nav-collapse collapse">
<div class="search d1 text-right">
<form action=/search>
<input type=text placeholder=搜索 name=keyword value>
</form>
</div>
</div>
</div>
</div>
</div>
<div id=Wrapper class=container>
<div class=row2>
<div class=span10>
<div class="row box content" width="1200px !important" style=width:1200px>
<div class=box-container>
<div class=main-topic>
<div class="clearfix user-info topic-list">
<p><span class=content-title>Apache mina CVE-2024-52046漏洞分析复现</span>
</p>
<div class=topic-info>
<span class=info-left>
<a href=https://xz.aliyun.com/u/29297>
<span class="username cell"> w4nder</span></a> <span class=i-seprator> / </span>
<span> 2024-12-26 17:30:45</span><span class=i-seprator> / </span>
<span>发表于江苏 / </span>
<span>浏览数 192</span>
<span class=content-node>
<span class="label label-default label-node-first">
<a href=https://xz.aliyun.com/tab/4>社区板块</a></span>
<span class="label label-default">
<a href=https://xz.aliyun.com/node/1>漏洞分析</a></span>
</span>
</span>
<span class="pull-right t-vote cell info-right"><a class="vote vote-up" href=javascript:void(0)>
顶(0)</a>
<a class="vote vote-down" href=javascript:void(0)>
踩(0)</a></span>
</div>
</div>
<hr>
<div id=topic_content class="topic-content markdown-body">
<p>简单看看apache mina这个洞比较简单师傅们多包涵</p>
<p><strong>CVE-2024-52046</strong></p>
<p><strong>影响版本</strong></p>
<p>Apache MINA 2.0.X &lt; 2.0.27</p>
<p>Apache MINA 2.1.X &lt; 2.1.10</p>
<p>Apache MINA 2.2.X &lt; 2.2.4</p>
<blockquote><p>该漏洞仅在应用程序使用 IoBuffer#getObject() 方法,并通过ProtocolCodecFilter和ObjectSerializationCodecFactory进行数据处理时才会受到影响</p>
</blockquote>
<p><strong>分析复现</strong></p>
<p>使用github上的2.0.26版本,<a href=https://github.com/apache/mina/releases/tag/2.0.26 target=_blank>https://github.com/apache/mina/releases/tag/2.0.26</a></p>
<p>创建一个server和client环境</p>
<p>MinaClient</p>
<div class=highlight><pre><span></span><span class=kn>package</span> <span class=nn>org.apache.mina</span><span class=o>;</span>
<span class=kn>import</span> <span class=nn>org.apache.mina.core.future.ConnectFuture</span><span class=o>;</span>
<span class=kn>import</span> <span class=nn>org.apache.mina.core.service.IoConnector</span><span class=o>;</span>
<span class=kn>import</span> <span class=nn>org.apache.mina.core.session.IoSession</span><span class=o>;</span>
<span class=kn>import</span> <span class=nn>org.apache.mina.filter.codec.ProtocolCodecFilter</span><span class=o>;</span>
<span class=kn>import</span> <span class=nn>org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory</span><span class=o>;</span>
<span class=kn>import</span> <span class=nn>org.apache.mina.transport.socket.nio.NioSocketConnector</span><span class=o>;</span>
<span class=kn>import</span> <span class=nn>java.net.InetSocketAddress</span><span class=o>;</span>
<span class=kd>public</span> <span class=kd>class</span> <span class=nc>MinaClient</span> <span class=o>{</span>
<span class=kd>public</span> <span class=kd>static</span> <span class=kt>void</span> <span class=nf>main</span><span class=o>(</span><span class=n>String</span><span class=o>[]</span> <span class=n>args</span><span class=o>)</span> <span class=kd>throws</span> <span class=n>Exception</span> <span class=o>{</span>
<span class=n>IoConnector</span> <span class=n>connector</span> <span class=o>=</span> <span class=k>new</span> <span class=n>NioSocketConnector</span><span class=o>();</span>
<span class=c1>// 设置处理器</span>
<span class=n>connector</span><span class=o>.</span><span class=na>setHandler</span><span class=o>(</span><span class=k>new</span> <span class=n>ClientHandler</span><span class=o>());</span>
<span class=c1>// 设置编解码器</span>
<span class=n>connector</span><span class=o>.</span><span class=na>getFilterChain</span><span class=o>().</span><span class=na>addLast</span><span class=o>(</span><span class=s>"codec"</span><span class=o>,</span>
<span class=k>new</span> <span class=n>ProtocolCodecFilter</span><span class=o>(</span><span class=k>new</span> <span class=n>ObjectSerializationCodecFactory</span><span class=o>()));</span>
<span class=c1>// 连接到服务器</span>
<span class=n>ConnectFuture</span> <span class=n>future</span> <span class=o>=</span> <span class=n>connector</span><span class=o>.</span><span class=na>connect</span><span class=o>(</span><span class=k>new</span> <span class=n>InetSocketAddress</span><span class=o>(</span><span class=s>"localhost"</span><span class=o>,</span> <span class=mi>8080</span><span class=o>));</span>
<span class=n>future</span><span class=o>.</span><span class=na>awaitUninterruptibly</span><span class=o>();</span>
<span class=n>IoSession</span> <span class=n>session</span> <span class=o>=</span> <span class=n>future</span><span class=o>.</span><span class=na>getSession</span><span class=o>();</span>
<span class=n>session</span><span class=o>.</span><span class=na>write</span><span class=o>(&lt;</span><span class=n>恶意Object</span><span class=o>&gt;);</span>
<span class=c1>// 等待关闭连接</span>
<span class=n>session</span><span class=o>.</span><span class=na>getCloseFuture</span><span class=o>().</span><span class=na>awaitUninterruptibly</span><span class=o>();</span>
<span class=n>connector</span><span class=o>.</span><span class=na>dispose</span><span class=o>();</span>
<span class=o>}</span>
<span class=o>}</span>
<span class=kd>class</span> <span class=nc>ClientHandler</span> <span class=kd>extends</span> <span class=n>org</span><span class=o>.</span><span class=na>apache</span><span class=o>.</span><span class=na>mina</span><span class=o>.</span><span class=na>core</span><span class=o>.</span><span class=na>service</span><span class=o>.</span><span class=na>IoHandlerAdapter</span> <span class=o>{</span>
<span class=nd>@Override</span>
<span class=kd>public</span> <span class=kt>void</span> <span class=nf>messageReceived</span><span class=o>(</span><span class=n>IoSession</span> <span class=n>session</span><span class=o>,</span> <span class=n>Object</span> <span class=n>message</span><span class=o>)</span> <span class=kd>throws</span> <span class=n>Exception</span> <span class=o>{</span>
<span class=n>System</span><span class=o>.</span><span class=na>out</span><span class=o>.</span><span class=na>println</span><span class=o>(</span><span class=s>"Client received message: "</span> <span class=o>+</span> <span class=n>message</span><span class=o>);</span>
<span class=o>}</span>
<span class=nd>@Override</span>
<span class=kd>public</span> <span class=kt>void</span> <span class=nf>exceptionCaught</span><span class=o>(</span><span class=n>IoSession</span> <span class=n>session</span><span class=o>,</span> <span class=n>Throwable</span> <span class=n>cause</span><span class=o>)</span> <span class=kd>throws</span> <span class=n>Exception</span> <span class=o>{</span>
<span class=n>cause</span><span class=o>.</span><span class=na>printStackTrace</span><span class=o>();</span>
<span class=o>}</span>
<span class=o>}</span>
</pre></div>
<p>MinaServer</p>
<div class=highlight><pre><span></span><span class=kn>import</span> <span class=nn>org.apache.mina.core.service.IoAcceptor</span><span class=o>;</span>
<span class=kn>import</span> <span class=nn>org.apache.mina.core.session.IdleStatus</span><span class=o>;</span>
<span class=kn>import</span> <span class=nn>org.apache.mina.core.session.IoSession</span><span class=o>;</span>
<span class=kn>import</span> <span class=nn>org.apache.mina.filter.codec.ProtocolCodecFilter</span><span class=o>;</span>
<span class=kn>import</span> <span class=nn>org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory</span><span class=o>;</span>
<span class=kn>import</span> <span class=nn>org.apache.mina.transport.socket.nio.NioSocketAcceptor</span><span class=o>;</span>
<span class=kn>import</span> <span class=nn>java.net.InetSocketAddress</span><span class=o>;</span>
<span class=kd>public</span> <span class=kd>class</span> <span class=nc>MinaServer</span> <span class=o>{</span>
<span class=kd>public</span> <span class=kd>static</span> <span class=kt>void</span> <span class=nf>main</span><span class=o>(</span><span class=n>String</span><span class=o>[]</span> <span class=n>args</span><span class=o>)</span> <span class=kd>throws</span> <span class=n>Exception</span> <span class=o>{</span>
<span class=n>IoAcceptor</span> <span class=n>acceptor</span> <span class=o>=</span> <span class=k>new</span> <span class=n>NioSocketAcceptor</span><span class=o>();</span>
<span class=c1>// 设置处理器</span>
<span class=n>acceptor</span><span class=o>.</span><span class=na>setHandler</span><span class=o>(</span><span class=k>new</span> <span class=n>ServerHandler</span><span class=o>());</span>
<span class=c1>// 设置编解码器</span>
<span class=n>acceptor</span><span class=o>.</span><span class=na>getFilterChain</span><span class=o>().</span><span class=na>addLast</span><span class=o>(</span><span class=s>"codec"</span><span class=o>,</span>
<span class=k>new</span> <span class=n>ProtocolCodecFilter</span><span class=o>(</span><span class=k>new</span> <span class=n>ObjectSerializationCodecFactory</span><span class=o>()));</span>
<span class=c1>// 绑定端口</span>
<span class=n>acceptor</span><span class=o>.</span><span class=na>bind</span><span class=o>(</span><span class=k>new</span> <span class=n>InetSocketAddress</span><span class=o>(</span><span class=mi>8080</span><span class=o>));</span>
<span class=n>System</span><span class=o>.</span><span class=na>out</span><span class=o>.</span><span class=na>println</span><span class=o>(</span><span class=s>"Server started at port 8080"</span><span class=o>);</span>
<span class=o>}</span>
<span class=o>}</span>
<span class=kd>class</span> <span class=nc>ServerHandler</span> <span class=kd>extends</span> <span class=n>org</span><span class=o>.</span><span class=na>apache</span><span class=o>.</span><span class=na>mina</span><span class=o>.</span><span class=na>core</span><span class=o>.</span><span class=na>service</span><span class=o>.</span><span class=na>IoHandlerAdapter</span> <span class=o>{</span>
<span class=nd>@Override</span>
<span class=kd>public</span> <span class=kt>void</span> <span class=nf>messageReceived</span><span class=o>(</span><span class=n>IoSession</span> <span class=n>session</span><span class=o>,</span> <span class=n>Object</span> <span class=n>message</span><span class=o>)</span> <span class=kd>throws</span> <span class=n>Exception</span> <span class=o>{</span>
<span class=n>System</span><span class=o>.</span><span class=na>out</span><span class=o>.</span><span class=na>println</span><span class=o>(</span><span class=s>"Received message: "</span> <span class=o>+</span> <span class=n>message</span><span class=o>);</span>
<span class=c1>// 回复消息</span>
<span class=n>session</span><span class=o>.</span><span class=na>write</span><span class=o>(</span><span class=s>"Echo: "</span> <span class=o>+</span> <span class=n>message</span><span class=o>);</span>
<span class=o>}</span>
<span class=nd>@Override</span>
<span class=kd>public</span> <span class=kt>void</span> <span class=nf>exceptionCaught</span><span class=o>(</span><span class=n>IoSession</span> <span class=n>session</span><span class=o>,</span> <span class=n>Throwable</span> <span class=n>cause</span><span class=o>)</span> <span class=kd>throws</span> <span class=n>Exception</span> <span class=o>{</span>
<span class=n>cause</span><span class=o>.</span><span class=na>printStackTrace</span><span class=o>();</span>
<span class=o>}</span>
<span class=o>}</span>
</pre></div>
<p>开启server使用client向server发送序列化数据由于解码器为ProtocolCodecFilter和ObjectSerializationCodecFactoryserver对于接受的message会自动进行反序列化处理</p>
<p><a id=img0 href=https://xzfile.aliyuncs.com/media/upload/picture/20241226172459-4709c600-c36b-1.png><img src="data:image/png;base64,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
<p>在ObjectSerializationDecoder#doDecode处执行getObject</p>
<p><a id=img1 href=https://xzfile.aliyuncs.com/media/upload/picture/20241226172544-61f66cca-c36b-1.png><img src="data:image/png;base64,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
<p>由AbstractIoBuffer#getObject完成反序列化</p>
<p><a id=img2 href=https://xzfile.aliyuncs.com/media/upload/picture/20241226172618-7672321a-c36b-1.png><img src=data:image/png;base64,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
<a id=img3 href=https://xzfile.aliyuncs.com/media/upload/picture/20241226172632-7e8345c0-c36b-1.png><img src="data:image/png;base64,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
<p><strong>修复</strong></p>
<p>修复简单粗暴2.0.27版本中反序列化时会检查当前类是否允许需要手动在ObjectSerializationDecoder设置允许的类否则默认拒绝所有类</p>
<p><a id=img4 href=https://xzfile.aliyuncs.com/media/upload/picture/20241226172645-861a17b4-c36b-1.png><img src="data:image/png;base64,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
<p><a id=img5 href=https://xzfile.aliyuncs.com/media/upload/picture/20241226172655-8c860aea-c36b-1.png><img src=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAACDgAAAZuCAYAAACrQgSLAAEAAElEQVR4nOzdd3hT1RsH8G/adO9NJ6XQlhZaRhllyd5bQRQUFAUBQUCGooiAgIgMkS0geyjIlr3KKlBaoC0FuvfebZqd/P7IL7dJk3SmA3w/z9PnSXNHzr25ueOc97yHVSQskYIQAgAwZ5s2dhEIIYQQQgghhBBCCCGEEBWBi4sgphYdQgh5q+mygIfrLBq7GE2aTmMXgBBCCCGEEEIIIYQQQgghhFTOwZKadAgh5G1H5/qqsXJyCynejxBCCCGEEEIIIYQQQgghpAnLK5Fi5j4WSsoauySEEELqg5kxsONTKWzMWI1dlCaNAhwIIYQQQgghhBBCCCGEEELeAHklUvx5i4XnyUBeaWOXhhBCiDbYmALt3ICpfSm4oTpYUqmUAhwIIYQQQgghhBBCCCGEEEIIIYQQ0qTRIB6EEEIIIYQQQgghhBBCCCGEEEIIafIowIEQQgghhBBCCCGEEEIIIYQQQgghTR4FOBBCCCGEEEIIIYQQQgghhBBCCCGkyaMAB0IIIYQQQgghhBBCCCGEEEIIIYQ0eRTgQAghhBBCCCGEEEIIIYQQQgghhJAmjwIcCCGEEEIIIYQQQgghhBBCCCGEENLkUYADIYQQQgghhBBCCCGEEEIIIYQQQpo8CnAghBBCCCGEEEIIIYQQQgghhBBCSJNHAQ6EEEIIIYQQQgghhBBCCCGEEEIIafLYjV0AQgghhBBCCCGEkKZGKpUiKioKcXFxSEpKgkgkwty5c6GjQ31FCCGEEEIIIYSQxsKSSqXSxi4EIf9lEokUYgmgx2Y1dlEIIYQQQgghhACIjo7G1KlTERoaqvR+SUkJ2GzqK0IIIYQQQgghhDQW6nZASCPacTIJjoOvwabfFXy//VVjF4cQQgghhBBC/vMKCgrQp08fleAGNptN2RsIIYQQQgghhJBGRhkcyFuvtEyMMQtCAAAdW1tg3VyfGi3/xZpwxKWUaZz+00xvdPO3qnG5BEIJbPpdAYcrBgCwWED65YFwsDGo8breNHX9TuqDVAqU8WTfhb6ezn8+o0YZTwKpVApdXRYM9d+MStz6+q2SchKJBOPGjYP81sHNzQ2bN2+udBmBQIAJEyYAAAIDA/HNN9/UezmrQygUAgB0dXX/8w0VIpEIUqkUOjo60NXVrdYyOTk5mD59erXmNTc3x4EDB+pSRLXEYjHGjRundpq1tTV8fX3RoUMH9O3bFyxWw57TpVIprl69iqCgIMTExEAkEilN3759OxwdHStdh0AgwPHjxxEaGork5GSV6adPn9ZqmYlmIrEUfIEEAGBsqIsGPpzqXWJ6GT7/KRwAMGGQE6aNdWvkEqm3efNm3L59u1rzLlq0CN27d9d6GeLj47FgwQK101xdXeHj44NevXqhbdu2Wv/squTm5uLIkSMIDw9Hfn6+0rRu3bph8eLFVa4jMjISZ86cwcuXL1FWpnxPNXv2bPTv31+rZW7Kdu3ahXnz5gEA2rVrhzVr1qBbt24wMjJq3IIRQgghhBBCCCEEavMq5heUoLikFABgYmIEOxvLGq00KSULUqmsEtDV2QG6uv/thgPSuIRiCW6G5AIApLWokH4SVYSnr4o0Tp/7QYtalYvN1oGtlQE43DLmf/Z/pFG9rt9JfTh+NR2Tvg8DAOxZ1g5TR7k2cokaT0oWF82H3wAATBzqjMM/dWjkElVPff1WSbnXr1+rNKr+/PPPMDY21riMRCLBmTNnAKDBG5k1uX79OgYOHAgAOHfuHEaOHNnIJWo8hYWFsLKSBf7Mnj0bW7ZsqdZyZWVlzPdaHfv379f69y+VSqtVBn9/f/z999/w9vbW6udrIhaLMXDgQNy6dUvjPOvWrat0HVlZWejQoQMyMjK0XTxSCzN/jsDeM7Igk+jTfdHK1aSRS6RdpVwxc1/m4WLcZAMcwsLCqn3eGTJkSL0EOBQVFVWrDOPGjcPevXthbm6u9TKoc+vWLQwZMgQCgUDt9OoMp7BixQosX75c4/RRo0bVtnhvpLCwMOb1L7/8gt69ezdiaQh5c0RFReHFixfw9/fX2r1XWloaEhMTwWKxEBgY2OSCk+tjmwkhhBDy5pBwM8CPPw5RQSR0WCzoWLaBgcck6BjZN3bRGpWQz0FORiS4JdkAWDA2s4Otkx/09DXXIxNSEyo1HVKpFGHPo1FSKmt07eDfqkYBDglJ6XgWEQcAMDczhrtb5b3TCGnq2nuZg/v/nv1yuYUC5Baqr0CsLh0WcOSnDth8PAECkQSfDHeBjYV+ndZJao/LF1c903+EvJfqm6a+fquknLoG27CwMPTs2bMRSlN7XC63sYvQZGhqDKuKhYUFOnXqBLFY9puTSqV49uwZAMDAwAC+vr7aKmK1GBgYoFOnTgBkQTWxsbHIyckBAISHh6NXr16Ii4uDmZlZvZdl586dSr8VR0dHNGvWTKW8lfnkk0+Ughs8PT1hamqq3YKSaqN7hKbB398fHTqUB12mpaUhOzsbAODu7s4EawGAra1tvZfH3t4enp6eAGTn0hcvXjBZD06ePInS0lJcvHix3oP7+Hw+xowZw5zPdXV10aZNG6WMPB4eHpWuIzIyUim4wcTEBF5eXkrzWFtba6/QbwDF783Hp/GzzalTWlqKmzdvQiAQgM1mY8yYMUrTz58/Dz6fX+31+fj4oE2bNlouJWnKBAIBnj17hrS0NKSlpYHD4cDBwQGOjo7w8vJCixY1CxAvLS3F8ePHIRaLERUVhW+//bbKe57qiI6OxvXr1wEAAQEBWlmnttTXNhNCCCHkzSDhZoETuhQQyTqMSwBIch5CUvgCRgFroGP43wxyEPI5SI6+CbFYyLxXUpiGspIcuHn3oyAHohUqAQ6x8WlMcIO1lXmNAhTEYgmi49KY/328m2uhiIQ0rr3L2qm8t+5AHL7d8rLO6+7ezgrd21HKfEK0oT5/q0Tm3LlzAABDQ0PweDwAwLVr1964AAdSd5aWlggJCWH+F4vFTA9hPz8/pWkN4b333sORI0eU3ouPj8e4cePw9OlT5OTkYPXq1Vi7dm29l0Uxy8mlS5cwZMiQGi0vFApx7do1ALJAiMTERJUACUL+ixYsWKA0PMTvv/+OuXPnAgCOHDlSLxkbKrNhwwZ89NFHSu/dunULY8aMQXFxMS5fvowbN25gwIAB9VqOly9fori4GADQo0cPXL9+HYaGhjVax40bN5jX33//PVasWFHtIYveVk5OTszr/Px82Ns3rYrJ169f49SpUygtlVWk6unpqQQ4hIeHqww1Uhlzc3MKcPgPKSwsxJEjR5Cenq70fnFxMWJiYnD37l0MGDAAffr0qfY6m0q2toZU1TaHhIQgNzcXJiYmeOeddxqoVIQQQghpKLzXu5jgBkUSYQl4r/+AcbuljVCqxpeZEqoU3CAnFguQnRwK51a9GqFUbw6xRIwDT09gZOuBsDOxaeziNFlKAQ4CgQgx8bIABRaLhTat3Wu0sujYZJSVyRo8HOyt4dSs/nvOEEIIIaT+CYVCpufUtGnTcPv2bURERODUqVNYsWJFI5eOEFUeHh74999/mUaqyoaM0KbkZNlQBsbGxhg8eHCNl+dwOExmjNGjR1NwAyFvkL59+2L//v149913AQCPHj2q9wAHebYaQHZ9rmlwAwClBs5PP/30Px/cAMiy78jl5eU1YkmUiUQiXLlyBcHBwZBKpZXO6+HhUWXWKg6Hg8zMTAD/zcbp/yoOh4MdO3YwATIuLi5o0aIFjI2NkZ2djRcvXkAgEODatWuQSqXo27dvtdZrYmKCDz74AFFRUfDz8/tPZDKoapvDw8MRHx8Pa2trCnAghBBC3jKinEcQF77QOF1cEAFRzhOw7To1YKkaX2lhGriluRqnc0pzwClKh4mFk8Z56otAIIBAIGjSWVLFEjE239+D0PTneJ7xAkv7z
</div>
<div class=post-user-action style=margin-top:34px>
<span class="btn btn-default pull-right" id=mark data-action=topic data-pk=16923>
<span id=mark-text>点击收藏 </span><span class=i-seprator> | </span><span id=mark-count>0</span>
</span>
<span class="btn btn-default pull-right" id=follow_topic data-pk=16923>
<span>关注</span><span class=i-seprator> | </span><span id=follow-count>1</span>
</span>
<span class="btn btn-default pull-right">
<span>
<span id=ready_reward data-toggle=modal data-target=#myModal>打赏</span>
</span>
</span>
<div class=clearfix></div>
</div>
<div class=related-section>
<div class=related-box>
<span><a class=pull-left href=https://xz.aliyun.com/t/16920 title="ciscn2024 androidso_re分析"><span class=related-label style="padding:3px 4px;margin-right:3px">上一篇:</span>ciscn2024 android...</a></span>
<span><a class=pull-left href=https://xz.aliyun.com/t/16924 title=通过漏洞靶场学习Android应用安全><span class=related-label>下一篇:</span>通过漏洞靶场学习Android应用安全</a></span>
</div>
</div>
</div>
</div>
</div>
<div class="modal fade" id=myModal role=dialog aria-labelledby=myModalLabel aria-hidden=true>
<div class=modal-dialog>
<div class=modal-content>
<div class=modal-header>
<h4 class=modal-title id=myModalLabel style=text-align:center>
积分打赏
</h4>
</div>
<div class=modal-body id=button-value>
<div style=text-align:center>
<div role=group>
<button type=button class="btn btn-secondary m64" style=min-width:64px data-value=type1>
1分
</button>
<button type=button class="btn btn-secondary m64" style=min-width:64px data-value=type2>
2分
</button>
<button type=button class="btn btn-secondary m64" style=min-width:64px data-value=type3>
5分
</button>
</div>
<br>
<div style=margin-top:20px>
<button type=button class="btn btn-secondary m64" style=min-width:64px data-value=type4>
8分
</button>
<button type=button class="btn btn-secondary m64" style=min-width:64px data-value=type5>
10分
</button>
<button type=button class="btn btn-secondary m64" style=min-width:64px data-value=type6>
20分
</button>
</div>
</div>
</div>
<div class=modal-footer id=confirm>
<button type=button class="btn btn-default" data-dismiss=modal>关闭</button>
<button type=button class="btn btn-primary" id=reward_topic data-pk=16923>确定</button>
</div>
</div>
</div>
</div>
<div class="row box" style=display:none>
</div>
<div class="row box" id=reply-box style=display:none>
</div>
</div>
</div>
</div>
<footer class=bs-docs-footer>
<div class="container text-center">
<div class=links>
<a href=https://xz.aliyun.com/feed target=_blank>RSS</a>
<a href=https://xz.aliyun.com/about target=_blank><span>关于社区</span></a>
<a href=https://xz.aliyun.com/partner target=_blank><span>友情链接</span></a>
<a href=https://xz.aliyun.com/notice>社区小黑板</a>
<a href=https://xz.aliyun.com/connection>联系我们</a>
<a href=https://report.aliyun.com/ target=_blank>举报中心</a>
<a href=https://www.aliyun.com/complaint target=_blank>我要投诉</a>
</div>
</div>
</footer>
<div id=waf_nc_block style=display:none></div><div id=immersive-translate-popup style=all:initial><template shadowrootmode=open><style class=sf-hidden>/*!
* Pico.css v1.5.6 (https://picocss.com)
* Copyright 2019-2022 - Licensed under MIT
*/#mount{--font-family:system-ui,-apple-system,"Segoe UI","Roboto","Ubuntu","Cantarell","Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--line-height:1.5;--font-weight:400;--font-size:16px;--border-radius:0.25rem;--border-width:1px;--outline-width:3px;--spacing:1rem;--typography-spacing-vertical:1.5rem;--block-spacing-vertical:calc(var(--spacing)*2);--block-spacing-horizontal:var(--spacing);--grid-spacing-vertical:0;--grid-spacing-horizontal:var(--spacing);--form-element-spacing-vertical:0.75rem;--form-element-spacing-horizontal:1rem;--nav-element-spacing-vertical:1rem;--nav-element-spacing-horizontal:0.5rem;--nav-link-spacing-vertical:0.5rem;--nav-link-spacing-horizontal:0.5rem;--form-label-font-weight:var(--font-weight);--transition:0.2s ease-in-out;--modal-overlay-backdrop-filter:blur(0.25rem)}@media (min-width:576px){#mount{--font-size:17px}}@media (min-width:768px){#mount{--font-size:18px}}@media (min-width:992px){#mount{--font-size:19px}}@media (min-width:1200px){#mount{--font-size:20px}}@media (min-width:576px){#mount>header,#mount>main,#mount>footer,section{--block-spacing-vertical:calc(var(--spacing)*2.5)}}@media (min-width:768px){#mount>header,#mount>main,#mount>footer,section{--block-spacing-vertical:calc(var(--spacing)*3)}}@media (min-width:992px){#mount>header,#mount>main,#mount>footer,section{--block-spacing-vertical:calc(var(--spacing)*3.5)}}@media (min-width:1200px){#mount>header,#mount>main,#mount>footer,section{--block-spacing-vertical:calc(var(--spacing)*4)}}@media (min-width:576px){article{--block-spacing-horizontal:calc(var(--spacing)*1.25)}}@media (min-width:768px){article{--block-spacing-horizontal:calc(var(--spacing)*1.5)}}@media (min-width:992px){article{--block-spacing-horizontal:calc(var(--spacing)*1.75)}}@media (min-width:1200px){article{--block-spacing-horizontal:calc(var(--spacing)*2)}}dialog>article{--block-spacing-vertical:calc(var(--spacing)*2);--block-spacing-horizontal:var(--spacing)}@media (min-width:576px){dialog>article{--block-spacing-vertical:calc(var(--spacing)*2.5);--block-spacing-horizontal:calc(var(--spacing)*1.25)}}@media (min-width:768px){dialog>article{--block-spacing-vertical:calc(var(--spacing)*3);--block-spacing-horizontal:calc(var(--spacing)*1.5)}}a{--text-decoration:none}a.secondary,a.contrast{--text-decoration:underline}small{--font-size:0.875em}h1,h2,h3,h4,h5,h6{--font-weight:700}h1{--font-size:2rem;--typography-spacing-vertical:3rem}h2{--font-size:1.75rem;--typography-spacing-vertical:2.625rem}h3{--font-size:1.5rem;--typography-spacing-vertical:2.25rem}h4{--font-size:1.25rem;--typography-spacing-vertical:1.874rem}h5{--font-size:1.125rem;--typography-spacing-vertical:1.6875rem}[type="checkbox"],[type="radio"]{--border-width:2px}[type="checkbox"][role="switch"]{--border-width:3px}thead th,thead td,tfoot th,tfoot td{--border-width:3px}:not(thead,tfoot)>*>td{--font-size:0.875em}pre,code,kbd,samp{--font-family:"Menlo","Consolas","Roboto Mono","Ubuntu Monospace","Noto Mono","Oxygen Mono","Liberation Mono",monospace,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}kbd{--font-weight:bolder}[data-theme="light"],#mount:not([data-theme="dark"]){--background-color:#fff;--background-light-green:#F5F7F9;--color:hsl(205deg,20%,32%);--h1-color:hsl(205deg,30%,15%);--h2-color:#24333e;--h3-color:hsl(205deg,25%,23%);--h4-color:#374956;--h5-color:hsl(205deg,20%,32%);--h6-color:#4d606d;--muted-color:hsl(205deg,10%,50%);--muted-border-color:hsl(205deg,20%,94%);--primary:hsl(195deg,85%,41%);--primary-hover:hsl(195deg,90%,32%);--primary-focus:rgba(16,149,193,0.125);--primary-inverse:#fff;--secondary:hsl(205deg,15%,41%);--secondary-hover:hsl(205deg,20%,32%);--secondary-focus:rgba(89,107,120,0.125);--secondary-inverse:#fff;--contrast:hsl(205deg,30%,15%);--contrast-hover:#000;--contrast-focus:rgba(89,107,120,0.125);--contrast-inverse:#fff;--mark-background-color:#fff2ca;--mark-color:#543a26;--ins-color:#388e3c;--del-color:#c62828;--blockquote-border-color:var(--muted-border-color);--blockquote-footer-color:var(--muted-c