关于我学XSS躺过的那些坑
XSS字符编码
在学习编码绕过时由于数量多,类型相似,不太容易记得住,记得全,故做此记录。
0x01 Html标签属性中执行
简单了解:
Html标签属性中的XSS问题多属于javascript伪协议
常见的属性有:
- src
- lowsrc
- dynsrc
- url
- href
- action
- onload
- onunload
- onmouseover
- onerror
- 各种on开头的事件
PS:此处可不加括号,如
onclick=javascript:alert(1),各类教程里常见的<img src=javascript:alert(1)></img>Chrome、Firfox已失效,IE测试成功。
在Html标签中,许多标签具有执行javascript的权利,当服务器存在过滤时,我们可以尝试通过以下编码方法绕过:
- 8/10/16进制转换(
[.][&#][&#x]) - 利用
javascript:String.fromCharCode(xx,xx,xx......)[xx为编码的字符串的ASCII码] - JScript Encode [IE] JS fuck等
data:text/html;bbase64,xxxxxxx[IE下无效,Chorme、Firefox下均属于空白域,无法获取信息,不过可用作CVE攻击]
0x02 在<script></script>
直接在script标签里执行的情况,我们通常分为以下几种利用方式:
- 直接导入远程XSS平台脚本
- 直接在
<></>中写上自定义攻击脚本,如生成img标签
关于<></>中可用:
1) 单个拆开编码成ASCII
eval(String.fromCharCode())
2) 使用eval()执行16进制转换后的代码
eval(\u0064\u0078......)
eval(\x64\x78......)
0x03 在样式表中的编码
样式表中可用expression和@import来执行js代码,此方法可进行适当的编码转换。
PS:仅在IE8.0之前的版本。
1) expression
全角字符:
<div style=xss:expression(alert(1))>
十六进制
<div style=xss:\0065xpression(alert(1))>
/**/注释 [Javascript中也行]
<div sty/**/le=x/**/ss:\0065xpre/**/ssio/**/n(al/**/ert(1))>
2) @import
\和结束符\0会被浏览器忽略
@im\po\rt jav\ascr\ipt:al\ert(1)
@im\00po\0rt jav\00asc\0000ript:a\00lert(1)
浏览器差异
简单记录常见的浏览器差异造成的XSS
0x01 引号的差异
只有IE支持反引号`` `
0x02 标签的差异
- data协议执行代码是在Chrome下执行
- Chrome下srcdoc利用:
<iframe srcdoc="<script>alert(1)</script>"></iframe> - IE下
<img src=javascript:alert(1)> - 只要火狐支持E4X
0x03 过滤器差异
Chrome能拦截大多数反射型XSS,Firefox次之,IE最次
浏览器异常解析BUG产生XSS漏洞

关于调用document
在刚开始学习XSS的时候总是想千方百计的想用javascript调用dom对象,比如document.cookie,却不知这个只能在javascript域[伪协议或标签内]范围内。
小知识点
一、src等属性在引入时如果漏洞网站协议名于xss平台相同,即可省略去,如:<img src=//www.baidu.com />
二、svg标签属于xml而不属于html
三、关于Cors跨域:使用Ajax跨域时默认是不允许带上会话数据的,不过可以在XSS平台通过设置返回的请求头Access-Control-Allow-Credentials: true,并且需要设置xhr的withCreadential属性值为true,注意此时返回的Access-Control-Allow-Origin不能设置为通配符true。
四、优先级:function xxx(){}形式定义的函数 -> == -> &
五、使用img等合法标签跨域可以带上会话信息
六、除javascript外还有vbscript、actionscript等
七、P3P协议仅仅是IE浏览器支持,通常是Hacker域名通过iframe或script等载入存在XSS漏洞的网站
与CSRF的区别
XSS的恶意请求伪造与CSRF极为相似,两者的差别为:
- 后者发出的伪造请求可为其他站点发出的,而前者都是存在XSS漏洞的站点发出的
- CSRF是XSS无法替代的
- CSRF可以无Javascript参与,及在黑客的网站上使用img等标签发送带Cookie(自带)的跨域请求。
关于XSS防御
0x01 输出Html标签属性
如:<input class='xxx' value="{输出}"> 这里的输出如果过滤/转义了",便不存在XSS漏洞了,因为这里的value属性不能执行js代码。
0x02 输出在注释
一定要过滤换行符!!
0x03 输出在样式表
过滤expression和@import还有外部图片的引用
0x04 字符集
开头设定好字符集为 UTF-8
0x05 Cookie盗取
设置好path、开启http_only、防止调试信息泄露和Apache400漏洞、使用Session
关于我学XSS躺过的那些坑的更多相关文章
- 关于我学git这档子事
创建本地分支并切换到该分支 git checkout -b *** 相当于如下2个命令: git branch *** git checkout *** 推送本地开发分支到远程开发分支 git pus ...
- 关于我学git这档子事(5)
对于错误: fatal: refusing to merge unrelated histories 解决之道: git pull origin main --allow-unrelated-hist ...
- 关于我学git这档子事(4)
------------恢复内容开始------------ 当本地分支(main/dev)比远程仓库分支(main/dev)落后几次提交时 先: git pull 更新本地仓库 再 git push ...
- 关于我学git这档子事(3)
对于如下报错: hint: Updates were rejected because a pushed branch tip is behind its remote hint: counterpa ...
- 关于我学git这档子事(2)
将本地main分支push到远程dev分支(不同名分支间的push) 远程dev分支还未创建 (在push同时创建远程dev分支,并将本地main分支内容上传) git push -u --set-u ...
- 关于我的Android 博客
我是曹新雨,我为自己代言.现在的菜鸟,3年以后我就是大神.为自己加油.微信:aycaoxinyu 关于我的Android博客,都是我当初遇到困难,克服之后,写上去的.后来,有人加我微信,问我一些问题, ...
- webug第十四关:存储型XSS
第十四关:存储型XSS 打开发现是评论区 留言加入xss语句
- 关于我的OI生涯(AFO){NOIP2016 后}
这篇我就随意写啦~不用统一的“题解”形式.♪(^∀^●)ノ 也分好几次慢慢更吧~ 对于NOIP2016的总结,我本想善始善终back回,但是心情不足以支撑我,那就只能有始有终了......下面进入我的 ...
- 关于我和Github不得不说的一些小事
你好,我叫黄雅婷,学号是1413042031,网络工程142班.因为小时候家里有很多课外书,有关神话和科学方面的杂志和书籍等,所以从小就喜欢看书,现在比较不挑,什么书都喜欢看,就是给我本字典,我也能看 ...
随机推荐
- (转)Maven学习总结(四)——Maven核心概念
孤傲苍狼只为成功找方法,不为失败找借口! Maven学习总结(四)——Maven核心概念 一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1.2.Mav ...
- 实战:使用SVN+apache搭建一个版本控制服务器
今天讲的内容: 实战:使用SVN+apache搭建一个版本控制服务器 每天: 10:00 晚上:21:00 服务端:xuegod63.cn IP:192.168.10.63 服务概述: SVN(s ...
- 「Vue」登陆-路由拦截器
1.main.js设置拦截器 router.beforeEach(function (to,from,next) { if (to.meta.requireAuth) { if (store.stat ...
- Java基础-编写问候语-“Hello World”
Java基础-编写问候语-“Hello World” 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.编写“Hello World”程序 1>.编写源代码 任何文本编辑起都 ...
- python命名空间与闭包函数详解
python命名空间与闭包函数详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客主要介绍的知识点如下: 1>.三元运算 2>.命名空间 3>.globa ...
- python教程1:Python基础之数据类型和变量、字符串和编码
视频链接:http://www.bilibili.com/video/av10730372/ 我是在Linux下玩python的,Linux下默认安装python,直接打个pyhon3就好了,pyth ...
- Java模拟http请求远程调用接口工具类
package ln; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamRea ...
- Spark记录-Scala数组
Scala提供了一种数据结构叫作数组,数组是一种存储了相同类型元素的固定大小顺序集合.数组用于存储数据集合,但将数组视为相同类型变量的集合通常更为有用. 可以声明一个数组变量,例如:numbers,使 ...
- 第一、介绍Canvas
canvas能做什么? canvas是HTML5中的新元素,你可以使用javascript用它来绘制图形.图标.以及其它任何视觉性图像.它也可用于创建图片特效和动画.如果你掌握了完整的命令,你可以用c ...
- PHP 设计模式 单例模式 工厂模式 注册模式
1.工厂模式,工厂方法或者类生成对象,而不是在代码中直接new 2.单例模式,使某个类的对象仅允许创建一个 3.注册模式,全局共享和交换对象 项目文件目录 入口文件 index.php <?ph ...