标记红色的部分为今日更新内容。
第五章、使用跨站脚本攻击客户端
5.0、介绍
5.1、使用浏览器绕过客户端控制
5.2、识别跨站脚本漏洞
5.3、利用XSS获取Cookie
5.4、利用DOM XSS
5.5、利用BeEF执行xss攻击
5.6、从Web存储中提取信息
5.7、使用ZAP测试WebSokets
5.8、使用XSS和Metasploit获取远程shell
4.0、介绍
web应用程序和其他应用程序的主要区别在于web应用程序没有特定的软件或者说是用户界面,所以浏览器在用户的设备上扮演着客户端的重要角色。
在本章中,我们将重点讨论漏洞是如何利用浏览器读取HTML的脚本代码后将结果显示给用户的,同时还允许用户是如何通过HTTP请求和最近的WebSockets (HTML语言最新版本HTML5的一个补充)与服务器交互的。
4.1、使用浏览器绕过客户端控制
客户端和服务端的处理同时在web应用中发生。客户端通常用于接收呈现给用户的信息,值得一提的是一些输入验证与认证授权会在客户端执行。当这些验证和认证没有通过服务端再次做检查时,就会遇到一些安全问题。
在这节中,我们将看到利用这种问题,绕过客户端验证的一些实例。
实战演练
首先看一个WebGoat的实例:
1. 登陆WebGoat,点击Access Control Flaws,转到 LAB Role Based Access Control→
Stage 1:绕过业务层访问控制
2. 使用tomcat的登陆凭证(tom,tom)登陆这个表单,并用f12启用firefox的开发者工具
3. 来检查一下员工表单。我们可以看到一个值为105的html标签:Tom Cat(employee)
4. 接着转到开发者工具中的Network选项卡并单击ViewProfile,可以注意到请求中有一个名为employee_id的参数,其值为105:
5. 单击ListStaff返回列表。
6. 更改为开发者工具中的Inspector选项卡。
7. 双击标记的值(105)将其改变为101。尝试一下是否可以通过改变这个值查看其他用户的信息。
8. 再次点击ViewProfile :
9. 现在,WebGoat给的目标是使用tom的账户删除tom的个人信息。来尝试一下,点击ListStaff返回列表
10. 注意ViewProfile按钮
11. 它的名称是action,值为viewprofile,我们将其改为deleteprofile
12. 可以发现按钮上面的字已成功更改,点击deleteprofile后,即可完成目标任务。
原理剖析
在这节中,我们可以发现员工id由客户端创建,并作为请求参数发送给服务端。因此我们尝试更改employee_id 值 ,成功获得了其他员工的信息。
然后我们通过检查器发现所有的按钮都是一个名称:action,它们的值是按钮被按下后要执行的操作。(这些可以通过看开发者工具中的network选项卡看到)所以当我们发现SearchStaff,ViewProfile, ListStaff这样的操作时,也许DeleteProfile可以达成不一样的效果。在我们更改ViewProfile的值并单击后,发现确实是我们猜想的那样。
另请参阅
OWASP BWA靶机的MutillidaeII中也有一个绕过客户端验证的挑战,建议读者尝试一下~