实验7:XSS攻击实验(Elgg)
跨站点脚本(XSS)是一种常见于web应用程序中的计算机安全漏洞。此漏洞使攻击者有可能将恶意代码(如JavaScripts)注入受害者的web浏览器。
需要提交一份详细的实验报告和截图,来描述做了什么和观察到了什么。还需要对观察结果进行解释。还请列出重要的代码片段,然后进行解释。仅附加代码而不作任何解释将不得分。
cookie是用户的身份认证凭证,拿到cookie后,攻击者就相当于窃取了被攻击者的身份
这段代码使用XMLHttpRequest()构造了一个Ajax请求,用于异步地发出GET请求,在elgg框架下获取了ts和token信息
我们在js代码中写入一但主页被打开,就向该API发送添加朋友的请求的代码片段
将完整的代码补充完成如下,URL为"http://www.seed-server.com/action/friends/add?friend=59"+ts+token
注意要放在 Edit HTML 模式中,该模式不会对用户的输入进行修改
使用Firefox开发者工具查看网络数据包情况,发现确实发起了添加朋友的GET请求
- Task5
我们在js代码中写入一但主页被打开,就向该API发送修改资料的请求的代码片段
这里代码比较复杂,我使用了Firefox的开发者工具console进行了js代码的调试,发现粘贴pdf文件的特殊字符没有删掉
使用Firefox开发者工具查看网络数据包情况,发现确实发起了修改个人资料信息的POST请求
问题:脚本中为什么要判断当前user的guid不等于samy的guid?
因为攻击者修改完自己的主页后会自动跳转回自己的主页,如果去掉这一行,攻击脚本会将攻击者的主页也进行修改,攻击脚本就被覆盖掉了,那么其他人再访问攻击者主页就不会被修改主页,导致攻击失败
- Task6
Task6的任务是实现一个可以传播的XSS攻击蠕虫,目前有两种实现方法:
1. 将脚本放在远端,在主页放入带src属性的img标签,这种方法简单,实现代码短
现在另一名用户Alice访问Boby的主页,发现自己的主页也被感染,说明xss蠕虫扩散成功
- Task7
CSP是白名单策略,在网页中执行js代码有两种方式,第一种内联式是把代码直接放在当前的网页中,第二种链接式是把代码放在当前站点或其他站点的文件中,然后把它们引用到当前网页
第一个标签采用内联的js代码执行方式,有一个nonce值为111-111-111
第二个标签采用内联的js代码执行方式,有一个nonce值为222-222-222
第四个标签采用链接的js代码执行方式,是从本站目录下链接到js文件
第五个标签采用链接的js代码执行方式,是从www.example60.com网站的目录下链接到js文件
第六个标签采用链接的js代码执行方式,是从www.example70.com网站的目录下链接到js文件
第七个标签采用内联的js代码执行方式,没有放入script标签中,本质和第一、二个标签一样,应该是为了防止DOM XSS
- 访问www.example32a.com
js代码被全部执行,弹窗有效,因为没有开启CSP保护策略,对js代码的来源没有限制,所以都能被执行
- 访问www.example32b.com
js代码只有第六个被执行,弹窗没有反应
观察配置文件发现,开启了CSP保护策略,并且只允许自身站点和example70.com站点的js文件可以被加载并执行,而且对于内联式js代码没有验证nonce值,所以所有内联js代码均不会被加载和执行
要求我们将第五个标签的js代码也能执行,于是将example60.com站点也加入到CSP白名单
发现第五个标签成功执行
- 访问www.example32c.com
js代码只有第1、4、6个被执行,弹窗没有反应
观察配置文件发现,该网站的入口点不是访问index.html,而是phpindex.php,于是去查看该php文件,发现开启了CSP保护策略,对于链接式js代码只允许自身站点和example70.com站点的js文件可以被加载并执行,所以第4、6个标签可以执行对于内联式js代码验证nonce值是否为111-111-111,所以第1个标签可以执行
要求我们让第2、5个标签也可以执行,于是将example60.com站点和nonce验证值222-222-222也放入白名单中
发现第1、2、4、5、6个标签都可以执行
- 访问www.example32a.com
- 总结
1. 漏洞概念:Cross Site Scripting(XSS),跨站脚本攻击。
2. 漏洞原理:攻击者提供一段恶意的 javascript 代码,通过各种方式在受害者浏览器上执行。
3. 漏洞危害:
1. 窃取 cookie,伪造被攻击者的身份
2. 制造网站蠕虫,在互联网上传播并级联执行恶意的脚本代码
3. 钓鱼
4. 修复思路:
1. 在 http 响应头的set-cookie的值中加入 http-only 的内容;
2. 对输入的内容进行检查、提示,或者转义(html 实体化编码实现)(不推荐)
3. 对于富文本需求来说,采用成熟的前端编辑器。
4. 使用CSP白名单策略让输入内容合规(推荐)
5.总结:
XSS 攻击的方式多种多样,包括反射型 XSS、存储型 XSS、DOM 型XSS等多个方面。预防 XSS 漏洞的关键在于输入验证和输出过滤。在编写应用程序时,一定要注意对用户输入进行验证和过滤,不要将用户输入直接输出到 HTML 页面中。