- 来源:Root-Me
- 题型:Web-Server
- 题目:SQL injection - string
- 分数:30 Points
SQLi 水题。关键是找到注入点。
查看页面源码,发现这题其实是有 3 个页面的:
虽然三个页面都有数据库查询操作,但是测试发现注入点在 ?action=recherche
页面。
首先确认数据库类型,输入 payload :'exp error'
故意不闭合引号,尝试令 SQL 报错。
通过页面回显的异常信息,可以确认是 SQLite3 数据库。
在 SQLite3 中只有一个系统隐藏表 sqlite_master ,其表结构如下:
CREATE TABLE sqlite_master (
type TEXT,
name TEXT,
tbl_name TEXT,
rootpage INTEGER,
sql TEXT
);
这张表存储了数据库中每个数据表的信息,可以通过它找到其他数据表。
构造跨表查询 payload :exp' or 1=1 union select name, sql from sqlite_master --
从中找到账户表及其表结构 users (CREATE TABLE users(username TEXT, password TEXT, Year INTEGER))
进一步构造 payload 跨表查询 users 的账号信息:
exp' or 1=1 union select username, password from users --
得到 admin 的密码,完成挑战。
答案下载
flag 下载后的 flagzip 的文件需要手动更改后缀为
*.zip
,然后解压即可(为了避免直接刷答案)