XSS跨站脚本漏洞详解

XSS 漏洞概述:

1.跨站点脚本(Cross Site Scripting, XSS)是指客户端代码注入攻击,攻击者可以在合法网站或web 应用程序中执行恶意脚本。

2.当web应用程序在其生成的输出中使用未经验证或未编码的用户输入时,就会发生XSS。 跨站脚本攻击,XSS (Cross Site Scripting) 。由于与CSS (Cascading Style Sheet) 重名,所以就更名为XSS 。

3.XSS 作为OWASP TOP 10 内容之一,主要使用JavaSript 来完成恶意攻击的行为,JS 可以非常灵活的操纵HTML/CSS/浏览器,这就使得

4.XSS 攻击“想象”空间非常大。也就是说,JS 强大的灵活性和功能,为XSS 攻击提供了非常广阔的攻击面。

1.1 XSS 漏洞原理:

XSS 通过将精心构造的代码(JavaScript)注入到网页中,并由浏览器解释运行这段JS 代码,以达到恶意攻击的效果。当用户访问被XSS

脚本注入过的网页,XSS 脚本就会被提取出来,用户浏览器就会解析执行这段代码,也就是说用户被攻击了。

整个XSS 攻击过程,涉及三个角色:

1.服务器

2.攻击者

3.客户端浏览器用户(前端)

注意:

1.等待受害者访问被注入恶意代码的页面(被动,盲打)

2.搜索框、登录框、微博、留言板、聊天室等等收集用户输入的地方,都有可能被注入XSS 代码,都存在遭受XSS 的风险。

1.2 XSS 漏洞危害:

XSS 是利用JS 代码实现攻击,有很多危害:

***盗取各种用户账号

***窃取用户Cookie 资料,冒充用户身份进入网站劫持用户会话执行任意操作

***刷流量,执行弹窗广告

***传播蠕虫病毒

...

1.3 XSS 漏洞的验证:

可以使用一段简单的代码,验证和检测漏洞的存在,这样的代码叫做POC(Proof of Concept) 。验证XSS 漏洞存在的POC(Proof Of Concept)如下:

/*
<script>alert(/xss/);</script>
<script>confirm(/xss/);</script>
<script>confirm('xss');</script>
<script>prompt('xss');</script>
*/

如果页面弹窗,浏览器把用户提交的字符串当做JS 来执行,并且执行成功。说明XSS 漏洞存在。

1.4 XSS 漏洞的分类:

1.反射型XSS:

非持久性、参数型的跨站脚本。反射型XSS 的代码在Web 应用的参数中,例如搜索框的反射型XSS 。

注意到,反射型XSS 代码出现在keywords 参数中。

容易被发现,利用难度高,导致很多漏洞提交平台不收反射型XSS 漏洞。

2.存储型XSS:

持久性跨站脚本。持久性体现在XSS 代码不是在某个参数(变量)中,而是写进数据库或文件等可以永久保存数据的介质中。存储型XSS 通常发生在留言板等地方。可以在留言板位置进行留言,将恶意代码写进数据库中。危害面比较广,漏洞提交平台会接收此类漏洞

3.DOM型XSS:

DOM 型XSS 是一种XSS 攻击,其中攻击的代码是由于修改受害者浏览器页面的DOM 树而执行的。特殊的地方就是攻击代码(payload) 在浏览器本地修改DOM 树而执行,并不会将payload 上传到服务器,这也使得DOM 型XSS 比较难以检测。

注意:

1.修改DOM 树执行

2.采用# 号的方式,参数不会提交到服务器

http://10.4.7.130/xss_test/DOM-XSS/#message=%3Cscript%3Ealert(/xss/)%3C/script%3E

XSS 攻防案例

2.1 固定会话攻击与防御

1.用户会话令牌利用Cookie 来实现的,Cookie 是存储在浏览器端的一小段文本,相当于身份证,会有窃取和欺骗的风险。

2.可以利用XSS 攻击窃取到浏览器里的Cookie 信息。

3.由于XXS 触发需要用户参与,攻击者不清楚何时何地会触发漏洞,这个过程一般被成为XSS 盲打。

Cookie窃取:配合利用XSS平台获取Cookie,然后进行Cookie欺

影响:

1.黑客可以利用Cookie (身份凭据)登录后台;

2.即使管理员注销登录,会话依然有效;

3.即使管理员修改了密码,会话依然有效;

固定会话攻击的防御:

1.根据实际情况采用“单点登录”;

2.采用Session 机制;(Cookie是浏览器端,Session是服务器端)

3.设置token 值;

4.对Cookie 数据,设置HttpOnly 属性;(只允许http访问,不能用document.cookie的形式获取Cookie)

XSS 攻防

3.1 XSS 的构造

 1.利用<> 构造HTML/JS 关键字

<script>alert(xss)</script>

2.利用JavaScript伪协议

<a href=javascript:alert(1)></a>

3.产生自己的事件

“事件驱动”是一种比较典型的编程思想。

window 事件 对window 对象触发的事件

Form 事件 HTML 表单内触发的事件

Keyboard 事件 键盘事件

Mouse 事件 鼠标事件

Media 事件 由多媒体触发的事件

onmouseover = 'alert(/dont touch me!/)' 鼠标移动到就弹窗

<input type='text' onclicl='alert(1)'>鼠标点击弹窗

<input type = 'text'onkeydown = 'alert(/xss/)'> 键盘输入弹窗

<input type = 'text'onkeyup = 'alert(/xss/)'>键盘停止输入弹窗

<svg οnlοad='alert(/xss/)'> 加载完毕弹窗

<input οnfοcus=alert(/xss/)autofocus>加载完毕弹窗

XSS 的防御

XSS 过滤器的作用是过滤用户(浏览器客户端)提交的有害信息,从而达到防范XSS 攻击的效果。

4.1 输入过滤:

1.输入验证:

对用户提交的信息进行“有效性”验证。

1.仅接受指定长度

2.仅包含合法字符

3.仅接收指定范围

4.特殊的格式,例如,email 、IP 地址。

2.数据消毒:

$keywords = str_replace( '<script>', '', $_GET[ 'keywords' ] ); #过滤或净化掉有害的输入。

4.2 输出编码:

$keywords = htmlspecialchars( $_GET[ 'keywords' ] );#HTML 编码是HTML 实体编码。

4.3 黑白名单策略:

不管是采用输入过滤还是输出编码,都是针对用户提交的信息进行黑、白名单式的过滤: 黑名单:非允许的内容 、白名单:允许的内容

4.4 防御DOM 型XSS:避免客户端文档重写,重定向或其他敏感操作。

4.5 终极测试代码:

//<sCr<ScRiPt>IPT>OonN'"\/(hrHRefEF)</sCr</ScRiPt>IPT>#怀疑有xss的地方
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tacokings

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值