Forward
以前剖析过tp6的一个链;那时候是利用__toString *** 去开展的转站,进而完成前后左右2个链的连接,此次是2个此外传动链条;利用的是可控类下的固定不动 *** 开展转站;逐渐剖析;
文中涉及到知识要点实际操作训练:ThinkPHP5远程连接命令执行系统漏洞(根据该试验掌握ThinkPHP5远程连接命令执行系统漏洞的缘故和利用 *** ,及其如何修复该系统漏洞。)
更先自然环境能够composer一键构建,随后php think run开展跑起来就可;
更先的念头便是利用析构函数开展最初的开启;随后一路追踪法术函数去开展一步一步的计算;更先寻找法术函数在AbstractCache类下;
其编码如上;能够见到autosave能够可控;这儿我们可以手动式给其拷贝为false;进而能够开启save *** ;
回朔save *** ;在CacheStore中找到save *** ;实际编码以下;
能够见到其启用了getForStorage *** ,随后将其取值给$contents自变量。这儿追随着一下这一 *** ;
发觉更先启用了cleanContents *** ;随后在启用了json_encode *** ,这儿更先回朔一下cleanContents *** ;
更先在这儿看到了array_flip *** ;这一 *** 是将二维数组的键名和键值开展更换;随后数组赋值给$cachedProperties自变量;随后将大家传到的主要参数依照$path和$object的文件格式来开展每个解析xml;随后将键名历经is_array *** 的分辨假如为true则开展事后的函数解决;不然就立即return $content这一二维数组;历经这一系列实际操作完以后,最后是return到save函数里;随后然后去开展 $this->store->set($this->key, $contents, $this->expire);这儿大家发觉store也可控;那麼就会有二种构思,之一个便是去实例化一个有set *** 的类,或是大家实例化一个存有__call *** 的类;进而能够由于浏览不会有的 *** 去启用到call魔术师 *** ;这儿大家先寻找一个有set *** 的类;在File类中寻找:
这儿可利用点在后面的serialize *** ;立即追朔一下;
这儿发觉options参数可控;这儿就存有一个难题,如果我们将其取值为system,那麼事后return的便是大家指令执行函数,里边的data我们都是能够传到的,那麼大家就可以完成RCE;
这儿释放自己写的exp;
最终做到的实际效果便是system(xxxx);这儿那时候我检测沒有回显,之后将编码调节了一下,发觉是system里边主要参数的难题,之后我想起linux或是unix下反引号也是能够作为指令执行的,并且是能够更先执行的;因此我将编码改了下,置入反引号,那样能够更强的开展指令执行,可是那样的缺陷便是能够执行,可是无回显;可是大家仍然能够开展一些故意实际操作;
根据这一链,坚信能够发觉一些眉目,除开能够rce之外,这一链在最终的利用地区还有一个file_put_contents这一也是能够利用的;
下边利用的一些骚姿态如果有师父太了解,能看这一连接;
下边也叙述一下;利用链和以前的是一样的;便是最终必须操控一下filename和data的內容;我们可以见到如下图;
在最终的情况下会有一个data的拼凑,我原本惦记着在恢复出厂设置那边试着引进,可是恢复出厂设置早已写去世了,不可以利用非法字符开展环境污染恢复出厂设置引进风险编码;因此只有在最终的data处开展载入拼凑;如今便是要操纵data了;实际上这儿data是启用了serialize *** ,追朔一下不会太难发觉是将二维数组option中的serialize的键值拿出来套在了data前边;实际上实质上也无影晌;可是这儿有一个凹坑;由于是
data);因此这儿规定那样的配搭务必是恰当的,假如你随意传到函数,导致例如adsf($data);那样种类的不规律函数,便会造成 出错,进而没法开展;
懂了这一点实际上还有一个凹坑;实际上option的內容我们都是可控的;那麼大家就可以操纵serialize的键值开展传到;可是这儿由于以前开展了json_encode因此一般的函数最终组成的文件格式都没法开展base64破译;可是这儿有一个除外,我检测了serialize函数,发觉历经实例化以后,我们可以一切正常开展base64破译;大约是由于能够组成字符串数组的缘故吧;这儿释放我的exp;
此外很有可能有很多老师傅疑惑在应写文件目录的难题,这儿.我用了虚文件目录的 *** 将其精准定位到public文件目录下;就在path主要参数那边能够反映;
最终浏览結果是执行phpinfo;自然还可以载入system那样的指令执行函数;导致木马病毒利用;
Forward之前分析过tp6的一个链;当时是利用__toString方法去进行的中转,从而实现前后两个链的链接,这次是两个另外链条;利用的是可控类下的固定方法进行中转;开始分析;首先环境可以comp...