2.11 [BJDCTF2020]Easy MD5&Mark loves cat


首先打开页面,在输入框随便输入发现没有跳转,f12查看后台文件中发现hint

md5($pass,true)第二个参数默认是false
FALSE - 默认 32 字符十六进制数
TRUE - 原始 16 字符二进制格式。
所以当输入特殊字符串时在经md5加密后可能出现注入语句。
在上网百度后发现两个特殊字符:’ffifdyop’,’129581926211651571912466741651878684928’。
ffifdyop:T0Do#’or’8
129581926211651571912466741651878684928:’or’6]!r,b。
所以直接输入ffifdyop,转到第二页面。



查看源代码后发现是md5弱类型比较。下面给出的字符串随便找两个传参即可:

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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
找md5以oe开头的
常用的md5:
QNKCDZO
0e830400451993494058024219903391

s878926199a
0e545993274517709034328855841020

s155964671a
0e342768416822451524974117254469

s214587387a
0e848240448830537924465865611904

s214587387a
0e848240448830537924465865611904

s878926199a
0e545993274517709034328855841020

s1091221200a
0e940624217856561557816327384675

s1885207154a
0e509367213418206700842008763514

s1502113478a
0e861580163291561247404381396064

s1885207154a
0e509367213418206700842008763514

0e861580163291561247404381396064

s1885207154a
0e509367213418206700842008763514

s1836677006a
0e481036490867661113260034900752

s155964671a
0e342768416822451524974117254469

s1184209335a
0e072485820392773389523109082030

s1665632922a
0e731198061491163073197128363787

s1502113478a
0e861580163291561247404381396064

s1836677006a
0e481036490867661113260034900752

s1091221200a
0e940624217856561557816327384675

s155964671a
0e342768416822451524974117254469

s1502113478a
0e861580163291561247404381396064

s155964671a
0e342768416822451524974117254469

s1665632922a
0e731198061491163073197128363787

s155964671a
0e342768416822451524974117254469

s1091221200a
0e940624217856561557816327384675

s1836677006a
0e481036490867661113260034900752

s1885207154a
0e509367213418206700842008763514

s532378020a
0e220463095855511507588041205815

s878926199a
0e545993274517709034328855841020

s1091221200a
0e940624217856561557816327384675

s214587387a
0e848240448830537924465865611904

s1502113478a
0e861580163291561247404381396064

s1091221200a
0e940624217856561557816327384675

s1665632922a
0e731198061491163073197128363787

s1885207154a
0e509367213418206700842008763514

s1836677006a
0e481036490867661113260034900752

s1665632922a
0e731198061491163073197128363787

s878926199a
0e545993274517709034328855841020

传参后跳转最后一个页面:

发现是===完全等于,可以利用[]数组绕过,利用error=error原理,得到flag。


打开网站随便看看,发现没有什么特别,用dirsearch扫描一下,发现/.git目录,用githack获取一下源码。


分析得到的源码:


看到使用的$$会导致变量覆盖漏洞,看一下代码逻辑:forsearch一下post传参的参数键名和值:如果传入$flag=flag,则会导致$$flag=$flag;同理get参数:传入yds=flag,则会导致$yds=$flag,所以yds的值就是flag变量的值。在没有设置flag参数的时候会直接exit出yds的值。
根据上面的逻辑可以直接构造:

1
get传参:?yds=flag

#
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×