随笔 - 51  文章 - 0  评论 - 4  阅读 - 19287

CTFer成长记录——Web专题·判断绕过

一、题目连接

https://ctf.show/challenges#web1-143

二、题意分析

打开靶场,可以看到网页直接给出了源代码:

  方法1

  通过该php语言以及最下面的提示,只有id = 1000的时候才能获取到flag,但是如果id简单的等于1000,那么会被intval()函数给跳过导致直接退出。

  intval()是一个获取变量整数值的函数,语法:intval($x,进制),返回整数。默认是10进制,当遇到非数字开头时,则会停止转换,返回0。所以我们需要传入id的值,使得该id的值为1000且让intval()停止转换。

  因此id传入1000的十六进制即可:0x3E8。

  方法2:

  该源代码直接把变量$id拼在了sql语句中,会产生SQL注入的风险,因此我们可以利用该特性:

  数据的查询是从article这个表中查询的,我们直接用联合查询union select 查出来即可。

  payload:?id=1 union select *from article;--+,--+是注释符,不用#是因为#会被过滤,可以用%27代替。;是闭合sql语句。由于原sql语句中有limit限制查询结果返回的数量为1,所以要把它注释掉。

  

三、解法步骤

    法一:payload:?id=0x3E8

      法二:payload:?id=1 union select *from article;--+

四、总结

  本题方法其实很多,这里列举了通过审计代码发现intval()函数的安全漏洞:直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时(\0)结束转换",在某些应用程序里由于对intval函数这个特性认识不够,错误的使用导致绕过一些安全判断导致安全漏洞;又发现了SQL注入点,最后通过联合查询获取数据库信息,从而得到flag。

  

 

posted on   MiracleWolf  阅读(269)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示