[SUCTF 2019]easy_sql

本文详细解析了SUCTF2019中easy_sql挑战的解决思路,介绍了如何利用堆叠注入和特殊SQL模式绕过过滤,并成功获取flag。

[SUCTF 2019]easy_sql

过滤了很多字符没有去都试出来,尝试了一下存在堆叠注入想用show尝试,没有成功,确实吗解出来,去看了下大佬的wp查询语句为

select $_POST || flag from flag

并且对post传过来的值进行了过滤。如果输入的内容在预设的arr当中就会返回Nonono.

其中的|| 就代表了or,所以当输入1的时候查询就会变成select 1 || flag from flag这时查的就是select 1 from flag所以不管输入什么都是查输入的。因为存在堆叠注入,就可以用sql_mode来定义sql语法。

sql_mode=PIPES_AS_CONCAT使||符号的作用变为字符串的拼接。

构建payload:1;set sql_mode=PIPES_AS_CONCAT;select 1

和查询语句拼接起来就是 select 1;set sql_mode=PIPES_AS_CONCAT;select 1||flag from Flag

需要注意的是 sql_mode=PIPES_AS_CONCAT模式下进行查询的时候,使用字母连接会报错,使用数字连接才会查询出数据,因为这个 || 相当于是将 select 1select flag from flag 的结果拼接在一起

还有一个非预期解:*,1

拼接起来看,不难理解 : select *,1||flag from Flag这边应该是忘了把*号过滤。

<think>嗯,用户正在寻找NSSCTF比赛中easy_sql题目的解法或提示。首先,我需要回忆一下之前处理的类似题目,比如强网杯2019easy_sql或者SWPUCTF 2021的题目。这些题目通常涉及SQL注入,尤其是堆叠注入,因为用户提供的引用中有提到堆叠注入和手工注入的必要性。 用户提供的引用里提到sqlmap可能不适用,因为题目注释中有“sqlmap是没有灵魂的”,这可能意味着过滤了某些自动化工具的特征,需要手动注入。另外,引用3中的示例使用了联合查询和group_concat来获取表名,这可能是一个线索。 接下来,我需要考虑常见的解题步骤。首先,测试注入点,判断是否存在字符型或数字型注入。然后,尝试堆叠注入,因为题目名称中有“easy_sql”,可能允许执行多条语句。例如,用户提到的使用union select来获取表名和列名,进而dump数据。 还要注意是否有过滤,比如某些关键词被过滤,可能需要大小写绕过或者注释符的使用。例如,使用`-1'`来闭合前面的查询,然后执行union select,最后用`--`注释掉剩余部分。 此外,引用的WriteUp中提到查看源码可能有帮助,比如发现注释中的提示,如use.php,可能需要添加到URL中进行测试。因此,检查页面源代码是重要的一步,可能发现隐藏的提示或注入点。 最后,可能需要利用information_schema数据库来获取表结构和数据,如查询tables和columns表。然后通过联合查询将数据输出到页面上。如果遇到过滤,可能需要尝试不同的绕过方法,比如使用反引号、编码或者分块传输。 总结步骤应该是:确定注入类型,测试堆叠注入是否可行,获取数据库和表信息,最后提取flag。同时注意绕过可能的过滤机制,并利用题目提供的注释或提示。</think>### NSSCTF easy_sql 解题思路 根据题目描述和引用信息,该题属于SQL注入类题型,可能涉及堆叠注入(Stacked Queries)或联合查询。以下是分步解析: --- #### 1. **判断注入类型** - 测试参数是否存在字符型或数字型注入: ```http /?wllm=1' -- 测试字符型闭合 /?wllm=1 and 1=1 -- 测试数字型逻辑 ``` 若页面返回差异,说明存在注入点[^2][^3]。 --- #### 2. **尝试堆叠注入** 引用[2][^2]提到该题适合手工注入,且可能支持堆叠注入: ```http /?wllm=1'; show databases; -- ``` 若返回数据库列表,则确认堆叠注入可用。 --- #### 3. **获取数据库和表名** 通过联合查询或`information_schema`获取元数据: ```http /?wllm=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='test_db'-- ``` 此处引用[3][^3]显示表名可能为`test_tb`,列名需进一步探测。 --- #### 4. **提取数据** 若已知表名和列名,直接查询目标数据: ```http /?wllm=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='test_tb'-- ``` 最终通过`--dump`或联合查询获取flag: ```http /?wllm=-1' union select 1,2,flag from test_tb-- ``` --- #### 5. **绕过过滤** 若遇到关键词过滤,尝试以下方法: - 使用`/**/`替代空格 - 大小写混合(如`UnIoN`) - 十六进制编码表名 --- ### 关键代码示例 ```python # 手工构造Payload示例(需根据实际过滤调整) payload = "-1' union select 1,2,group_concat(flag) from test_tb-- " url = f"http://target-site/?wllm={payload}" ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值