Javascript中parseInt在XSS中的应用

本文解析了XSS挑战赛第12题,介绍了如何利用parseInt函数的特性绕过过滤机制并触发弹窗警告。通过特定的数字转换为30进制字符串,再调用eval执行alert命令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

XSS挑战赛第12题:http://prompt.ml/12,用了parseInt这个函数,感觉是一个很好玩的东西

原题:

function escape(input) {
    // in Soviet Russia...
    input = encodeURIComponent(input).replace(/'/g, '');
    // table flips you!
    input = input.replace(/prompt/g, 'alert');

    // ノ┬─┬ノ ︵ ( \o°o)\
    return '<script>' + input + '</script> ';
}

先直接上答案吧:

eval(630038579..toString(30))(1)

// 或Hexadecimal alternative (630038579 == 0x258da033):
eval(0x258da033.toString(30))(1)

parseInt函数,介绍如下(http://www.w3school.com.cn/jsref/jsref_parseInt.asp):

定义和用法

parseInt() 函数可解析一个字符串,并返回一个整数。

语法

parseInt(string, radix)
参数 描述
string 必需。要被解析的字符串。
radix

可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。

如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。

如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。

返回值

返回解析后的数字。

说明

当参数 radix 的值为 0,或没有设置该参数时,parseInt() 会根据 string 来判断数字的基数。

举例,如果 string 以 "0x" 开头,parseInt() 会把 string 的其余部分解析为十六进制的整数。如果 string 以 0 开头,那么 ECMAScript v3 允许 parseInt() 的一个实现把其后的字符解析为八进制或十六进制的数字。如果 string 以 1 ~ 9 的数字开头,parseInt() 将把它解析为十进制的整数。

提示和注释

注释:只有字符串中的第一个数字会被返回。

注释:开头和结尾的空格是允许的。

提示:如果字符串的第一个字符不能被转换为数字,那么 parseFloat() 会返回 NaN。

实例

在本例中,我们将使用 parseInt() 来解析不同的字符串:

parseInt("10");			//返回 10
parseInt("19",10);		//返回 19 (10+9)
parseInt("11",2);		//返回 3 (2+1)
parseInt("17",8);		//返回 15 (8+7)
parseInt("1f",16);		//返回 31 (16+15)
parseInt("010");		//未定:返回 10 或 8

可以看到,此函数的功能是将一个String转换成对数值(可以是2-36进制),如上述实例。

如果待转换字符串中有大于该进制的字母,则只会将第一个大于该字母前的字符串转换,如:


在这题中,prompt最大的字母为t,0~9+A~T的话,表示的是30进制,因此构造POC如下:

eval(630038579..toString(30))(1)




03-21
### 关于 Mycat 数据库中间件 #### 什么是 MycatMycat 是一款开源的分布式数据库系统,作为数据库中间件,主要用于解决大数据场景下的读写分离、分库分表等问题[^5]。它可以像 MySQL 一样被使用,开发者只需在 Mycat 中配置具体的分库分表策略即可完成复杂的数据管理任务[^1]。 #### Mycat 的主要功能特性 Mycat 提供了一系列强大的功能来提升数据库性能和可扩展性: - **分布式架构**:支持分片(Sharding)、读写分离,从而显著提高数据库处理能力和并发量。 - **高可用性**:具备主备切换以及故障自动恢复的能力,保障系统的稳定运行。 - **动态数据路由**:能根据实际业务需求灵活调整分片策略,满足不同应用场景的需求。 - **多协议兼容**:除了支持 MySQL 外,还兼容 MariaDB、Oracle 和 SQL Server 等多种数据库系统[^3]。 #### 安装与环境准备 为了成功部署并使用 Mycat,需按照以下指导进行操作: 1. 准备好 Java 运行环境(JDK 版本建议为 1.8 或更高版本),因为 Mycat 基于 Java 编写而成[^2]。 2. 下载官方发布的最新版 Mycat 软件包,并解压至目标目录下。 3. 修改 `server.xml` 文件中的相关参数设置,比如监听端口号,默认情况下为 `8066`;同时定义逻辑数据库名称及其对应的物理节点信息。 4. 启动服务进程并通过命令行工具或者图形界面访问验证连接状态正常与否。 #### 查询示例 当一切就绪之后,在日常开发过程中可以通过如下方式发起简单的查询请求: ```sql SELECT * FROM user; ``` 此条语句会经由 Mycat 解析后转发给相应的后台存储引擎执行完毕再返回结果集给前端调用方[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值