ctfshow-萌新-web5( 利用位运算符控制SQL获取网站敏感信息)

举报
士别三日wyx 发表于 2021/12/23 01:07:32 2021/12/23
【摘要】 ctf.show 萌新模块 we5关,这一关考察的是intval()函数转换字符串的特性和SQL注入的绕过思路,这一关过滤了单双引号,or,斜杠,加减乘除号,叹号,括号,select等关键字,推荐使用取反运算符(~)来控制SQL语句,获取flag    页面中展示了部分源码,提示我们 id=1...

ctf.show 萌新模块 we5关,这一关考察的是intval()函数转换字符串的特性和SQL注入的绕过思路,这一关过滤了单双引号,or,斜杠,加减乘除号,叹号,括号,select等关键字,推荐使用取反运算符(~)来控制SQL语句,获取flag

 

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

 首先分析一下解题的思路,源码中过滤了参数中的 ‘ ” or \ - / * < > ! x hex ( ) select 等关键字,那我们不包含这些关键字就行了;intval()函数将参数转换成整数,并且不能大于999,而我们的flag是1000,正常输入必然会大于999,所以我们可以利用intval()函数转换字符串的特性,在参数中构造特殊的字符,来绕过intval()函数的转换;绕过前面两个过滤以后就来到执行SQL语句了,这里我们使用取反运算符(~)来控制SQL,获取flag。构造以下payload

?id=~~1000
 

 先来介绍一下intva()函数转换字符串的特性

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

  

我们构造的payload,被后端的get请求接收以后,会变成一个字符串类型的变量 ‘~~1000’ ,这个字符串被intval()函数转换后会变成 0

参与if的条件判断就是 0 < 999 , 返回false,从而执行else中的SQL

 我们构造的参数拼接到SQL中是下面这个样子

 取反运算符可以将数值的内容取反,两次取反后便会是原来的样子,所以SQL会查询 id=1000 的信息,从而拿到flag

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

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

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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