绕过客户端验证进行安全测试

  • A+
所属分类:安全文章

学习打卡计划是信安之路知识星球开启的 “每天读书一小时,挑战打卡一百天” 主题活动,能够坚持学习打卡 100 天的同学可以获得信安之路提供的百分成就徽章和证书,学习书籍可以自选,主要目的是养成每日读书学习的好习惯,并将自己的学习心得分享出来供大家学习。

下图为最新打卡内容以及上周星球主题集赞榜单 TOP5,目前每周集赞第一名可获得腾讯视频 VIP 月卡一张,以资鼓励:

绕过客户端验证进行安全测试

打卡一:P157-173

这部分内容主要讲客户端软件提交的数据不可信导致的安全问题,将用户数据存放在客户端,可以大大降低服务器的数据量,提升开发效率,但是会存在大量的安全问题。

客户端存在的数据包括:

1、隐藏的表单字段,比如常见的商品价格,用户在提交订单的时候,连同商品数量和价格一起发送给服务端,由服务端处理用户提交的数据,这种问题可能导致商品价格被恶意篡改,以前乌云经常出现一元买xxx就是这个原因。

2、cookie 字段:这个问题最多见的是在 cookie 中设置用户身份的字段,服务器通过判断客户端请求 cookie 中包含的身份字段来对用户鉴权,这样的问题就导致了越权的问题,攻击者可以修改 cookie 中的身份字段来提升权限。

3、URL 参数:通常用户点击链接,自动跳转页面,但是对于攻击者而言,所有的参数都是可以修改的,比如遍历漏洞。

4、referer 消息头:这个问题主要取决于网站对于 referer 的处理,如果网站完全信任某一 referer 的请求,那么就会存在问题,如果网站对于 referer 一点用都没有,那么也不会存在啥安全问题。

还有其他的数据,比如 x-forword-for、host、post 参数,客户端的问题主要取决于网站对于客户端提交数据的处理方式和信任程度,这个需要针对性的测试。

打卡二:P174-180

对于客户端而言,前端访问的页面是由 html+javascript 组成的界面,而为了减轻服务器的压力,会在客户端上执行安全验证,比如 HTML 表单中的限制长度、限制输入格式;使用 javascript 自动提交参数,或者验证参数是否符合要求;HTML 设置的灰色按钮,禁止部分用户使用指定功能等。

对于客户端验证的所有操作,在用户眼里可能做到限制的效果,但是对于攻击者而言,界面上的显示仅仅是一个透明的壳,客户端提交到服务端的任何数据都是可以伪造的,无一例外,只要服务器端少一点验证,那么就会引发安全问题的存在。

想要做到一切皆可伪造,那么就需要大家对 http 协议的理解深刻,对于抓包工具的使用熟练,burp 用好很关键,抓包重放非常好用。

从 180 页 到 205 页 都是讲浏览器扩展的,对于基础要求更高,难度比较大,大家有兴趣的可以去看看,我这就跳过了。

打卡三:P206-210

对于客户端的数据如何保证安全呢?

最常用的方法就是签名和验签,对于客户端提交的数据进行数据签名,然后在服务器端对用户提交的数据进行验证,判断签名是否正确,是否存在被篡改的可能,这种方式对于移动 APP 来说比较好做,因为 APP 的实现逻辑完全由企业决定,而 PC 端比较难以实现,因为浏览器是公共组件,很难做定制的签名机制。

签名的方式,一般有几种,比如对关键数据加密、对请求的参数进行 hash 随请求一起发送;主要实现完整性、保密性的原则,在攻击者不知道签名算法的情况下,很难对参数进行伪造和替换。

还有就是在服务器端进行验证,对于类似价格这种关键数据,由服务器提供,而非客户端,对于用户提交的参数,最好使用白名单的方式,比如数字型,非数字参数一律拦截,根据参数要求设置白名单验证机制。

最后一步就是留存日志,方便日后的分析溯源,保留证据,以备不时之需,网络安全法要求日志留存六个月以上,这是强制要求。

总结

看书实践是学习最有效率的方式,也是最枯燥乏味的,很难坚持,形成学习的小圈子,互相督促,互相监督,互相分享是最好的学习途径,无论如何,学习成长是自己的,致每一个爱学习,想成长的你,共勉。

绕过客户端验证进行安全测试

本文始发于微信公众号(信安之路):绕过客户端验证进行安全测试

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: