WP - 2021CSTC

web

esayweb1

审计代码后,需满足$v1,$v2,$v3同时为1.

$a=(array)json_decode(@$_GET['foo']);
if(is_numeric(@$a["bar1"])){
        echo "die"."<br>";
    }
    if(@$a["bar1"]){
        ($a["bar1"]>2021)?$v1=1:NULL;
    }

传入的foo,经过json_decode转换成array。判断$a["bar1"]是否是数字,接下来判断bar1是否大于2021.

根据php弱类型,

$a["bar1"]=2022a

if(is_array(@$a["bar2"])){
        if(count($a["bar2"])!==5 OR !is_array($a["bar2"][0])) die("nope");
        $pos = array_search("nudt", $a["a2"]);
        $pos===false?die("nope"):NULL;
        foreach($a["bar2"] as $key=>$val){
            $val==="nudt"?die("nope"):NULL;
        }
        $v2=1;
    }

$a["bar2"]需要是个数组,并且元素个数为5,同时,$a"bar2"也为数组

$a["bar2"]=[[],2,3,4,5]

对于 $pos = array_search("nudt", $a["a2"]);,它搜索字符串“nudt”在$a[“a2”]中的位置。若没有找到,array_search返回false,会通过严格比较导致die掉。所以这里要设置:

$a["a2"] = “nudt”

现在的payload为

foo={"bar1":"2022a","bar2":[[],2,3,4,5],"a2":["nudt"]}

$c=@$_GET['cat'];
$d=@$_GET['dog'];
if(@$c[1]){
    if(!strcmp($c[1],$d) && $c[1]!==$d){
        eregi("3|1|c",$d.$c[0])?die("nope"):NULL;
        strpos(($c[0].$d), "cstc2021")?$v3=1:NULL;
    }
}

先将c[1]与d进行比较,利用数组字符串比较返回null的特性解决。

eregi是对$d.$c[0]进行正则匹配,匹配到就结束。而下一步需要$c[0].$d中存在cstc2021,利用%00截断,在正则匹配eregi时在开头时就匹配结束掉。

strpos(($c[0].$d), "cstc2021")还要求cstc2021不能在开头。

dog=%00

`$c[0]="cstc2021"

payload

?foo={"bar1":"2022e","bar2":[[],2,3,4,5],"a2":["nudt"]}&cat[0]="cstc2021"&cat[1][]=&dog=%00}

参考

MISC

RGB

28864=41*11*2*2*2*2*2*2**=41*11*64=41*22*32=41*22*16*2=82*352

from PIL import Image

f = open("code.txt","r")
result = f.readlines()
for i in result:
    d = i.strip("\n")

x = 164
y = 176
im = Image.new("RGB",(y,x))
file = open("code.txt","r")
for i in range(y):
    for j in range(x):
        line = file.readline()
        rgb = line.split("#")
        im.putpixel((i,j),(int(rgb[0].strip("(")),int(rgb[1]),int(rgb[2].strip("\n").strip(")"))))
im.show()
im.save("flag.jpg")

生成的结果为镜像翻转,勉强拼出flag。

image-20210505101046182

flag{c1d836d1db9d42dd}

zip

使用aapr破解出压缩包密码为ff123后,发现readme.txt中内容为BABBBBBAAAABAAB

一共15个字符,联想培根密码,xyj,word打开后,将字体调成黑色,可以看见flag。

Memory_1

volatility -f mal.vmem --profile=Win7SP1x64 printkey -K "MicrosoftWindowsCurrentVersionRun"

image-20210505153016030

本文链接:

https://littlewhite.fun/index.php/385.html
1 + 4 =
快来做第一个评论的人吧~