博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
XSS零碎指南
阅读量:7081 次
发布时间:2019-06-28

本文共 4027 字,大约阅读时间需要 13 分钟。

该文章是本人两天的学习笔记,共享出来,跟大家交流。知识比较零散,但是对有一定 JS 基础的人来说,每个小知识都有助于开阔你的 Hack 视角。首先声明,本文只是 XSS 攻击的冰山一角,读者自行深入研究。

本文地址: ,转载请保留源地址。

一、XSS学习提要

  1. 三水清 简单介绍 xss
  2. 乌云 xss与字符编码
  3. 系列教程
  4. 反射性XSS详细分析和解释
  5. 各种技巧 ★★★★★
  6. 一些不错的文章

二、XSS攻击要点

注意:这些插入和修改都是为了避开浏览器自身的过滤,或者开发者认为的过滤。

1. JS函数。

document.write innerHTML eval setTimeout/setInterval等等都是很多XSS攻击注入的入口

2. html实体编码

> "alert("Barret李靖")".replace(/./g, function(s){     return "&#" + s.charCodeAt(0)      /*.toString(16) 转换成16进制也可以滴*/      + ";"  });> "alert(1)"

3. 如果过滤 html 实体编码,可以改成URL编码

> encodeURIComponent("&#")> "%26%23"

4. 利用 HTML5 新增字符

: 冒号
换行XSS

5. JS进制转换

> "\74\163\143\162\151\160\164\76\141\154\145\162\164\50\61\51\74\57\163\143\162\151\160\164\76"> ""

6. Base64转换

> base64("");> PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==XSS

7. 浏览器解析非严格性

  ↓ ↓    ↓        ↓      ↓            ↓  ①②   ③        ④     ⑤           ⑥

①中可插入 NUL字符(0x00)

②和④中空格可以使用 tab(0x0B)与换页键(0x0C),

②还可以使用 / 替换

⑤中的"在IE中也可替换成`。

位置      |        代码               | 可能插入或替代的代码------------|---------------------------|-----------------------
<的右边 | <[here]a href="... | 控制符,空白符,非打印字符a标签的后门 |
| 其他引号>之前 |
| 任意字符/之前 |
...<[here]/a> | 空白符,控制符/之后 |
...
| 空白符,控制符>闭合之前 |
… | 所有字符

8. 斜杠

在字符串中斜杠(/)可以用于转义字符,比如转义 " 和 ' ,双斜杠(//)可以用来注释。这样可以很轻松的改变之前的语句,注入内容。

9. 空格的处理方式

在解析的时候空格被转移成 &nbsp;,注入的时候可以使用 /**/来替换。

10. 特殊属性

1)srcdoc属性(chrome有效)

2)autofoucus

3)object

    

11.绕过浏览器过滤(crhome)

?t=">

浏览器会过滤onerror中的代码,所以换种方式注入

?t=">

chrome拦截,是有一定的拦截规则的,只有它觉得是恶意代码的才会去拦截。

12.替换URL

13.抓包、换包

 

三、XSS攻击方式

1. javascript:和vbscript:协议执行后的结果将会映射在DOM后面。

2. 变量覆盖

3. meta标签

Javascript: 协议可能被禁止,可以使用 data:
">

4. css注入

5. 提前闭合标签

http://example.com/test.php?callback=cb缺陷代码:注入:http://example.com/test.php?callback=cb

原理:cb为回调函数,如果后端并没有对callback字段进行过滤,则可以cb</script><script>alert("XSS")</script>这么长的一串作为函数名,然后你就懂啦~ 本方式只针对上面有缺陷的代码。

6. 提前闭合双引号

7. 阻止编码

?t=;alert("Barret李靖")

上面可以看到 ";" 被编码了,观察页面编码:

gbxxx系列编码,可以尝试宽字节:

?t=%c0%22alert("Barret李靖")

8. 攻击单行注释

URL对应的param中添加换行符(%0a)或者其他换行符。

?t=%0aalert("Barret李靖")//// init('id', "%0aalert("Barret李靖")//");被解析成// init('id', "alert("Barret李靖")//");

9. url

url中可以使用很多协议 http:// https:// javascript: vbscript: data:等等,利用这些属性,可以找到很多的空隙。

10. Flash跨域注入

这个我不太熟悉,现在网页上Flash用的越来越少了,懒得继续看了。

11. 利用事件

12. 利用标签

 

四、XSS攻击实质

XSS攻击没太多神奇的地方,就是利用浏览器防御不周到或者开发者代码不健壮,悄悄对页面或者服务器进行攻击。

1. 绕过过滤

URL中的 <,在DOM XSS中,可以使用 \u003c (unicode编码)表示,不过他有可能被过滤了,最后解析成&lt;,也可以使用 \x3c (Javascript 16进制编码),> 对应使用 \x3e。这种情况经常在 innerHTML 以及 document.write 中用到。

所谓的过滤包括人工过滤,也包括了浏览器HTML与JavaScript本身的过滤,程序员会在浏览器本身过滤过程中进行一些干扰和修改,这几个流程都给我们提供了很多 xss 攻击的入口。

1) 数据需要过滤,但是未过滤。导致XSS。比如:昵称、个人资料。

2) 业务需求使得数据只能部分过滤,但过滤规则不完善,被绕过后导致XSS。比如:日志、邮件及其它富文本应用。

2. 利用源码中js的解析

比如第二部分提出的第11点,浏览器的拦截

?t=">

这样的插入会被拦截,当你发现源码中有这么一句话的时候:

function parseURL(){    //...    t.replace("WOW", "");    //..}

便可以修改如上参数:

?t=">
alert("Barret李靖")

直接绕过了chrome浏览器对危险代码的防御。

五、学会XSS攻击

1. 寻找可控参数

攻击入口在哪里?一般是有输入的地方,比如URL、表单、交互等。

  • 含参数的URL中找到参数 value 值的输出点,他可能在html中输入,也可能是在javascript中
  • 实验各种字符(< , > " '等),判断是否被过滤,测试方式,手动输入测试
  • 确定可控范围,是否可以使用unicode编码绕过,是否可以使用HTML编码绕过,是否可以使用Javascript进制编码绕过等等

2. 开始注入

注入细节上面都是,基本的思维模式:

  • 覆盖
  • 阻断
  • 利用特性

3. 修补注入错误

注入后保证没有语法错误,否则代码不会执行,注入了也没用。这里的意思是,你注入的一个参数可能在脚本多处出现,你可以保证一处没语法错误,但是不能保证处处都正确

4. 开搞

测试的时候alert("Barret李靖"),弹出成功再继续其他更邪恶的注入方式。

六、XSS分类

为什么留到后面说。XSS也了解了很多次了,每次都是先从概念触发,感觉没啥意思,什么反射性、DOM型、储存型等等,还不如先去实践下,凭着自己对XSS的理解,多看几个网站的源码,找找乐趣。

存储型和反射型相比,只是多了输入存储、输出取出的过程。简单点说:

反射型是:输入--输出;

存储型是:输入--进入数据库*--取出数据库--输出。

这样一来,大家应该注意到以下差别:

反射型是:绝大部分情况下,输入在哪里,输出就在哪里。

存储型是:输入在A处进入数据库,
而输出则可能出现在其它任何用到数据的地方。

反射型是:输入大部分位于地址栏或来自DOM的某些属性,也会偶尔有数据在请求中(POST类型) 存储型是:输入大部分来自POST/

GET请求,常见于一些保存操作中。

因而我们找存储型的时候,从一个地方输入数据,需要检测很多输出的点,从而可能会在很多点发现存储型XSS。

七、辅助工具

  1. http://ha.ckers.org/xsscalc.html
  2. chrome插件 (xss Encode,百度之)
  3. 抓包工具,
  4. 白名单过滤工具

八、小结

简单小结:

  • & 号不应该出现在HTML的大部分节点中。
  • 括号<>是不应该出现在标签内的,除非为引号引用。
  • 在ext节点里面,<左尖括号有很大的危害。
  • 引号在标签内可能有危害,具体危害取决于存在的位置,但是在text节点是没有危害的。
  • 。。。

关注漏洞报告平台 Wooyun,多动脑筋,手动 hack。最重要的还是先黑客再红客。

九、参考资料

你可能感兴趣的文章
Python模块学习 ---- datetime
查看>>
MS SQL Server Quarter Function
查看>>
linux日志(常用命令)
查看>>
Leetcode: Arranging Coins
查看>>
HttpUtil 【判断网络连接的封装类】
查看>>
【转】TCP分段与IP分片
查看>>
iOS 多线程 NSOperation、NSOperationQueue
查看>>
delphi执行查询语句时的进度条怎么做
查看>>
CF 335A(Banana-贪心-priority_queue是大根堆)
查看>>
python的memcache使用如果对key设置了一个int型
查看>>
173. Binary Search Tree Iterator
查看>>
[python基础知识]python内置函数map/reduce/filter
查看>>
HDU2089 ------不要62(数位dp)
查看>>
hdu4756 Install Air Conditioning(MST + 树形DP)
查看>>
Android爬坑之旅之FileProvider(Failed to find configured root that contains)
查看>>
网络安全与机器学习(一):网络安全中的机器学习算法
查看>>
linux 用户和用户组命令
查看>>
WordPress 主题开发:从入门到精通(必读)
查看>>
Vue入坑记
查看>>
SpringBoot使用AOP+注解实现简单的权限验证
查看>>