XSS漏洞原理
攻击者在被攻击的web服务器网页中嵌入恶意脚本,通常使用js编写的恶意代码,当用户使用浏览器访问被嵌入恶意代码的网页时,恶意代码将会在用户的浏览器上执行。XSS其实也是注入的一种,前端注入。(用户输入的传参会被当作前端代码执行)。
常见获取前端参数方式
1.使用Servlet
技术
1 | public class ServletCheckLogin extends HttpServlet { |
- 使用
Structs2
框架
通过action类绑定参数或model获取前端的参数
3.使用springMvc获取前端参数
对象方式
1 |
|
自定义方法参数名
1 | /** |
使用ServletRequest
绑定注解获取参数
1 | /** |
XSS漏洞审计流程
(1)通过熟悉代码后快速全局搜索是否存在”XSS”,”xssFilter”,以及是否含有对常见的js标签进行黑名单过滤的工具,如果没有,则大概率的爱的情况下是没有进行XSS漏洞的防御。
(2)如果发现了存在基于黑名单过滤特殊字符,要去评估黑名单是否完整,也就是说是否基本覆盖了常见的危险字符。否则会造成绕过的风险,一般情况下这种修复手段不建议使用(第一存在被绕过的可能行,第二就是过滤请求参数不全面(在没有全局配置过滤器Filter的情况))
(3)如果配置了全局式的XSS过滤器,需要确定过滤器是否正常开启,否则形同虚设。
(4)对于XSS漏洞,存在情况1:一般是全站式XSS,往往是因为开发时完全没有考虑到对所有的参数进行防御。情况2:拥有一定的安全经验和以前被披露过XSS漏洞,通过自己的工具仅仅解决了部分参数的XSS漏洞,这种情况也是不完整的(可能配置了全局过滤器,但是防御范围仅仅局限于某些参数,而非所有前端可控的参数)
案例1:market
进入项目全局搜索XSS。发现就这么单独的一行字,并没有做撒子过滤
接下里去库存页面随意新增一个商品,输入xss代码,通过抓包看到路由指向
再idea里使用全局搜索该路由,可以跟踪我们输入商品。
并没有做任何过滤,因此存在存储型xss漏洞。
案例2:汽车租赁
仍然全局搜索发现没有xss过滤器的踪迹,所以应该是全面敞开了。
随意的填写一个
一点干货
其实这个复现的过程和结果都一目了然,主要是跟着断点熟悉了spring项目的运行结构。
1 | controller层接收前端输入信息并给予响应(是否前后端连接上了),然后controller层将信息参数传给service处理; |