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

Oracle SQL盲注场景下字符串大小写比较不符合ASCII规则问题

你遇到的大小写字符比较不符合ASCII规则的问题,是Oracle数据库的NLS字符排序比较规则导致的,和默认用ASCII值比较的逻辑不同。

具体原因

Oracle的字符串比较规则由两个全局/会话级参数控制:

  • NLS_SORT:指定字符串排序的规则,默认通常是和数据库所在地区对应的语言排序规则,而非二进制ASCII排序
  • NLS_COMP:指定字符串比较时是否遵循NLS_SORT的配置

你测试得到的D < e < E < F的排序结果,是语言排序规则下的典型表现:排序时首先按字母的语义顺序排列(即不区分大小写先排基础字母顺序,D < E < F),同一字母的小写字符优先级高于大写字符,所以小写e排在大写E前面,最终就得到了你观察到的比较结果。

盲注场景规避方案

要避免排序规则干扰注入判断,直接用ASCII值做数值比较即可,完全不受排序规则影响:

  • 比如要判断目标字符是不是小写e,可以写ASCII(SUBSTR(目标字段, 偏移量, 1)) = 101
  • 要判断是不是大写E,对应ASCII值为69,直接比较数值结果不会有歧义。

如果需要强制使用二进制排序比较字符串,也可以用NLSSORT函数显式指定排序规则:NLSSORT('E','NLS_SORT=BINARY') > NLSSORT('e','NLS_SORT=BINARY')的返回结果为FALSE,符合ASCII的比较逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:45:04