WEB通用漏洞-XSS
WEB通用漏洞-XSS
前言
建议配合CTF-SHOW XSS系列阅读。
XSS原理
指攻击者利用网站程序对用户输入过滤不足,输入:可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用户资料,利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。通过在用户端注入恶意的可执行脚本,若服务器对用户的输入不进行处理或处理不严,则浏览器就会直接执行用户注入的脚本。
换句话说:用户在浏览器端进行输入,服务端将用户输入的内容进行输出。内容要求是一段JS代码。由于输出的时候,浏览器解析到这个是JS代码,那么就会执行。如果JS代码的含义是获取诸如浏览器版本、cookie等相关的操作,那么就构成了XSS攻击。
注:XSS的核心就在于执行JS代码、用户网站渲染的内容(显示的内容)受你控制。特点:漏洞隐蔽性很强,不易发现。做的事情有限(仅在JS代码范围内)
产生点?
该漏洞主要产生于前端。
- 数据交互(输入和输出)的地方
- get、post、headers
- 反馈与浏览
- 富文本编辑器
- 各类标签插入和自定义
- 数据输出的地方
- 用户资料
- 关键词、标签、说明
- 文件上传
危害
XSS平台
关于XSS平台可以自行去搭建,也可以去网上找现成的。该平台的作用就是可以帮助攻击者构造JS恶意代码,劫持用户浏览器,钓鱼等。将获取的Cookie等相关信息存储到该平台上。(可以理解为上述原理图中的恶意服务器)
注:推荐使用Beaf-XSS
XSS渗透工具:https://github.com/s0md3v/XSStrike
XSS分类
反射型(非持久型)(不会被认定这是一个漏洞)
换句话说:假设页面存在XSS漏洞,用户正常访问页面不会被触发XSS,但是当用户访问了由攻击者构造出来的url地址,导致了XSS。那么这种方式就是反射型XSS。
注:这种XSS漏洞属于一次性的,该漏洞需要其他人配合才可以实现。
存储型(持久型)(漏洞)
攻击代码写到了数据库里面。以留言板举例:之前的留言会被后面看到,那么攻击者植入了攻击代码xss,之后的人只要访问留言板都会受到XSS攻击。
注:这种XSS漏洞是持久型的,原因就是将攻击代码植入了数据库。不需要其他人配合,危害更大。
DOM型
DOM型跟前两种XSS的最大区别在于:输入数据、接收处理数据、输出数据都是在前端(全部流程都是JS)完成。
MXSS(突变型XSS)
UXSS(通用型XSS)
UXSS是利用浏览器或者浏览器扩展漏洞(并非网站本身的漏洞)来制造产生XSS并执行代码的一种攻击类型。
具体的案例:CVE-2021-34506(Edge浏览器翻译功能导致JS语句被调用执行)
如何检测?不断测试浏览器的功能来发现此漏洞。
Flash XSS(swf)
一篇文章:https://blog.csdn.net/weixin_50464560/article/details/119211168
swf是Flash文件的专用格式。
flash有可以调用js的函数,也就是可以和js通信,因此这些函数如果使用不当就会造成xss。
对于这样的漏洞,无论白盒还是黑盒测试的思路:查看该网站下有没有swf文件(浏览器抓包,或者查看页面中有没有小动画等),将其下载下来,对该文件进行反编译,查看有没有与js进行通信的代码。如果存在,还要进一步查看是否使用得当,如果使用不当,基本可以判断存在这样的漏洞。
PDF XSS(PDF与JS交互)(便于社工钓鱼)
一篇文章:https://blog.csdn.net/m0_73236215/article/details/131646018
PDF XSS漏洞是指攻击者通过在PDF文件中插入恶意代码,从而在用户打开PDF文件时执行恶意操作的一种安全漏洞。
一般网站(受信任的网站)都会有文件上传的操作,这时你可以往pdf文件中写入恶意js代码,一般pdf文件网站都会允许上传,因此当你将恶意pdf文件上传到网站后,就会产生一个url,此时当你将url发送给其他用户时,该用户在浏览器中查看了该pdf文件,就会触发跨站。
或者我们也可以将pdf上传至其他的应用(常见的文档应用/受信任的文档应用)上,通过该应用来生成url,用户通过url在浏览器上查看该pdf文件时,就有可能会触发xss。
步骤:
- 创建PDF,加入动作JS。
- 通过文件上传获取直链。
- 直链地址访问后被触发。
UTF-7 XSS/MHTML XSS/CSS XSS/VBScript XSS
一篇文章:https://www.fooying.com/the-art-of-xss-1-introduction/
XSS攻击手法
- 劫持浏览器
- 盗取凭据,欺骗服务器
- 挂马,社工钓鱼等等
javascript妙用
一篇文章:https://www.php.cn/faq/508588.html
javascript代码并不是只有在html页面中才可以执行。我们可以将js代码直接写入到url,当访问url时,直接执行该js代码。
javascript:window.find('keyword') //访问该页面时,查找特定关键字
当使用script标签中的src参数远程加载js文件时,实际上就是在对src上的超链接发送请求。因此,我们可以通过这种方式来隐蔽的访问某个url。
另类攻击手法-权限维持(已经取得了权限想一直保留)
- 条件:已取得相关web权限等(可以对文件进行写入)
- 写入恶意代码(一般是盗取Cookie的语句)到登录成功的文件(一般都是后台的index.php或后台首页文件),只要管理员登录成功,就会触发这个文件中的恶意代码,将最新的Cookie发送给攻击者。这可以利用beef或xss平台实时监控Cookie等凭据实现权限维持。
- 注:XSS一般都是JS语句,不太可能会被当作后门来杀掉,这就是XSS隐蔽性非常高的原因。
- XSS获取Cookie在某些网站上有可能会出现获取不全的情况。因为,该网站可能采用的是Session或JWT认证或采用了HTTP-ONLY技术导致Cookie获取不全,从而不能盗取Cookie。
- 若存在同源策略或防护情况下,Cookie获取失败可采用表单劫持或数据明文传输实现。
- 表单劫持:用户在表单上输入个人信息时(用户名和密码),这些信息都会被发送到服务器(后端)来进行处理。如果我们可以取得整个网站的源码,在处理用户登录的文件中,将接收过来的用户名和密码的明文发送到诸如XSS平台的恶意服务器(如:构造参数发送GET请求(可以通过js标签的src参数进行),恶意服务器书写脚本接收GET请求上的参数,进而取得明文账号密码)上(需要对文件有写权限)。这就是表单劫持。
- 表单劫持常用于解决:当你登录到后台时,查看各种用户的密码,发现都是密文加密,且无法被破解。对于这种情况,在用户使用表单时(常见就是登录),我们可以通过表单劫持获取用户名密码的明文。
- 表单劫持还可用于达到权限维持的结果。管理员每次登录时,都会被表单劫持获取明文的账号和密码,从而达到权限维持的效果。
- 写入恶意代码(一般是盗取Cookie的语句)到登录成功的文件(一般都是后台的index.php或后台首页文件),只要管理员登录成功,就会触发这个文件中的恶意代码,将最新的Cookie发送给攻击者。这可以利用beef或xss平台实时监控Cookie等凭据实现权限维持。
另类攻击手法-捆绑钓鱼(思路)
XSS通常都会跟社工钓鱼之类的技术结合来达到更好的效果。
思路:
我们这里以Flash钓鱼页面来举例。
- 假设,有一个人喜欢看SESE。攻击者想要去获取这个人的shell。因此,攻击者就需要伪造一个页面,让这个人单击这个页面,去下载后门。
- Flash下载页面创建。(钓鱼页面)
- 诱惑性的动画图片准备
- 后门和正常Flash安装文件捆绑。(可以通过自定义压缩设置压缩前执行和压缩后执行来实现)
- 攻击者可以给该用户发送一个链接,用户单击这个链接发现是一系列诱惑性的图片和视频,此时该链接弹出需要下载这个flash,才可以继续观看。用户被诱导进钓鱼页面,下载捆绑的文件。下载之后,当安装该捆绑文件时,该用户被中了后门。
- 或者攻击者可以通过XSS漏洞结合Beef平台,当用户访问了带有XSS漏洞的页面时,就会被强制跳转到钓鱼页面,进而下载捆绑文件,中后门。
另类攻击手法-浏览器漏洞(思路)
XSS通常都会跟浏览器漏洞结合来达到更好的效果。
网马:称为网页浏览器木马,当用户访问到网马(恶意url)时,就会被执行后门。但是,网马一般都需要浏览器版本符合、操作系统符合以及存在浏览器的相关漏洞。
网马可以利用IE浏览器的以下三个漏洞:
- MS14-064
- CVE-2019-1367
- CVE-2020-1380
网马的定义: https://baike.baidu.com/item/网马/9906518?fr=ge_ala
攻击者可以通过以上三个漏洞,生成一个网马(通过msf实现)。为了使用户可以访问这个网马,可以通过社工钓鱼或者XSS漏洞结合Beef平台强制重定向访问。
检测
访问页面时可以进行抓包,如果抓包时发现访问的是恶意的地址(非正常地址),那么基本可以判断是XSS。
防御
- 过滤一些危险字符(例如:script关键字)(引入自定义XSS过滤器)
- HTTP-only Cookie
- 在php中,通过php.ini设置(全局生效)或代码引用(只在该文件内生效)
- php.ini:session.cookie_httponly=1或true
- http-only使得攻击者无法通过js获取cookie(导致获取不全或失效)。
//代码引用
<?php ini_set('session.cookie_httponly',1);
- 设置CSP(Content Security Policy)(内容安全策略)
- CSP称为内容安全策略,通过设置白名单/黑名单等一系列规则,来防止诸如XSS、数据注入等一系列攻击。
- 一篇文章:https://blog.csdn.net/a1766855068/article/details/89370320
- 关于CSP规则的具体设置,请参考上述文章。
- 输入内容长度限制,HTML代码/符号转义等
绕过
- 常见的XSS绕过方法:https://xz.aliyun.com/t/4067?time__1311=n4%2BxnD0DyGYQqxmw405%2Bb7DkWKDtrrDceOY3D
- 如果服务器对某一个关键字进行了过滤,那么你可以尝试使用其他标签来绕过,触发XSS。
- XSS中,对于标签当中的事件选择,建议选择onload事件,因为不用其他动作即可触发(访问即触发)。
- 具体的绕过手段,可以参考CTF-Show-XSS系列。
致谢
https://www.bilibili.com/video/BV1pQ4y1s7kH/?spm_id_from=333.1007.top_right_bar_window_custom_collection.content.click
免责声明
本博客中的内容仅供学习之用,不用于商业用途,也不可以用于任何非法用途,否则后果自负,本人不承担任何责任!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现