目录
DOM破坏
编码问题
urlcode可以被识别 %+16进制
<textarea> 可以解码不能执行
<script>alert(9);</script> 没有实体编码 script可以可以容纳文本 所有状态都是原始文本 sprint状态字符不会编码和解码 js语法中将其当做文本执行但是js不认识&符号所以不能执行报错
编码顺序 :实体编解码---->url编解码----->unicode编码
unicode编码编译的符号代码语法错误不能被html识别
unicode可以被js识别可以执行但是不能编码符号 不会运行
unicode将数字或者要执行的函数属性进行编码后 想要执行的话如果是数字以及属性没有加上‘ ‘的话会认为其是字符串会产生js语法错误。如(12)----》(/u0031/u0032)
简单闭合""号使用onclick
?jeff=aaa"-alert(1337)-"
闭合双引号 执行后续代码
onclick函数 焦点事件
onclick 是html的一个属性 添加点击功能执行我们的代码
不和用户交互 用onfocus autofocus自动触发
?wey=nb"%20οnfοcus=alert(1337)%20autofocus="
设置焦点事件autofocus自动触发
标签使用
img标签 利用onerror属性找不到图片后 触发后面的函数用 location属性来修改url后面的值的类型是其能被html读取
?markassbrownlee=<img%20οnerrοr=location="javasecript:alert%25281%2529>
%25是%的urlcode编码 题目过滤()我们使用%28%29代替时 接着使用%25来编码百分号绕过限制
限制数字字母
固定方法利用编码进行绕过例如将函数alert(1377)编码为不包含字母数字的形式 其中包含符号不被html解析 需要再次使用编码将其转换为十六进制再放到html中执行
js匿名函数绕过
mafia=Function(ALERT(1337).source.toLowerCase())() Function构造匿名函数 source.toLowerCase()实现转换大写为小写 绕过正则 执行alert
使用函数进行进制转换 parseint函数转换alert 再使用toString转换回去 ..toString(30到36之间)用eval将输入的代码当做js执行
覆盖
可以通过覆盖标签以及原本的元素达到替换执行自己代码的效果可以用来过滤一些前端的防御框架
例如
写一个标签 第一行 div
然后插入到body中去用img标签覆盖原来的document.cookie
第三行使用document.cookie直接取到我们上面定义好的标签里面去。
这是弱数据类型语言的特征
题目: ?bommer=<a%20id=ok%20href="tel:alert(1337)">
这个例子中
利用setTimeout需要创建一个ok元素 是一个字符串是一个可执行的函数代码 用a标签自动调用toString方法 让id=我们创造的OK 后面直接使用执行herf中的例如javascript:alert()由于前面的web框架防护机制 javascript可能被过滤掉 找到白名单上允许使用的协议即可