PHP反序列化漏洞的概括:

开发的程序员 没有对用户输入的序列化字符串做一个严格检测,导致恶意的用户可以控制反序列化的一个过程,因此导致XSS漏洞,代码执行,SQT注入,目录遍历等不可控后果。在反序列化的过程中自动触发了某些魔术方法。在进行反序列化的时候就有可能触发对象中的一些魔术方法。

目录:

序列化和反序列化的理解:

使用时的代码的理解:

常见的几个魔法函数:

PHP反序列化漏洞测试:

利用PHP反序列化漏洞来 复现XSS漏洞.

(1)编写一个PHP序列化代码.

(2)去浏览这个文件.(因为我是写在靶场里的.)

(3)点击查看页面源代码.(复制.)

(4)来到一个有PHP反序列化漏洞的地方(进行测试)

(5)成功执行了序列化里面的XSS漏洞代码进行弹框.(说明:有反序列化漏洞.)

修复和防御:


序列化和反序列化的理解:

序列化理解:就是将对象转换成字符串。

反序列化理解:数据的格式转换对象的序列化利于对象的保存和传输,也可以让多个文件共亨对象。


PHP中有两个函数 serialize() 和 unserialize()

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

使用时的代码的理解:

(1)序列化 serialize()

//序列化serialize()将一个对象转换成一个字符串
<?phpclass S{                                //class是类.S是类名public $test="bgxg111";         //public 访问控制修饰符,$test是一个变量,bgxg111是变量的值.}$s=new S();                 //new是 将类实例化成对象.echo serialize($s);             //serialize()函数是 把 $s 这个对象进行序列化.
?>序列化后得到的结果是这个样子的:O:1:"S":1:{s:4:"test";s:7:"bgxg111";}//    O:代表object   或  i:代表数组.//    4:代表对象名字长度.//    S:对象的名称.//    1:代表对象里面的个数.//    s:数据类型(string)//    4:变量名称的长度.//    test:变量名称//    s:数据类型//    7:变量值的长度//    bgxg111:变量值

(2) 反序列化 unserialize()

//就是把被序列化的字符串还原为对象,然后在接下来的代码中继续使用。
<?php$u='O:4:"bgxg":1:{s:4:"test";s:7:"bgxg111";}';        //将系列化复制给变量uvar_dump(unserialize($u));        //unserialize()是反系列化.
?>
//结果:object(__PHP_Incomplete_Class)#1 (2) { ["__PHP_Incomplete_Class_Name"]=> string(4) "bgxg" ["test"]=> string(7) "bgxg111" } 

常见的几个魔法函数:

__construct()                  #当一个对象创建时被调用
__destruct()                  #当一个对象销毁时被调用
__toString()                  #当一个对象被当作一个字符串使用
__sleep()                     #在对象在被序列化之前运行
__wakeup()                  #将在序列化之后立即被调用
漏洞的代码:class S{var $test = "bgxg111";function __destruct(){echo $this->test;}
}
$s = $_GET['test'];
@$unser = unserialize($a);

靶场:

本地自己搭建的 Pikachu(皮卡丘)靶场:安装在win XP(IP地址:192.168.1.104)

Pikachu(皮卡丘)靶场搭建链接:Web安全 Pikachu(皮卡丘)靶场搭建._半个西瓜.的博客-CSDN博客


PHP反序列化漏洞测试:

利用PHP反序列化漏洞来 复现XSS漏洞.

(1)编写一个PHP序列化代码.

<?php                    // 构造与目标后端同一个类class S{                                //class是类.S是类名public $test="<script>alert('xss')</script>";         //var 访问控制修饰符,$test是一个变量,<script>alert('xss')</script>是变量的值.}echo '<br>';                $s=new S();                 //new是 将类实例化成对象.echo serialize($s);            //serialize()函数是 把 $s 这个对象进行序列化.
?>

(2)去浏览这个文件.(因为我是写在靶场里的.)


(3)点击查看页面源代码.(复制.)

序列化 的代码.

O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}


(4)来到一个有PHP反序列化漏洞的地方(进行测试)


(5)成功执行了序列化里面的XSS漏洞代码进行弹框.(说明:有反序列化漏洞.)


修复和防御:

反序列化漏洞是用户可以控制传入的参数引起的,预防措施就是不要把用户的输入或者是用户可控的参数直接放到进反序列化的操作中去执行就可以了.


参考链接:PHP反序列化漏洞_Qwzf的博客-CSDN博客_php反序列化漏洞防御

参考链接:pikachu靶场 :十二、PHP反序列化_CNwanku的博客-CSDN博客_皮卡丘靶场反序列化

参考链接:PHP反序列化漏洞——漏洞原理及防御措施_IT—INTEREST_挪吒的博客-CSDN博客_php反序列化漏洞原理

Web安全 PHP反序列化漏洞的 测试.(可以 防止恶意用户利用漏洞)相关推荐

  1. WEB应用防火墙安全技术要求与测试评价方法

    信息安全技术  WEB应用防火墙安全技术要求与测试评价方法 范围 本标准规定了WEB应用防火墙的安全功能要求.自身安全保护要求.性能要求和安全保证要求,并提供了相应的测试评价方法. 本标准适用于WEB ...

  2. CISA必修列表未收录数十个已遭利用漏洞

     聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 漏洞情报公司VulnCheck 分析发现,很可能已遭在野利用的数十个漏洞在由CISA维护的"已知遭利用漏洞"分类列表中消失了 ...

  3. 安卓特性漏洞重浮水面,已被多个恶意应用利用

    近日,挪威一家APP安全公司Promon发现并报道了安卓系统的一个特性漏洞已经被多个恶意应用利用的分析报告,他们通过监测发现该漏洞使恶意软件可以伪装成任何合法应用程序,从而使黑客可以访问私人短信和照片 ...

  4. 项目三 探索并利用漏洞对未知web server权限提升(CTF实战 Kioptrix#2靶机渗透测试)

    大家好,我是SuieKa.此是实训项目三,要求根据未知靶机(Kioptrix#2)探索漏洞,并利用漏洞进行权限提升实验项目,希望对朋友们有所帮助. 树 一.神器开路,对未知操作系统的全面扫描 1.SQ ...

  5. Web安全 RCE漏洞(命令执行漏洞的 测试和利用).

    系统命令执行的概括 系统命令执行一般是 在Web应用中,可能有时候需要调用一些系统命令来执行,而程序在开发的时候没有对输入进行严格的过滤,导致恶意用户可以构造一些恶意的系统命令,从而达成系统命令执行攻 ...

  6. WEB漏洞渗透测试靶场整理资源

    WEB漏洞渗透测试靶场整理资源 在所有人目光之外,一个人无声的坍塌下去,像是被什么火烧尽了,只余下灰烬 整理了一些WEB漏洞本地靶场资源,包括针对性的漏洞专题如SQL注入,XSS等-以及合集类的如DV ...

  7. Web安全 文件上传漏洞的 测试和利用.(上传一个图片或文件 拿下服务器最高权限.)

    文件上传漏洞的概括 现在大多的网站和Web应用系统都会有上传功能(比如:文档,图片,头像,视频上传等.),而程序员在开发文件上传功能时,没有对代码做严格校验上传文件的后缀和文件类型. 此时攻击者就可以 ...

  8. Web安全防攻(渗透测试)

    第二章 2.1 在Linux系统中安装LANMP LANMP是Linux下Apache.Nginx.MySQL和PHP的应用环境,本节演示的是WDLinux的一款集成的安装包. 首先,下载需要的安装包 ...

  9. 渗透测试-完整渗透流程(二.漏洞扫描和利用)

    [web漏洞探测] 1.当我们收集到了足够多的信息之后,我们就要开始对网站进行漏洞探测了.探测网站是否存在一些常见的Web漏洞,比如: SQL注入 XSS跨站脚本 CSRF跨站请求伪造 XXE漏洞 S ...

最新文章

  1. 数据绑定(Binding)
  2. 【每日一算法】全排列问题
  3. Python入门100题 | 第052题
  4. http访问不到服务器_HTTP及会话技术解析:大魏Java记4
  5. C语言学习之编程输入x,输出对应的y.
  6. display block 无法显示_display:inline-block产生的问题
  7. Windows下安装BeautifulSoup
  8. 操作系统之进程管理:12、生产者消费者问题和多级生产者多级消费者问题
  9. urllib2的Post和Get请求
  10. 用康托展开实现全排列(STL、itertools)
  11. 黑莓Torch 9800,了无新意落后主流机型
  12. 国编是什么,需要什么条件,是什么流程?
  13. CentOS 7源码安装Apache
  14. 同样是做大数据分析,你月薪8k他30k,到底差在了哪?
  15. 面向对象--闭包 继承
  16. 巧用「打印」功能实现PDF单页提取
  17. 【LOJ】#2187. 「SHOI2014」三叉神经树
  18. ANSYS——模态分析的载荷施加问题以及约束的施加问题
  19. 用c++做文本加密与解密程序(源码)
  20. mysql数据库的基本使用流程

热门文章

  1. 推荐系统TopN推荐评测指标
  2. PB调用动态SQL语句
  3. Oracle修改、锁定、解锁用户
  4. C ++ /MFC 限制鼠标作用区域
  5. QGIS数据可视化学习笔记01——一般的图层样式调整和在地图上添加图表
  6. windows任务计划程序
  7. vulnhub:Sar
  8. 文件夹访问被拒绝了怎么办呢?
  9. springboot+mybatis-plus实现oracle自增序列
  10. 行车记录仪数据丢失了怎么恢复?最新方法介绍