iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 27
1
Security

資訊安全大補帖系列 第 27

資安補帖─Day27─SQL injection

前言

起手式:SQLi
你了解資料庫嗎?
你會SQL語法嗎?

SQL是什麼

SQL是一種特定目的程式語言,用於管理關聯式資料庫管理系統,或在關係流資料管理系統中進行流處理。 SQL基於關係代數和元組關係演算,包括一個資料定義語言和資料操縱語言。SQL的範圍包括資料插入、查詢、更新和刪除,資料庫模式建立和修改,以及資料存取控制。 維基百科

社團經驗談

  1. 學校會給社團幹部訓練,配合學校參與
  2. 社團開設幹部訓練,負責人定期了解幹部能力
  3. 主要希望幹部可以學習到更多東西
  4. 透過每週開會可以了解幹部的近況
  5. 協助幹部於課業也保持良好的發展

正文

  • SQL是程式語言
  • 跟資料庫互動
  • 程式設計師
    • 應該要預設所有使用者的輸入都是惡意
  • SQL語法
    • SELECT "欄位名稱" FROM "表格名稱";
  • 找輸入的地方
    • 使用者帳號
    • 使用者密碼
    • 搜尋框
    • 表單
    • 所有跟資料互動的地方
      • ?id=
      • 觀察封包
        • GET參數
        • POST封包內容
  • 什麼都不會的時候,只會
    • ' or ''='
      • 有時候空格也會影響注入
  • UNION指令

    UNION 指令的目的是將兩個 SQL 語句的結果合併起來。從這個角度來看, UNION 跟 JOIN 有些許類似,因為這兩個指令都可以由多個表格中擷取資料。 UNION 的一個限制是兩個 SQL 語句所產生的欄位需要是同樣的資料種類。另外,當我們用 UNION 這個指令時,我們只會看到不同的資料值 (類似 SELECT DISTINCT)。~sqlunion

  • Payloads
    • SQL injection
      • 找到輸入的地方之後,簡單做檢測是否有SQLi的可能性
        '
        %27
        "
        %22
        #
        %23
        ;
        %3B
        )
        Wildcard (*)
        

參考資料們

  • 所有用戶輸入都是邪惡的:SQL注入
    • 防止SQLi
      • 驗證使用端輸入的字串
        • 類型轉換(int、String)
        • 正則表達式
        • 特殊符號過濾(引號,分號,註釋符號等)
      • 使用參數化儲存過程
      • 使用參數化SQL語法
      • 採用ORM框架

上一篇
資安補帖─Day26─最好的程式語言PHP
下一篇
資安補帖─Day28─Crypto
系列文
資訊安全大補帖53
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言