0%

XSS

XSS

自己测试的时候要意识到Chrome,IE这些浏览器都自带一个XSS的过滤,做题或者测试建议用火狐
XSS漏洞发生在用户输入的数据未经处理就放入前端JS代码的情况下,常见的XSS漏洞有反射型XSS和储存型XSS

简单无过滤

直接闭合一下括号引号就可以了,XSS漏洞可以直接查源码看引号括号标签怎么闭合,比较好修改。
今天的发现:

  • <input>标签未闭合的时候好像不能在里面继续加标签
  • 在<input>标签中可以通过事件(onclick,onmousemove等)来触发JS函数

前端干扰

设置了输入长度限制,按钮按不下去什么的,直接前端改代码就可以了

<>被转义

这种情况直接审查元素有时候看不出来,但是你如果查看页面源码就可以看到尖括号是否被转义。
通常绕过方法有闭合引号直接在当前标签内添加事件来触发。
也可以试试有没有其他的无过滤参数,比如下拉框内容抓包修改进行注入

“被转义

有的时候可以试试加一个空格来分隔属性,偶尔有效

JS伪协议

href定义的超链接可以执行JS代码,如<a href="alert(1);">

utf-7编码绕过

好像现在只有IE还有这个漏洞,别的浏览器都修好了

双写绕过

XSS在注入的时候也是后台代码进行分析,这个绕过和SQL注入也很像

实体编码绕过

&#xx;为HTML的实体编码,部分特殊符号被实体编码表示
但也可以用实体编码表示某些正常字符,绕过检测

添加制表符绕过

可用&NewLine代替空格
使用%09,&#09;(有分号)分隔字符串绕过。
当数据以get方式传递时,%09可使用,使用后者会导致&作为元素之间的分隔符导致截断,后者可将&#替换为%26%23后使用
当数据以post方式传递时,&#09;可使用,使用前者在数据post出去后会进行url编码为%2509,传入后只能解码为%09,无法绕过,在bp中抓包添加%09也可

get传参时不会对%进行再次编码,且存在部分特殊符号& #不被编码,存在特殊意义,可以将其编码输入将其作为无特殊意义字符传入
post传参时会对%进行再次编码
HTML的这个编码好像只能在字符串(值)中生效,不能用来直接分隔像onclick,onmousemove这些函数上
若无引号进行使用,%09会使值产生截断被解析为两个元素
但是&#09;不会产生问题
切记:%09无引号情况下会导致空格产生截断!!!

原因

%09是url编码,&#09;为实体编码,url编码在数据发送至后台时进行转码,在引号闭合的情况下,%09被作为内部字符串处理,成为一个空格;在引号未闭合的情况下,成为制表符,使得内容被解析为两个元素。&#09;为实体编码,在浏览器最后输出时被解析,然后被去除

内联标签

<iframe></iframe>,定义一个内联标签,内部可使用scr=定义链接
例:<iframe src="javas&#09;cript:alert(document.domain)">
可代替<a>标签

IE特性

老版本IE才具有的古老漏洞

`解析为’

expression表达式

可用在css下执行js语句
expression(alert(document.domain));

注释符绕过

/**/用注释符隔断字符阻止匹配,但不影响语句正常执行

xss和实体编码的关系

浏览器先解析HTML生成DOM树,然后解析CSS,结合,渲染
实体编码被转换成字符是在DOM树生成之后的,但DOM树生成完成后各节点以固定,此时被解析出来的<>无法再次形成新的节点,但实体编码解析后生成的js代码仍能正常解析
一篇文章
https://www.cnblogs.com/escape-w/p/10162831.html