1、什么是序列化

A、PHP网站的定义:

所有php里面的值都可以使用函数serialize()来返回一个包含字节流的字符串来表示。unserialize()函数能够重新把字符串变回php原来的值。 序列化一个对象将会保存对象的所有变量,但是不会保存对象的方法,只会保存类的名字。

按个人理解就是:

serialize()将一个对象转换成一个字符串,unserialize()将字符串还原为一个对象。

当然从本质上来说,反序列化的数据本身是没有危害的,用户可控数据进行反序列化是存在危害的。

B、PHP反序列化

php允许保存一个对象方便以后重用,这个过程被称为序列化。为什么要有序列化这种机制呢?在传递变量的过程中,有可能遇到变量值要跨脚本文件传递的过程。试想,如果为一个脚本中想要调用之前一个脚本的变量,但是前一个脚本已经执行完毕,所有的变量和内容释放掉了,我们要如何操作呢?难道要前一个脚本不断的循环,等待后面脚本调用?这肯定是不现实的。因为这样的操作,在小项目还好,在大项目里是极其浪费资源的。但是如果你将一个对象序列化,那么它就会变成一个字符串,等你需要的时候再通过反序列化转换回变了变量,在进行调用就好了,在这样就剩了资源的使用。

2、理解PHP反序列化漏洞

PHP类中有一种特殊函数体的存在叫魔法函数,magic函数命名是以符号__开头的,比如 __construct, __destruct, __toString, __sleep, __wakeup等等。这些函数在某些情况下会自动调用,比如__construct当一个对象创建时被调用,__destruct当一个对象销毁时被调用,__toString当一个对象被当作一个字符串使用。

而在反序列化时,如果反序列化对象中存在魔法函数,使用unserialize()函数同时也会触发。这样,一旦我们能够控制unserialize()入口,那么就可能引发对象注入漏洞。

3、PHP反序列化漏洞利用的前提

a.unserialize()函数的参数可控;

b.php文件中存在可利用的类,类中有魔术方法

4、PHP反序列化漏洞—发现技巧

找PHP链的基本思路.

1.在各大流行的包中搜索 __wakeup()__destruct() 函数.

2.追踪调用过程

3.手工构造 并验证 POP 链

4.开发一个应用使用该库和自动加载机制,来测试exploit。

5、PHP反序列化漏洞—构造exploit思路

1.寻找可能存在漏洞的应用

2.在他所使用的库中寻找 POP gadgets

3.在虚拟机中安装这些库,将找到的POP链对象序列化,在反序列化测试payload

4.将序列化之后的payload发送到有漏洞web应用中进行测试.

6、案例分析

https://www.cnblogs.com/xiaozi/p/7839256.html

https://www.grt1st.cn/posts/php-unserialize-analysis/

最新文章

  1. deepsooncms在Ubuntu 14.04上部署教程
  2. http协议(九)响应首部字段
  3. MyBatis批量删除 多态sql,构建in语句
  4. T[]与List<T>的使用时机
  5. C++ GUI Programming with Qt4 笔记 -- chap1
  6. centos7编译安装MySQL5.7.9
  7. Git学习02 --暂存区,撤销修改,删除文件
  8. ansible playbook实践(二)-基础相关命令
  9. 20165305 学习基础和C语言基础调查
  10. Kali Linux渗透测试实战 1.1 Kali Linux简介
  11. Spring Boot切换为APR模式
  12. Task 6.2站立会议一
  13. iOS 企业账号申请证书和打包ipa
  14. 【属性动画总结】Property Animation
  15. 破解无线网络密码-BT3如何使用1
  16. 使用kubeadm安装kubernetes/部署前准备/flannel网络插件/镜像下载/
  17. MySQL优化时可以设置的几个参数
  18. TF-IFD算法及python实现关键字提取
  19. 缓存淘汰算法之LFU
  20. PHP21 MVC

热门文章

  1. Java并发基础概念
  2. linux 常用进程使用命令
  3. 【算法学习】AVL平衡二叉搜索树原理及各项操作编程实现(C语言)
  4. Java 8-Stream流
  5. C/S模式,发布/订阅模式和PUSH/PULL模式(上)
  6. .net core 实践笔记(三)--封装底层
  7. 位图索引对于DML操作的影响
  8. MySQL数据库的隔离级别之可重复读为什么能够有效防止幻读现象的出现
  9. Linux基础-4.正文处理命令及tar命令
  10. archLinux 学习笔记--mlocate的安装与使用