VNCTF2022少量wp
web GameV4.0
签到题,直接js代码里找flag就行了。
crypto ezmath
是个web题(雾)。从这一题里,学到了一些python socket编程。
第一层是sha256相关的东西,爆破计算即可;注意控制字符数量(4重循环数字也挺多的),推荐用它源代码里的【string.ascii_letters+string.digits】
第二层是一个坑人的数学,实际上答案就是num*4。
我做这题时主要的困难就是不知道从哪跟他交互;浏览器上不行,nc进去也不行。感觉只能用python写脚本了。第二层有777次询问,肯定要写脚本;每次连接成功后询问的东西都不一样,所以连接一直不能关闭,第一层也得用脚本。就得写一个大脚本。
需要用socket库。创建socket对象(socket.socket())指定好host和port后,用connect创建连接。recv(x)接收长度为xbyte的东西,send发送东西(类型必须为byte)
需要注意的是,第二层有两个连续的send。我刚开始写的比较随意,使得连接很容易中断。后来发现需要一个.recv(18)专门先接收那个ret.encode()【里面的东西18个字节】,才能使连接稳定。同时,那个something wrong根本用不到,因为如果验证错误,ret.encode()里面东西就不一样,连接就会出问题。
第一次写socket有关的脚本,附一下:
import socket
//建立连接
s=socket.socket()
host='node4.buuoj.cn'
port=29244
s.connect((host,port))
back0=s.recv(10240)
print(back0)
//提取第一层内容
a=0
b=0
proof=''
correct=''
for i in range(len(back0)):
if(chr(back0[i])==')'):
a=0
if(a):
proof+=chr(back0[i])
if (chr(back0[i]) == '+' and chr(back0[i-1]) == 'X'):
a = 1
for i in range(len(back0)):
if(chr(back0[i+1])=='['and(b!=0)):
break
if(b):
correct+=chr(back0[i])
if (chr(back0[i-1])=='=' and chr(back0[i-2])=='='):
b=1
print(proof)
print(correct)
解密第一层
import string
from hashlib import sha256
from time import sleep
t = string.ascii_letters+string.digits
ans0=''
for i in range(len(t)):
for j in range(len(t)):
for k in range(len(t)):
for l in range(len(t)):
sha = sha256(t[i].encode()+t[j].encode()+t[k].encode()+t[l].encode()+proof.encode()).hexdigest()
if(sha==correct):
ans0=(t[i]+t[j]+t[k]+t[l])
print(ans0)
s.send(ans0.encode())
back1=s.recv(1024)
//第二层
for i in range(778):
print(back1)
num = ''
d=0
for j in range(len(back1)):
while(chr(back1[j])>='0' and chr(back1[j])<='9'):
num+=chr(back1[j])
j+=1
d=1
if(d==1):
break
num=int(num)
ans1=str(num*4)
s.send(ans1.encode())
ret1 = s.recv(18)
back1 = s.recv(512)
print(i)
sleep(3)
ans=s.recv(512)
print(ans)
Re BabyMaze
给了个pyc文件,但是python跑不了,反编译工具也处理不了。
把前八个字节扒掉之后,用marshal+dis搞出能读的字节码:
注意pyc头已经扒掉了;但是,还是得有【[8:]】
发现文件头部有三个 jump_absolute,是花指令,在字节码里把他们删掉,并且修改代码段长度:
删除7104 7106 7102;将ee07改为e807(代码段长度是ee070000四个字节,小端序)
接着放入反编译工具https://tool.lu/pyc/,就可以了。
后面是个正统的迷宫,写个dfs就行了。