针对 OAuth20 的 CSRF 攻击,第1张

可以先从Web安全入口,难度相对较低。

学习Web安全需要掌握Web安全相关概念、渗透测试相关工具、渗透实战操作、熟悉Windows/Kali Linux、中间件和服务器的安全配置、脚本编程学习、源码审计与漏洞分析、安全体系设计与开发等等。

简单做一个学习规划:

第一步:Web安全相关概念

建议学习时间:2周

学习内容如下:

1、熟悉基本概念(SQL注入、上传、XSS、CSRF、一句话木马等)。

2、通过关键字(SQL注入、上传、XSS、CSRF、一句话木马等)进行Google。

3、阅读《Web安全深度剖析》,作为入门学习还是可以的。

4、看一些渗透笔记/视频,了解渗透实战的整个过程,可以Google(渗透笔记、渗透过程、入侵过程等)。

第二步:熟悉渗透相关工具

建议学习时间:3周

学习内容如下:

1、熟悉AWVS、Sqlmap、Burpsuite、Nessus、China chopper 、Nmap、Appscan等相关工具的使用。

2、了解该类工具的用途和使用场景。

3、下载无后门版的这些软件进行安装。

4、学习并进行使用,具体教材可以在网上搜索,例如:Burpsuite的教程、Sqlmap。

5、常用的这几个软件都学会后,可以安装音速启动做一个渗透工具箱

第三步:渗透实战操作

建议学习时间:5周

学习内容如下:

1、掌握渗透的整个阶段并能够独立渗透小型站点。

2、网上找渗透视频看并思考其中的思路和原理,关键字(渗透、SQL注入视频、文件上传入侵、数据库备份、Dedecms漏洞利用等等)。

3、自己找站点/搭建测试环境进行测试,记住请隐藏好你自己。

4、思考渗透主要分为几个阶段,每个阶段需要做哪些工作,例如这个:PTES渗透测试执行标准。

5、研究SQL注入的种类、注入原理、手动注入技巧。

6、研究文件上传的原理,如何进行截断、解析漏洞利用等,参照:上传攻击框架。

7、研究XSS形成的原理和种类,具体学习方法可以Google。

8、研究Windows/Linux提权的方法和具体使用,可以参考:提权。

9、可以参考: 开源渗透测试脆弱系统。

第四步:关注安全圈动态

建议学习时间:1周

学习内容如下:

1、关注安全圈的最新漏洞、安全事件与技术文章。

2、浏览每日的安全技术文章/事件。

3、通过微博、微信关注安全圈的从业人员(遇到大牛的关注或者好友果断关注),天天抽时间刷一下。

4、通过feedly/鲜果订阅国内外安全技术博客(不要仅限于国内,平时多注意积累)。

5、养成习惯,每天主动提交安全技术文章链接到i春秋社区进行积淀。

6、多关注下最新漏洞列表,可以看看春秋 云境com,遇到公开的漏洞都去实践下。

7、关注国内国际上的安全会议的议题或者录像。

8、加入技术交流群,与群内大佬们讨教一些经验和技巧。

第五步:熟悉Windows/Kali Linux

建议学习时间:3周

学习内容如下:

1、学习Windows/Kali Linux基本命令、常用工具。

2、熟悉Windows下的常用的cmd命令,例如:ipconfig,nslookup,tracert,net,tasklist,taskkill等。

3、熟悉Linux下的常用命令,例如:ifconfig,ls,cp,mv,vi,wget,service,sudo等。

4、熟悉Kali Linux系统下的常用工具,可以参考《Web Penetration Testing with Kali Linux》、《Hacking with Kali》等。

5、熟悉metasploit工具,可以参考《Metasploit渗透测试指南》。

第六步:中间件和服务器的安全配置

建议学习时间:3周

学习内容如下:

1、学习服务器环境配置,并能通过思考发现配置存在的安全问题。

2、Windows server2012环境下的IIS配置,特别注意配置安全和运行权限。

3、Linux环境下的LAMP的安全配置,主要考虑运行权限、跨目录、文件夹权限等。

4、远程系统加固,限制用户名和口令登陆,通过iptables限制端口;配置软件Waf加强系统安全,在服务器配置mod_security等系统。

5、通过Nessus软件对配置环境进行安全检测,发现未知安全威胁。

第七步:脚本编程学习

建议学习时间:4周

学习内容如下:

1、选择脚本语言:Perl/Python/PHP/Go/Java中的一种,对常用库进行编程学习。

2、搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP,IDE强烈推荐Sublime。

3、Python编程学习,学习内容包含:语法、正则、文件、网络、多线程等常用库,推荐《Python核心编程》。

4、用Python编写漏洞的exp,然后写一个简单的网络爬虫。

5、PHP基本语法学习并书写一个简单的博客系统,参见《PHP与MySQL程序设计(第4版)》、视频。

6、熟悉MVC架构,并试着学习一个PHP框架或者Python框架(可选)。

7、了解Bootstrap的布局或者CSS。

第八步:源码审计与漏洞分析

建议学习时间:3周

学习内容如下:

1、能独立分析脚本源码程序并发现安全问题。

2、熟悉源码审计的动态和静态方法,并知道如何去分析程序。

3、了解Web漏洞的形成原因,然后通过关键字进行查找分析。

4、研究Web漏洞形成原理和如何从源码层面避免该类漏洞,并整理成checklist。

学习地址:i春秋官网(企安殿)

第九步:安全体系设计与开发

建议学习时间:5周

学习内容如下:

1、能建立自己的安全体系,并能提出一些安全建议或者系统架构。

2、开发一些实用的安全小工具并开源,体现个人实力。

3、建立自己的安全体系,对公司安全有自己的一些认识和见解。

4、提出或者加入大型安全系统的架构或者开发。

1、信息收集

11/ Whois信息--注册人、电话、邮箱、DNS、地址

12/ Googlehack--敏感目录、敏感文件、更多信息收集

13/ 服务器IP--Nmap扫描、端口对应的服务、C段

14/ 旁注--Bing查询、脚本工具

15/ 如果遇到CDN--Cloudflare(绕过)、从子域入手(mail,postfix)、DNS传送域漏洞

16/ 服务器、组件(指纹)--操作系统、web server(apache,nginx,iis)、脚本语言

17/ More

2、漏洞挖掘

21/ 探测Web应用指纹--Discuz、PHPwind、Dedecms、Ecshop

22/ XSS、CSRF、XSIO、SQLinjection、权限绕过、任意文件读取、文件包含

23/ 上传漏洞--截断、修改、解析漏洞

24/ 有无验证码--进行暴力破解

25/ More

3、漏洞利用

31/ 思考目的性--达到什么样的效果

32/ 隐藏,破坏性--根据探测到的应用指纹寻找对应的EXP攻击载荷或者自己编写

33/ 开始漏洞攻击,获取相应权限,根据场景不同变化思路拿到webshell

这篇文章的主要内容来源于另外一个作者,文章地址: 移花接木:针对OAuth2的CSRF攻击

不过针对 OAuth20 的 CSRF 攻击我有两个疑问点,先列出来:

1如果授权码(Authorization code)和 client_id、redirect_uri 是绑定的,即便攻击者把 Tonr 网站触发申请令牌的 HTTP 请求中的授权码替换了,Sparklr 认证服务器校验 code 的合法性时发现其对应的 client_id 等不一致,那么这个code会被认定为不合法的,攻击就会失败

2有人会说获取授权码(Authorization code)的 HTTP 请求是 GET 方式,截获 client_id、redirect_uri 很容易,然后在 Tonr 网站申请令牌的 HTTP 请求中 client_id、redirect_uri 把也都替换掉,那这样的话,获取的 token 就不再是属于张三的了,攻击也会失败

下面是原文章内容

为了提升用户的帐号登录、注册体验,往往会在我们的 Web 网站、App 中提供如 QQ、WeChat、Sina等第三方社交帐号登录或者绑定的功能,通过上一篇文章 理解OAuth20 我们知道这背后使用到的关键技术是 OAuth20 认证,想要在自己的 Web 站点、App 中集成第三方帐号登录不是难事,第三方服务提供者都有详细的文档指南

这篇文章我们聚焦关注下 OAuth 安全方面的坑,被人经常谈起的一个 OAuth 安全问题就是开发者不规范化使用 state 而引起的 CSRF 攻击

我们看一个针对 OAuth20 的 CSRF 攻击的例子。假设有用户张三、攻击者李四,第三方应用 Tonr(该应用集成了第三方社交账号登录,并且允许用户将社交帐号和 Tonr 中的帐号进行绑定),以及 OAuth20 服务提供者 Sparklr

1 攻击者李四登录 Tonr 网站,使用 Sparklr 帐号授权登录 Tonr 网站,并且将 Sparklr 帐号与 Tonr 网站的帐号进行绑定

2 李四选择使用 Sparklr 帐号授权登录 Tonr 网站,根据 OAuth20 授权登录流程,此时 Tonr 网站会将李四的请求导向 Sparklr 的认证服务器,询问是否同意授权 Tonr 网站

3 李四在点击 同意授权 之后,截获 Sparklr 认证服务器返回的 code 参数

4 李四精心构造一个 Web 页面,它会触发 Tonr 网站向 Sparklr 发起申请令牌的请求,而这个请求中的 code 就是上一步截获的 code

5 李四将这个 Web 页面放到互联网上,等待或诱骗受害者张三来访问

6 张三之前登录过 Tonr 网站,只是没有把自己的帐号与其他社交帐号绑定起来。在张三访问李四准备的这个 Web 页面的时候,触发了令牌申请流程,Tonr 网站从 Sparklr 那里获取到 Access token ,但是这个 token 以及通过它进一步获取到的用户信息都是攻击者李四的

7 Tonr 网站将李四的 Sparklr 帐号同张三的 Tonr 帐号关联绑定起来,从此以后,李四就可以用自己的 Sparklr 帐号通过 OAuth 授权登录到张三在 Tonr 网站中的帐号,堂而皇之的冒充张三的身份执行各种操作

我们从不同的角度看看这其中发生了什么

受害者张三访问了一个 Web 页面,然后就没有然后了,他在 Tonr 网站上的帐号就和攻击者李四在 Sparklr 上的帐号绑定在一起了。他根本不知道发生了什么

从 Tonr 网站来看,它收到的请求都是正常的,首先它收到了一个 HTTP 请求,代表着当前用户张三在 Sparklr 认证服务器上已经做了 同意授权 操作,其内容如下:

当 Tonr 网站收到这样的请求时,它以为用户张三已经同意授权,于是就发起后续的令牌申请请求,(注意此时申请令牌的请求中的 code 已经被替换成攻击者李四的 code ),用收到的 Authorization code 向 Sparklr 网站换取 Access token ,只不过最后拿到的是攻击者李四的 Access token

最后,通过 Access Token 换取到用户张三在 Tonr 网站的帐号信息并与攻击者李四在 Sparklr 网站的帐号进行绑定

对于 Sparklr 网站来说,只要收到的参数是正确的有效的,那就提供正常的认证服务,仅此而已

在用户张三同意 Sparklr 授权 Tonr 网站的授权请求后,攻击者将 Sparklr 网站返回的授权码(Authorization code) 替换成自己提前获取到的 code 。这样,当受害者访问到攻击者精心准备的 Web 页面并向 Sparklr 发起申请 Access Token 令牌的 HTTP 请求,实际上是在用张三在 Tonr 网站上的帐号和李四在 Sparklr 网站上的帐号进行绑定

攻击完成之后,李四在 Tonr 网站上可以使用自己在 Sparklr 网站上的帐号进行登录,而且登录进去的是张三在 Tonr 网站上的帐号,同理张三通过自己在 Tonr 网站上的帐号登录进去之后,看到的是李四在

Sparklr 网站上的数据

从整体上来看,这次攻击的时序图应该是下面这个样子:

要想完成 CSRF 攻击也是不容易进行的

首选,用户张三必须在 Tonr 网站已经拥有了一个个人帐号

其次,整个攻击必须要在短时间内完成,因为第三方服务提供商的认证服务器颁发的授权码(Authorization code) 有效期很短,OAuth20 官方建议控制在 10分钟 ,一旦 Authorization code 过期后那么后续的攻击也就不能进行下去了

最后,一个 Authorization code 只能被使用一次,如果第三方服务提供商收到重复的 Authorization code ,它会拒绝当前令牌的申请请求。不仅如此,根据 OAuth20 官方推荐,它还可以把和这个已经使用过的 Authorization code 相关联的 Access Token 全部撤销掉,进一步降低安全风险

要防止这样的攻击也不难,作为第三方应用的开发者,只需要在 OAuth 认证过程中加入 state 参数,并验证它的参数值即可,具体细节如下:

state 参数在 OAuth2 认证过程中不是必选参数,因此第三方应用开发者在集成 OAuth2 认证的时候,容易忽略该参数的存在,导致容易受到 CSRF 攻击。并且,这种攻击比较巧妙,可以悄无声息的攻陷受害者的帐号,难以被察觉

所以,作为第三方应用开发者,我们只需要在 OAuth20 认证过程中明确提供 state 参数并验证其参数值,即可防御这样的攻击

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 针对 OAuth20 的 CSRF 攻击

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情