发布于 

gdqwb2021

转行现场

新晋密码手还是没啥经验,最后看那个题多就去做哪个,所以就就做了个web……

web

文件上传漏洞,随意上传,发现回传bad filename,估计是白名单,所以传flag相关的文件试试。

发现只有不加后缀名的flag可以展示文件内容。于是想到flag应该是内部文件,所以试图传文件目录上去。开始想到退回根目录,但发现检测.后的为后缀名,所以传/flag试了试,在响应里找到了flag,解题完成。

re

字节码逆向。对着边读边还原:

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
flag=input()
a=0
for i in range(len(flag)):
a=a+1
if a!=32 :
return error
exit()
#异常处理没再多分析,就这样了。
flag[0]=="f"
flag[1]=="l"
flag[2]=="a"
flag[3]=="g"
flag[4]=="{"
flag[31]="}"
tmp=[]
for i in range(a):
tmp.append(flag[i])

for i in range(a):
tmp[i]=ord(tmp[i])-9

for i in range(a):
tmp[i]^=51
for i in range(a):
tmp[i]+=8

tmp1=tmp[a-3]
tmp2=tmp[a-2]
tmp3=tmp[a-1]

for i in range(a-3):
tmp[a-i-1]=tmp[a-1-i-3]
tmp[0]=tmp3
tmp[1]=tmp2
tmp[2]=tmp1
for i in range(a):
if i%7==1:
continue
else:
tmp[i]^=119

于是编写逆向脚本:

1
2
3
4
t=[56, 117, 43, 1, 47, 4, 2, 62, 23, 14, 42, 102, 28, 28, 6, 33, 243, 99, 241, 101, 3, 5, 123, 43, 0, 100, 7, 11, 103, 134, 19, 245]
a=[chr((((t[i]^119)-8)^51)+9) if i%7!=1 else chr(((t[i] -8 )^51)+9) for i in range(len(t))]
a=a[3:]+a[2::-1]
print("".join(a))

中间踩了几个雷,一来是^与+-的优先级问题,二来是tmp顺序问题,吃一堑长一智。


本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

本站由 [@Zuni](http://example.com/) 创建,使用 Stellar 作为主题。