跨站请求伪造(CSRF)-攻击示例(二)

admin 2022年10月11日13:27:49评论50 views字数 3630阅读12分6秒阅读模式

在本节中,将解释什么是跨站请求伪造(CSRF),描述一些常见的CSRF漏洞示例,并解释如何防止CSRF攻击。



CSRF令牌不绑定到用户会话

某些应用程序不会验证令牌与发出请求的用户是否属于同一会话,相反,应用程序维护它已发布的全局令牌池,并接受该池中出现的任何令牌。

在这种情况下,攻击者可以使用自己的账号登录应用程序,获取有效令牌,然后在CSRF攻击中将攻击令牌提供给受害用户。


场景试验-不绑定到用户会话的CSRF

https://portswigger.net/web-security/csrf/lab-token-not-tied-to-user-session

场景说明:

这个试验场景的电子邮件更改功能易受到CSRF攻击,它使用令牌来尝试防止CSRF攻击,但是他们没有集成到站点的会话处理系统中。

试验目的:

要完成这个试验,需要使用漏洞利用服务器托管一个HTML页面,该页面使用CSRF攻击来更改查看者的电子邮件地址,场景提供了两个可供使用的账号wiener:petercarlos:montoya

攻击过程:

打开页面后访问"My account",用提供的账号和密码进行登录后修改下邮箱。


Burp Suite中找到改邮箱的请求,右键点击后从菜单中选择"Generate CSRF PoC"

跨站请求伪造(CSRF)-攻击示例(二)


Burp Suite设置成阻断模式,在页面上再次提交修改邮件的请求,把这次请求中的csrf复制出来,因为每个CSRF令牌只能使用一次,因此放弃这个请求包

跨站请求伪造(CSRF)-攻击示例(二)

将这个CSRF令牌复制到CSRF PoC中进行替换,并在"Options"中勾选"Include auto-submit script",随后点击"Regenerate"生成新的CSRF HTML,再点击"Copy HTML"

跨站请求伪造(CSRF)-攻击示例(二)


打开"exploit server",把CSRF HTML粘贴到Body中,点击"Store",并发送给受害者,完成试验

跨站请求伪造(CSRF)-攻击示例(二)


试验小结:

这种场景要注意的是,CSRF令牌由于只能使用一次,因此一定在截取有效令牌时将请求数据包丢弃,这样就可以获得一个可用的令牌。



CSRF令牌绑定到非会话cookie

在上述漏洞的一个变体中,一些应用程序确实将CSRF令牌绑定到一个cookie,但没有绑定到用于跟踪会话的同一个cookie

当应用程序使用两个不同的框架时,很容易发生这种情况,一个用于会话处理,一个用于CSRF保护,但它们没有集成在一起:

跨站请求伪造(CSRF)-攻击示例(二)

这种情况更难利用,但仍然很脆弱。如果网站包含任何允许攻击者在受害者浏览器中设置cookie的行为,那么就有可能发生攻击。

攻击者可以使用自己的账户登录应用程序,获取有效的令牌和关联的cookie,利用cookie设置行为将其cookie放入受害者的浏览器,并在CSRF攻击中将其令牌提供给受害者。


场景试验-令牌绑定到非会话cookieCSRF

https://portswigger.net/web-security/csrf/lab-token-tied-to-non-session-cookie

场景说明:

这个试验场景的电子邮件更改功能易受到CSRF攻击,它使用令牌来尝试防止CSRF攻击,但是他们没有集成到站点的会话处理系统中。

试验目的:

要完成这个试验,需要使用漏洞利用服务器托管一个HTML页面,该页面使用CSRF攻击来更改查看者的电子邮件地址,场景提供了两个可供使用的账号wiener:petercarlos:montoya

攻击过程:

先用wiener这个账号登录,进去后修改下邮箱,将修改邮箱的请求发送到Repeater,可以看到在cookie区域多了一个csrfkey的参数

跨站请求伪造(CSRF)-攻击示例(二)

随后另外再开个浏览器(隐私模式),用carlos:montoya这个账号登录,通过抓包可以获取到这个这个账号的csrfkeycsrf

跨站请求伪造(CSRF)-攻击示例(二)


跨站请求伪造(CSRF)-攻击示例(二)

接下来将carlos这个账号获取到的csrfkeycsrf分别替换到wiener那个更改邮箱的请求,可以看到如果只替换其中一个的话,都会请求失败,但如果两个都进行替换的话,就可以改邮件成功,说明CSRF令牌并没有跟cookie绑定

跨站请求伪造(CSRF)-攻击示例(二)


跨站请求伪造(CSRF)-攻击示例(二)


跨站请求伪造(CSRF)-攻击示例(二)

接着要想办法修改受害者的csrfkey,因为这部分是包含在cookie里面的,我们通过在首页上的"search"功能可以看到,最近次搜索会返回在响应包中

跨站请求伪造(CSRF)-攻击示例(二)


利用这个特性,我们构建如下payload语句(注意替换下csrfkey),可以看到响应包可以让客户端重新设置了cookie

/?search=test%0d%0aSet-Cookie:%20csrfKey=your-key

跨站请求伪造(CSRF)-攻击示例(二)


将经过改造(替换了csrfcsrfkey)的改密请求右键点击后从菜单中选择"Generate CSRF PoC"

跨站请求伪造(CSRF)-攻击示例(二)


在弹出的CRSF配置框中,"Options"中勾选"Include auto-submit script",随后点击"Regenerate"生成新的CSRF HTML,并删除script区域,插入下面新的语句(用来更改受害者的csrfkey),再点击"Copy HTML"

<img src="$cookie-injection-url" onerror="document.forms[0].submit()">

跨站请求伪造(CSRF)-攻击示例(二)


打开"exploit server",把CSRF HTML粘贴到Body中,点击"Store",并发送给受害者,完成试验

跨站请求伪造(CSRF)-攻击示例(二)


试验小结:

这个场景比较关键的就是如何在受害者的cookie位置进行注入,cookie注入行为甚至不需要与CSRF漏洞存在于同一个Web应用程序中,如果受控制的cookie具有合适的范围,则可以利用同一整体DNS域中的任何其他应用程序在目标应用程序中设置cookie



CSRF令牌只是在cookie中复制

在上述漏洞的进一步变体中,一些应用程序不维护任何已发布令牌的服务器端记录,而是在cookie和请求参数中复制每个令牌。验证后续请求时,应用程序只需验证请求参数中提交的令牌与cookie中提交的值是否匹配。

这有时被称为针对CSRF的“双重提交”防御,并且被提倡是因为它易于实现并且避免了对服务器端状态的需要,比如下面这个请求:

跨站请求伪造(CSRF)-攻击示例(二)

在这种情况下,如果网站包含任何cookie设置功能,攻击者可以再次执行CSRF攻击。

在这里,攻击者不需要获取自己的有效令牌,他们只是发明了一个令牌(格式上可能要求一致),利用cookie设置行为将他们的cookie注入受害者的浏览器,并在他们的CSRF攻击中将他们的令牌提供给受害者。


场景试验-令牌在cookie中重复:

https://portswigger.net/web-security/csrf/lab-token-duplicated-in-cookie

场景说明:

这个试验场景的电子邮件更改功能易受到CSRF攻击,它试图使用不安全的“双重提交”CSRF预防技术。

试验目的:

要完成这个试验,需要使用漏洞利用服务器托管一个HTML页面,该页面使用CSRF攻击来更改查看者的电子邮件地址,场景提供了可供使用的账号wiener:peter

攻击过程:

wiener账号进行登录,随后修改邮箱,将这个请求发送给Repeater,可以看到csrfcookie也出现了,并且两个csrf参数一样

跨站请求伪造(CSRF)-攻击示例(二)


修改下这两处的csrf,发现只要一致,请求就可以成功

跨站请求伪造(CSRF)-攻击示例(二)

接着要想办法修改受害者的cookie中的csrf,因为这部分是包含在cookie里面的,我们通过在首页上的"search"功能可以看到,最近次搜索会返回在响应包中

跨站请求伪造(CSRF)-攻击示例(二)


利用这个特性,我们构建如下payload语句(csrf的参数要用一致的),可以看到响应包可以让客户端重新设置了cookie

/?search=test%0d%0aSet-Cookie:%20csrf=your-key

跨站请求伪造(CSRF)-攻击示例(二)


将经过改造(修改了两个csrf值)的改密请求右键点击后从菜单中选择"Generate CSRF PoC",在弹出的CRSF配置框中,增加下面新的语句(用来更改受害者cookie中的csrf),再点击"Copy HTML"

<img src="$cookie-injection-url" onerror="document.forms[0].submit()">

跨站请求伪造(CSRF)-攻击示例(二)


打开"exploit server",把CSRF HTML粘贴到Body中,点击"Store",并发送给受害者,完成试验

跨站请求伪造(CSRF)-攻击示例(二)

试验小结:

这个试验场景中,只要所有的CSRF值都相同即可,因此都采用test来作为这个值,同时也说明这个应用程序对CSRF值的格式并没有要求。


跨站请求伪造(CSRF)-攻击示例(二)


服务器端请求伪造(SSRF)-概念梳理

文件上传漏洞-概念梳理

访问控制和权限提升漏洞-概念梳理

信息泄露漏洞-概念梳理

业务逻辑漏洞-概念梳理

命令注入攻击(上)
目录遍历攻击(上)

身份验证漏洞-概念梳理

SQL注入攻击-检索隐藏的数据
HTTP Host头漏洞攻击-概念梳理


原文始发于微信公众号(H君网安白话):跨站请求伪造(CSRF)-攻击示例(二)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年10月11日13:27:49
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   跨站请求伪造(CSRF)-攻击示例(二)https://cn-sec.com/archives/1342099.html

发表评论

匿名网友 填写信息