某国家大型考试网站安全漏洞测试 (一)

不久前对公司的项目做了一次上线前的安全测试,不挖不知道,一挖吓一跳。做外包的都知道,人员流动性大,水平差距大,项目各种文档写了跟没写差不多。再加上开发等测试发现问题,测试只负责乱点然后提交问题,项目经理拿着问题让开发人员解决这种恶性循环很难得到良好并高效的代码。基于这种情况,我首先估测了开发人员的水平,然后从页面的HTML和JS入手,看看JS的风格和用法基本就能知道开发人员的水平。果然,这个网站的Js写的毫无章法。于是理所当然的就明白这种水平程序员哪里会出错。

安全细节就不透漏了,说下总结吧。

CSRF 类型防御

目前最有效的防御CSRF的就是提交请求,服务端生成安全码并记录,返回给客户端要求客户再次提交。提交后后台验证安全码。
当然,两年前,有个老外提供了一个思路,连续用Js从客户端提交三次,后来考虑到三次多余了就改为两次。被国内的某大看到然后居然写到了书里并说是他们自己提出的想法,在这里鄙视一下先,作为一代国内安全专家,万人敬仰,不应该如此抄袭别人的想法。如果我看到一些重要功能如取消报名这种,一定会做攻击。 当然也得看地址和参数,如果参数带了某些唯一ID的话,不太好下手。

例如这样一个地址 www.testcenter.com/ canclemyapplication?id=XXXXXXXX

当然还得分析,这个参数是什么含义,如果是某个考试的ID,那完蛋了,你找到这个考试ID,然后大规模的跨站取消就基本可以实现了,因为所有报名这个考试的取消报名都是这个地址,所以这种实现方式必然是通过Session里的用户ID和考试ID做联合主键查询出报名记录然后取消报名。不过还好,这个网站不是统一参数,每个报名记录都是唯一的参数。这种参数地址,能形成攻击场景的只有一种可能,你知道某个人的报名的序号,同时让对方触发你发送的东西,同时你还要祈求对方在触发的时候他在这个网站设置了 记住我 或者 浏览器里面保存的该网站的Session还没过期。那恭喜你,对方被你跨站取消了某个考试的报名了。不过,这些场景都是可以构造的,例如发布一些考试的信息,针对某种考试的,然后总结出这个考试生成的报名序号ID的样式,然后挂一些包过,包领证,包通过等等社工信息。页面后面加载一段Js,通过Js再获取一部分暴力数据,然后每隔一个小时更换一批等等。兴许可以误打误撞的取消一部分考试的报名。当然实现起来还是很繁琐的。除非,你真心的想害某个人,从其他途径获取到这个报名序号,然后做一个页面给他触发,这种场景就容易很多。

小总结一下: 搞安全测试的人,都的是内心最邪恶的好人,只有你够邪恶,才能发现问题并用你内心的正义去阻止它。老子不是黑摩羯,但是摩羯最适合干这事儿。

你可能感兴趣的:(某国家大型考试网站安全漏洞测试 (一))