iT邦幫忙

2021 iThome 鐵人賽

DAY 9
0

Q1. SQL 注入 是什麼?

  • SQL 注入攻擊也稱為 SQL injection,網頁有許多功能都需要資料庫,例如會員登入、購物車等,都需要工程師在網頁前端收到使用者的資料,儲存於資料庫,以便未來使用者登入輸入帳密時,可以檢查是否帳密正確。

  • 而工程師在編寫程式時,對於檢查「使用者的輸入」不夠嚴格,可能輸入的內容被程式以為是 SQL 語法,進而繞過檢查機制或洩漏機敏資料

  • 資料庫類型有許多種,有 MySQL、Access、Microsoft SQL Server等,不同的資料庫類型,會有不同的注入語法。

  • 參考資料:https://www.slideshare.net/hugolu/sql-injection-61608454

Q2. 數字型 SQL 注入是什麼

  • 是指使用者輸入數字,資料庫會根據使用者輸入的數字,查詢相關第N筆資料

    • 例如有個會員ID查詢表,你輸入 ID 會回傳該會員的基本資訊,而你的目標是將所有資料 dump 出來
      https://ithelp.ithome.com.tw/upload/images/20210923/20140592PAo58mKkIu.png
  • 通常數字型的 SQL 注入點會搭配其他手法來進行 SQL 注入,例如 UNION

Q3. 為什麼會有 數字型 SQL 注入漏洞?

假設今天欲從資料庫中,依據 id 進行查詢 news,則查詢 id 為 1 的 news 所使用的 SQL 語法如下:

SELECT `title`, `content`
FROM `news`
WHERE `id` = 1;

以 PHP 為例,若網頁後端要從 MySQL 查詢 news,則需將指定的 id 嵌入 SQL 語法,再送給 MySQL 伺服器執行。最簡單的寫法如下:

$res = mysqli_query($conn, "SELECT title, content FROM news WHERE id=".$_GET['id']"); 

https://localhost/news?id=1 為例,上述程式碼中的 $_GET['id'] 會取得 URL 中的參數 id ,因而合併後的字串為 "SELECT title, content FROM news WHERE id=1" 。然而,由於程式沒有檢查 $_GET['id'] 是否為數字,若攻擊者輸入網址 https://localhost/news?id=1 OR 2 > 1 ,則會構建出如下的 SQL :

SELECT `title`, `content`
FROM `news`
WHERE `id` = 1
	OR 2 > 1;

由於 2 > 1 恆真,資料庫就會將所有 news 都回傳。

由此可見,若網頁程式沒有檢查從 Client 端傳來的資料,便將其嵌入 SQL 語法,攻擊者便可能插入額外語法,藉此改變程式行為。結合明天將介紹的 UNION ,甚至可能將整個資料庫的資料盡數洩漏出來。

Q4. SQL 注入的檢查工具

  • SQLMap
  • jSQL Injection
  • BBQSQL

參考資料:https://zhuanlan.zhihu.com/p/139737334

Q5. SQL 注入常發生的地方

  • 會將使用者輸入資料傳送給 database 的地方
  • 會員登入
  • 留言區
  • GET 網址
  • 部落格
  • 公告

Q6. 檢查是否有數字型 SQL 注入

  • [https://localhost/news?id=1](https://localhost/news?id=1) 可以在 id=1 的地方改成 id=3-2,看是否會進行計算
    • 若得到 id=1的結果,代表會根據輸入的資料進行運算,代表可能是一個數字型注入
    • 如果頁面改變為 id=3 的樣子,表示網頁程式可能有對輸入轉型為數字,因此後面非數字的字串沒有生效。
    • 如果頁面出現錯誤,或者無法正常顯示內容,表示網頁可能有檢查輸入,或者為非數字型 SQL 注入。

參考資料:https://blog.csdn.net/weixin_43749051/article/details/114295081


上一篇
【第八天 - 網頁基本資訊蒐集】
下一篇
【第十天 - UNION型 SQL注入】
系列文
【CTF衝衝衝 - Web篇】30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言