DVWA靶場通關筆記-驗證碼繞過reCAPTCHA(Medium級別)

目錄

一、reCAPTCHA

二、代碼審計(Medium級別)

1、滲透準備

(1)配置security為Medium級別。

(2)配置RECAPTCHA參數

(3)再次打開靶場

2、源碼分析

(1)index.php

(2)Medium.php

(3)功能函數

(4)總結

三、滲透實戰

1、修改密碼并提交

(1)第一次點擊change

(2)第二次點擊change

(3)總結

2、bp修改密碼


本系列為通過《DVWA靶場通關筆記》的reCAPTCHA關卡(low,medium,high,impossible共4關)滲透集合,通過對相應關卡源碼的代碼審計找到講解滲透原理并進行滲透實踐,本文為reCAPTCHA關卡Medium級別關卡的滲透部分。

一、reCAPTCHA

reCAPTCHA關卡模擬了網站驗證碼系統的實現,在通過繞過驗證碼的安全驗證來實現密碼修改等操作,不同安全等級存在不同的繞過方法,本小節對中等級別關卡進行滲透實戰。

二、代碼審計(Medium級別)

1、滲透準備

(1)配置security為Medium級別。

進入到reCAPTCHA關卡Medium頁面,完整URL地址具體如下所示。

http://127.0.0.1/DVWA/vulnerabilities/captcha/

(2)配置RECAPTCHA參數

進入到DVWA的config目錄,如下所示找到config.inc.php文件。

修改config.inc.php文件中的如下參數,雖然頁面提示api-key需要通過https://www.google.com/recaptcha/admin/create生成,但是實際上這部分可以填充為自己的內容,如下所示。

$_DVWA[ 'recaptcha_public_key' ]? = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXMOOYUAN';
$_DVWA[ 'recaptcha_private_key' ] = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXMOOYUAN';

修改后效果如下所示,記得修改后保存文件。

(3)再次打開靶場

如下所示,更新config.inc.php文件后,靶場可以正常打開,這是一個具有修改密碼功能的頁面。

2、源碼分析

(1)index.php

進入DVWA靶場源目錄,找到index.php源碼。

這段代碼實現了 DVWA (Damn Vulnerable Web Application) 中的reCAPTCHA關卡的演示頁面,主要功能包括:DVWA的Insecure CAPTCHA模塊通過四個安全等級(低、中、高、不可能)演示驗證碼系統的安全演進,該模塊核心展示密碼修改場景下的驗證碼實現,包含密鑰檢查、表單動態生成(根據等級顯示不同字段)和安全警告提示,如客戶端驗證繞過、驗證碼重復使用等問題,并通過對比不同等級的實現差異,直觀呈現從脆弱到安全的演進過程,最終強調應使用專業驗證服務(如reCAPTCHA)配合多因素驗證的整體防護思路。

  • 初始化與安全級別處理
    • 設置頁面路徑和安全依賴。
    • 根據用戶安全級別(低、中、高、不可能)加載不同的驗證碼實現。
  • 驗證碼配置檢查
    • 驗證是否配置了 reCAPTCHA API 密鑰。
    • 若未配置則顯示警告并隱藏表單。
  • 表單構建
    • 生成密碼修改表單,包含當前密碼(僅 "不可能" 級別)、新密碼和確認密碼字段。
    • 根據安全級別不同,集成不同的驗證碼機制(低級、中級、高級和不可能四個級別)。
  • 安全措施
    • "高" 和 "不可能" 級別包含 CSRF 令牌保護。
    • "不可能" 級別增加了當前密碼驗證。

經過注釋后的詳細代碼如下所示。

<?php
/*** DVWA Insecure CAPTCHA 演示頁面* 演示不同安全等級下的驗證碼實現方式及潛在安全風險*/// 定義網站根目錄路徑
define( 'DVWA_WEB_PAGE_TO_ROOT', '../../' );// 引入必要的庫文件
require_once DVWA_WEB_PAGE_TO_ROOT . 'dvwa/includes/dvwaPage.inc.php';          // DVWA核心頁面庫
require_once DVWA_WEB_PAGE_TO_ROOT . "external/recaptcha/recaptchalib.php";    // reCAPTCHA庫// 初始化頁面,要求認證并啟用PHPIDS防護
dvwaPageStartup( array( 'authenticated', 'phpids' ) );// 創建新頁面對象
$page = dvwaPageNewGrab();
// 設置頁面標題
$page[ 'title' ]   = 'Vulnerability: Insecure CAPTCHA' . $page[ 'title_separator' ].$page[ 'title' ];
// 設置頁面ID
$page[ 'page_id' ] = 'captcha';
// 設置幫助按鈕
$page[ 'help_button' ]   = 'captcha';
// 設置源代碼查看按鈕
$page[ 'source_button' ] = 'captcha';// 連接數據庫
dvwaDatabaseConnect();// 根據安全等級選擇對應的實現文件
$vulnerabilityFile = '';
switch( $_COOKIE[ 'security' ] ) {case 'low':      // 低安全等級$vulnerabilityFile = 'low.php';break;case 'medium':   // 中安全等級$vulnerabilityFile = 'medium.php';break;case 'high':     // 高安全等級$vulnerabilityFile = 'high.php';break;default:        // 默認(不可能等級)$vulnerabilityFile = 'impossible.php';break;
}// 控制表單是否顯示
$hide_form = false;
// 引入對應級別的實現文件
require_once DVWA_WEB_PAGE_TO_ROOT . "vulnerabilities/captcha/source/{$vulnerabilityFile}";// 檢查reCAPTCHA密鑰配置
$WarningHtml = '';
if( $_DVWA[ 'recaptcha_public_key' ] == "" ) {$WarningHtml = "<div class=\"warning\"><em>reCAPTCHA API key missing</em> from config file: " . realpath( getcwd() . DIRECTORY_SEPARATOR . DVWA_WEB_PAGE_TO_ROOT . "config" . DIRECTORY_SEPARATOR . "config.inc.php" ) . "</div>";$html = "<em>Please register for a key</em> from reCAPTCHA: " . dvwaExternalLinkUrlGet( 'https://www.google.com/recaptcha/admin/create' );$hide_form = true;  // 密鑰缺失時隱藏表單
}// 構建頁面主體HTML
$page[ 'body' ] .= "
<div class=\"body_padded\"><h1>Vulnerability: Insecure CAPTCHA</h1>{$WarningHtml}<div class=\"vulnerable_code_area\"><form action=\"#\" method=\"POST\" ";// 密鑰缺失時隱藏表單
if( $hide_form )$page[ 'body' ] .= "style=\"display:none;\"";$page[ 'body' ] .= "><h3>Change your password:</h3><br /><input type=\"hidden\" name=\"step\" value=\"1\" />\n";// 不可能等級需要驗證當前密碼
if( $vulnerabilityFile == 'impossible.php' ) {$page[ 'body' ] .= "Current password:<br /><input type=\"password\" AUTOCOMPLETE=\"off\" name=\"password_current\"><br />";
}$page[ 'body' ] .= "            New password:<br /><input type=\"password\" AUTOCOMPLETE=\"off\" name=\"password_new\"><br />Confirm new password:<br /><input type=\"password\" AUTOCOMPLETE=\"off\" name=\"password_conf\"><br />" . recaptcha_get_html( $_DVWA[ 'recaptcha_public_key' ] );  // 插入reCAPTCHA組件// 高安全等級下的開發者注釋提示
if( $vulnerabilityFile == 'high.php' )$page[ 'body' ] .= "\n\n            <!-- **DEV NOTE**   Response: 'hidd3n_valu3'   &&   User-Agent: 'reCAPTCHA'   **/DEV NOTE** -->\n";// 高和不可能等級添加CSRF令牌
if( $vulnerabilityFile == 'high.php' || $vulnerabilityFile == 'impossible.php' )$page[ 'body' ] .= "\n            " . tokenField();$page[ 'body' ] .= "<br /><input type=\"submit\" value=\"Change\" name=\"Change\"></form>{$html}  <!-- 顯示操作結果 --></div><h2>More Information</h2><ul><li>" . dvwaExternalLinkUrlGet( 'https://en.wikipedia.org/wiki/CAPTCHA' ) . "</li><li>" . dvwaExternalLinkUrlGet( 'https://www.google.com/recaptcha/' ) . "</li><li>" . dvwaExternalLinkUrlGet( 'https://www.owasp.org/index.php/Testing_for_Captcha_(OWASP-AT-012)' ) . "</li></ul>
</div>\n";// 輸出完整HTML頁面
dvwaHtmlEcho( $page );?>

(2)Medium.php

進入DVWA靶場源目錄,找到Medium.php源碼。

打開源碼Medium.php,分析可知這段代碼實現了一個兩步式的密碼修改功能,主要功能是處理用戶密碼修改請求,并通過 reCAPTCHA 驗證碼進行驗證。整個流程分為兩個步驟

  1. 驗證碼驗證階段驗證reCAPTCHA和密碼一致性(特別注意:由于本關卡這部分是亂填的,且會向https://www.google.com/recaptcha/api/siteverify提交請求,這個網站目前無法響應,故注釋掉這部分驗證,強制設置$resp=1,否則沒法向下繼續走)。
  2. 密碼修改階段:驗證碼通過后,用戶確認修改,確認驗證通過后執行數據庫更新

詳細注釋后的代碼如下所示。?

<?php// 第一步:處理初始密碼修改請求(包含CAPTCHA驗證)
if( isset( $_POST[ 'Change' ] ) && ( $_POST[ 'step' ] == '1' ) ) {// 隱藏表單,準備顯示下一步或錯誤信息$hide_form = true;// 獲取用戶輸入的新密碼和確認密碼$pass_new  = $_POST[ 'password_new' ];$pass_conf = $_POST[ 'password_conf' ];// 檢查第三方CAPTCHA驗證// $resp = recaptcha_check_answer(// $_DVWA[ 'recaptcha_private_key'],  // reCAPTCHA私鑰// $_POST['g-recaptcha-response']    // 用戶輸入的CAPTCHA響應
//);
$resp=1;// CAPTCHA驗證失敗處理if( !$resp ) {// 顯示錯誤信息并重新顯示表單$html     .= "<pre><br />The CAPTCHA was incorrect. Please try again.</pre>";$hide_form = false;return;}else {// CAPTCHA驗證成功,檢查兩次輸入的密碼是否匹配if( $pass_new == $pass_conf ) {// 顯示確認頁面,包含隱藏表單準備第二步提交$html .= "<pre><br />You passed the CAPTCHA! Click the button to confirm your changes.<br /></pre><form action=\"#\" method=\"POST\"><input type=\"hidden\" name=\"step\" value=\"2\" /><input type=\"hidden\" name=\"password_new\" value=\"{$pass_new}\" /><input type=\"hidden\" name=\"password_conf\" value=\"{$pass_conf}\" /><input type=\"submit\" name=\"Change\" value=\"Change\" /></form>";}else {// 密碼不匹配,顯示錯誤并重新顯示表單$html     .= "<pre>Both passwords must match.</pre>";$hide_form = false;}}
}// 第二步:處理最終的密碼修改請求
if( isset( $_POST[ 'Change' ] ) && ( $_POST[ 'step' ] == '2' ) ) {// 隱藏表單$hide_form = true;// 獲取密碼(從隱藏表單字段)$pass_new  = $_POST[ 'password_new' ];$pass_conf = $_POST[ 'password_conf' ];// 再次驗證密碼是否匹配(防御篡改)if( $pass_new == $pass_conf ) {// 密碼轉義防止SQL注入$pass_new = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $pass_new ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));// 對密碼進行MD5哈希處理(注:MD5現在被認為不夠安全)$pass_new = md5( $pass_new );// 更新數據庫中的密碼$insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser() . "';";$result = mysqli_query($GLOBALS["___mysqli_ston"],  $insert ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );// 顯示成功信息$html .= "<pre>Password Changed.</pre>";}else {// 密碼不匹配(可能在第二步被篡改)$html .= "<pre>Passwords did not match.</pre>";$hide_form = false;}// 關閉數據庫連接((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}?>

(3)功能函數

根據如下代碼可知,CheckCaptcha函數會像谷歌https://www.google.com/recaptcha/api/siteverify進行請求,CheckCaptcha和recaptcha_get_html函數的定義如下所示。

<?php/*** 驗證碼驗證函數(兼容舊版API)* * @param string $key 私鑰* @param string $response 用戶提交的驗證碼響應* @return bool|NULL 驗證成功返回true,失敗返回false,異常返回NULL*/
function recaptcha_check_answer($key, $response){return CheckCaptcha($key, $response);
}/*** 發送HTTP請求驗證驗證碼* * @param string $key 私鑰* @param string $response 用戶提交的驗證碼響應* @return bool|NULL 驗證成功返回true,失敗返回false,異常返回NULL*/
function CheckCaptcha($key, $response) {try {// Google reCAPTCHA驗證API地址$url = 'https://www.google.com/recaptcha/api/siteverify';// 準備POST數據$dat = array('secret'   => $key,                 // 網站私鑰'response' => urlencode($response), // 用戶響應(由前端生成)'remoteip' => urlencode($_SERVER['REMOTE_ADDR']) // 用戶IP地址);// 配置HTTP請求選項$opt = array('http' => array('header'  => "Content-type: application/x-www-form-urlencoded\r\n",'method'  => 'POST','content' => http_build_query($dat) // 生成POST數據));// 創建HTTP上下文并發送請求$context = stream_context_create($opt);$result  = file_get_contents($url, false, $context);// 解析JSON響應并返回驗證結果return json_decode($result)->success;} catch (Exception $e) {// 發生異常時返回NULLreturn null;}
}/*** 生成前端驗證碼HTML代碼* * @param string $pubKey 公鑰* @return string HTML代碼片段*/
function recaptcha_get_html($pubKey){return "<script src='https://www.google.com/recaptcha/api.js'></script><br /> <div class='g-recaptcha' data-theme='dark' data-sitekey='" . $pubKey . "'></div>";
}?>

?三個函數功能詳解,如下所示。

  • recaptcha_check_answer
    • 功能:驗證用戶提交的驗證碼是否有效(兼容舊版 API)。
    • 流程:直接調用CheckCaptcha函數進行驗證。
    • 安全作用:作為入口函數提供向后兼容性。
  • CheckCaptcha
    • 功能:向 Google 服務器發送驗證請求并處理響應。
    • 流程
      • 構建 POST 請求參數(私鑰、用戶響應、IP 地址)。
      • 配置 HTTP 請求上下文(設置請求頭、方法和內容)。
      • 發送請求到 Google 驗證 API。
      • 解析 JSON 響應并提取驗證結果。
    • 安全作用:核心驗證邏輯,防止 CSRF 攻擊和機器人自動化操作。
  • recaptcha_get_html
    • 功能:生成前端驗證碼 UI 組件。
    • 流程
      • 引入 Google reCAPTCHA JavaScript 庫。
      • 創建帶有公鑰的驗證碼容器(暗色主題)。
    • 安全作用:在頁面中正確渲染驗證碼組件,確保用戶交互。

(4)總結

對于Medium關卡,兩者的代碼區別如下所示。

即第二步增加了一個參數passed_captcha,只有這個值為True(1)時,才可得到突破。代碼依賴客戶端提交的step參數來區分處理邏輯,攻擊者可能直接提交第二步請求繞過驗證碼驗證。

三、滲透實戰

1、修改密碼并提交

bp設置攔截報文,進入靶場,如下所示。

http://127.0.0.1/DVWA/vulnerabilities/captcha/

(1)第一次點擊change

將密碼改為1234,效果如下所示。

此時bursuite抓包,此時step=1,報文如下所示。

此時頁面也變為如下形式,提示“You passed the CAPTCHA! Click the button to confirm your changes”。

(2)第二次點擊change

再次點擊change,此時系統提示如下。

burpsuite抓包效果如下所示。

(3)總結

很明顯修改密碼共有兩個報文,基于源碼審計我們知道且第二個不依賴于第一個,故而滲透思路就是只對第二個報文進行修改重放,嘗試修改密碼。接下來我們將第2個報文發送到repeater如下所示。

2、bp修改密碼

在repeater中,通過修改如下紅框中的密碼0000來進行滲透,具體如下所示。

將如下紅框中的密碼0000均改為password,并點擊send,如下所示密碼修改成功,說明成功滲透。

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

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

相關文章

人工智能安全基礎復習用:對抗樣本檢測與防御

一、對抗樣本&#xff08;Adversarial Examples&#xff09;定義&#xff1a;對輸入樣本添加人眼無法察覺的細微干擾&#xff0c;導致模型以高置信度輸出錯誤結果。對抗樣本的分布通常偏離自然數據分布&#xff0c;與正常樣本在模型中間層/輸出層的分布存在差異。核心目標&…

[數學基礎] 矩陣的秩及其應用

深入淺出&#xff1a;矩陣的秩及其應用 文章目錄深入淺出&#xff1a;矩陣的秩及其應用一、數學定義二、核心作用三、計算方法與步驟方法1&#xff1a;高斯消元法&#xff08;最常用&#xff09;方法2&#xff1a;奇異值分解&#xff08;SVD&#xff09;方法3&#xff1a;行列式…

LKH-3算法求解TSP問題基本原理與應用

通俗理解LKH-3算法 LKH-3&#xff08;Lin-Kernighan-Helsgaun&#xff09;是求解**旅行商問題&#xff08;TSP&#xff09;**的最強啟發式算法之一&#xff0c;由丹麥計算機科學家Keld Helsgaun在LKH-2基礎上改進而來。它的核心思想是&#xff1a;通過智能的“局部破壞與修復”…

游戲開發學習記錄

初始化只是第一次實例化的時候調用&#xff0c;show和unshow是打開界面和關閉界面的時候&#xff0c;會多次調用 在一個腳本里面show是每一次打開界面的時候需要做的事情&#xff0c;而Init是初始化。UIMgr里面的數據結構&#xff1a;為什么我要先從數據結構入手呢&#xff1f;…

一級緩存與二級緩存深度剖析:作用域、配置與同步方案全解析

引言 在分布式系統與高并發場景下&#xff0c;緩存機制已成為提升系統性能的關鍵技術。本文從作用域、失效機制、配置實踐到同步方案&#xff0c;系統化解析一級緩存與二級緩存的核心差異與工程實踐。 一、一級緩存&#xff1a;會話級數據加速器 1.1 作用域與生命周期 作用域&a…

OneCode MQTT插件開發實戰:基于Paho.Client的物聯網通信解決方案

引言 在物聯網應用開發中&#xff0c;MQTT協議因其輕量、低帶寬占用的特性被廣泛采用。OneCode平臺提供的xui.MQTT插件基于Eclipse Paho.Client實現了完整的MQTT通信能力&#xff0c;本文將從插件用途、核心實現、開發要點和功能擴展四個維度&#xff0c;詳解如何基于該插件構建…

1.1_5_1 計算機網絡的性能指標(上)

在這個小節中我們要學習計算機網絡的性能指標&#xff0c;我們在考研當中主要掌握這樣的七個性能指標&#xff0c;分別是速率、帶寬、吞吐量、時延、時延帶寬積、往返時延和信道利用率。我會把相關性比較緊密的性能指標放在一起講解。在這個視頻中&#xff0c;我們先來學習前三…

Python 性能優化指南:深入剖析代碼分析與優化工具

Python 性能優化指南:深入剖析代碼分析與優化工具 在 Python 的廣泛應用場景中,性能優化既是挑戰,也是機遇。無論是構建 Web 應用還是處理數據分析,理解代碼性能瓶頸并有效優化至關重要。本文將探討 Python 代碼性能分析的核心方法,并逐步解析關鍵工具的使用技巧,帶您從…

力扣打卡第二十一天 中后遍歷+中前遍歷 構造二叉樹

106. 從中序與后序遍歷序列構造二叉樹 給定兩個整數數組 inorder 和 postorder &#xff0c;其中 inorder 是二叉樹的中序遍歷&#xff0c; postorder 是同一棵樹的后序遍歷&#xff0c;請你構造并返回這顆 二叉樹 。 示例 1: 輸入&#xff1a;inorder [9,3,15,20,7], postor…

Notepad++正則表達全解

摘要:Notepad正則表達式符號大全包含11類常用語法&#xff1a;基礎符號&#xff08;.^$?等&#xff09;、預定義字符類&#xff08;\d\w\s等&#xff09;、錨點&#xff08;\b\B&#xff09;、量詞&#xff08;{n,m}&#xff09;、分組引用&#xff08;()$1&#xff09;、字符…

前后端分離(java) 和 Nginx在服務器上的完整部署方案(redis、minio)

一、準備工作 服務器環境要求 銀河麒麟 V10 操作系統 開放端口&#xff1a;MinIO (9000、9001)、 Redis (6379)、應用服務 jar包(18888)、前端服務(8080) 系統用戶&#xff1a;具有 sudo 權限的用戶 操作&#xff1a;需要先有必備的工具前端的vsCode,webStrom、后臺的idea&…

貪心算法:簡單而高效的求解策略C++

貪心算法詳解及C實現 1. 什么是貪心算法 貪心算法&#xff08;Greedy Algorithm&#xff09;是一種在每一步選擇中都采取在當前狀態下最好或最優&#xff08;即最有利&#xff09;的選擇&#xff0c;從而希望導致結果是全局最好或最優的算法策略。 貪心算法與動態規劃不同在于它…

IDEA 中使用 <jsp:useBean>動作指令時,class屬性引用無效

問題&#xff1a;在 IDEA 中創建 Java Web項目&#xff0c;在src/model包下存在一個Student類該類中包含&#xff1a;全參構造器、私有屬性的get/set方法。然后在 jsp 頁面中使用 <jsp:useBean>創建Student類的對象&#xff1a;訪問頁面時報錯&#xff1a;原因&#xff1…

【網絡】Linux 內核優化實戰 - net.core.flow_limit_table_len

目錄參數作用查看與修改調優建議相關警告net.core.flow_limit_table_len 是 Linux 內核中的一個網絡參數&#xff0c;用于控制**流限制表&#xff08;Flow Limit Table&#xff09;**的大小。這個表主要用于限制網絡流量中單個"流"&#xff08;通常指來自同一源IP、端…

前端開發常見問題技術文章大綱

前端開發常見問題技術文章大綱 常見性能優化問題 頁面加載速度慢的原因及解決方案渲染阻塞資源的優化方法內存泄漏的檢測與修復 跨瀏覽器兼容性問題 不同瀏覽器對CSS和JavaScript的支持差異Polyfill和Shim的使用場景如何利用工具檢測兼容性問題 響應式設計挑戰 媒體查詢的最佳實…

Redis常見性能問題和解決方案有哪些?

Redis 作為高性能的內存數據庫&#xff0c;在實際使用中可能會遇到性能問題。以下是常見的性能問題及其解決方案&#xff0c;用中文總結如下&#xff1a; 1. 高延遲問題 問題描述&#xff1a;客戶端請求響應時間過長&#xff0c;可能由于網絡、命令復雜度或服務器負載導致。 解…

閃測儀應用案例丨手機中框如何突破「尺寸檢測」瓶頸?

越來越多的手機中框&#xff0c;正改為更復雜的鏤空設計&#xff0c;這種設計不僅保持了手機中框的結構強度&#xff0c;還進一步減輕了機身重量&#xff0c;同時提升了散熱性能。這讓手機中框的自動化生產增加了很多難點&#xff0c;其中的尺寸檢測就遇到了許多瓶頸。? 尺寸精…

【字節跳動】數據挖掘面試題0011:介紹下時間序列分析常用知識點

文章大綱時間序列分析全面解析一、時間序列分析的基本概念二、時間序列分析的主要方法1. 描述性分析2.統計分析方法3.預測模型&#xff08;1&#xff09;傳統統計模型&#xff08;2&#xff09;現代機器學習模型三、時間序列分析的應用場景四、模型評估五、在字節跳動的應用場景…

ubuntu中交叉編譯iperf3到目標平臺xilinx

注&#xff1a;此文為ubuntu x86系統編譯程序到xilinx aarch64系統中。 一、工具準備 x86上編譯aarch64的編譯器 sudo apt install gcc-aarch64-linux-gnu g-aarch64-linux-gnu #保證編譯器在環境變量中&#xff0c;嘗試執行aarch64-linux-gnu-gcc 目標平臺的根文件系統rootf…

Java-數據結構-集合框架

什么是集合框架集合本質是java所實現的一組數據結構&#xff0c;提供了不同的增刪改查方法。集合就是定義了接口&#xff0c;再通過不同的類去實現定義的接口&#xff0c;這些實現了接口的類就是集合類&#xff0c;例如list&#xff0c;stack&#xff0c;map。集合框架的重要性…