春秋杯勇者赛道部分WP

Misc

签到

关注公众号按照图片所给音调在环境里点就行了

tiger

下载附件得到png-key.txt,内容有ag2a`f76

在tips.txt里可以得到以下信息

1
2
1.These are rot for 47 days
2.Have you heard that lsb steganography also requires a password?

第一个很明显是rot47,第二个应该是要用lsb做一个带密码的解密
所以

•ag2a`f76 是 rot47 加密,解密为:28a217fe

•PNG 图片是 LSB 加密

https://github.com/livz/cloacked-pixel

解密可以得到where这个压缩包的解压密码:71zr9H6jnXRHn64WBxMbCzz16saCZWiw

在里面看到key.zip和flag.zip中的information.txt的crc32都是一样,很明显是明文攻击,可以得到flag.zip的密码

Nh6i@= 

用010打开flag文件,可以看到png的文件头,改后缀名得到一个二维码。

用bcTester扫,然后在010里面转为hex,可以得到0宽隐写后的文本

解密

https://yuanfux.github.io/zero-width-web/

得到以下字符

1
Owl wvn n xhkm SBWav krttqbu gfq gja jhheu up yljycxjpu, vvtx R jzeh pydv usd zp lalhmk, ic brtkac ya whep{866q3755-t358-5119-txnr-juw666e8099m}, uroa okv!

很像移位后的密码,考虑是凯撒或者维吉尼亚,但我这里用凯撒批量处理后没结果,采取维吉尼亚爆破
https://www.guballa.de/vigenere-solver

1
You are a good CTFer because you can solve my challenge, next I will give you my secret, my secret is flag{xxxxxx}, have fun!

Crypto

Train

(不知道这道题是不是有问题,我过了验证随便输了俩一样的字符就给flag了)

验证就是爆破sha256前四位,网上找的然后改成交互的就行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from pwn import *
from Crypto.Util.number import *
import gmpy2
import string
import hashlib
table = string.digits + string.ascii_letters
r = remote('url',port )
def proof():
    r.recvuntil(b'sha256(XXXX')
    line = r.recvline()[:-1].decode()
    print(line)
    tmp = line[line.find('+') + 1:line.find(')')]
    print(tmp)
    aim = line[line.find('== ') + 3:]
    print(aim)
    for i in table:
        for j in table:
            for k in table:
                for l in table:
                    ans = i + j + k + l
                    if hashlib.sha256((ans + tmp).encode()).hexdigest() == aim:
                        print(ans)
                        r.recvuntil(b'Plz Tell Me XXXX :')
                        r.sendline(ans.encode())
                        return

proof()
r.interactive()

Web

Mercy-code

做的时候,一眼顶针就知道是无参数rce,但看了下禁的挺多的,就去搜了下博客,结果能搜到的全禁了!只能翻手册了,其实最重要的部分就是要构造.(点)这个环节,剩下的直接去读文件就行

最后找到这个

1
cmd=echo(show_source(end(scandir(next(str_split(zend_version()))))));

zend_version()返回3.2.1,str_split分割各个字符,next返回下一个字符,第一个字符是3,下一个就是.(点),剩下的就是读文件常见操作。
但是赛后发现是原题,这里附上网址

https://www.it610.com/article/1465459456212070400.htm

Payload:echo(implode(scandir(chr(strrev(uniqid())))));

Bp跑一下看看flag在哪,发现在当前目录下的一个php文件里

然后 show_source(end(scandir(chr(strrev(uniqid())))));