MENU

也谈开发人员工具对HTML和JS的安全风险

June 23, 2013 • 扯淡阅读设置

昨天上午Hans在某群说某**(手动屏蔽)模拟飞行论坛的呼号管理系统时隔两月后再次被攻破,成功取得fsd管理员权限。惊讶之余(之前一次攻破后动静太大,该论坛技术人员已修复漏洞),询问是何种方法攻破系统。答曰:“开发人员工具”。Hans目前使用Chrome,我使用某山寨Chrome,都有一样的Developer Tools。之前我拿它主要是分析html中的元素和看看cookies,一直没有继续发掘什么深层次的东西,看来这一次还有些妙用呢。

先说说第一次攻破上述论坛的呼号系统的情况。事实上也不能算是攻破。系统很简单,就是修改用户的密码。fsd服务器的用户列表文件格式如“用户名 密码 级别 级别 级别”,每行一个用户。如果在密码段中换行,即可新增一个任意级别的用户。知道了这个原理,想要攻破就不难了。由于该论坛使用了Windows服务器,只需加上一段“\r\n 用户名 密码 10 12 12”即可取得一个最高权限的帐号。其中“\r\n”是Windows下的换行符,某些使用Linux服务器的论坛fsd想要攻入,应使用“\n”。当用户密码被replace进验证文件后,就顺利地取得了自定义的帐号。

第一次攻入后,Hans在该fsd上进行了“惨绝人寰的杀戮”,惊动了管理员。当他们杯具地分析了一团糟的验证文件后,当天便对系统进行了修补,因此Hans较长一段时间没有再去捣乱。

第二次攻入后,由于fsd上没有用户,Hans便听取了Allen建议发了个英文帖子说明问题,但帖子中没有提及任何技术细节。发帖时间超过24小时了,我在这里公布一下技术细节应该是没问题的。

针对第一次攻入的修复其实治标不治本。技术人员仅仅只是对可能引发fsd安全问题的字符使用JavaScript(以下简称js)进行了过滤,若出现则抛出错误。使用开发人员工具,可以对网页中所有内容进行修改,只需简单地删除js即可绕过验证,提交信息,攻入验证。


以上扯淡部分结束。

针对此问题,Hans写了篇短文名曰“开发人员工具对HTML和JS的安全风险”发表于Hans Dev,现将全文转载如下:

今日重返某**(手动屏蔽)模拟飞行论坛,因上次其宣布已修复呼号系统的问题,便对此忽然来了兴趣。
通过查看源代码发现只是通过js的replace进行过滤,后台处理是否有过滤未知,遂将这一段js代码在开发人员工具中删去,在呼号密码后加上了提升等级所需的代码,提交保存成功,且ES能以ADM权限登录,可知js过滤代码的方法已完全失效。
今后在开发尤其是设计HTML表单和js内容时,必须仔细考虑是否存在此类问题,否则将留下非常大的安全隐患,目前的VMS就应该有不少这种问题,需要在处理部分进一步加强防范。


那么针对这种问题,应该如何解决呢?简单思索,通常有三种方案。现将方案逐一分析如下:
1.使用JavaScript过滤。优点:适当地使用JS+CSS可以极大地增强用户体验;缺点:可轻易绕过验证(即使页面有token)。
2.使用脚本语言过滤。优点:可极方便地进行过滤,可验证长度、可使用正则表达式等,一旦不符即可抛出异常,终止程序处理,杜绝安全问题;缺点:仅使用脚本语言可能造成极差的用户体验。
3.使用JavaScript+脚本语言过滤(可配合ajax)。这是结合了以上两个方案的解决方法,可以看出,客户端先使用JS,可以增强用户体验;一旦有用户使用特殊方法绕过js验证,也有服务器端保险。缺点就是工作量大一些咯。

正如Hans所说,VMS中一定存在此类漏洞。后台管理面板中我在修改用户信息页面时便犯了这种错误。现在看来,解决方法便是彻底删去对该字段的修改或者修改代码。VMS系统使用的是Nabeel Shahzad开发的Codon Framework。如VMS一样,许多php应用都使用了框架以节省开发成本。框架中通常提供直接使用表单数据来创建数据,这其实是一个危险的表现,不法用户完全可以自己修改表单,来攻入数据库。为避免这类问题,AllNippon.Net的开发过程中,所有数据库操作均手工进行了数据对象/数组赋值,而避免使用表单直接创建数据(即使我们所使用的开发框架考虑比较周全)。配合SQL语句转义,可极大提升应用安全性。


一句话总结本扯淡文:应用非小事,安全不忽视!
以上。

Archives Tip
QR Code for this page
Tipping QR Code