Ywc's blog

SJU集训结业&淘汰赛 Write Up

Word count: 1kReading time: 4 min
2018/08/08

WEB

Warm up

gif图片有提示

js混淆+md5解密 即可得到login password

SJU-game

SJU-game

SJU-game

BabyWeb

根据hint: user/user登陆 得到新的hint

SJU-game

burpsuite把cookie中的user改为visitor,即可得到flag

SJU-game

SJU-game

Exec

SJU-game

ip后面加个回车符再加上要注入的命令,或者回车符%0a绕过(抓包内修改)

SJU-game

SJU-game

Redis

考察的是redis的漏洞,redis getshell

参考文章:
redis渗透中的getshell问题总结

离别歌大佬的博客

redis未授权访问漏洞

题目进去给的是phpinfo的页面

首先找到web根目录

SJU-game

然后写shell,可以使用redis本身的工具 也可以使用nc,telnet等工具

redis的使用可看这篇文章

SJU-game

SJU-game

Misc

CLANNAD

参考ctfwiki

其实这题是伪装的mp3文件23333

于是直接用Mp3stego跑一下就OK

SJU-game

打开生成的txt即为flag

隐写

盲水印攻击,工具BlindWaterMark

参考文章

首先解压图片,伪加密,用winrar或者修改下加密位,即可解开。

生成两张一样的图片,直接用盲水印攻击。

SJU-game

生成图片,仔细一看flag在图片中,放大一下即可看到。

SJU-game

ZipCRC32

crc32爆破

参考:文章

压缩包里面53个压缩包,每个里面都有文件data.txt。注释if you want to find the flag, this hint may be useful: the text files within each zip consist of only “printable” ASCII characters

也就是说压缩包文件的txt内容都是ASCII字符,binwalk查看发现每个长度都是4.直接用脚本爆破CRC32就可以爆破出每一个TXT文件内容

脚本:

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
29
30
31
#coding:utf-8
import zipfile
import string
import binascii

def CrackCrc(crc):
for i in dic:
for j in dic:
for p in dic:
for q in dic:
s = i + j + p + q
if crc == (binascii.crc32(s) & 0xffffffff):
print s
f.write(s)
return

def CrackZip():
for I in range(54):
file = 'chunk' + str(I) + '.zip'
f = zipfile.ZipFile(file, 'r')
GetCrc = f.getinfo('data.txt')
crc = GetCrc.CRC
#以上3行为获取压缩包CRC32值的步骤
print hex(crc)
CrackCrc(crc)

dic = string.ascii_letters + string.digits + '+/='

f = open('data.txt', 'w')
CrackZip()
f.close()

data.txt里面内容为

UEsDBBQDAQAAAJFy1kgWujyNLwAAACMAAAAIAAAAZmxhZy50eHT/xhoeSnjMRLuArw2FXUAIWn8UQblChs4AF1dAnT4nB5hs2SkR4fTfZZRB56Bp/FBLAQI/AxQDAQAAAJFy1kgWujyNLwAAACMAAAAIAAAAAAAAAAAAIIC0gQAAAABmbGFnLnR4dFBLBQYAAAAAAQABADYAAABVAAAAAAA=

base64解密发现是zip文件格式

SJU-game

转换成16进制504b03041403010000009172d64816ba3c8d2f0000002300000008000000666c61672e747874ffc61a1e4a78cc44bb80af0d855d40085a7f1441b94286ce001757409d3e2707986cd92911e1f4df659441e7a069fc504b01023f031403010000009172d64816ba3c8d2f00000023000000080000000000000000002080b48100000000666c61672e747874504b0506000000000100010036000000550000000000。打开zip文件发现内容加密,直接爆破

SJU-game

Easy Forensics

过滤HTTP协议

SJU-game

发现post数据包,追踪发现zip文件

SJU-game

导出原始数据,文件->导出对象->http,导出http选中upload,点击save->upload.php

SJU-game

另存为zip文件,打开发现前一半Flag

SJU-game

右击属性或者winhex打开搜索另一半 拼接在一起 即可得到完整flag

SJU-game

Crypto

啥都可以加密

题目给的是一串佛语,立即想到佛语解密,试了很多格式不行orz

赛后才知道要先玛丽苏解密在进行佛语才行23333 是真的骚

玛丽苏文本在线加密器

佛语在线解密

SJU_game

点击降临凡间,在上面生成可解密的佛语,再进行佛语解密即可。

简单加密

base32->url->uuencode

题目给了一段字符串:

JU2FISJVEUZUKVZFGIYUYOJWEUZDKUZZGUSTKRCTEUZUINRFGI4U2JJTIE3TCJJTIYSTGRBFGI3ECSJFGNBVKJJVIRJSKM2BEUZDEJJSGVKDOVRFGI2U4OJFGI2SKNKEI44TOMJFGNDCKM2FGYSTKRCVEUZUGRJFGVCFGOCWEU2UIURFGBASKMRTHEZCKMRVEU2UI===

base32解密

SJU-game

url解密

SJU-game

uuencode解密

SJU-game

MD5 is dead

SJU-game

题目要求md5相同sha1不同的两个文件,同时要求大小在2017kib~2018kib范围

首先生成一个符合大小的文件(python)

1
2
with open('test','w+') as f:
f.write('1'*2017*1024)

然后用fastcoll工具碰撞md5生成两个文件上传得到flag

SHA-1 is dead too

SJU-game

题目要求md5相同sha1不同的两个文件,同时要求大小在2017kib~2018kib范围

参考ctf-wiki下载两个sha1值相同的pdf,修改一下题目要求大小的脚本,运行后得到两个文件上传得flag

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from hashlib import sha1
from hashlib import sha256

pdf1 = open('./shattered-1.pdf').read(320)
pdf2 = open('./shattered-2.pdf').read(320)
pdf1 = pdf1.ljust(2018 * 1024 + 1 - 320, "\00") # padding pdf to 2018Kib + 1
pdf2 = pdf2.ljust(2018 * 1024 + 1 - 320, "\00")
open("upload1", "w").write(pdf1)
open("upload2", "w").write(pdf2)

print sha1(pdf1).hexdigest()
print sha1(pdf2).hexdigest()
print sha256(pdf1).hexdigest()
print sha256(pdf2).hexdigest()
CATALOG
  1. 1. WEB
    1. 1.1. Warm up
    2. 1.2. BabyWeb
    3. 1.3. Exec
    4. 1.4. Redis
  2. 2. Misc
    1. 2.1. CLANNAD
    2. 2.2. 隐写
    3. 2.3. ZipCRC32
    4. 2.4. Easy Forensics
  3. 3. Crypto
    1. 3.1. 啥都可以加密
    2. 3.2. 简单加密
    3. 3.3. MD5 is dead
    4. 3.4. SHA-1 is dead too