小風的資安科普-SQL injection - 資安

Selena avatar
By Selena
at 2019-05-11T21:07

Table of Contents

※ [本文轉錄自 CyberSecure 看板 #1SrZoqyB ]

作者: st1009 (前端攻城師) 看板: CyberSecure
標題: [教學] 小風的資安科普-SQL injection
時間: Sat May 11 11:08:32 2019


一.前言

SQL injection 是一種在網路上經典常見的攻擊手法,不論是在CTF中,還是真實的
網路攻防戰中都可以見到其身影。

故本文將介紹這種古老又實用的攻擊手法給想要學習資訊安全的板友了解其原理以及
運作方式。

期待可以為一些沒有資安經驗的板友們開啟一扇通往資訊安全領域的大門。

二.概述

1.甚麼是 SQL injection ?

SQL injection 是一種將惡意的程式碼注入資料庫搜尋語法的資安技術。

2.SQL injection 的危害是甚麼?

藉由 SQL injection 黑客可以修改資料庫中的內容,非法越權或者之後進行更
進一步的攻擊手法。

3.如何進行 SQL injection?

找到存在漏洞的SQL注入點注入,例如:網址列的get使用處,帳號密碼輸入處,
以及其他各種會將資料送到資料庫的位置。

三.原理

在資料庫中,我們會使用搜尋語法進行搜尋。

例如:"SELECT * FROM user_data WHERE account ='$account' AND pwd = '$pwd' "

上例中存在兩個來自使用者的變數,分別是帳號($account)以及密碼($pwd),

在程式正常運行的時候,我們會尋找對應帳號密碼皆相符的資料,將其輸出。

但假設有惡意使用者輸入了一些非法字元就會破壞這段搜尋語法。

例如:

$account = "' OR 1=1 -- ";
$pwd = "QAQ";

此時我們的搜尋語法會變成

"SELECT * FROM user_data WHERE account ='' OR 1=1 -- ' AND pwd = 'QAQ' "

因為account遭到兩個單引號閉合,並且 -- 在SQL中是註解的意思,因此在進入資料
庫後,該程式碼會轉成以下:

"SELECT * FROM user_data WHERE account ='' OR 1=1 "

也就是說關於密碼確認的欄位消失了!此時惡意使用者將可以非法登入!

四.範例

https://imgur.com/dQ3CYRm.jpg

如上圖我們在登入欄位輸入了帳號admin,並且於其後插入惡意代碼。

https://imgur.com/FzZJ3Vn.jpg

此時我們可以看到我們成功的登入了admin的帳號!

五.案例

建中蘇柏榕曾經使用SQL injection 駭入我國大考中心。

(資訊來源:http://www.epochtimes.com/b5/5/7/26/n997634.htm)

六.防禦方式

要防禦SQL injection 首先要注意一個基本原則,所有來自使用者的資訊皆不可信!

我們可以藉由以下幾種方式防禦SQL injection :

1.過濾使用者輸入,將非法字元過濾掉。

但此方法因為黑客們有著各種創意,所以存在著風險。

2.建立白名單,只有符合的資料可以使用。

此法最安全,但是可以適用的範圍最小,不利於大量使用。

3.預處理(prepare)

PHP中的PDO套件可以針對參數進行綁定,以此避免SQL injection,此方法是目
前最主流的方法。
(PDO官方說明:https://www.php.net/manual/en/book.pdo.php)


七.後話

SQL injection隨著時間的演進,不斷的進化著,除了最基礎的這些外,還有其他應
用,譬如基於時間的盲注(time based blind)

此外也可能被當成更進一步攻擊,譬如遠程代碼執行(RCE)的跳板。

因此值得各位學習資安的人一再研究學習。

發表此文,希望可以與各位舊雨新知們一同學習,一同進步,為台灣的資訊安全貢獻
一份心力。

共勉之。

By st1009

--

壁河山攻守

爭成敗悟道

許銀川

--
Tags: 資安

All Comments

Catherine avatar
By Catherine
at 2019-05-13T06:55
Daph Bay avatar
By Daph Bay
at 2019-05-14T16:44
推推厲害
Quintina avatar
By Quintina
at 2019-05-16T02:33
Heather avatar
By Heather
at 2019-05-17T12:21
轉過來看看這裡水溫如何...
Heather avatar
By Heather
at 2019-05-18T22:10
歡迎創新坑 我也蠻好奇板上比較想要哪種類型的文章
Dorothy avatar
By Dorothy
at 2019-05-20T07:58
Thomas avatar
By Thomas
at 2019-05-21T17:47
二個版功能有重複到了? 這文章不錯啊
Enid avatar
By Enid
at 2019-05-23T03:35
嘖嘖~! 又要多跟一個版了 0_0a
Zora avatar
By Zora
at 2019-05-24T13:24
哇有新版欸讚啦
Ophelia avatar
By Ophelia
at 2019-05-25T23:12
推薦文章。
Hamiltion avatar
By Hamiltion
at 2019-05-27T09:01
有看有推

請問找資安方面的工作需要會那些技能和程式語言

Kyle avatar
By Kyle
at 2019-05-08T23:04
※ 引述《dp2046 (Kevin)》之銘言: : 大家好 : 就我了解資訊安全的工作有分很多面向 : 例如:資安管理、滲透測試、弱點掃描、原始碼檢測、逆向工程 : 個人是比較傾向找前三者 : 其他像是逆向工程感覺職缺非常少 : 而且好像需要會組合語言 : 以前曾接觸組合語言這對我來說真的太難了 : 再來介 ...

請問找資安方面的工作需要會那些技能和程式語言

Valerie avatar
By Valerie
at 2019-05-08T21:53
大家好 就我了解資訊安全的工作有分很多面向 例如:資安管理、滲透測試、弱點掃描、原始碼檢測、逆向工程 個人是比較傾向找前三者 其他像是逆向工程感覺職缺非常少 而且好像需要會組合語言 以前曾接觸組合語言這對我來說真的太難了 再來介紹一下自己 大學時有修過網路概論的課 程式語言方面有修過C和資料結構的課 只是C ...

資訊安全應用實務人才養成班(510小時)

Harry avatar
By Harry
at 2019-05-07T21:20
這是經濟部工業局主辦,委由聯城電腦執行的資訊安全人才培訓課程 市面上很少像職訓局網工班三個月起跳的資安課程 如待業中(沒短期經濟壓力?)具資訊基礎想跨足資安領域的可以評估看看 當然高手會說資安自己學就好,但就是有人有學習障礙阿XD 最近資通安全法上路,很多金融單位被要求要補充有即戰力的資安人員 這課 ...

我的筆電怎麼了? 這是被駭嗎?

Genevieve avatar
By Genevieve
at 2019-05-06T15:28
大家好,我是一個英文老師 跟資安技術沒有關係 平常也只是用筆電做做一般行政工作跟學習新知 但是我昨天卻遇到一個很誇張的事情 https://youtu.be/dx9VKXk2kOk 這是什麼狀況....... 其他機能一切都沒問題 我平時也很少會用一些奇怪的東西 只是剛好昨天合作的線上英文教學 ...

Java Web Application程式設計師

William avatar
By William
at 2019-05-02T11:01
公司名稱:日辰資訊股份有限公司 工作內容 1.應用系統分析、設計、測試、開發與維護 2.能與客戶良好溝通,進行需求訪談、了解客戶需求 3.負責需求分析、撰寫需求確認書、系統規劃、規格文件撰寫與測試 4.Experience in Java, JSP, HTML5, CSS3, JQuery, JavaScr ...