首页 > Web开发 > 详细

PHP反序列化漏洞#XCTF题 : unserialize3#绕过wakeup()函数

时间:2020-01-04 16:41:35      阅读:153      评论:0      收藏:0      [点我收藏+]

1.代码与结果

代码如下:

<?php 
class xctf{
public $flag='111';
public function __wakeup(){
exit('bad requests');
}
}
$content = new xctf();
echo serialize($content);
?> 

结果如下:

O:4:"xctf":1:{s:4:"flag";s:3:"111";} 

实验截图:

技术分享图片

2.相关姿势点

2.1 PHP 常用命令行

2.11 Linux命令行运行指定php文件

php -f  test.php

2.12 直接运行php代码

php -r "phpinfo();"

2.13 交互模式运行PHP

php -a

2.14 PHP脚本作为shell脚本运行

没有权限则切换到root用户 sudo su

echo '#!/usr/bin/php\n<?php var_dump($argv); ?>' > phpscript

注意,我们在该PHP脚本的第一行使用#!/usr/bin/php,就像在shell脚本中那样(/bin/bash)。

第一行的#!/usr/bin/php告诉Linux命令行用 PHP 解释器来解析该脚本文件。

确定phpscript 有可执行权限

chmod u+x phpscript

./phpscript -h --foo

array(3) {
  [0]=>
  string(11) "./phpscript"
  [1]=>
  string(2) "-h"
  [2]=>
  string(5) "--foo"
}

2.2 php序列化操作解析

由第一部分的结果来解释:

O:4:"xctf":1:{s:4:"flag";s:3:"111";} 

序列化函数的作用:序列化对象或数组,并返回一个字符串。

各个字符的意义 ---> o表示对象,a表示数组,s表示字符,i表示数字

3. wakeup()漏洞[绕过过滤函数wakeup()]

wakeup()漏洞就是与整个属性个数值有关。

当序列化字符串表示对象属性个数的值 大于 真实个数的属性时就会 跳过 wakeup的执行。

也就是2.2代码部分,"xctf"后的 1 ,表示花括号里有两个数据。
技术分享图片

根据代码中的?code= 可得知,将得到的序列化字符串赋值给code进行传递。

访问http://111.198.29.45:34517?code=O:4:"xctf":2:{s:4:"flag";s:3:"111";}得到flag,如图所示。

PHP反序列化漏洞#XCTF题 : unserialize3#绕过wakeup()函数

原文:https://www.cnblogs.com/Cat3rpillar/p/12149343.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!