上周带学弟参加了一个民间比赛,本来比赛介绍是“萌新“赛,我就准备让学弟试试手,结果呀我就 不该相信CTF的萌新字眼,学弟看到题目一脸懵逼,于是我也注册账号参加比赛,结果看到题目确实是非常”萌新“,让我自己都感觉自己还是一个萌新,明明是萌新赛结果大佬云集,肝到最后才一百多名,虽然群主说本次比赛有一千多人参加,一百多名属于前列了,但还是感觉自己是一个小菜鸡(PS:如果自己做题快的话,可能我就有贴纸了😢),下面小菜鸡就把做出的题目的WP写下来记录一下吧!

image-20210607115058354

Crypto

签到题

下载flag.txt,打开看到下列字符,%3D换成=,就可以很简单看出这是一串base64字符

1
NTQ1NjcwNTg1MjMwNGU2MTRkN2E0ZTUwNTQ2YzU2NTg1NDdhNGU1NDRlMzAzNTQ3NTc0NTU5MzI0ZTQ2NTI0YjU0NTQ1NjU2NTM0NTZiMzM1MzU0MzAzZA%3D%3D

将base64解密,是一串十六进制字符串,将十六进制转换为ascii码之后

1
5456705852304e614d7a4e50546c5658547a4e544e303547574559324e46524b5454565653456b335354303d
1
TVpXR0NaMzNPTlVXTzNTN05GWEY2NFRKTTVVSEk3ST0=

再进行一次base64解码和一次base32结果得到flag(PS:套神的WP写起来都这么套😒)

1
flag{sign_in_right}

rsa256

这题是i春秋欢乐赛原题,直接贴链接

(15条消息) i春秋第二届春秋欢乐赛RSA256writeup_hanjinrui15的博客-CSDN博客

Misc

very-ez-dump

下载下来是一个明叫mem.raw的文件这里使用kali来解决问题需要用到的工具是volatility工具

先吧镜像移动到kali里边,然后打开volatility,执行命令查看镜像系统

1
volatility -f '/root/桌面/mem.raw' imageinfo

image-20210607201358317

可以看到我们要看的系统是 win7SP1x64

然后执行

1
volatility -f '/root/桌面/mem.raw'  --profile=Win7SP1x64 cmdscan

来查看cmd命令使用的情况

img

可以看到#7的是密码然后扫描这个镜像里面的文件执行

1
volatility -f '/root/桌面/mem.raw'  --profile=Win7SP1x64 filescan | grep zip

,可以看到一个后缀是zip的flag文件

提取这个文件执行

1
volatility -f '/root/桌面/mem.raw'  --profile=Win7SP1x64 dumpfiles -Q 0x000000003e4b2070 --dump-dir=./

可以提取到桌面上, 把压缩包移动到Windows上解压,密码就是 (ljmmz)ovo就可以看到一个txt打开就可以看到flag

!了反都,了反

下载下来是一个piz,flag文件,根据题目描述我们将文件名字倒过来,就是flag.zip打开压缩包看到一个流量包文件,使用wireshark打开,进行流量分析,可以看到这个流量包捕获的流量是访问网站的流量,我们进行http过滤

image-20210607203403834

根据题目描述进行字符串搜索,多次尝试后发现下载了一个后缀为piz的文件,我们将其数据导出来,发现无法解压,根据题目描述和十六进制信息,发现需要将十六进制信息前后顺序颠倒,直接用代码(PS:赛后看官方WP其实有更简单的脚本)

1
2
3
4
5
6
7
8
9
10
import re

data = ''' ''' #存放十六进制数据
list1 = data.split() #以空格分裂

list1 = reversed(list1) #逆转list

a = ' '.join(list1) #list 拼接为句子

print (a)

修改后的压缩包存放着flag.txt但是存在密码,压缩包提示当中注释解压密码是登录账号,查看流量包发现登录成功的密码是passwd123

image-20210607204143471

解压后的文件是很多行的base64数据,这里想到base64解密,上脚本

\

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# base64隐写

import base64

def get_diff(s1, s2):

base64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'

res = 0

for i in range(len(s2)):

if s1[i] != s2[i]:

return abs(base64chars.index(s1[i]) - base64chars.index(s2[i]))

return res

def b64_stego_decode():

file = open("zheng.txt","rb")

x = '' # x即bin_str

lines = file.readlines()

for line in lines:

​ l = str(line, encoding = "utf-8")

​ stego = l.replace('\n','')

​ \#print(stego)

​ realtext = base64.b64decode(l)

​ \#print(realtext)

​ realtext = str(base64.b64encode(realtext),encoding = "utf-8")

​ \#print(realtext)

​ diff = get_diff(stego, realtext) # diff为隐写字串与实际字串的二进制差值

​ n = stego.count('=')

if diff:

​ x += bin(diff)[2:].zfill(n*2)

else:

​ x += '0' * n*2



i = 0

flag = ''

while i < len(x):

if int(x[i:i+8],2):

​ flag += chr(int(x[i:i+8],2))

​ i += 8

print(flag)

if __name__ == '__main__':

b64_stego_decode()

flag

1
flag{cfcd208495d565ef66e7dff9f98764da}

web

easy_web

image-20210607204831665

通过这些代码我们获取到的信息是

1.POST传参2.强类型

满足这些内容我们就可以进行下一步了

{e10adc3949ba59abbe56e057f20f883e}
通过代码我们可以看出这串字符是运用了MD5进行加密处理,我们运用MD5进行解码得到{123456} 代码中可以看出array是溢出+1我们通过查询得出溢出值9223372036854775807
那么我所用到的数是9223372036854775807-1就是``9223372036854775806

POST传参我们运用到一款工具HackBar

首先题目告诉我们

1
md5($a) === md5($b) `&& ``$a ``!== ``$b`

我们上传md5($a)和md5($b)的值相等但是$a``不等于``$b

那么我们可以

image-20210607205008003

根据题目描述hint:这个图片真好看呀,没啥隐藏的东西吧以及给出的背景图片我们下载背景图,使用binwalk分离出一个压缩包,根据web题解出的压缩包密码,解压得到flag

1
newsctf{this_1s_veryveryveryeasyweb}