360护心镜脚本分析及N种绕过方式

0x00 初识“护心镜”


官方介绍:

通过Hook XSS的常用函数,并监控DOM元素的创建,从而对整个页面的js行为进行监控。当发现页面中存在XSS攻击行为时,可根据预置的选项,进行放行,提醒用户选择,阻拦三种处理方式,同时预警中心会收到一次事件的告警,安全人员可根据告警进行应急响应处理。

在研究如何绕过一个系统之前,不急于直接读代码,先旁敲侧击看看这个系统大体都做了什么。

官方介绍中,在脚本加载前,需要执行一堆配置代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

#!html

type="text/javascript">

var hxj_config = {

    project_key: "*****(平台分配)",

    domain_white: ["0kee.360.cn"],

    enable_plugin: {

      cookie: 1,

      xsstester: 1,

      password: 1,

      fish: 1,

      webshell: 1,

      script: 1

    }

};

</script>

type="text/javascript" src="http://res.0kee.com/hxj.min.js"></script>

</code>

project_key” 不用说就是一个标识站点的key,“domain_white”和名字一样:白名单, 而“enable_plugin”表示了各个模块的开关。

通过http://res.0kee.com/hxj.min.js下载脚本,发现经过uglify-js的混淆压缩,将代码进行美化后对代码进行分析。

由于代码经过混淆,直接开看想必会有困难,在看代码之前,本想根据配置里的6大模块逐个分析,结果幸运的是,这个脚本并没有对自定属性名进行混淆,呈现如下:

1

2

3

4

5

6

7

#!js

...

}, s.Hook_CreateElement = function...

}, s.Hook_Image = function...

}, s.Hook_Source = function...

...

</code>

根据属性名+配置文件的模块,可以看出护心镜主要实现了以下几个功能:

1

2

3

4

5

6

1. 对 XSS 经常用到的函数进行 HOOK,将传递进来的变量进行分析,是否有危险

2. 对页面中 JS 执行的代码进行“行为标记”

3. 加载外部资源时对域名进行白名单校验

4. 对危险行为产生报告向护心镜后台发送

5. 触发 XSS 或者加载外部 JS 时提示用户,是否进行拦截

</code>

举个例子:当一个 XSSer 对某后台进行盲打时,嵌入了一串代码:

1

2

3

#!html

相关文章