web-xss

一、简介

XSS 又称CSS(Cross Site Scripting)或跨站脚本攻击,攻击者在网页中插入由JavaScript编写的恶意代码,当用户浏览被嵌入恶意代码的网页时,恶意代码将会在用户的浏览器上执行。

二、xss的攻击方式

  • Dom:这是一种将任意 Javascript 代码插入到其他Web用户页面里执行以达到攻击目的的漏洞。攻击者利用浏览器的动态展示数据功能,在HTML页面里嵌入恶意代码。####假如一个网站有dom型的xss漏洞,刚好是url参数中存在这个漏洞,也就是说url中的参数会被显示在页面的dom元素中。我们利用这个dom xss漏洞,在url中构造一个按钮或者输入框,然后将这个url发送给用户,用户会以为这个按钮(输入框)是这个网站本身构造的。但是事实上我们构造的这个按钮是插入脚本的(只要点击就会触发一些操作)
  • 反射性:<一次性的>。简单地把用户输入的数据反射给浏览器,简单来说,黑客往往需要用户诱使用户点击一个恶意链接,才能攻击成功。(经后端,不经数据库)
  • 存储型给:<持久化的>。将用户输入的数据存储在服务器端。用户访问了带有xss得页面代码后,产生安全问题。(经后端和数据库)##########这个漏洞在个人信息或发表文章和评论区等地方比较常见

三、xss 常见标签语句

a标签

test
xss
xss
xss
xss

img标签

标签定义 HTML 页面中的图像。






iframe标签

Payload test 注:url 解析过程中,不能对协议类型进行任何的编码操作,所以 javascript: 协议头需要保留。 test 可以二次编码 test

3. js 编码(unicode编码)

        只能解析有效标识符和字符串,想括号这些解析完是不能被是识别执行的

js 编码策略:

        ①“” 加上三个八进制数字,如果个数不够,前面补0,例如 “<” 编码为 “\074”

        ②“\x” 加上两个十六进制数字,如果个数不够,前面补0,例如 “<” 编码为 “\x3c”

        ③“\u” 加上四个十六进制数字,如果个数不够,前面补0,例如 “<” 编码为 “\u003c”




Payload




Unicode 编码




4.八进制和十六进制

编码使用时需要 eval、setTimeout等函数传递变量,并且可以对整个传递参数进行编码。例如 eval(“alert(1)”),可以对 “alert(1)” 整个进行八进制、十六进制或者 Unicode 编码(双引号不参与)。

setTimeout() 是属于 window 的方法,该方法用于在指定的毫秒数后调用函数或计算表达式。

语法:setTimeout(要执行的代码, 等待的毫秒数)

setTimeout(JavaScript 函数, 等待的毫秒数)

alert(1)=\x61\x6C\x65\x72\x74\x28\x31\x29
        =\141\154\145\162\164\050\061\051
        =\u0061\u006C\u0065\u0072\u0074\u0028\u0031\u0029

1.
2.
3.

1.
2.
3.

5. 混合编码

test

Payload

test

html 编码

test

Unicode 编码

test

注:Unicode 编码不能对括号使用

url 编码

test

由于浏览器对 xss 代码的解析过程是:html解析 —— url解析 —— js解析,所以可以编码方式进行组合绕过。

1.源代码

test

2.对alert进行JS编码(unicode编码)

test

3.对href标签中的\u0061\u006c\u0065\u0072\u0074进行URL编码

test

4.对href标签中的javascript:%5c%75%30%30%36%31%5c%75%30%30%36%63%5c%75%30%30%36%35%5c%75%30%30%37%32%5c%75%30%30%37%34(1)进行HTML编码:

test

注:href、src等加载url的属性可以使用三种混合编码,on事件可以使用html实体编码和js编码混合,但url编码在on事件中不会解析。

6.base64 编码

base64 编码通常需要使用到 data 伪协议。

data 协议使用方法:data:资源类型;编码,内容

base64编码内容为


PHNjcmlwdD5hbGVydCgveHNzLyk8L3NjcmlwdD4=

通常与 base64 编码配合 data 协议的标签有 :

1.object

2.href
test 
#(新版浏览器不支持)
3.iframe

4.embed

atob 函数

atob() 方法用于解码使用 base-64 编码的字符串。

语法:window.atob(encodedStr)(encodedStr: 必需,是一个通过 btoa() 方法编码的字符串)

1.test
2.test
3.test
4.
5.
6.

7. ascii 编码

ascii 编码一般配合String.fromCharCode使用。

alert(1)
十进制:97, 108, 101, 114, 116, 40, 49, 41
十六进制:0x61, 0x6C, 0x65, 0x72, 0x74, 0x28, 0x31, 0x29

十进制

test

十六进制

test

空格过滤绕过


A位置可填充 /,/123/,%09,%0A,%0C,%0D,%20 B位置可填充 %09,%0A,%0C,%0D,%20 C位置可填充 %0B,/**/,如果加了双引号,则可以填充 %09,%0A,%0C,%0D,%20 D位置可填充 %09,%0A,%0C,%0D,%20,//,>

圆括号过滤绕过

1. 反引号替换


2. throw 绕过

单引号过滤绕过

1. 斜杠替换


2. 反引号替换


alert 过滤绕过

1. prompt 替换


2. confirm 替换


3. console.log 替换


4. document.write 替换


  5. base64 绕过



关键词置空绕过

1. 大小写绕过


2. 嵌套绕过

ript>alert(/xss/)ript>

函数拼接

1. eval


2. top


3. window


4. self


5. parent


6. frames


#(1)必须放在后面拼接,否则在dvwa中执行不了

7. 常用函数

















赋值拼接






火狐IE专属


#和尾标签之间的内容就是滚动内容。
#direction表示滚动的方向,值可以是left,right,up,down,默认为left 。
#behavior表示滚动的方式,值可以是scroll(连续滚动)、slide、alternate(往返滚动) 。 
  

拆分法
当 Web 应用程序对目标用户的输入长度进行了限制时,这时无法注入较长的xss攻击向量,但是特定情况下,这种限制可以通过拆分法注入的方式进行绕过。




")'

通过上面的拆分法可以拼凑出下面完整的攻击向量:

document.write(“”)

绕过 waf 拦截

安全狗

http://www.safedog.cn/index/privateSolutionIndex.html?tab=2

D盾

http://www.d99net.net/News.asp?id=126

云锁+奇安信 waf

http://www.yunsuo.com.cn/ht/dynamic/20190903/259.html?id=1

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