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="&lt;script&gt;alert(1)&lt;/script&gt;"></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躺过的那些坑的更多相关文章

  1. 关于我学git这档子事

    创建本地分支并切换到该分支 git checkout -b *** 相当于如下2个命令: git branch *** git checkout *** 推送本地开发分支到远程开发分支 git pus ...

  2. 关于我学git这档子事(5)

    对于错误: fatal: refusing to merge unrelated histories 解决之道: git pull origin main --allow-unrelated-hist ...

  3. 关于我学git这档子事(4)

    ------------恢复内容开始------------ 当本地分支(main/dev)比远程仓库分支(main/dev)落后几次提交时 先: git pull 更新本地仓库 再 git push ...

  4. 关于我学git这档子事(3)

    对于如下报错: hint: Updates were rejected because a pushed branch tip is behind its remote hint: counterpa ...

  5. 关于我学git这档子事(2)

    将本地main分支push到远程dev分支(不同名分支间的push) 远程dev分支还未创建 (在push同时创建远程dev分支,并将本地main分支内容上传) git push -u --set-u ...

  6. 关于我的Android 博客

    我是曹新雨,我为自己代言.现在的菜鸟,3年以后我就是大神.为自己加油.微信:aycaoxinyu 关于我的Android博客,都是我当初遇到困难,克服之后,写上去的.后来,有人加我微信,问我一些问题, ...

  7. webug第十四关:存储型XSS

    第十四关:存储型XSS 打开发现是评论区 留言加入xss语句

  8. 关于我的OI生涯(AFO){NOIP2016 后}

    这篇我就随意写啦~不用统一的“题解”形式.♪(^∀^●)ノ 也分好几次慢慢更吧~ 对于NOIP2016的总结,我本想善始善终back回,但是心情不足以支撑我,那就只能有始有终了......下面进入我的 ...

  9. 关于我和Github不得不说的一些小事

    你好,我叫黄雅婷,学号是1413042031,网络工程142班.因为小时候家里有很多课外书,有关神话和科学方面的杂志和书籍等,所以从小就喜欢看书,现在比较不挑,什么书都喜欢看,就是给我本字典,我也能看 ...

随机推荐

  1. 洛谷P1155 双栈排序

    这题什么毒瘤......之前看一直没思路,然后心说写个暴搜看能有多少分,然后就A了??! 题意:给你一个n排列,求它们能不能通过双栈来完成排序.如果能输出最小字典序方案. [update]这里面加了一 ...

  2. SSM框架的搭建与测试

    关于框架的搭建无非就是 框架所依赖的jar包,然后就是关于各个框架的配置文件: 下面我们来看下不同层的依赖的jar包以及各个配置文件: 首先pojo这一层只需要依赖parent聚合工程 mapper层 ...

  3. C# 基于MySQL的数据层基类(MySQLHelper)

    这里介绍下比较简单的方式,引用MySql.Data.dll然后添加一个MySqlHelper类来对MySql数据库进行访问和操作. 1.将MySql.Data.dll引用到你的项目中 下载地址:MyS ...

  4. Java访问权限控制

    访问权限控制           java提供了访问权限修饰词,以供类库开发人员向客户端程序员指明哪些是可用的,哪些是不可用的.访问权限控制的等级,从最大权限到最小权限依次是:public.prote ...

  5. bzoj千题计划215:bzoj1047: [HAOI2007]理想的正方形

    http://www.lydsy.com/JudgeOnline/problem.php?id=1047 先用单调队列求出每横着n个最大值 再在里面用单调队列求出每竖着n个的最大值 这样一个位置就代表 ...

  6. 洛谷P2326 AKN’s PPAP

    https://www.luogu.org/problemnew/show/P2326 按位贪心 找到最高位&1的数,确定次高位的时候只从最高位&1的数里选 此次类推 #include ...

  7. SQL语句(七)简单查询

    --简单信息查询 --例1 查询所有学生的信息 --学生 -- Student --所有学生 -- 不限定班级.性别.年龄等条件 --所有信息 -- 所有字段,* select * from stud ...

  8. 均方根值(RMS)+ 均方根误差(RMSE)+标准差(Standard Deviation)

    均方根值(RMS)+ 均方根误差(RMSE)+标准差(Standard Deviation)  1.均方根值(RMS)也称作为效值,它的计算方法是先平方.再平均.然后开方. 2.均方根误差,它是观测值 ...

  9. elementUI 表格分页后台排序记录

    表格代码 <div class="m-table"> <el-table :data="logs" style="width: 10 ...

  10. MySql数据库资料收集

    1.下载MySQL历史版本 https://downloads.mysql.com/archives/community/ https://downloads.mysql.com/archives/i ...