[ctfshow]大牛杯

web_checkin


error_reporting(0);
include "config.php";
//flag in /

function check_letter($code){
     
    $letter_blacklist = str_split("abcdefghijklmnopqrstuvwxyz1234567890");
    for ($i = 0; $i < count($letter_blacklist); $i+=2){
     
        if (preg_match("/".$letter_blacklist[$i]."/i", $code)){
     
            die("xi nei~");
        }
    }
}

function check_character($code){
     
    $character_blacklist = array('=','\+','%','_','\)','\(','\*','&','\^','-','\$','#','`','@','!','~','\]','\[','}','{','\'','\"',';',' ','\/','\.','\?',',','<',':','>');
    for ($i = 1; $i < count($character_blacklist); $i+=2){
     
        if (preg_match("/".$character_blacklist[$i]."/", $code)){
     
            die("tongtong xi nei~");
        }
    }
}

$dir = 'sandbox/' . md5($_SERVER['REMOTE_ADDR']) . '/';
if (!file_exists($dir)) {
     
    mkdir($dir);
}
if (isset($_GET["code"])) {
     
    $code = substr($_GET["code"], 0, 12);
    check_letter($code);
    check_character($code);

    file_put_contents("$dir" . "index.php", ".$code.$fuxkfile);
    echo $dir;
}else{
     
    highlight_file(__FILE__);
}

这两个过滤的函数,发现里面的循环是步长为2的
for ($i = 0; $i < count($letter_blacklist); $i+=2)

第一个循环可以通过的字符有:

b、d、f、h、j、l、n、p、r、t、v、x、z、2、4、6、8、0

第二个循环可以通过的字符有:

=、%、)、*、^、$、`、!、]、}、'、;、/、?、<、>

接下来就是往某个目录下的php文件里面写东西了

file_put_contents("$dir" . "index.php", ".$code.$fuxkfile);

但是里面有一个$fuxkfile,不知道是什么东西
花了20分换了一个hint
[ctfshow]大牛杯_第1张图片

我们可以这样构造code,先闭合前面的 由于前面说了flag在根目录,所以我们直接nl /*就可以了

?code=?>

成功获取flag

Mud

upx脱壳后,拉到ida,找到游戏结束那一块
flag在这里
在这里插入图片描述

你可能感兴趣的:(比赛wp)