知识梳理
-
XSS简介
XSS:跨站脚本攻击(Cross Site Scripting),是一种注入型攻击,攻击者使用Web应用程序将恶意脚本发送到不同的用户终端,若应用程序没有对输入的脚本进行验证、过滤or编码等处理,且终端用户的浏览器无法识别脚本是否受信任时,受害者在不知情的情况下访问对应的页面,恶意代码会在其浏览器上执行,恶意脚本可以访问其保留在浏览器中的站点cookie、会话标记or其他敏感信息;这些脚本甚至可以重写HTML页的内容,从而产生XSS攻击。
XSS分为三种类型:反射型(Reflected)、存储型(Stored)、DOM型
-
XSS测试策略
检查Web页面中可输入的位置。除了前端页面,还有前端代码中,所对应的隐藏or明显的输入位置。如:HTTP参数、POST data、隐藏的表单域(文本框、密码框、隐藏域、单选or复选框、下拉选择框)。通过前端源代码可查看到以上位置的存在。
分析每个输入位置,使用特别构造的数据,检测潜在的漏洞。通过预先构造的攻击字符串or敏感符号对Web程序进行模糊测试,根据返回的响应初步判断前后端对敏感字符的处理机制如何。
识别对Web程序有安全影响的XSS漏洞。根据响应数据和HTML代码,判断哪些位置没有对攻击字符or字符串进行过滤、转义、正确编码处理的防范,对这些弱防御的位置进一步攻击测试,检测确定安全漏洞。
-
反射型XSS概述
Reflected XSS:攻击负载是通过单个请求和响应进行交互和执行的,当用户在前端输入带有XSS性质的脚本作为HTTP请求的一部分发送给服务端,后端对收到的请求数据进行解析处理(字符串检测、转义...)之后返回给前端,前端浏览器将对该返回数据进行解析,若其中包含的恶意脚本可被浏览器解析并执行时,就会触发反射型XSS。
反射XSS攻击也称为非持久XSS攻击,反射型XSS脚本注入的攻击并不存储在应用程序中,而是存储在浏览器客户端,即非持久。只要不通过点击该特定url链接进行访问,就不会引起攻击。
原理:用户输入的数据被当作前端代码执行
测试方式
JS触发:<script>alert(1)</script>
伪协议触发:javascript:alert(1)
事件触发:<img src="" onerror=alert(1) />
onerror 失败后触发 onload 成功后触发
靶场演示
靶场地址
地址http://59.63.200.79:8002/xss/index.php
看到框先直接动手尝试一下
<script>alert(1)</script>
将我们输入的代码转换成了字符
查看网页源代码发现通过单引号闭合,尝试闭合,闭合完成还是不行,查看源代码发现 尖括号
<>
被转义了
<script>alert(1)</script>
尖括号转义了就不能使用JS方式触发,尝试使用事件触发
'onfocus=alert(1) autofocus"
onfocus 获取焦点事件
autofocus 获取焦点
得到flag{zkaq-xssgood-Q0OA}