简单sql注入入门

sql注入

  1. 基本流程是:观察注入点->判断参数类型-->判断列数(group by或order by)-->观察是否存在显示位(就是页面能够显示列数据的位置(实践理解)),语法报错,异常页面显示(根据不同情况选择不同的注入方式)-->根据不同的注入方式依次显示库,列,表。·

  1. 简单判断参数类型:

?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后面查询语句的结果

可以看见在字符型注入中判断了列数就可以根据列数进而判断显示位,上面的2,3就是能显示查询结果的位置

实例:

ps:当前99%以上的MySQL版本都是5.0以上,都支information_schema 库(),所以我们会使用该库进行爆数据库-->爆数据表--爆数据列-->爆数据(类似于根据目录查页数然后翻到相对于的位置)

在爆之前先简单介绍一下一个比较重要的库:information_schema

简单介绍该库中常用的表

1 . schemata表: 该表中存有mysql中的所有数据库,相当于show databases 指令

ps:schema_name字段中存放所有的列信息

schemata 表中所有字段

  1. tables 表中

table_name字段:可以查看数据库中的所有表名

table_schema是数据库名.

  1. columns表中

COLUMN_NAME : 字段表示的是数据库中所有的字段信息

TABLE_NAME :字段表示的保存着所有的表名称

TABLE_SCHEMA: 字段表示保存的所有的数据库的名称

基于sql-labs注入实例

有了上述步骤 依次获取库,表,列。最后看信息

声名:group_concat()将数据显示为一列

concat_ws(separator, expression1, expression2, expression3,...)

获取全部数据库:

获取全部表名:

获取users表中全部列名:

获取user表中全部的信息

ps:也可以用concat_ws 进行分割

以上,有错误还请指出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值