一、原理
偏移注入是一种注入姿势,可以根据一个较多字段的表对一个少字段的表进行偏移注入,一般是联合查询.
在SQL注入的时候会遇到一些无法查询列名的问题,比如系统自带数据库的权限不够而无法访问系统自带库。当你猜到表名无法猜到字段名的情况下,我们可以使用偏移注入来查询那张表里面的数据。
假设一个表有8个字段,admin表有3个字段。
联合查询payload:union select 1,2,3,4,5,6,7,8 from admin
在我们不知道admin有多少字段的情况下可以尝试payload:union select 1,2,3,4,5,6,7,admin.*from admin,此时页面出错直到payload:union select 1,2,3,4,5,admin,* from admin时贞面返回正常,说明admin表有三个字段。
那么,如果页面上显示的2,3,4这三个字段数据,那么我们就可以将admin.*提前,比如union select 1,admin,*,2,3,4,5 fromadmin,那么admin表的数据在不知道字段名称的情况下就被回显出来了。(偏移注入现在用的不多了,因为有时候不太好用)
二、偏移量注入特定及使用限制
知道表名,不知道列名时用偏移量注入
联合查询时,确保要查询的表的字段比前面表的字段要少,这样才能用偏移量注入。
偏移量注入特点:前面查询的表的列数要比后面查询的表的列数多
三、联合查询的两表间关系
语句:select * from member union select *,1,2,3, users;
member表 | id | name | password | aaa | bbb |
---|---|---|---|---|---|
users表 | id | usersname | 1 | 2 | 3 |
select * from member union select 1,users.*,2,3, users;
member表 | id | name | password | aaa | bbb |
---|---|---|---|---|---|
users表 | 1 | id | usersname | 2 | 3 |
select * from member union select 1,2,3,* users;
member表 | id | name | password | aaa | bbb |
---|---|---|---|---|---|
users表 | 1 | 2 | 3 | id | usersname |
若member表展示的是name列和password列,则users表展示的是与member表对齐的两列。
四、注入示例
打开pikachu靶场,数字型注入,查询,抓包
找到其源文件
更改一下
回到重放器
加入偏移量注入语句