
文章摘要本文是一篇关于XSS跨站脚本漏洞的实战教程通过7个典型关卡详细演示了反射型XSSGET/POST、存储型XSS、DOM型XSS以及XSS盲打和过滤绕过等常见攻击场景。文章从XSS的基本概念入手逐步深入到各种类型的XSS漏洞探测、利用和绕过技巧适合Web安全初学者、渗透测试工程师以及对XSS漏洞感兴趣的安全爱好者阅读。通过本文读者可以学习到XSS漏洞的基本原理和分类反射型、存储型、DOM型XSS的实战利用方法常见的XSS探测技巧和绕过WAF的策略XSS盲打攻击的原理和实践针对不同过滤机制的绕过思路目录反射型XSSGET- 基础反射型XSS漏洞的探测与利用反射型XSSPOST- POST请求下的反射型XSS实战存储型XSS- 持久化XSS攻击的原理与实践DOM型XSS- 客户端DOM操作引发的XSS漏洞DOM型XSS-X- DOM型XSS的进阶绕过技巧XSS之盲打- 无即时反馈的XSS攻击方法XSS之过滤- 针对过滤机制的多种绕过策略前言XSS跨站脚本概述Cross-Site Scripting 简称为 CSS为避免与前端层叠样式表的缩写 CSS 冲突故又称 XSS。一般 XSS 可以分为如下几种常见类型1. 反射型 XSS2. 存储型 XSS3. DOM 型 XSSXSS 漏洞一直被评估为 Web 漏洞中危害较大的漏洞在 OWASP TOP10 的排名中一直属于前三的江湖地位。XSS 是一种发生在前端浏览器端的漏洞所以其危害的对象也是前端用户。形成 XSS 漏洞的主要原因是程序对输入和输出没有做合适的处理导致 精心构造 的字符输出在前端时被浏览器当作有效代码解析执行从而产生危害。因此在 XSS 漏洞的防范上一般会采用 对输入进行过滤 和 输出进行转义 的方式进行处理输入过滤对输入进行过滤不允许可能导致 XSS 攻击的字符输入输出转义根据输出点的位置对输出到前端的内容进行适当转义你可以通过 Cross-Site Scripting 对应的测试栏目来进一步的了解该漏洞。1. 第一关反射型 XSSGET点进去就观察到一个可以输入的输入框于是我们按照探测 XSS 的方法第一步先进行标签探测不能直接使用 script 和 alert 等因为容易引起 WAF 的警觉这里我给师傅们提供一个好用的不容易被监测的标签。/textareas123#--可以看见 who is 后面全部被划了横线说明这个地方存在 XSS。第二步按 F12 查看是否是需要闭合的标签类型如 div 这种无需闭合title、textarea、xmp、iframe 这种需要闭合。第三步看是否有防御 WAF如果有尝试绕过scriptalert(xss)/script我们发现输入长度有限制于是我们打开 F12再按 CtrlShiftC 定位到输入框我们可以看到 maxlength 那里长度限制为 20我们改成 200。再次输入标签就会发现出现弹窗了。至此第一关结束。后面为了方便不再一步一步解释操作步骤因为流程都是一样的关键地方思路会进行讲解2. 反射型 XSSPOST登录框大概是暴力破解我们看一下提示果然是前面关卡的内容账号密码 admin/123456登录一下发现和第一关一模一样我们尝试第一关的步骤发现完全一致所以不再赘述。3. 存储型 XSS在师傅们做实战的时候一定要注意遇到留言板、评论、上传链接文件等地方我们可以尝试一下是否存在 XSS尤其是这种存储型 XSS危害尤其大。我们按照我们的三个步骤来。可以看到是存在 XSS 的于是我们进行第二步。scriptalert(document.cookie)/script直接出现弹窗说明成功然后我们点这些删除等还会继续弹 cookie 出来换个浏览器输入这个地址直接就弹窗说明我们的恶意代码已经存在服务器端了。这些 cookie 一般都会直接传到黑客的服务器。4. DOM 型 XSS开局依旧是平平无奇的输入框我们依旧进行探测。/textareas123#--我擦居然没反应难道说有 WAF 或者不存在 XSS那我只能告诉你其实你是想多了这是在靶场啊都叫 XSS 了肯定有呀。那么肯定是程序员编码的时候将我们这种恶意代码过滤或者拼接了我们得进行绕过于是看看 F12遇事不决就用 F12可以清晰的看到 a 标签中的 href 函数大概是把我们输入里面的标签拼接掉了无法正常执行那我们就要尝试绕过。这里是因为可以看见源代码并且有提示在我们做黑盒测试的时候这个时候就要不断去测试有哪些绕过不要轻易放弃也不要钻牛角尖。经过尝试我们发现是单引号闭合了标签。于是构造 payload# onclickalert(document.cookie)至此第四关结束。5. DOM 型 XSS-X开局一个很悲伤很令人回忆的表单我们依旧进行探测结果发现没有任何变化肯定是又进行了过滤有点无语。。。还是用我们的 F12看着跟上一关的 a 标签很像那我们尝试尝试上个 payload果然是一样的至此第五关结束。6. XSS 之盲打看着还是跟之前没啥区别只不过是两个输入框罢了这有啥直接两个同时插入标签。提交过后出现个提示反馈成功没有其他变化额不会又是过滤了吧那我们再试试其他 payload。WC 试了又试还是没变化没招了看看提示吧原来是要去后台看神了一登录发现已经存储进服务器了一进去就弹窗 XSS 了至此第六关结束。7. XSS 之过滤