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

  「作者简介」:冬奥会网络安全中国代表队,优快云 Top100,就职奇安信多年,以实战工作为基础著作 《网络安全自学教程》,适合基础薄弱的同学系统化的学习网络安全,用最短的时间掌握最核心的技术。



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

### CTFShow Web9 题解 对于CTFShow平台上Web9挑战的理解,虽然具体细节未直接提及于提供的参考资料中,但从其他相似题目的解析模式出发,可以推测出一般性的解题策略。 #### 1. 分析题目背景与环境 通常,在处理这类基于Web安全挑战时,了解目标应用的技术栈至关重要。这有助于识别可能存在的漏洞点以及如何有效利用这些弱点来解决问题[^1]。 #### 2. 探索潜在攻击面 假设Web9涉及某种形式的数据输入验证不足的情况,比如通过URL参数传递数据给后端处理的过程中存在安全隐患。这种情况下,测试者应该仔细审查所有可交互的地方,特别是那些允许外部提交信息的部分[^5]。 #### 3. 构造特定载荷(Payload) 一旦确认了具体的漏洞类型——无论是SQL注入、命令执行还是文件上传等——下一步就是精心设计能够绕过现有防护机制的有效载荷。例如,在某些场景下,可以通过巧妙运用PHP标签`<?php ?>`之外的方式使恶意脚本得以运行,如使用短标记或HTML注释技巧[^4]。 #### 4. 获取Flag 成功触发预期行为之后,最终目的是找到并读取隐藏起来作为通关凭证的秘密字符串(flag)。此过程往往涉及到遍历文件系统、查询数据库记录或是调用内部API接口等多种手段相结合的方法[^3]。 ```python import requests # 假设这是一个用于发送请求获取flag的简单Python脚本片段 url = "http://example.com/vulnerable_endpoint" payload = {'param': 'injected_code'} response = requests.post(url, data=payload) if response.status_code == 200 and 'flag{' in response.text: print("Found flag:", response.text.split('flag{')[1].split('}')[0]) else: print("Failed to retrieve the flag.") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

士别三日wyx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值