翻译来自:掣雷小组
成员信息:
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.8、不安全对象的直接引用
对象直接引用是指应用程序使用客户端提供的输入,并且按名称或其他简单标识访问服务器文件,例如,使用file参数搜索服务器中的特定文件并允许用户访问它。
如果服务器未正确验证用户提供的值,并且允许用户访问该资源,则攻击者可以利用此功能绕过权限控制并访问未授权该用户的文件或信息。
在本文中,我们将在RailsGoat程序中分析和利用此漏洞。
环境准备
对于此方法,我们需要在RailsGoat中注册至少两个用户。 其中一个将是用户名user的被攻击者,另一个是攻击者,用户名为attacker。
实战演练
对于本练习,我们最好知道两个用户的密码,尽管在真实场景中我们只知道攻击者的密码。
配置浏览器,使用Burp Suite作为代理并执行以下操作:
1. 以账户user登录并转到账户设置; 点击个人资料图片(右上角)和账户设置:
请注意,在我们的示例中,URL表示users/7/account_settings。 数字7有可能是用户ID吗?
2.注销并以账户attacker登录。
3.再次转到账户设置,查看attacker的URL地址用户ID编号。
4.在Burp Suite中启用请求拦截。
5.然后返回浏览器中更改attacker的密码。设置新密码,确认,然后单击“提交”
6.让我们分析截获的请求:
我们看屏幕截图的下划线部分。首先,请求9.json文件; 9是attacker账户设置的URL中的数字,因此作为用户ID。接下来,有一个user%5Buser_id%5D参数(如果我们解码它,将得到user[user_id])的值为9,然后是user%5Bemail%50或user[email](URL解码)。 最后两个参数是密码及其重复确认密码。
7.那么,如果攻击者请求中对用户编号9的所有引用都未正确验证,该怎么办? 让我们攻击受害者用户,其ID为7。
8.用户attacker进行密码更改并再次拦截请求。
9.更改请求,将URL和user_id参数中自己的ID更改为被攻击者的ID。
10.根据屏幕截图中带下划线的值,更改请求的剩余部分,或者根据自己的选择进行修改:
11.提交请求并验证它是否被接受(http响应代码200和正文中的消息成功)。
12.注销并尝试使用原始密码作为被攻击者登录,登录将失败。
13.现在,尝试在attacker的请求中设置的密码,登录将成功。
14.转到账户设置并验证其他更改是否也发生了:
原理剖析
在本文中,我们首先检查了用户账户设置的URL,并注意到WEB程序是通过数字ID区分用户。然后,我们执行了更改用户信息的请求并且验证了数字标识符。之后我们尝试替换用户的ID,进行更改以影响其他用户,使用在同一请求中提供的用户ID进行更改,结果发现RailsGoat直接对象引用是包含用户信息的。这样作为攻击者,我们只需要知道被攻击者的ID就可以更改他们的信息,甚至是密码,这样我们就可以代表他们登录。