记一次 XSS 攻击 时间: 2019-10-29 03:21 分类: JAVA Web ####前言 做个站真的不容易,本来访问量就没多少,还整天有些人想搞你,网站做了评论功能,本来是有加防`XSS`攻击的过滤器的,但不记得什么时候什么原因在`web.xml`中将过滤器去掉了,导致今天的悲剧发生。 ####分析 本次被攻击成功的结果就是,只要一打开带有XSS评论的页面,就直接跳到一个博彩的网站去了。第一反应就是先修改`jsp`中的评论代码,将评论区代码用``注释掉,注意不是用`<%-- --%>`注释,那样的话我们在页面上看不到`XSS`攻击的代码。 修改后于是再次打开我们之前的页面,既然定位到了是评论的`XSS`攻击,所以这次页面成功打开并未跳转了,当然,此时的评论模块是一片空白,我们需要右键选择查看源代码,然后找到我们注释掉的评论区,此时发现果然,评论内容里带有如下代码: ``` 评论内容 ``` 很明显上面的代码只要被网页一加载就会跳转到第三方网站,大家也记住上面这个`dd.ma`,死妈的东西! 于是数据库直接搜索`script`,找到该评论,然后删除。 接着把`jsp`注释取消,再次打开网站,麻麦皮的还是跳转!再次去数据库评论表搜索,发现以前某用户的一条评论变成了带有上面`XSS`攻击代码的评论,并且评论者ID变成了我的ID,难道这`XSS`攻击还有感染的能力,还能修改数据库?`XSS`攻击貌似不可能做到吧,于是再次数据库删除,再次打开网页,果然,网页还是跳转的! 经过多次尝试,发现不直接删除带有攻击的评论纪录,而是修改评论内容去掉攻击代码,网页不会进行跳转。 有个更奇怪的现象就是,某次删除带有攻击评论的记录后网页还是跳转但是数据库中评论表中却搜不到攻击代码了,查看网页源码居然在分类栏目中某个分类带有了攻击代码。 之前被感染的同是评论表还没什么的,但删除评论表感染到了分类表,真是够奇怪的。 由于分类不能直接删除,直接进行修改将攻击代码删除,网页恢复正常,防止其他表被感染,彻底清除攻击代码,我将所有表都搜索了一遍,未发现攻击代码这才放心下来。 至于之前的感染问题,我倒觉得不像是`XSS`攻击人故意而为之的,倒像是数据库删除数据时导致的,具体为什么会这样我也不清楚。 ####处理方法 由于这次是自己关闭了防`XSS`过滤器的原因导致了攻击者的趁虚而入,所以我直接恢复过滤器问题就得以解决了,网站属于`SpringMVC`项目,大家可以自行搜索如何防止`XSS`攻击,最简单的就是对网页提交内容做正则匹配剔除掉`html`标签代码。 但`Google`发现有人说不建议用正则表达式去检查`XSS`攻击,原文如下: [Regex is not a tool that can be used to correctly parse HTML.][1] 由于我使用的是`SpringMVC`,所以直接用以下工具类来对`XSS`攻击做检测: ```java public class XssUtils { /** * Verify if a string contains any HTML characters by comparing its * HTML-escaped version with the original. * @param String input the input String * @return boolean True if the String contains HTML characters */ public static boolean isHtml(String input) { boolean isHtml = false; if (input != null) { if (!input.equals(HtmlUtils.htmlEscape(input))) { isHtml = true; } } return isHtml; } } ``` 原文链接: [There are much better ways to prevent XSS attacks.][2] 至此问题告一段落。 **第二天** 前面说的其他表被改的问题已经找到,今天发现攻击者可改任何表数据,查询数据库并无异常ip连接,并且被改数据都是通过网站接口所改,所以大致可以肯定是后台被爆破或者绕过了权限拦截。 目前解决办法是暂时先将所有请求进行`XSS`拦截过滤,攻击者发现修改数据无法达到他的目的暂时歇停下来了,但是如果真的是后台被迫,那么哪天被人清空了数据那就悲剧了,所以这几天每天进行备份,后台记录登录信息,必须弄清数据被改的原因。 [1]: https://stackoverflow.com/a/1732454/3626537 [2]: https://stackoverflow.com/a/5769859/3626537 标签: xss