知识

XSS攻击测试语句大全

时间:2010-12-5 17:23:32  作者:百科   来源:休闲  查看:  评论:0
内容摘要:# XSS攻击测试语句大全 `alert(1)`——这行代码,大概是每个Web安全入门者敲下的第一条XSS测试语句。它简单、直接,弹出一个对话框,证明脚本被执行了。但真正到了实战环境,这句“Hello

# XSS攻击测试语句大全 ``——这行代码,击测句大概是试语每个Web安全入门者敲下的第一条XSS测试语句。它简单、击测句直接,试语弹出一个对话框,击测句证明脚本被执行了。试语但真正到了实战环境,击测句这句“Hello World”级别的试语payload往往连输入框都过不去。 反射型XSS的击测句测试,核心是试语看输入能否原样出现在响应HTML里。最基础的击测句测试串是: ```html ``` 用`document.domain`而不是`1`,是试语因为有些站点的WAF会拦截`alert(1)`这种特征太明显的调用。换成`confirm`或`prompt`也能绕过一部分规则。击测句 如果尖括号被转义了,试语试试属性注入。击测句比如输入点落在``里,那可以构造: ```html " onmouseover="alert(1) ``` 闭合掉value属性,再挂一个事件处理器。用户鼠标划过就触发。更隐蔽的写法是用`autofocus`配合`onfocus`: ```html " autofocus onfocus="alert(1) ``` 不需要用户交互,页面加载即触发。 有些场景过滤了`script`关键字,但没过滤其他标签。``是经典替代方案。图片加载失败,onerror执行。类似的还有``、``。svg标签在很多过滤规则里容易被忽略,实战中命中率不低。 遇到只允许特定标签的情况,比如富文本编辑器只放行``标签,那就利用`javascript:`伪协议: ```html click ``` 或者用`data:`协议配合base64编码,把payload藏得更深。 编码绕过是另一个维度。HTML实体编码`<script>`在特定解析环境下会被还原。URL编码`%3Cscript%3E`在服务端解码后可能重新拼成标签。双重编码`%253Cscript%253E`对付那些只解一次码的逻辑。还有Unicode编码、十六进制编码,每种都可能成为突破口。 DOM型XSS不看服务端响应,看的是前端JS怎么处理输入。常见sink包括`innerHTML`、`document.write`、`eval`。测试时输入``,如果页面用`innerHTML`直接插入,就弹窗了。但如果是`textContent`或`innerText`,那没戏。 实际测试中,我习惯先扔一个无害的探针,比如`xss123test`,看它出现在HTML的什么位置。在标签之间、在属性值里、在JS变量中,不同位置对应完全不同的利用方式。位置决定了用不用闭合、闭合什么、能不能执行。 WAF拦截是常态。常见绕过思路包括大小写混写`