Winse Blog

走走停停, 熙熙攘攘, 忙忙碌碌, 不知何畏.

使用 Naxsi 处理 XSS

前台安全检查时出现了【检测到目标URL存在跨站漏洞】,就是可以通过url带js来截取用户的信息。

1
js/jquery/jquery-1.8.2.min.js/<ScRipt>jovoys(6258);</ScRipt>

XSS的一些简单介绍:

搜索到使用 naxsi 配合 nginx 有现成的解决方案,网上的资料很乱,直接看 官方文档 清晰一些。

  1. 编译
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[hadoop@cu2 sources]$ ll
drwxrwxr-x  6 hadoop hadoop      4096 Sep 10  2015 naxsi-0.54
-rw-r--r--  1 hadoop hadoop    192843 Jul 19 18:42 naxsi-0.54.zip
drwxr-xr-x  9 hadoop hadoop      4096 Nov 11  2015 nginx-1.7.10

[hadoop@cu2 sources]$ ll nginx-1.7.10/
total 3180
drwxr-xr-x  6 hadoop hadoop    4096 Nov 11  2015 auto
-rw-r--r--  1 hadoop hadoop  246649 Feb 10  2015 CHANGES
-rw-r--r--  1 hadoop hadoop  375103 Feb 10  2015 CHANGES.ru
drwxr-xr-x  2 hadoop hadoop    4096 Nov 11  2015 conf
-rwxr-xr-x  1 hadoop hadoop    2463 Feb 10  2015 configure
drwxr-xr-x  4 hadoop hadoop    4096 Nov 11  2015 contrib
drwxr-xr-x  2 hadoop hadoop    4096 Nov 11  2015 html
-rw-r--r--  1 hadoop hadoop    1397 Feb 10  2015 LICENSE
-rw-rw-r--  1 hadoop hadoop     342 Jul 19 18:44 Makefile
drwxr-xr-x  2 hadoop hadoop    4096 Nov 11  2015 man
drwxrwxr-x  4 hadoop hadoop    4096 Jul 19 18:45 objs
-rw-r--r--  1 hadoop hadoop 2009464 Nov 11  2015 pcre-8.36.tar.gz
-rw-r--r--  1 hadoop hadoop      49 Feb 10  2015 README
drwxr-xr-x 10 hadoop hadoop    4096 Nov 11  2015 src
-rw-r--r--  1 hadoop hadoop  571091 Nov 11  2015 zlib-1.2.8.tar.gz

[hadoop@cu2 nginx-1.7.10]$ ./configure --add-module=../naxsi-x.xx/naxsi_src/ --prefix=/opt/nginx
[hadoop@cu2 nginx-1.7.10]$ make && make install
  1. 配置

需要在 nginx.conf 的http中引入 naxsi_core.rules ,在location中加入规则。

先把 naxsi_core.rules 拷贝到 nginx/conf 目录下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
http {
    include       mime.types;
    include       naxsi_core.rules;
  ...
    server {
  ...
        location /omc {

#Enable naxsi
SecRulesEnabled;

#Enable learning mide
#LearningMode;

#Define where blocked requests go
DeniedUrl "/omc/error.jsp";

#CheckRules, determining when naxsi needs to take action
CheckRule "$SQL >= 8" BLOCK;
CheckRule "$RFI >= 8" BLOCK;
CheckRule "$TRAVERSAL >= 4" BLOCK;
CheckRule "$EVADE >= 4" BLOCK;
CheckRule "$XSS >= 8" BLOCK;

#naxsi logs goes there
error_log logs/foo.log;

                proxy_set_header        X-Real-IP $remote_addr;
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header        Host $http_host;

                proxy_pass http://localhost:8888/omc;
        }
      ...
      
  1. 启动生效
1
sbin/nginx -p $PWD

https://github.com/nbs-system/naxsi/wiki/naxsi-setup https://github.com/nbs-system/naxsi/wiki/checkrules-bnf

检查会比较严格,添加后应用可能会报错,需要对 foo.log 中的情况进行确认,对规则进行一些修改。如不需要监控 cookie 里面的内容:

1
2
[omc@cu-omc1 nginx]$ vi conf/naxsi_core.rules 
:%s/|$HEADERS_VAR:Cookie//

还有一些 %[2|3] 的可能也需要改改。

1
uri=/omc/Frame/Time.do&learning=0&vers=0.54&total_processed=404&total_blocked=10&block=1&zone0=BODY&id0=16&var_name0=

根据请求的 id 去规则配置里面找具体的描述,然后 uri 和 var_name 查看具体的请求对症下药:去掉规则或者改请求。

如上面请求的 id0=16 对应 #@MainRule “msg:empty POST” id:16; 把请求修改成get即可。

–END

Comments