You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CTF挑战:能否绕过指定正则表达式实现JS注入?

正则绕过与JavaScript注入分析

首先拆解给定的正则规则:/^[".=acdeimnotu]*$/,仅允许以下字符:双引号"、点.、等号=,以及小写字母a,c,d,e,i,m,n,o,t,u。所有注入的Payload经decodeURIComponent解码后,必须完全由这些字符组成才能通过校验并被eval执行。

可操作的范围限制

基于允许的字符,我们能构造的代码仅能完成以下操作:

  • 访问全局对象document(其所有字母均在允许列表内)
  • 访问document.domain(属性名的每个字母也符合要求)
  • 赋值变量,例如d=document.domain
  • 调用字符串的concat方法(方法名concat的所有字母均允许),用于拼接字符串

直接代码注入的瓶颈

所有能触发代码执行的核心函数(如alert、eval、Function等)的名称均包含正则不允许的字符(比如alert中的l、r;eval中的v、l),因此无法直接在Payload中写出这些函数名。同时,由于缺少运算符(如+、^),无法通过位运算或字符串拼接生成这些字符;也无法通过字符串方法(如charAt的h、r不允许)提取其他字符。

可行的攻击路径

  1. 利用可控域名场景
    如果目标域名本身包含可执行的代码片段(且仅由允许字符组成),可以将Payload设为document.domain,此时eval(document.domain)会直接执行域名对应的代码。例如若域名为1+1,会执行计算并返回结果;若域名为符合规则的可执行片段,就能完成注入。

  2. 跨域攻击利用
    可以通过Payloaddocument.domain="父域名"修改当前页面的document.domain值,实现子域名向父域名的跨域访问,进而利用父域名的资源漏洞。但这不属于直接的JavaScript代码注入。

结论

在通用环境下,无法仅用允许的字符构造出如alert(1)这类典型的代码注入Payload。但结合特定场景(如可控域名、跨域环境),仍能实现对应的攻击效果。

内容的提问来源于stack exchange,提问作者Kubbi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 14:17:35