几个月前,我正在编写一篇关于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欧元。出于挖洞者的猎奇...
HTML5 安全问题解析 标签: html html5 web安全 本文参阅: w3school:html5相关基础知识(w3school.com.cn)...
问题描述: 假如用户输入的数据在未经处理的情况下刺进到一条SQL查询句子,那么运用将很可能遭受到SQL注入进犯,正如下面的比如: $unsafe_variable = $_POST['user_in...
本地文件包括(LFI)缝隙,常被入侵者用来提取站点地点服务器上的不同文件内容,如passwd,hosts等。但你有没有想过将它提升到另一个层级?即经过本地文件包括来获取服务器上的浏览器shell(c9...
SQL注入原理,在URI页面加参数查询数据库,假如程序没有严厉过滤字符串,就有或许导致SQL注入 咱们能够在前端Nginx过滤URI来避免SQL注入。装备如下 什么是URL和URI,举例说明: 衔接...
代码审计第五讲首要介绍了一些实例发掘缝隙,从而剖析xss缝隙,在实践cms中的影响。本例先从dvwa实践比如开端剖析,因为观看人数水平参差不急,所以从最根底开端讲起。让每一个看文章有所收成。 DVW...