iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 18
1
Security

資安補漏洞,越補越大洞系列 第 18

[Day 18] 來玩WebGoat!之6:SQL Injection (advanced) - Blind SQL Injection

接著來介紹一種叫做Blind SQL Injection的技術,它也是SQL Injection的一種,但跟我們之前介紹的SQL Injection有點差異。之前介紹的SQL Injection是透過利用系統因為讀取到錯誤SQL而吐出來的系統錯誤來決定我們要寫什麼SQL語法,才能讓系統吐想看的資料,而Blind SQL Injection則不大一樣,在這種狀況下,系統不會有明確的錯誤訊息,只能靠觀察伺服器有沒有回應,類似true或false的方式來判斷SQL式是不是有用。

舉例來說,有個網站的網址是「hxxps://my-shop.com?article=4」,我們先推測這個網址的含意是要顯示資料庫中第4篇文章,所以在資料庫進行查詢的SQL式可能如下:

SELECT * from articles where article_id = 4

那要如何驗證呢?我們可以透過把參數改為「4 AND 1 = 1」,來看看頁面的反應,而這時資料庫中的SQL式可能就變成如下:

SELECT * from articles where article_id = 4 AND 1 = 1

這時如果我們發現顯示的頁面跟原本的長的一樣,就可以進行下一個驗證步驟;反之,若頁面出現404 Page not found或其他的錯誤,就代表這個網頁沒辦法應用Blind SQL Injection的技術。

接下來我們把參數改為「4 AND 1 = 2」,來看看頁面的反應,而這時資料庫中的SQL式可能就變成如下:

SELECT * from articles where article_id = 4 AND 1 = 2

這時我們如果發現頁面資料無法正常顯示,就可以更加肯定這一頁是可以應用Blind SQL Injection的技術,因為上述的SQL語法的邏輯是錯誤的,所以就會導致頁面無法正常顯示。

這裡有一個小技巧,有時候輸入執行的SQL式需要依些時間執行,這時可以使用「article = 4; sleep(10) --」的句法,先擱置一些時間後才完成網頁連線。

接著WebGoat在第5步提供一個挑戰,但目前還沒有成功解出來,等解出來後再分享解法給大家囉~


上一篇
[Day 17] 來玩WebGoat!之5:SQL Injection (advanced)
下一篇
[Day 19] 來玩WebGoat!之7:XXE Injection
系列文
資安補漏洞,越補越大洞30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
pjchender
iT邦新手 3 級 ‧ 2019-04-14 23:38:58

解這個真的很不容易啊,頭腦實在不夠好XDD

我要留言

立即登入留言