iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 13
1
Security

不小心飛進資安之旅(學習筆記)系列 第 13

Day13 常見的攻擊手法-SQL注入

  • 分享至 

  • xImage
  •  

SQL Injection Concepts

  • 造成原因:

    • 未驗證的輸入 (non-validated input vulnerabilities)
    • 未授權的存取 (gain unauthorized access)
    • 應用程式的弱點(flaw in web applications)
    • SQL基本攻擊:未經授權的訪問資料庫、直接檢索資料庫訊息
  • 可能同時存在的弱點:

    • 身份驗證(Authentication By Pass)
    • 機敏資訊暴露(Information Disclosure)
    • 受損資訊完整性(Compromised Data Integrity)
    • 受損資訊可用性(Compromised Availability Of Data)
    • 遠程代碼執行(Remote Code Execution)
  • 了解SQL Injection Query (注入查詢)

    SELECT Count (*) FROM Users WHERE UserName=’Blah’ or 1=1 –‘ AND Password=’Springfield’
    
  • Code Analysis

    1. User 輸入使用者名稱和密碼,與使用者表中的記錄匹配。
    2. 動態生成SQL查詢是使用檢索匹配的行數
    3. 使用者是經過身分驗證和測試的請求頁面
    4. 當攻擊者輸入 『blah’ or 1=1 -- 』然後 SQL 查詢將看起來像:
    SELECT Count (*) FROM Users WHERE UserName=’Blah’ or 1=1 –‘ AND Password=’ ’ 
    
    1. 因為一對連字符指定sql中註釋的開頭,查詢就變成了:
    SELECT Count (*) FROM Users WHERE UserName=’Blah’ or 1=1
    
    String strQry = “SELECT Count (*) FROM Users WHERE UserName=’ “ + txtUser.Text + “ ‘ AND Password=’ “ + txtPassword.Text + “ ‘ “; 
    

Types of SQL injection (類型)

  • Error Base SQL Injection

    錯誤的sql注入強制資料庫執行某些操作,在這些操作中,結果將是一個錯誤,這種利用可能因資料庫管理系統而異
    考慮如下所示的SQL查詢:

    SELECT * FROM products WHERE id_product=$id_product
    
    • UNION SQL(聯合查詢) Injection
      語句返回預期資料集與目標資料集的聯合,利用UNION命令返回目標資料庫的聯合,並將其與您精心設計的目標資料庫聯合以從中竊取數據。
      SELECT Name, Phone, Address FROM Users WHERE Id=1 UNION ALL SELECT oreditcardNuuber, 1,1 FROM CreditcardTable 
      
      包含加入一個偽造查詢連接到原始查詢,偽造查詢的結果將與原始查詢的結果聯接, 從而允許獲取其他表的欄位的值。
      /*例如:*/
      SELECT Name, Phone, Address FROM Users WHERE Id=$id  
      /*ID值設定:*/
      $id=1 UNION ALL SELECT creditcardNumber,1,1 FROM CreditCardTable  
      /*最終査詢如下:*/
      SELECT Name, Phone, Address FROM Users WHERE Id=1 UNION ALL SELECT creditCardNumber, 1,1 FROM CreditCardTable
      
      ※上面的査詢將原始査詢的結果與所有信用卡用戶連接起來
    • System Stored Procedure(系統存儲過程):利用資料庫的存儲過程來進行攻擊
    • Tautology(重言式,冗詞贅句)
      注入始終為true的語句,以便查詢始終在評估WHERE條件時返回結果
    SELECT * FROM用戶WHERE名稱= NOR1 ='1';
    

    一種過於復雜的術語,用於描述數據庫系統在判斷語句是否為真時的行為。因為經常比較用戶ID和密碼,並且“真實”度量允許訪問,如果你通過提供已經存在的東西來欺騙數據庫(1確實等於1),那麼你可以偷偷摸摸。

    • End of Line Comment(結束評論):將代碼注入特定字段後,通過使用行尾註釋來明確後面的合法代碼
    SELECT * FROM user WHERE name = 'X' AND userid IS NULL; --';
    
    • Illegal / Logically Incorrect Query(非法/邏輯錯誤的查詢)
      可以通過注入非法/邏輯上不正確的請求來獲取知識,例如注入參數,資料類型,表格名稱等,這不一定是枚舉技術的攻擊。目標是故意輸入構造不良的語句,以使數據庫響應其錯誤消息中的表名和其他信息。
  • Blind SQL Injection
    當攻擊者知道數據庫容易被注入時,會發生這種情況,但錯誤消息和屏幕返回不會返回給攻擊者。因為有很多猜測和反複試驗,這次攻擊需要很長時間才能完成。

    • No Error Message:利用漏洞,但攻擊者看不到注入的結果
    • Generic page通用頁面:與正常的SQL注入相同,只是當攻擊者試圖利用應用程序而不是看到有用的錯誤消息時,會顯示一個通用的自定義頁面
    • Time-intensive時間密集:因為新的聲明,必須為每一個恢復的位製作
    • Time Delay
    • Boolean Exploitation

SQL Injection Methodology

  • Information Gathering and SQL Injection Vulnerability Detection
    1. 確認Web application與資料庫伺服器連線帳號為了訪問一些資料
    2. 列出所有輸入字段、隱藏字段和發布請求,其值可用於製作SQL查詢
    3. 嘗試將代碼注入輸入字段以生成錯誤
    4. 試插入字串值其中輸入字段中預期有一個數字
    5. 聯合操作是使用組合兩個或多個SELECT語句的結果集
    6. 詳細錯誤訊息為攻擊者提供大量信息以執行SQL注入
  • Launch SQL Injection Attacks
  • Advanced SQL Injection

SQL Injection Tools

  • BSQLHacker
  • Marathon Tool
  • SQL Power Injector
  • Havij
  • Mobile:DroidSQLi、sqlmapchik

Evasion Techniques

  • Evading IDS(繞過IDS,入侵偵測系統)
    模糊的輸入字串, 以避免檢測到基於簽名的檢測系統基於簽名的檢測系統建立一個 SQL 注入攻擊字串 (簽名) 資料庫, 然後在運行時將輸入字串與簽名資料庫進行比較, 以檢測攻擊
    攻擊者→SQL Injection 攻擊→互聯網→防火牆→IDS Filters→安全管理者→Web應用程式→資料庫→實際資料→OS 介面→網路
    • Types of Signature Evasion Techniques (簽名規避技術)
      • Sophisticated Matches(複雜的比賽)
        使用替代運算式 “OR 1=1”
      • Hex Encoding(六角編碼)
        使用16進位編碼表示SQL查詢字串
      • Manipulating White Spaces(操作/控制空白空格)
        掩蓋輸入字串,在SQL關鍵字之間刪除空白
      • In-line Comment(線上評論)
        掩蓋輸入字串在SQL關鍵字之間插入行注釋
      • Char Encoding(字符編碼)
        使用內置的CHAR函數來表示一個字符
      • String Concatenation(字串連接)
        使用DB特定指令連接文本以創建SQL關鍵字
      • Obfuscated Codes(模糊代碼)
        混淆代碼是一種難以理解的SQL語句

資料參考:

1.CEHv9
2.SQL 注入原理: https://medium.com/@jaydenlin/淺談駭客攻擊-網站安全-一次看懂-sql-injection-的攻擊原理-b1994fd2392a


上一篇
Day12 常見的攻擊手法-Injection注入
下一篇
Day14 常見的攻擊手法-XSS&CSRF (跨站腳本&跨站請求偽造)攻擊
系列文
不小心飛進資安之旅(學習筆記)20
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言