2022DASCTF Apr X FATE 防疫挑战赛——【Web】warmup-php

本文详细介绍了PHP中的spl_autoload_register函数如何实现类的自动加载,以及如何通过payload构造利用这一点进行命令执行。通过分析ListView、TestView和Base类的关键代码,揭示了eval函数在evaluateExpression方法中的风险,最后给出了利用模板注入和eval执行任意命令的Payload。文章适合了解PHP安全和代码审计的读者阅读。

warmup-php

0. 题目信息

打开链接,网页源码如下:

 <?php
spl_autoload_register(function($class){
   
   
    require("./class/".$class.".php");
});
highlight_file(__FILE__);
error_reporting(0);
$action = $_GET['action'];
$properties = $_POST['properties'];
class Action{
   
   

    public function __construct($action,$properties){
   
   

        $object=new $action();
        foreach($properties as $name=>$value)
            $object->$name=$value;
        $object->run();
    }
}

new Action($action,$properties);
?> 

下载题目附件,有4个PHP文件:

在这里插入图片描述

1. 解题步骤

首先观察题目源码,spl_autoload_register函数实现了当程序遇到调用没有定义过的函数时,会去找./class/函数名.php路径下的php文件,并把它包含在程序中。

可以使用POST方式传入properties参数,用来初始化类成员变量的值。

注意Action类的构造函数中调用了run函数,因此此时思路就是找一下哪个文件中定义了这个函数。

然后对于题目附件给出的文件进行代码审计:

(1)ListView.php 部分关键代码

<?php

abstract class ListView extends Base
{
   
   

    public $tagName='div';
    public $template;

    public function run()
    {
   
   
        echo "<".$this->tagName.">\n";
        $this->renderContent();
        echo "<".$this->tagName.">\n";
    }


    public function renderContent(</
### DASCTF 2023 SU战队 '7里香' 解题思路 根据已知信息,DASCTF Apr.2023赛事中SU战队的题目'7里香'可能涉及文件头补全、EXIF信息提取以及密码解密等操作。以下是可能的解题思路: #### 文件头补全 题目要求补全`jpg`文件头,并添加三个字节`FF D8 FF`作为文件头[^1]。这表明需要将给定的数据转换为合法的JPEG文件格式。JPEG文件的标准文件头为`FF D8 FF`,因此可以通过以下步骤生成图片文件: ```python # 将数据写入文件并补全文件头 with open("output.jpg", "wb") as f: f.write(bytes.fromhex("FFD8FF")) # 补全文件头 f.write(b"your_data_here") # 替换为实际数据 ``` #### EXIF信息提取 通过补全文件头后生成的图片文件,可以使用工具或代码提取其EXIF信息。EXIF信息中可能存在提示`OurSecret`及密码。以下是Python代码示例,用于提取EXIF信息: ```python from PIL import Image from PIL.ExifTags import TAGS def extract_exif(image_path): image = Image.open(image_path) exif_data = image._getexif() if exif_data: for tag_id, value in exif_data.items(): tag = TAGS.get(tag_id, tag_id) print(f"{tag}: {value}") extract_exif("output.jpg") ``` 上述代码会输出图片的EXIF信息,从中可以找到提示`OurSecret`及密码。 #### 密码解密 根据EXIF中的提示和密码,可以直接解密得到最终的flag。假设密码为`password`,则解密过程可能如下: ```python import hashlib # 使用密码计算MD5值 password = "password" flag = hashlib.md5(password.encode()).hexdigest() print(f"DASCTF{{{flag}}}") ``` #### 最终Flag 根据上述步骤,最终的flag为`DASCTF{426cb864312d5e30e3eef2950ea4826c}`[^1]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2ha0yuk7on.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值