[ACTF新生赛2020]fungame 题解

简介: [ACTF新生赛2020]fungame 题解

开辟了一块内存空间,然后有两个函数,进入第一个跟一下

将输入的字符串进行异或,后比较, 解一下

y1=[0x23,0x61,0x3e,0x69,0x54,0x41,0x18,0x4d,0x6e,0x3b,0x65,0x53,0x30,0x79,0x45,0x5b]
y2=[0x71,0x04,0x61,0x58,0x27,0x1e,0x4b,0x22,0x5e,0x64,0x03,0x26,0x5e,0x17,0x3c,0x7a];
flag=""
for i in range(0,len(y1)):
    flag+=chr(y1[i]^y2[i])
print(flag)
print(len(flag))

得出Re_1s_So0_funny!

长度是16

不是flag,看一下函数

这其实是flag的第一部分

将16位flag赋值到12位数组

这其实是一个利用栈溢出漏洞,调用了另一个函数,我们知道了栈溢出后填入的地址是40233D,增地址就是栈溢出后我们输入的第二部分,就是flag的第二部分

跟踪x,找到了调用的这个函数

进入这个函数之后,再输入了一个字符串,进行了base64加密,解密之后得到第三部分flag

WP

import base64
y1=[0x23,0x61,0x3e,0x69,0x54,0x41,0x18,0x4d,0x6e,0x3b,0x65,0x53,0x30,0x79,0x45,0x5b]
y2=[0x71,0x04,0x61,0x58,0x27,0x1e,0x4b,0x22,0x5e,0x64,0x03,0x26,0x5e,0x17,0x3c,0x7a];
flag=""
for i in range(0,len(y1)):
    flag+=chr(y1[i]^y2[i])
addr=[0x3d,0x23,0x40]
for i in range(len(addr)):
    flag+=chr(addr[i])
a="YTFzMF9wV24="
print(a.encode())
flag+=base64.b64decode(a.encode()).decode()
print(flag)

 

相关文章
|
1天前
|
Python
NSSCTF[HUBUCTF 2022 新生赛]ezPython
NSSCTF[HUBUCTF 2022 新生赛]ezPython
8 0
|
3月前
|
PHP
[ACTF2020 新生赛]Include1
[ACTF2020 新生赛]Include1
|
3月前
|
PHP
BUUCTF---[ACTF2020 新生赛]BackupFile1
BUUCTF---[ACTF2020 新生赛]BackupFile1
|
10月前
|
存储
[ACTF新生赛2020]SoulLike 题解
[ACTF新生赛2020]SoulLike 题解
107 0
|
3月前
|
C++
【PTA】​L1-079 天梯赛的善良​ (C++)
【PTA】​L1-079 天梯赛的善良​ (C++)
89 0
【PTA】​L1-079 天梯赛的善良​ (C++)
|
PHP
[SWPUCTF 2021 新生赛]include
[SWPUCTF 2021 新生赛]include
146 0
|
3月前
|
数据安全/隐私保护
BUUCTF [ACTF新生赛2020]outguess 1
BUUCTF [ACTF新生赛2020]outguess 1
47 0
BUUCTF [ACTF新生赛2020]outguess 1
|
3月前
|
数据安全/隐私保护
BUUCTF [ACTF新生赛2020]swp 1
BUUCTF [ACTF新生赛2020]swp 1
86 1
|
10月前
|
存储
[ACTF新生赛2020]easyre 题解
[ACTF新生赛2020]easyre 题解
195 0
|
10月前
|
定位技术
[ACTF新生赛2020]Oruga 题解
[ACTF新生赛2020]Oruga 题解
63 0