ctfshow-萌新-web4( 利用逻辑运算符绕过获取网站敏感信息)

举报
士别三日wyx 发表于 2021/12/22 23:55:02 2021/12/22
【摘要】 ctf.show 萌新模块 web4关,这一关考察的是 intval()函数转换字符串的特性,以及SQL注入漏洞的绕过方式,源码中过滤了or,加减乘除(+-*/),左右移,括号,|,select等关键字,我们使用短路逻辑或(||)来替替代 or 即可    页面中展示了部分源码,提示...

ctf.show 萌新模块 web4关,这一关考察的是 intval()函数转换字符串的特性,以及SQL注入漏洞的绕过方式,源码中过滤了or,加减乘除(+-*/),左右移,括号,|,select等关键字,我们使用短路逻辑或(||)来替替代 or 即可

 

 页面中展示了部分源码,提示我们 id=1000 时,即可获取flag

 首先分析一下思路,源码中过滤了参数中的 or - / * < > ! ( ) + select 等关键字,所以我们的参数中不能包含这些关键字,否则会直接 die;而后intval()函数会将参数转换成整数,我们可以利用特殊则字符( 逻辑或 ||)来绕过intval()函数的转换;最后就是控制SQL语句查询 id=1000 时的flag;构造payload如下

?id=2 || id = 1000
 

intval()函数在转换整数时,如果被转换的是字符串,则会从最左边第一个字符开始转换,直到遇到非整数的字符才会停止转换

我们构造的参数,被后端通过get请求获取后,拿到的是一个字符串 ‘2 || id = 1000’ 

 这个字符串被intval() 函数转换后的结果是 2 (因为字符 | 是非整数的字符,所以会停止转换), 2 > 999 if 判断返回false, 从而进入else中执行SQL语句

 我们构造的参数拼接到SQL中,会变成下面这个样子

select * from article where id = 2 || id = 1000 order by id limit 1
 

id=1 时的查询结果

id=2时的查询结果

 id=1时正常查询结果,而 id=2 时查询结果为空,也就是说,id=2没有对应的信息

SQL会查询 id=2 或者 id=1000的信息,由于 id=2 时,没有返回的信息,所以这里只会返回 id=1000 时的信息,从而获取flag

文章来源: blog.csdn.net,作者:士别三日wyx,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/wangyuxiang946/article/details/120220488

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。