前言:
在进行sql注入之前我们首先得知道sql注入的流程:
1.判断注入点
2.使用order by猜解列名(字段)数量
3.报错猜解,判断回显点
4.信息收集
5.使用对应sql语句进行注入
一 在本地搭建sqli靶场后打开第二关卡 如图
二 首先在url地址栏传值过去判断是否有注入点以及注入点类型
可以看到 在id值传输过一个1过去有回显 可以判断是有注入点的
之后我们给到一个and 1=2(%20是空格的意思)明显是一个错误逻辑但是依旧正常显示 可以判断这是一个字符型注入点(因为它把 1之后的数据给过滤了)
三 然后我们尝试进行sql闭合
可以看到此时 在给一个and 1=2时(%20是空格 %27是单引号') 没有回显了 逻辑通顺 我可以大致推断它的源码sql语句为
select *from 表名 where id='传过去的值'
在我们把id值改为 1' 则它的源码sql语句便成为 select *from 表名 where id='1' ' 此时sql闭合而后面则多出来一个' 我们可以使用--+(作用是注释掉后面的sql语句)进行注释掉后面的'
则成为select *from 表名 where id='1'--+ '
到这一步我们完成了sql注入的第一步 判断注入点
二 使用order by猜解字段数量
依次使用order by 1,2,3...这样试错 猜解字段数量
可以看到 在进行4时 报错 说明 表里有三个字段
完成sql注入第二步
三 信息收集
判断回显点 进行信息收集 (使用 version() database() 收集mysql版本号以及 当前使用的数据库)
可以看到回显 告诉我们使用的是mysql5.7.26版本 数据库为security
在sql 5.0版本以上我们可以使用自带的四个系统库来进行查询表名以及字段名
四 知道了security 库名我们下一步要使用相应的sql语句查询库里有哪些表 以及一些敏感表中的字段名
使用SQL查询security有哪些表: union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'--+
可以看到回显给我们 这些表名 我们选择一些感觉可能有对我们有用信息的表进行查询字段名这里我选择users表
:
union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' and table_schema='security'--+
可以看到 security这个数据库中users表里有这些字段 然后我们就可以查询这些字段中的数据 这里我选择username 和password 这两个字段
union select 1,group_concat(username),group_concat(password) from security.users--+
这里就可以看到数据库的username和对应的密码了
仅供娱乐