Web

gob

题目描述:php是世界上最好的语言

首先打开靶机是这样的:

image-20200522225700680

随便填了个admin,密码为空就进去了

发现有个upload,那么可能跟文件上传有关:

image-20200522225752430

然后随便上传几次,会发现上传以后,有你上传文件的路径以及这个文件。然后如果这个文件存在,会把这个文件的内容base64编码以后以图片的方式包含进来,所以我们使他上传的文件为../../../../../flag,会给我们一个Set-cookie,然后写到请求报文里,得到flag 经过base64加密后的内容:

image-20200522230415800

image-20200522230401191

Crypto

bbcrypto

题目:

image-20200522231334072

从题目很明显可以看出密文的加密过程,那么先拿出f l a g {这几个,模仿加密,得到a = 57,然后salt = 'ahh'

然后直接写了个脚本,得到flag:

from itertools import *
def decrypt(c, a, si):
    m1=""
    for i in range(len(c)//2):
        for m in range(33,127):
            if (m * a + ord(si[i])) %128 == int(c[2*i:2*(i+1)],16):
                m1 += chr(m)
                break
            else:
                pass
    return m1

if __name__ == "__main__":
    m = ''
    a = 57
    si = 'ahhahhahhahhahhahhahhahhahhahhahhahhahh'
    c = '177401504b0125272c122743171e2c250a602e3a7c206e014a012703273a3c0160173a73753d'
    m = decrypt(c,a,si)
    print(m)

Misc

Questionnaire

问卷调查,直接F12查看最后发现给了答案,直接输入,得到回显,输入即为flag

babyweb

首先查看发现password_is_here是零宽度字符隐写,这里推荐两个网站:

在线解密[1]:http://330k.github.io/misc_tools/unicode_steganography.html
在线解密[2]:https://offdev.net/demos/zwsp-steg-js

那么用在线解密2我们解得密码为:

image-20200522232008874

输入密码解压缩flag.zip,发现有一张png打不开,所以winhex打开发现是png倒着写,一个脚本解决:

fp = open('f14g','rb')
s = fp.read()
# print(s)
fp1 = open('f14gg.png','wb')
fp1.write(s[::-1])

得到一张图片:

image-20200522233026870

那么是一堆奇怪的编码,首先前三个是Arthur and the Invisibles Alphabet,找到一个在线的网站https://www.dcode.fr/arthur-invisibles-cipher,解为UVW:

image-20200522234111545

上图代表A-Z

然后4-6为银河密码,解得HZA

7-9为跳舞小人,解得ITW

最后两位为神奇宝贝鸟图腾密码,解得AU

bin/cat/2

这道题直接gif分解出图片:

image-20200523233522683

然后仔细看发现主要是两种不同的图案,一种是

image-20200523233826437

另一种是

image-20200523233850652

所以可以把这里的改成0、1,然后变成二维码。然后观察可得长为高的两倍,所以这里的长是隔一位取一个的。然后最后生成一张二维码,扫码即可

testyournc

首先ls /发现有个f1a9.bak,里面代码为:

image-20200523234350867

然后发现他是把flag随机写到某部分去,然后根据他这个代码,写一个脚本:

a=open('flag')
a.seek(1024*1024*1024)
for i in range(1024,13428):
    a.seek(1024*1024*1024*i)
    if a.read(1)==str(chr(0x00)):
        continue
    else:
        a.seek(1024*1024*1024*i)
        print(i)
        print(a.read(20))

然后base64.encode以后

echo YT1vcGVuKCdmbGFnJykKYS5zZWVrKDEwMjQqMTAyNCoxMDI0KQpmb3IgaSBpbiByYW5nZSgxMDI0LDEzNDI4KToKICAgIGEuc2VlaygxMDI0KjEwMjQqMTAyNCppKQogICAgaWYgYS5yZWFkKDEpPT1zdHIoY2hyKDB4MDApKToKICAgICAgICBjb250aW51ZQogICAgZWxzZToKICAgICAgICBhLnNlZWsoMTAyNCoxMDI0KjEwMjQqaSkKICAgICAgICBwcmludChpKQogICAgICAgIHByaW50KGEucmVhZCgyMCkpCiAg | base64 -d | python

就可得到对应的位置和对应位置写入的flag

这里有个师傅的Blog,思路很清奇,可以看看:https://lazzzaro.github.io/2020/05/24/match-DASCTF-May-%C3%97-BJDCTF-3rd-%E5%AE%89%E6%81%92%E4%BA%94%E6%9C%88%E8%B5%9B/#testyournc