前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kali Linux Web渗透测试手册(第二版) - 4.8- 执行跨站点请求伪造攻击

Kali Linux Web渗透测试手册(第二版) - 4.8- 执行跨站点请求伪造攻击

作者头像
用户1631416
发布2019-01-02 17:05:46
2.1K0
发布2019-01-02 17:05:46
举报
文章被收录于专栏:玄魂工作室

翻译来自掣雷小组

成员信息:

thr0cyte,Gr33k,花花,MrTools,R1ght0us,7089bAt

标记红色的部分为今日更新内容。

第四章、测试身份验证和会话管理

4.0、介绍

4.1、用户名枚举

4.2、使用Burp Suite进行登陆页面的字典攻击

4.3、使用Hydra强制进行暴力攻击

4.4、使用Metasploit破解Tomcat的密码

4.5、手动识别Cookie中的漏洞

4.6、攻击会话固定漏洞

4.7、使用Burp Sequencer评估会话标识符的质量

4.8、不安全对象的直接引用

4.9、执行跨站点请求伪造攻击


4.9、执行跨站点请求伪造攻击

CSRF攻击是指经过身份验证的用户在对其进行身份验证的Web应用程序中执行不需要的操作的攻击。 这是通过用户访问的外部站点完成的,并触发这些操作。

在本文中,我们将从应用程序中获取所需信息,以便了解攻击站点应该如何向易受攻击的服务器发送有效请求,然后我们将创建一个模拟合法请求的页面,并诱使用户访问经过身份验证的那个页面。 我们还将对概念的基本证明进行一些迭代,使其看起来更像真实世界的攻击,受害者不会注意到它。

环境准备

你们需要在BodgeIt中为此配置使用有效的用户帐户。 我们将使用user@example.com作为受害者:

实战演练

我们首先需要分析我们想要强迫受害者提出的要求。为此,我们需要Burp Suite或浏览器中配置的其他代理:

1. 以任何用户身份登录BodgeIt,然后单击用户名转到配置文件。

2. 进行密码更改,让我们看看代理中的请求是什么样的:

所以,这是一个POST请求http://192.168.56.11/bodgeit/password.jsp并且只有密码及其在正文中的确认.

3. 让我们尝试创建一个非常简单的HTML页面来复制这个请求。 使用以下内容创建一个文件(我们将其命名为csrf-change-password.html):

4. 现在,在与登录会话相同的浏览器中加载此文件:

5. 单击“提交”,您将被重定向到用户的个人资料页面。 它会告诉您密码已成功更新。

6. 虽然这证明了这一点,但外部站点(或本例中的本地HTML页面)可以在应用程序上执行密码更改请求。用户仍然不太可能点击“提交”按钮。 我们可以自动执行该操作并隐藏输入字段,以便隐藏恶意内容。 让我们根据前一页创建一个新页面;我们称之为csrf-change-password-scripted.html:

7. 如果我们在启动了BodgeIt会话的同一浏览器中加载此页面,它将自动发送请求,之后将显示用户的个人资料页面。在下面的屏幕截图中,我们使用浏览器的调试器在请求发出之前设置断点:

8. 从攻击者的角度来看,这最后一次尝试看起来更好; 我们只需要受害者加载页面,请求将自动发送,但受害者将看到您的密码已被更改消息,这肯定会引发警报。

9. 我们可以通过在同一页面内的不可见框架中加载响应来进一步改进攻击页面。 有很多方法可以做到这一点; 快速而肮脏的是为框架设置尺寸0。 我们的文件看起来像这样:

注意表单的target属性是如何在它下面定义的iframe,并且这样的框架具有0%的高度和宽度。 10.在启动会话的浏览器中加载新页面。 这个截图显示了使用浏览器的开发人员工具检查页面时的外观:

请注意,iframe对象在页面中只是一个黑线,在Inspector中,我们可以看到它包含BodgeIt用户的配置文件页面。

11. 如果我们分析CSRF页面所进行的网络通信,我们可以看到它实际上要求更改BodgeIt密码:

原理剖析

当我们从浏览器发送请求并且已经存储了属于目标域的cookie时,浏览器会在发送之前将cookie附加到请求中; 这就是使cookie像会话标识符一样方便的原因,但这种HTTP工作方式的特点也使它容易受到像我们在本文中看到的那样的攻击。

当我们在应用程序中有活动会话的同一浏览器中加载页面时,即使它是不同的选项卡或窗口,并且此页面向启动会话的域发出请求,浏览器将自动附加会话该请求的cookie。 如果服务器没有验证它收到的请求实际上来自应用程序内部,通常是通过添加包含唯一的参数,对于每个请求或每次更改的令牌,它允许恶意站点代表访问此恶意站点的合法,活跃用户进行呼叫,同时对目标域进行身份验证。

在Web应用程序渗透测试中,我们使用的第一个代码,带有两个文本字段和提交按钮的代码可能足以证明存在安全漏洞。 但是,如果应用程序的渗透测试是另一项参与的一部分,例如社会工程或红队练习,则需要做一些额外的努力来防止受害用户怀疑发生了某些事情。在本文中,我们使用JavaScript通过在页面中设置onload事件并在事件处理函数中执行表单的submit方法来自动发送请求。 我们还使用隐藏的iframe来加载密码更改的响应,因此,受害者永远不会看到他/她的密码已更改的消息。

另请参阅

应用程序通常使用Web服务执行某些任务或从服务器检索信息,而无需更改或重新加载页面; 这些请求是通过JavaScript(它们将添加标头X-Requested-With:XMLHttpRequest)以及通常以JSON或XML格式添加的,其中Content-Type标头的值为application / json或application/ xml。 当发生这种情况时,我们尝试发出跨站点/域请求,浏览器将执行所谓的预检检查,这意味着在预期请求之前,浏览器将发送OPTIONS请求以验证哪些方法和内容类型服务器允许从跨源(域应用程序所属的域以外)请求).

预检检查可以中断CSRF攻击,因为如果服务器不允许跨源请求,浏览器将不会发送恶意请求。 但是,此保护仅在通过脚本进行请求时才有效,而不是在通过表单进行时。因此,如果我们可以将JSON或XML请求转换为常规HTML表单,我们就可以创建CSRF攻击。 如果这是不可能的,因为服务器只允许某些内容类型,那么我们成功CSRF的唯一机会是服务器的跨源资源共享(CORS)策略允许来自我们的攻击域的请求,因此请检查服务器响应中的Access-Control-Allow-Origin标头。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-12-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 玄魂工作室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
多因子身份认证
多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档