sql注入
基本流程是:观察注入点->判断参数类型-->判断列数(group by或order by)-->观察是否存在显示位(就是页面能够显示列数据的位置(实践理解)),语法报错,异常页面显示(根据不同情况选择不同的注入方式)-->根据不同的注入方式依次显示库,列,表。·
简单判断参数类型:
?id =1 and 1=1 正常显示(结果为真)
?id =1 and 1=2 正常 的话结和上一个语句可以判断为非整型注入
select * from user where id='1 and 1=2';//id 为int型 所以查询结果为id=1的值
select * from user where id= 1 and 1=2 //数字型结果为假
?id=1' //如果报错或无则可能是字符型注入
?id=1' %27 //%27是url编码的# 如果正常则确认是字符型
还有一种办法判断字符型与数字型注入,由于字符型是不会进行运算的所以注入时可以这样
?id =2-1
如果是字符型注入则会返回到id=2的结果 , 如果是数字型则会返回id=1的结果
不要问想+号能不能,它不能,会被理解为空格
判断列数:
对于字符型注入查询列数用 ' 闭合一下就行。
?id =1'group by 1 --+ //闭合并注释掉后面的内容
?id =1 order by 1 --+ //数字型查询列数
显示异常或报错就说明 列数到头了(简单类型)group by的话是不易被墙的
确定显示位:
union(联合两个select语句)联合查询语句默认只能返回一行数据,要是想得到点什么,在你发现了注入点后肯定想执行你的插入语句,所以只要让它的查询语句为空就行,例如将id = 0 或id=-1。这样做的目的就是就是让它的查询语句为空继而返回union后面查询语句的结果
![](https://img-blog.csdnimg.cn/img_convert/ac2b3f14ee35efc0107898684a876668.png)
可以看见在字符型注入中判断了列数就可以根据列数进而判断显示位,上面的2,3就是能显示查询结果的位置
实例:
![](https://img-blog.csdnimg.cn/img_convert/fd66ffafcf2baf8df9242938fc754a78.png)
ps:当前99%以上的MySQL版本都是5.0以上,都支information_schema 库(),所以我们会使用该库进行爆数据库-->爆数据表--爆数据列-->爆数据(类似于根据目录查页数然后翻到相对于的位置)
在爆之前先简单介绍一下一个比较重要的库:information_schema
简单介绍该库中常用的表
1 . schemata表: 该表中存有mysql中的所有数据库,相当于show databases 指令
![](https://img-blog.csdnimg.cn/img_convert/37a21c8f5ce730847c9f55aa18953fcd.png)
ps:schema_name字段中存放所有的列信息
schemata 表中所有字段
![](https://img-blog.csdnimg.cn/img_convert/4c627c4a8101b6b0cbc60aa29575bffc.png)
tables 表中
table_name字段:可以查看数据库中的所有表名
table_schema是数据库名.
columns表中
COLUMN_NAME : 字段表示的是数据库中所有的字段信息。
TABLE_NAME :字段表示的保存着所有的表名称
TABLE_SCHEMA: 字段表示保存的所有的数据库的名称
基于sql-labs注入实例
有了上述步骤 依次获取库,表,列。最后看信息
声名:group_concat()将数据显示为一列
concat_ws(separator, expression1, expression2, expression3,...)
获取全部数据库:
![](https://img-blog.csdnimg.cn/img_convert/1658126ddb4994ca1faafb534c0aa690.png)
获取全部表名:
![](https://img-blog.csdnimg.cn/img_convert/f2edb0871073cc2b3a02c4bc0bce7f0f.png)
获取users表中全部列名:
![](https://img-blog.csdnimg.cn/img_convert/3665468dd772651febf98bc0ed66ff20.png)
获取user表中全部的信息
![](https://img-blog.csdnimg.cn/img_convert/fe0c55ad45699f2556b342918141d123.png)
ps:也可以用concat_ws 进行分割
以上,有错误还请指出