提问人:Woo 提问时间:11/2/2021 最后编辑:Woo 更新时间:11/3/2021 访问量:146
在 ORACLE SQL 中,比较 2 个字符串存在问题(“E”>“e”表示 true)
In ORACLE SQL, there is a problem with comparing 2 string ('E' > 'e' says true)
问:
目前,我正在研究 WebSecurityAcademy(https://portswigger.net/web-security/sql-injection/blind) 上 SQL DBMS 的 SQL 注入,特别是关于使用条件响应的盲 SQL 注入。首先,目标网站如下图所示 抱歉无法发布图片...点击此链接
现在,网络服务器提供了一个名为 TrackingId 的 cookie(它似乎是一个具有随机值的会话 cookie),我使用这个 cookie 进行盲目 SQL 注入。
第一次,我输入了 TrackingId cookie 值。重新加载页面后,没有任何变化,所以我用 修改了 cookie 值。重新加载后,我可以看到网页输出“欢迎!1' OR 2=1 -- %20
1' OR 1=1 -- %20
因此,我得出结论,TrackingId 的 SQL 查询将类似于 .(好吧,忽略表名 User 和列名 TrackingId...这只是一个猜测)SELECT ... FROM User WHERE TrackingId='{injection point}' ...
之后,我尝试获取管理员的密码(表中有用户名=“管理员”...它被给予了..)通过使用 ORACLE 中的子字符串函数(我得出结论 DBMS 是 ORACLE,因为它可以将字符串与“||”运算符连接起来)。users
在试用之前,我输入(仅用于测试)TrackingId Cookie,期望它会返回 false(对于 ASCII 值,“E”<“e”)。但是,在重新加载页面后,网页输出“Welcome!”,因为“E”>“e”条件为真!!1' OR 'E'>'e
我对此感到非常困惑。据我所知,在ORACLE中,字符串的比较是基于ASCII值的......但是,为什么“E”<“e”条件成立????
- 我后来也尝试了“D”<“e”,它说这是真的
- 我也尝试了“F”>“e”,它说这是假的
- 我也试过 'E' = 'e',它说它是假的
所以,总而言之,它说 'D'<'e' != E<'F' ????这是怎么发生的???
以下是一些示例图片
答: 暂无答案
评论
E
e
select dump('e', 16) as "e", dump('E', 16) as "E" from dual
len=..: