`
zhengyun_ustc
  • 浏览: 82873 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

安全基础教育第二季第1集:屡战屡败的找回密码

阅读更多
郑昀 创建于2015/5/19 最后更新于2015/8/7
关键词: Web安全、系统安全、Web开发、找回密码、重置密码

本文档适用人员:广义的技术人员
提纲:
  1. 堡垒是从内部攻破的
  • 员工无知者无畏
  • 运维配置暴露细节
  • 后台不设防
  • 常犯常新,屡战屡败
  • 找回密码
  • 图形和短信验证码
  • 平行权限
  • MD5等于明文
  • 处处留心皆学问
  • 表单被篡改
  • App被篡改
  • 跨站请求伪造

0x00. 前言:

    第一季培训主要宣导两点,第一,白帽子或黑客都很有耐心,他手里可能捏着你多个漏洞,他一直在等机会,他也有很多工具在扫在寻找机会,第二,一次成功的入侵渗透,并不需要是多么高危的漏洞,几个普普通通的中等漏洞,加上一次社会工程学行动,就可以杀进来。
    第二季主要讲一下几乎所有的 Web 工程师都容易犯的安全错误。有些事情你必须知道,并且身体力行,成为你根深蒂固的开发习惯和思路,否则会重现这个地毯上刹车的悲剧。
 http://ww1.sinaimg.cn/bmiddle/62037b5ajw1ec0lxccvrbg20a305ve83.gif

0x01. 找回密码:

    Web 站点的安全重灾区就是找回密码功能。很多工作了多年的 Web 开发工程师仍然意识不到这些基本安全原则:
  1. 客户端提交的 HTTP Request 是不可信的,表单数据可能被篡改,验证信息可能被仿冒;
  2. 客户端展现的一切,服务器端发给客户端的一切,一切信息,GET/POST参数,HTML/JS/Cookies,都可以被白帽子看到,毫无秘密可言;
  • 靠 JavaScript 在客户端校验,第一白帽子可以在浏览器跟踪调试 JS,看懂你的算法,第二设置断点修改堆栈参数,所以靠服务器端校验才是硬道理。
  • 白帽子也是程序员,第一他可以把各种漏洞扫描规则写成程序定时扫描深度广度遍历,你的站点今天上了一个漏洞,明天他可能就知道了,第二他可以发起字典穷举式暴力攻击,换 IP 对他们来说是小菜一碟。所以,打一开始你就必须有防范措施,图形验证码,rate limiter,Form Token,签名……
  • 安全问题往往是多个不起眼的小问题叠加在一起导致的,所以不要觉得这个问题无所谓那个问题小意思,想不修复就不修复,最后千里之堤溃于蚁穴。
 
1.1.你看不见,你看不见:掩耳盗铃式的开发人员
你敢保证你不会做出下面这种事情吗?
 
案例一:PPS 
+网页版忘记密码功能:
++贴心地实现了“重新发送找回密码邮件”功能。不幸的是,在 URL 里,用来接收邮件的 email 参数是明文的,WTF?!
++从而可以将任意用户的密码重置邮件发给指定邮箱。
图1 找回密码篇-案例1
图2 找回密码篇-案例1-把email参数改一下,改成我的邮箱,uid不变
 
案例二:拉手网
+App 里的忘记密码功能:
++首先,通过抓包分析,发现密码重置接口也可以 Web 访问;其次,填入手机号码提交,服务器端的响应中,居然包含明文短信验证码,虽然是在 JavaScript 中的注释里,当我看不见啊?
图3 找回密码篇-案例2
++此事绝非个案。如第三方支付平台支付通也干过
 
案例三:走秀网
+走秀网团购的忘记密码功能
++点击忘记密码,选择输入手机号码重设,点击获取验证码,用 firebug 注意观察浏览器发出的 AJAX 请求,验证码即将出现,神啊
图4 找回密码篇-案例3
++直接输入此验证码即可重置密码了。
 
案例四:惊天大案,新网互联
+网页版忘记密码功能
++页面上虽然展示的是星号遮挡的邮箱地址,很贴心,但 HTML 文档构造的表单参数里却使用邮箱明文字符串,最终导致2013年5月12日土豆网域名被劫持,酿成国际知名大案:
图5 找回密码篇-案例4
图6 找回密码篇-案例4-白帽子有专用工具,找到关键词很容易
图7 找回密码篇-案例4-改表单参数从新提交
图7-1 找回密码篇-案例4-成功获得土豆网域名管理权限
 
案例五:搜狐网
+网页版找回密码功能
++找回密码时要回答“密码提示问题”;但是工程师把答案明文写在 textarea 控件的 JS 校验函数里了,晕倒,工程师真是单纯;
++从而可以重置任意搜狐用户密码;
图8 找回密码篇-案例5
 
案例六:中兴某站
+网页版找回密码功能
++发送到邮箱里的重置密码链接上,Token 一看就是时间戳,精确到秒,因此可以轻易构造;
图9 找回密码篇-案例6

1.2.你能看见,那我 MD5 一下你就看不见了:Too young too naive 的开发人员
有些工程师看的入门教材可能版本太老,内容过时,所以总以为 MD5() 是神器,殊不知在 MD5 爆破库面前等同于明文。
案例七:奇虎360
+网页版找回密码功能:
++360的找回密码邮件里,重设密码地址格式为:http://i.360.cn/findpwd/setpwdfromemail?vc=%一个MD5加密串%&u=blabla%40gmail.com;
++利用 MD5 爆破库逆向解密后发现,这个 MD5 加密串是一个类似于 1339744000 的数字,很像是UNIX时间戳;
++白帽子进一步验证后猜测,用户找回密码时,系统将此时的UNIX时间戳,与帐号绑定,记录在密码重置队列里,修改该用户的密码时会验证输入的 vc 参数;
++看似合理,但360工程师忽略了一个细节:假如这个时间戳是新生成的,攻击者就能在一定时间段内进行暴力破解,给定任意邮箱,很快就能算出一个有效的重置密码链接;
图10 找回密码篇-案例7-MD5(timestamp)
 
案例八:途牛网
+注册激活邮件功能: 
++注册某牛网后,系统发的注册邮件里,激活URL里,id参数实际上是用户的userid,可以遍历,str参数则是MD5(id)加密串,如下图所示;
图11 找回密码篇-案例8-整数userid,MD5(userid)
图12 找回密码篇-案例8-密文输入MD5爆破库立刻得到明文真值
++从而能注册任意邮箱并激活,或遍历所有整数id激活。
 
案例九:新浪二手房
+网页版找回密码功能:
++点击忘记密码,随意输入一个用户名后,通过 firebug 观察 AJAX 数据包,注意到服务器端返回了一个 JSON 串,很明显是一个手机号码,被 MD5 了一把:
图13 找回密码篇-案例9-ajax返回了用户名对应的手机号,MD5等同于明文
++在手机号码输入框里输入解密后的号码,焦点移开后,浏览器发起了一个 AJAX 请求去获取数字验证码(这是神马逻辑?WTF!)
图14 找回密码篇-案例9-好吧,数字验证码也是MD5了一把
++MD5 爆破库面前,统统都是明文,于是得到数字验证码为 234589,输入后成功重置密码。

1.3.眼里只有 Token:Too young too naive 的开发人员
有些工程师确实单纯,他们做各种业务场景都可能引入平行权限漏洞。在他们的眼里,在服务器端校验一下输入参数 checkcode 或 token 或 vi 参数,就已经很了不起了,校验过了,干啥都行,所以 Token 虽然是颁发给用户 A 的,但可以改用户 B 的数据。
 
什么是平行权限漏洞?
我举一个栗子。
2012年的时候,你注册一个网易邮箱,注册成功后会跳转到一个绑定手机的安全提示页面:
注意链接参数里的 uid,将它改为其他人的网易邮箱地址,在页面上输入你可控的手机号,提交。
目标网易邮箱成功被越权绑定了密保手机。
这就是平行权限漏洞,或者叫“越权”。
 
案例十:身份通
+邮箱找回密码功能
++重置密码的链接发送到了对应邮箱,链接如下:
http://www.idtag.cn/regionTempAction.do?method=resetPassword&idtagCard=用户ID值&authcode=Go8K7yp4TWy&rtEmail=邮箱地址
++抓包后,看到类似于的真值:
org.apache.struts.taglib.html.TOKEN=83accc27d5178f832d9f22a1d02bdacf&org.apache.struts.taglib.html.TOKEN=83accc27d5178f832d9f22a1d02bdacf&rtPassword=123456&passwordw=123456&rtEmail=邮箱&idtagCard=用户ID
++Token 不变,试着改一下用户ID,再次提交请求,哇,成功重置密码:
图15 找回密码篇-案例10
 
案例十一:OPPO
+使用绑定手机号码下发短验找回密码功能
++走正常流程,输入收到的短验和新密码提交,抓包,checkcode不变,将用户名改为任意账户,再次提交,成功重置密码;
图16 找回密码篇-案例11
 
案例十二:携程旅行网
+使用邮箱重置密码功能
++点击系统发送到邮箱的重置密码链接,重置密码并抓包:
图17 找回密码篇-案例12
图18 找回密码篇-案例12-发现Uid一枚
++是的,在 POST 数据中发现标识用户身份的 Uid 参数,而这个 Uid 在密码重置的第二步时,系统会“主动”提供给我们(注意看图17);
++我们用 firefox 的插件 LiveHTTPHeaders,利用它的修改 POST 表单参数并重放功能,修改 Uid,提交表单;
++成功重置另一个用户的密码。

1.4.信任客户端校验的小朋友,你危险了
白帽子有很方便的工具可以调试,可以拦截 Response,可以重放,这个客户端不仅仅指浏览器,还包括手机 App。
案例十三:乐蜂网
+使用手机号找回密码功能;
++进入乐峰网供应商管理系统,点击忘记密码,输入用户名 admin,选择手机找回密码,随意填写一个短验,然后点击下一步,此时抓包:
图19 找回密码篇-案例13-随便写一个验证码填进去
图20 找回密码篇-案例13-截断返回的数据包
++经过反复测试,将下图中的返回码,改成 102 即可绕过,服务器端响应后,直接跳转到重置密码页面:
图21 找回密码篇-案例13-修改 Body 值
++成功重置。
 
1.5.玩 Cookie 玩砸了的小朋友
白帽子都身经百战,跟各种互联网公司的各种层次攻城狮斗智斗勇,所以他们都总结了很多种突破模式。其中一种就是会话覆盖,专门盯着那些喜欢把乱七八糟东西存储在 Cookie 里的小朋友。
案例十四:聚美优品
+使用邮箱找回密码功能;
++1,用浏览器找回你自己的聚美优品帐号的密码,选择验证身份方式为邮箱;
++2,你的邮箱会收到一封邮件,但不要点击那个重置密码链接,但你可以注意到这个链接上没有帐号信息参数;
++3,同一个浏览器继续使用找回密码功能,这次找回目标用户的密码,但到了下面这个步骤后就停住:
图21 找回密码篇-案例14
++4,仍在同一个浏览器里,(否则就不灵了),打开第二步里我们收到的那个重置密码链接:
图22 找回密码篇-案例14
++5,填写新密码,提交,okay,成功重置了目标用户的聚美优品密码:
图23 找回密码篇-案例14
图24 找回密码篇-案例14-搞定
 
1.6.不做 Rate Limiting 就是愚蠢
关键业务不做提交频次阈值防范,就是愚蠢,就等着被别人爆破吧。

参考案例,WooYun: 当当网任意用户密码修改漏洞,还有的做了频次限制但是被绕过的经典案例,WooYun: 微信任意用户密码修改漏洞,它限制了提交次数,但是存在逻辑问题,在手机号字符串后放一些字符就可以绕过。


 
好了,大致就是这么多案例,我们复习一下:
  • 客户端提交的信息,客户端存储的信息,都可能是经过篡改的;
  • 白帽子是程序员,他们有很多工具,可以很方便地找到漏洞、篡改数据并重放;
  • 整数ID是可以遍历的;
  • MD5加密串是可以反向爆破的;
  • JS 校验是不大靠得住的,可以绕过;
  • 每一个互联网站点都有的找回密码功能,看似简单,但对于 Web 开发工程师来说,没那么容易,它能考察出你是一个什么样的工程师,你未来能走多远。
 
最后借用乌云知识库的 BMa 整理的找回密码常见弱点:
  1. 密码找回凭证太弱,如四位数字验证码,容易被爆破 
  2. 密码找回凭证可以从客户端、URL中直接获取 
  3. 密码找回凭证可以在网页源代码中直接获取 
  4. 密码找回的邮箱链接易猜解,如时间的md5 
  5. 跳过验证步骤和找回方式,直接到设置新密码页面
  6. 密码找回凭证存并非只是与单个用户并绑定的问题
  7. 重置密码时返回的 token 没有与账号以及验证码绑定
  8. 密码找回的手机或邮箱可以从页面获取到,所以可以通过 firebug 修改 
  9. 提交新密码时修改用户ID为其他用户ID
  10. 找回密码时没有在服务器上验证用户名与邮箱是否匹配便发送了验证码
  11. 在本地验证服务器的返回信息,确定是否执行重置密码,但是其返回信息是可控的内容,或者可以得到的内容
  12. 发送短信等验证信息的动作在本地进行,可以通过修改返回包进行控制
  13. 在找回密码处存在注入漏洞
他的建议是:找回密码凭证要足够复杂并且不可猜测,任何校验动作都放在服务器端进行,
传输的验证参数要做好加密,同时对参数做好过滤。
就到这里。
 
参考文献:
1,2015,乌云知识库,密码找回逻辑漏洞总结
 
-EOF-
1
2
分享到:
评论
1 楼 yangsong158 2015-09-09  
难得的好文,必需支持。

相关推荐

    覃主任最新员工安全基础教育.pptx

    在覃主任的这份“员工安全基础教育”中,着重强调了安全教育的必要性,这不仅是国家法律法规的要求,也是企业生存发展和员工自我保护的需求。 【安全教育的法律基础】 国家法律法规规定企业必须对员工进行安全教育...

    基础教育校园网络安全现状与对策研究.pdf

    基础教育校园网络安全现状与对策研究.pdf

    基础教育校园健康安全平台项目实施方案共69页.pdf.zi

    标题"基础教育校园健康安全平台项目实施方案共69页.pdf.zi"揭示了这个文档的核心内容,即一个针对基础教育领域的校园健康安全平台的详细规划。这个平台旨在保障学校师生的健康与安全,可能涵盖疾病预防、应急处理、...

    商用密码应用安全性评估试题第二批商用密码应用安全性评估 .zip

    这份资料包包含了“商用密码应用安全性评估试题第二批商用密码应用安全性评估 .docx”文档和一个名为“a.txt”的文本文件,很可能是对第二批商用密码应用安全性的测试题目和相关说明。 首先,商用密码在信息安全中...

    场口站第四季度安全工作总结.doc

    2. 隐患排查与整治:站内按照“安全第一,预防为主,综合治理”的原则,进行了全面的安全隐患排查,对车道、办公场所、食堂和设备运营等区域进行了专项治理,发现并整改了安全隐患,确保了运营安全。 3. 安全管理...

    华为-基础教育信息化区域教育云解决方案.pdf

    一、华为基础教育信息化区域教育云解决方案概述 华为针对基础教育信息化推出区域教育云解决方案,旨在通过云计算技术,实现教育资源的高效整合和业务的灵活扩展。该方案通过构建区域智慧教育的ICT基础环境,提供包括...

    安全教育理论1

    安全教育在体育运动中扮演着至关重要的角色,特别是在K12阶段,也就是基础教育阶段。体育运动不仅是提升学生体质的有效手段,也是塑造他们安全意识的重要环节。以下将详细阐述体育运动应遵循的原则、安全意识的培养...

    2021年网关行业企业安全生产教育培训及安全作业.pdf

    1.1 安全生产教育管理制度:这是企业安全管理的基础,规定了安全教育的目标、方式、周期和责任分配,以确保教育活动有条不紊地进行。 1.2 各部门报送的培训需求计划:各部门根据自身工作性质和风险点,提出针对性的...

    XX油田公司岗前安全教育第一部分:安全生产基本知识.pptx

    安全管理的方针是“安全第一,预防为主”。工伤是指工作期间的意外伤害和职业病,而工伤保险则是一种社会保障机制,为受伤员工提供援助。危害和危险源分别表示可能引发事故的状况和因素,安全生产则是在安全条件下...

    三级安全教育培训

    安全思想教育的目的是为安全生产奠定思想基础,通常从加强思想路线、方针政策两个方面进行。 路线和方针政策的教育,一是提高各级领导干部和广大职工对安全生产重要性的认识,从思想上、理论上认识国家的法律法规...

    2021年工程塑料尼龙系列行业企业安全生产教育培训及安全作业.pdf

    - 安全生产教育管理制度:这是规范企业内部安全教育行为的基础,规定了教育的目标、方式、内容和责任划分,以确保教育活动有序进行。 - 培训需求计划:各部门根据实际工作中的安全风险和员工能力,提出具体的安全...

    三级安全教育卡.doc

    4. **高处作业、机械设备、电气安全基础知识:** 涵盖高空作业的安全防护措施、机械设备的操作规范以及电气设备的安全使用方法。 5. **防火、防毒、防尘、防爆知识及紧急情况安全处置和安全疏散知识:** 教育员工...

    2021年软件及服务行业企业安全生产教育培训及安全作业.pdf

    1.1 安全生产教育管理制度:这是企业建立系统化、规范化的安全管理基础,包括制定培训目标、内容、方式和频次,以确保所有员工了解并遵守安全规定。企业应定期更新制度,以适应法规变化和技术进步。 1.2 各部门培训...

    员工入职安全基础知识教育课件.ppt

    **为什么要进行新员工安全基础教育** 1. **员工自我保护的需要**:通过安全教育,员工可以了解潜在的工作场所危险,学习预防措施,提升自我保护意识和能力。 2. **顺利开展安全管理工作的需要**:统一的安全知识和...

    风电场安全教育培训计划归纳.pdf

    风电场安全教育培训计划是确保风电场...通过这些措施,风电场能够构建一个系统、全面的安全教育体系,确保所有工作人员都具备必要的安全知识和技能,从而降低安全事故的风险,保障风电场的正常运行和员工的生命安全。

    2021年医用气体系统行业企业安全生产教育培训及安全作业.pdf

    1. 安全培训教育是企业安全生产的基础,它包括以下环节: - **安全生产教育管理制度**:明确企业内部的安全教育政策,规定各级员工的安全责任,确保安全教育活动的系统性和规范性。 - **各部门报送的培训需求...

    2021年餐厨垃圾车行业企业安全生产教育培训及安全作业.pdf

    1. 安全生产教育管理制度:这是企业内部安全管理的基础,包括对新入职员工、转岗员工以及在岗员工的安全知识和技能培训规定,以及定期进行安全教育的制度。企业应制定并执行一套完整的安全生产教育管理制度,以确保...

    2021年医疗卫生服务行业企业安全生产教育培训及安全作业.pdf

    《2021年医疗卫生服务行业企业安全生产教育培训及安全作业》是针对该行业安全生产教育与安全操作的重要指导文件,旨在确保企业在提供医疗服务的同时,保障人员的生命安全和身体健康,避免安全事故的发生。...

    2021年垃圾焚烧发电行业企业安全生产教育培训及安全作业.pdf

    《2021年垃圾焚烧发电行业企业安全生产教育培训及安全作业》是一份针对垃圾焚烧发电行业的详尽指导文件,旨在确保企业在2021年的生产过程中实现高效且安全的运营。该文件着重强调了安全生产教育和安全作业的重要性,...

    2021年电池化学品行业企业安全生产教育培训及安全作业.pdf

    这样的安全生产教育培训和安全作业规范,旨在构建一个全面的安全管理体系,通过持续的教育和实践,使每个员工都成为安全生产的积极参与者,降低事故风险,促进电池化学品行业的健康发展。同时,这样的制度也是企业...

Global site tag (gtag.js) - Google Analytics