[2022DASCTF Apr X FATE 防疫挑战赛]web题目复现

warmup-php

给了源码:

 <?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);
?> 

这里创建了一个未定义的类,在实例时会从/class目录下寻找,通过foreach循环对属性进行赋值,最后调用run方法。

附件给出了class目录文件

image-20220424204040869

先看看Base.php

image-20220424204305684

这里evaluateExpression函数中有eval和回调函数,很危险,我们最终目的应该就是调用函数进行命令执行

继续审计,run方法是在ListView中定义:

image-20220424211500114

跟进一下:

image-20220424211610619

preg_replace_callback — 执行一个正则表达式搜索并且使用一个回调进行替换。再看到renderSection

image-20220424211839350

那么调用链很清晰,通过ListView::run->ListView::renderContent->ListView::renderSection我们可以调用TestView类的任意方法,需要注意的是由于正则匹配的模式,我们需要令$this->template = "{TableBody}"才能正确执行。接下来进入TestView类:

image-20220424212547984

这里需要设置$data的值才能进入renderTableRow

image-20220424212849901

该方法中由于$this->rowHtmlOptionsExpression可控,我们可以进入到evaluateExpression方法,这里又回到开头

public function evaluateExpression($_expression_,$_data_=array
### 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]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Snakin_ya

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

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

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

打赏作者

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

抵扣说明:

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

余额充值