PHP反序列化与WordPress一些意外BUG的风趣结合

访客5年前关于黑客接单1674

几个月前,我正在编写一篇关于PHP反序列化缝隙的博客文章,决定为这篇文章找一个实在方针,能够让我将测试数据传输给PHP unserialize ()函数来完结演示意图。所以我下载了一批WordPress插件,并开端经过grepping来寻觅调用unserialize ()的代码实例:
$url = 'http://api.wordpress.org/plugins/info/1.0/';
$response = wp_remote_post ($url, array ('body' => $request));
$plugin_info = @unserialize ($response ['body']);
if (isset ($plugin_info->ratings)) {
这个插件的问题在于发送明文HTTP恳求,而且将该恳求呼应传递给了unserialize ()函数。就实在进犯而言,它并不是更佳进口点,可是假如我能经过这种微乎其微的办法向unserialize ()函数供给输出来触发代码的话,这就足够了!
0×01 PHP反序列化进犯
简略来说,当进犯者能够将他的数据供给给应用程序,而该应用程序将数据转化为运转目标时没有作恰当验证的时分就会呈现反序列化缝隙。假如进犯者数据被答应去操控运转目标的特点,那么进犯者就能够操作任何运用这些目标特点的代码履行流程,就有或许运用它建议进犯。这是一种称为面向特点编程(POP)的技能,一个POP小工具是能够经过这种办法操控任何代码片段,开发完结是经过向应用程序供给特制目标,以便在这些目标进行反序列化的时分触发一些有用的行为。假如想了解更多概况的话,能够参看我的博客文章《Attacking Java Deserialization》(https://nickbloor.co.uk/2019/08/13/attacking-java-deserialization/),其间的一般概念适用于任何根底技能。
在PHP应用程序的现状来看,POP小工具最为人熟知和最牢靠的原因在于类的__wakeup()办法(PHP“戏法办法”,unserialize()函数会查看是否存在__wakeup(),假如存在,则会先调用__wakeup()办法,预先预备目标需求的资源),假如一个类界说了__wakeup()办法,那么不管何时该类的某个目标运用了unserialize ()函数进行反序列化都能确保__wakeup()办法被调用,别的一个原因是__destruct ()办法(当创立的目标被毁掉或遇到PHP完毕符号的时分,比方程序现已履行完毕,目标会主动调用__destruct()履行一些相应的操作,能够自行界说),例如PHP脚本履行完结时(未发作丧命过错),当反序列化目标超出范围时仍简直能够确保__destruct ()办法被调用。
除了__wakeup ()和__destruct ()办法之外, PHP还有其他“戏法办法”,能够在类中界说,也能够在反序列化之后调用,这取决于反序列化目标的运用办法。在一个更大更杂乱的应用程序中或许很难追寻到反序列化目标在哪里完毕以及怎么来运用它或调用那些办法,所以确认那些类能够用于PHP反序列化缝隙运用也很困难,由于相关文件或许未包含在进口点,或许一个类的主动加载器(例如spl_autoload_register()函数)或许以及被注册来进一步混杂。
0×02 通用的PHP POP小工具
为了简化这个进程,我编写了一个PHP类,它界说了一切戏法办法而且在调用任何戏法办法时将详细信息写入日志文件。特别风趣的是戏法办法__get()和__call(),假如应用程序测验获取不存在的特点或调用该类中不存在的办法时就会调用以上戏法办法,前者能够用来辨认在payload object上设置的特点,以便操作并运用这些特点的代码,而后者能够用来辨认POP小工具触发运用的非戏法办法(而且能够将它们本身用作POP小工具)。
该类的__wakeup ()办法还运用了get_declared_classes ()函数来检索和记载能够运用exploit payload的已声明类的列表(尽管这不会反映当时未声明但能够主动加载的类)。
if(!class_exists("UniversalPOPGadget")) {
class UniversalPOPGadget {
private function logEvent($event) {
file_put_contents('UniversalPOPGadget.txt', $event . "rn", FILE_APPEND);
}
public function __construct() { $this->logEvent('UniversalPOPGadget::__construct()'); }
public function __destruct() { $this->logEvent('UniversalPOPGadget::__destruct()'); }
public function __call($name, $args) {
$this->logEvent('UniversalPOPGadget::__call(' . $name . ', ' . implode(',', $args) . ')');
}
public static function __callStatic($name, $args) {
$this->logEvent('UniversalPOPGadget::__callStatic(' . $name . ', ' . implode(',', $args) . ')');
}
public function __get($name) { $this->logEvent('UniversalPOPGadget::__get(' . $name . ')'); }
public function __set($name, $value) { $this->logEvent('UniversalPOPGadget::__set(' . $name . ', ' . $value . ')'); }
public function __isset($name) { $this->logEvent('UniversalPOPGadget::__isset(' . $name . ')'); }
public function __unset($name) { $this->logEvent('UniversalPOPGadget::__unset(' . $name . ')'); }
public function __sleep() { $this->logEvent('UniversalPOPGadget::__sleep()'); return array(); }
public function __wakeup() {
$this->logEvent('UniversalPOPGadget::__wakeup()');
$this->logEvent("  [!] Defined classes:");
foreach(get_declared_classes() as $c) {
$this->logEvent("    [+] " . $c);
}
}
public function __toString() { $this->logEvent('UniversalPOPGadget::__toString()'); }
public function __invoke($param) { $this->logEvent('UniversalPOPGadget::__invoke(' . $param . ')'); }
public function __set_state($properties) {
$this->logEvent('UniversalPOPGadget::__set_state(' . implode(',', $properties) . ')');
}
public function __clone() { $this->logEvent('UniversalPOPGadget::__clone()'); }
public function __debugInfo() { $this->logEvent('UniversalPOPGadget::__debugInfo()'); }
}}

[1] [2] [3]  黑客接单网

相关文章

一次射中可疑要挟情报的剖析探究

由于最近一段时刻里”驱动人生”这个病毒还挺抢手,最近发现经过一些安全厂商的设备发现内网里边有许多的主机都中了这个病毒瞬间吓哭了。后续经过对主机进行查看,竟然没有发现什么问题,后续发现是安全设备命中了一...

看我怎么免费获取价值

大约两个月前,因为我需求发送一个15G的文件,我的一个朋友借给我了他的WeTransfer账户运用,我留心了一下,他的这种WeTransfer PLUS会员每年的注册费是120欧元。出于挖洞者的猎奇...

代码审计之Fiyo CMS事例共享

Fiyo CMS是小型的商务电话服务及移动协作东西,由一名前职业学校学生初次开发和创立的,后者其时在RPL的SMK 10三宝垄学习。 那时他的姓名不是Fiyo CMS,而是Sirion,它是Site...

一份来源未知的数据,揭秘了OilRig组织的全部信息(下)-黑客接单平台

Webshells Webshell用于与受感染服务器交互。走漏数据中包含了三个webshell,分别为HyperShell、HighShell和Minion,Minion很可能是HighShell的...

Node.js使用的反向shell

布景介绍 一个小型Web开发者团队曾托付咱们对他们的移动使用进行安全评价,该使用的后端是一个REST API。该使用的架构很简单,只由3台linux服务器组成: Node.js MongoDB Red...

又见陈旧的Typosquatting进犯:这次侵略Npm盗取开发者身份凭据

有些进犯方式尽管听起来很天真,但有时分却也能够收效,比方typosquatting进犯——咱们前次看到这种进犯是在上一年6月份,这自身也是种很陈旧的进犯方式。 所谓的typosquatting,主要...