XSS笔记

一、xss漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过用户本地浏览器执行的,所以xss漏洞关键就是寻找参数未过滤的输出函数。
二、XSS的攻击方式

1、 反射型XSS:<非持久化> 攻击者事先制作好攻击链接, 需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。一般是后端代码进行处理;

2、存储型XSS:<持久化> 代码是存储在服务器数据库中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,每当有用户访问该页面的时候都会触发代码执行,这种XSS非常危险,容易造成蠕虫,大量盗窃cookie(虽然还有种DOM型XSS,但是也还是包括在存储型XSS内);

3、DOM型XSS:基于文档对象模型Document Objeet Model,DOM)的一种漏洞。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM XSS漏洞。一般是浏览器前端代码进行处理;

三、导致的结果:

1.挂马
2.盗取用户Cookie。
3.DOS(拒绝服务)客户端浏览器。
4.钓鱼攻击,高级的钓鱼技巧。
5.删除目标文章、恶意篡改数据、嫁祸。
6.劫持用户Web行为,甚至进一步渗透内网。
7.爆发Web2.0蠕虫。
8.蠕虫式的DDoS攻击。
9.蠕虫式挂马攻击、刷广告、刷浏量、破坏网上数据
10.其它安全问题

四、一些自动触发JS代码的标签

1、

2、

// onerror 参数:若 image.png 加载失败则会执行 onerror 的内容;

3、

(1)

// 当鼠标焦点在text输入框中时,会自动触发 onfocus 后的内容

(2)

// autofocus 会自动定位输入框的位置,然后就会自动执行 onfocus 后的内容

(3)

// onblur 是当鼠标定位到输入框,再移动开时会触发 onblur 之后的js代码

(4)

// onclick 是要点击后才会触发

4、

(1)

// 当点击展开时触发 ontoggle 后的内容,然后显示  后面的内容
Copyright 2011.

All pages and graphics on this web site are the property of W3School.

(2)

// open 属性可以自动触发 ontoggle 后面的内容
Copyright 2011.

All pages and graphics on this web site are the property of W3School.

5、

//用来在HTML页面中直接嵌入SVG 文件的代码,onload 后的内容直接触发

6、

(2)

// autofocus 会不用点击自动触发 onfocus 后的内容

7、

// 在显示嵌入内容前,自动执行 onload 后的内容

8、

// 在显示 video 失败后执行 onerror 后的内容

9、

// 在音频加载失败后执行 onerror 后的内容

10、

(1)

// 在加载  标签时执行 onload 后的内容

    

132

(2)

// onscroll 是在滑动滚轮的时候,执行后面的代码









































123

11、

五、一些绕过过滤的方法:

1.空格过滤:如果空格被过滤了,我们可以用

(1)/

(2)/**/;

补充:
 // 是可以正常执行的,也就是各个属性之间不需要空格
 // 不能正常执行
可以用 /**/ 或 / 进行绕过空格

2.引号过滤

如果是html标签中,我们可以不用引号。如果是在js中,我们可以用反引号代替单双引号:

# 反引号 `` 位于键盘右上角 esc 下面

3.括号过滤

当括号被过滤的时候可以使用throw来绕过。throw 语句用于当错误发生时抛出一个错误。


4.关键字过滤
(1)大小写绕过


(2)双写绕过

有些waf可能会只替换一次且是替换为空,这种情况下我们可以考虑双写关键字绕过

alert(1);

5.字符串拼接绕过:利用eval()函数

与PHP的eval()函数相同,JavaScript的eval()函数也可以计算 JavaScript 字符串,并把它作为脚本代码来执行。


6.编码绕过

(1)Unicode编码绕过:

(1)分号可有可无,&# 后跟字符ascii的10进制


(2)&#x 后跟字符ascii的16进制


(3)使用 unicode 编码时,必须使用 eval(),\u 后跟4位16进制数

(2)url编码绕过


# 数据url,以 data:text/html,开头,后面嵌入代码

(3)ascii码绕过


# String.fromCharCode() 它用于根据给定的 Unicode 值创建一个字符串

(4)hex绕过


(5)base64绕过


# atob() 是 base64 解码函数


html转码后:

4、html 编码若是在属性中才会被解码:

(1) 此时弹窗显示的是 a
(2)111 此时弹窗显示的是 a

你可能感兴趣的:(xss,笔记,前端)