WEB滲透入門——SQL注入(2)

承接上一篇WEB滲透入門——SQL注入,接下來介紹一下時間盲注和UNION注入。


時間盲注

其實一般來說,現實環境中的網站會有一些安全設置,會導致一些簡單的錯誤回顯或者布爾注入無法實現。這時候我們可以通用調用MYSQL內部的函數來實現注入。時間盲注正是利用【AND】邏輯,調用MYSQL內置的【sleep】函數,實現確定SQL注入點的手段。


插一個數據庫知識點。sleep這個函數通常會用在運維調試的時候,比如我想確定一下我的頁面是不是真的向服務器發起了執行SQL語句的請求的時候,可以通過【sleep(n)】來使頁面反饋停留n秒。


為了直觀可見,我直接使用數據庫來實現。

承接上一篇WEB滲透入門——SQL注入,接下來介紹一下時間盲注和UNION注入。


時間盲注

其實一般來說,現實環境中的網站會有一些安全設置,會導致一些簡單的錯誤回顯或者布爾注入無法實現。這時候我們可以通用調用MYSQL內部的函數來實現注入。時間盲注正是利用【AND】邏輯,調用MYSQL內置的【sleep】函數,實現確定SQL注入點的手段。


插一個數據庫知識點。sleep這個函數通常會用在運維調試的時候,比如我想確定一下我的頁面是不是真的向服務器發起了執行SQL語句的請求的時候,可以通過【sleep(n)】來使頁面反饋停留n秒。


為了直觀可見,我直接使用數據庫來實現。

WEB滲透入門——SQL注入(2)

搜索時間為0.00sec

承接上一篇WEB滲透入門——SQL注入,接下來介紹一下時間盲注和UNION注入。


時間盲注

其實一般來說,現實環境中的網站會有一些安全設置,會導致一些簡單的錯誤回顯或者布爾注入無法實現。這時候我們可以通用調用MYSQL內部的函數來實現注入。時間盲注正是利用【AND】邏輯,調用MYSQL內置的【sleep】函數,實現確定SQL注入點的手段。


插一個數據庫知識點。sleep這個函數通常會用在運維調試的時候,比如我想確定一下我的頁面是不是真的向服務器發起了執行SQL語句的請求的時候,可以通過【sleep(n)】來使頁面反饋停留n秒。


為了直觀可見,我直接使用數據庫來實現。

WEB滲透入門——SQL注入(2)

搜索時間為0.00sec

WEB滲透入門——SQL注入(2)

搜索時間為5.00sec

雖然數據庫不會返回任何數據,但是搜索時間的明顯增長,在我們瀏覽的頁面上,體現為加載時間明顯變長了。

UNION注入

要講明白union注入是什麼,就要先知道union是什麼。


這裡再次插入數據庫知識點:UNION聯合查詢語句。數據庫的查詢指令【select】的具體語法可以從我上面的截圖看到,而UNION是用來連接兩個【select】查詢語句的。我先創建兩個表格test1和test2,如圖

承接上一篇WEB滲透入門——SQL注入,接下來介紹一下時間盲注和UNION注入。


時間盲注

其實一般來說,現實環境中的網站會有一些安全設置,會導致一些簡單的錯誤回顯或者布爾注入無法實現。這時候我們可以通用調用MYSQL內部的函數來實現注入。時間盲注正是利用【AND】邏輯,調用MYSQL內置的【sleep】函數,實現確定SQL注入點的手段。


插一個數據庫知識點。sleep這個函數通常會用在運維調試的時候,比如我想確定一下我的頁面是不是真的向服務器發起了執行SQL語句的請求的時候,可以通過【sleep(n)】來使頁面反饋停留n秒。


為了直觀可見,我直接使用數據庫來實現。

WEB滲透入門——SQL注入(2)

搜索時間為0.00sec

WEB滲透入門——SQL注入(2)

搜索時間為5.00sec

雖然數據庫不會返回任何數據,但是搜索時間的明顯增長,在我們瀏覽的頁面上,體現為加載時間明顯變長了。

UNION注入

要講明白union注入是什麼,就要先知道union是什麼。


這裡再次插入數據庫知識點:UNION聯合查詢語句。數據庫的查詢指令【select】的具體語法可以從我上面的截圖看到,而UNION是用來連接兩個【select】查詢語句的。我先創建兩個表格test1和test2,如圖

WEB滲透入門——SQL注入(2)

兩個表格,嗯,我手殘打成了lasttname,不要在意

select firstname from test1 where id=1 union select lasttname from test2 where id=1;

承接上一篇WEB滲透入門——SQL注入,接下來介紹一下時間盲注和UNION注入。


時間盲注

其實一般來說,現實環境中的網站會有一些安全設置,會導致一些簡單的錯誤回顯或者布爾注入無法實現。這時候我們可以通用調用MYSQL內部的函數來實現注入。時間盲注正是利用【AND】邏輯,調用MYSQL內置的【sleep】函數,實現確定SQL注入點的手段。


插一個數據庫知識點。sleep這個函數通常會用在運維調試的時候,比如我想確定一下我的頁面是不是真的向服務器發起了執行SQL語句的請求的時候,可以通過【sleep(n)】來使頁面反饋停留n秒。


為了直觀可見,我直接使用數據庫來實現。

WEB滲透入門——SQL注入(2)

搜索時間為0.00sec

WEB滲透入門——SQL注入(2)

搜索時間為5.00sec

雖然數據庫不會返回任何數據,但是搜索時間的明顯增長,在我們瀏覽的頁面上,體現為加載時間明顯變長了。

UNION注入

要講明白union注入是什麼,就要先知道union是什麼。


這裡再次插入數據庫知識點:UNION聯合查詢語句。數據庫的查詢指令【select】的具體語法可以從我上面的截圖看到,而UNION是用來連接兩個【select】查詢語句的。我先創建兩個表格test1和test2,如圖

WEB滲透入門——SQL注入(2)

兩個表格,嗯,我手殘打成了lasttname,不要在意

select firstname from test1 where id=1 union select lasttname from test2 where id=1;

WEB滲透入門——SQL注入(2)

查詢結果

我們分別從test1中獲取【xiao】和test2中獲取【bai】這兩個數據,通過UNION查詢將兩個查詢語句的結果聯合輸出。

關於UNION的用法,還有一個很重要的特點是,他前後兩個【select】語句查詢的項的數目必須是一致的。我第一個【select】語句只查詢了一項【firstname】,那麼我第二個【select】語句也只能查詢一項,不然數據庫會報錯。

所以可以通過這個特點,我們可以通過不斷改變我們注入語句的查詢項的數目,來確定目標後臺查詢的具體數目。


UNION可以從另外一個表獲取數據的特性就可以幫助我們搞事情了。

我們來看下一張圖。我通過不斷改變【select】查詢項的數目

1' union select null -- '

1' union select null,null -- '

1' union select null,null,null -- '

得到了靶機的後臺查詢是兩個查詢項,故構造瞭如下的語句來獲得數據庫的版本信息。

承接上一篇WEB滲透入門——SQL注入,接下來介紹一下時間盲注和UNION注入。


時間盲注

其實一般來說,現實環境中的網站會有一些安全設置,會導致一些簡單的錯誤回顯或者布爾注入無法實現。這時候我們可以通用調用MYSQL內部的函數來實現注入。時間盲注正是利用【AND】邏輯,調用MYSQL內置的【sleep】函數,實現確定SQL注入點的手段。


插一個數據庫知識點。sleep這個函數通常會用在運維調試的時候,比如我想確定一下我的頁面是不是真的向服務器發起了執行SQL語句的請求的時候,可以通過【sleep(n)】來使頁面反饋停留n秒。


為了直觀可見,我直接使用數據庫來實現。

WEB滲透入門——SQL注入(2)

搜索時間為0.00sec

WEB滲透入門——SQL注入(2)

搜索時間為5.00sec

雖然數據庫不會返回任何數據,但是搜索時間的明顯增長,在我們瀏覽的頁面上,體現為加載時間明顯變長了。

UNION注入

要講明白union注入是什麼,就要先知道union是什麼。


這裡再次插入數據庫知識點:UNION聯合查詢語句。數據庫的查詢指令【select】的具體語法可以從我上面的截圖看到,而UNION是用來連接兩個【select】查詢語句的。我先創建兩個表格test1和test2,如圖

WEB滲透入門——SQL注入(2)

兩個表格,嗯,我手殘打成了lasttname,不要在意

select firstname from test1 where id=1 union select lasttname from test2 where id=1;

WEB滲透入門——SQL注入(2)

查詢結果

我們分別從test1中獲取【xiao】和test2中獲取【bai】這兩個數據,通過UNION查詢將兩個查詢語句的結果聯合輸出。

關於UNION的用法,還有一個很重要的特點是,他前後兩個【select】語句查詢的項的數目必須是一致的。我第一個【select】語句只查詢了一項【firstname】,那麼我第二個【select】語句也只能查詢一項,不然數據庫會報錯。

所以可以通過這個特點,我們可以通過不斷改變我們注入語句的查詢項的數目,來確定目標後臺查詢的具體數目。


UNION可以從另外一個表獲取數據的特性就可以幫助我們搞事情了。

我們來看下一張圖。我通過不斷改變【select】查詢項的數目

1' union select null -- '

1' union select null,null -- '

1' union select null,null,null -- '

得到了靶機的後臺查詢是兩個查詢項,故構造瞭如下的語句來獲得數據庫的版本信息。

WEB滲透入門——SQL注入(2)

@@version也是MYSQL的內置函數

承接上一篇WEB滲透入門——SQL注入,接下來介紹一下時間盲注和UNION注入。


時間盲注

其實一般來說,現實環境中的網站會有一些安全設置,會導致一些簡單的錯誤回顯或者布爾注入無法實現。這時候我們可以通用調用MYSQL內部的函數來實現注入。時間盲注正是利用【AND】邏輯,調用MYSQL內置的【sleep】函數,實現確定SQL注入點的手段。


插一個數據庫知識點。sleep這個函數通常會用在運維調試的時候,比如我想確定一下我的頁面是不是真的向服務器發起了執行SQL語句的請求的時候,可以通過【sleep(n)】來使頁面反饋停留n秒。


為了直觀可見,我直接使用數據庫來實現。

WEB滲透入門——SQL注入(2)

搜索時間為0.00sec

WEB滲透入門——SQL注入(2)

搜索時間為5.00sec

雖然數據庫不會返回任何數據,但是搜索時間的明顯增長,在我們瀏覽的頁面上,體現為加載時間明顯變長了。

UNION注入

要講明白union注入是什麼,就要先知道union是什麼。


這裡再次插入數據庫知識點:UNION聯合查詢語句。數據庫的查詢指令【select】的具體語法可以從我上面的截圖看到,而UNION是用來連接兩個【select】查詢語句的。我先創建兩個表格test1和test2,如圖

WEB滲透入門——SQL注入(2)

兩個表格,嗯,我手殘打成了lasttname,不要在意

select firstname from test1 where id=1 union select lasttname from test2 where id=1;

WEB滲透入門——SQL注入(2)

查詢結果

我們分別從test1中獲取【xiao】和test2中獲取【bai】這兩個數據,通過UNION查詢將兩個查詢語句的結果聯合輸出。

關於UNION的用法,還有一個很重要的特點是,他前後兩個【select】語句查詢的項的數目必須是一致的。我第一個【select】語句只查詢了一項【firstname】,那麼我第二個【select】語句也只能查詢一項,不然數據庫會報錯。

所以可以通過這個特點,我們可以通過不斷改變我們注入語句的查詢項的數目,來確定目標後臺查詢的具體數目。


UNION可以從另外一個表獲取數據的特性就可以幫助我們搞事情了。

我們來看下一張圖。我通過不斷改變【select】查詢項的數目

1' union select null -- '

1' union select null,null -- '

1' union select null,null,null -- '

得到了靶機的後臺查詢是兩個查詢項,故構造瞭如下的語句來獲得數據庫的版本信息。

WEB滲透入門——SQL注入(2)

@@version也是MYSQL的內置函數

WEB滲透入門——SQL注入(2)

得到數據庫的版本

我們這裡利用了【@@version】這個函數,通過UNION注入獲取到數據庫版本【5.1.41-3】系統信息【ubuntu12.6】。還可以獲取整個MYSQL的數據庫名字,用戶信息等。


這裡又要插入一個數據庫知識點。MYSQL數據庫(>=5.0)中有一個自帶數據庫【information_schema】,從名字我們就可以知道這是一個放著我們數據庫信息的數據庫。我們可以從這裡獲取到諸如整個MYSQL中創建了多少數據庫,權限列表等十分敏感的信息。


這裡我再放一個利用UNION注入拿到MYSQL所有數據庫名字的回顯。

承接上一篇WEB滲透入門——SQL注入,接下來介紹一下時間盲注和UNION注入。


時間盲注

其實一般來說,現實環境中的網站會有一些安全設置,會導致一些簡單的錯誤回顯或者布爾注入無法實現。這時候我們可以通用調用MYSQL內部的函數來實現注入。時間盲注正是利用【AND】邏輯,調用MYSQL內置的【sleep】函數,實現確定SQL注入點的手段。


插一個數據庫知識點。sleep這個函數通常會用在運維調試的時候,比如我想確定一下我的頁面是不是真的向服務器發起了執行SQL語句的請求的時候,可以通過【sleep(n)】來使頁面反饋停留n秒。


為了直觀可見,我直接使用數據庫來實現。

WEB滲透入門——SQL注入(2)

搜索時間為0.00sec

WEB滲透入門——SQL注入(2)

搜索時間為5.00sec

雖然數據庫不會返回任何數據,但是搜索時間的明顯增長,在我們瀏覽的頁面上,體現為加載時間明顯變長了。

UNION注入

要講明白union注入是什麼,就要先知道union是什麼。


這裡再次插入數據庫知識點:UNION聯合查詢語句。數據庫的查詢指令【select】的具體語法可以從我上面的截圖看到,而UNION是用來連接兩個【select】查詢語句的。我先創建兩個表格test1和test2,如圖

WEB滲透入門——SQL注入(2)

兩個表格,嗯,我手殘打成了lasttname,不要在意

select firstname from test1 where id=1 union select lasttname from test2 where id=1;

WEB滲透入門——SQL注入(2)

查詢結果

我們分別從test1中獲取【xiao】和test2中獲取【bai】這兩個數據,通過UNION查詢將兩個查詢語句的結果聯合輸出。

關於UNION的用法,還有一個很重要的特點是,他前後兩個【select】語句查詢的項的數目必須是一致的。我第一個【select】語句只查詢了一項【firstname】,那麼我第二個【select】語句也只能查詢一項,不然數據庫會報錯。

所以可以通過這個特點,我們可以通過不斷改變我們注入語句的查詢項的數目,來確定目標後臺查詢的具體數目。


UNION可以從另外一個表獲取數據的特性就可以幫助我們搞事情了。

我們來看下一張圖。我通過不斷改變【select】查詢項的數目

1' union select null -- '

1' union select null,null -- '

1' union select null,null,null -- '

得到了靶機的後臺查詢是兩個查詢項,故構造瞭如下的語句來獲得數據庫的版本信息。

WEB滲透入門——SQL注入(2)

@@version也是MYSQL的內置函數

WEB滲透入門——SQL注入(2)

得到數據庫的版本

我們這裡利用了【@@version】這個函數,通過UNION注入獲取到數據庫版本【5.1.41-3】系統信息【ubuntu12.6】。還可以獲取整個MYSQL的數據庫名字,用戶信息等。


這裡又要插入一個數據庫知識點。MYSQL數據庫(>=5.0)中有一個自帶數據庫【information_schema】,從名字我們就可以知道這是一個放著我們數據庫信息的數據庫。我們可以從這裡獲取到諸如整個MYSQL中創建了多少數據庫,權限列表等十分敏感的信息。


這裡我再放一個利用UNION注入拿到MYSQL所有數據庫名字的回顯。

WEB滲透入門——SQL注入(2)

url

承接上一篇WEB滲透入門——SQL注入,接下來介紹一下時間盲注和UNION注入。


時間盲注

其實一般來說,現實環境中的網站會有一些安全設置,會導致一些簡單的錯誤回顯或者布爾注入無法實現。這時候我們可以通用調用MYSQL內部的函數來實現注入。時間盲注正是利用【AND】邏輯,調用MYSQL內置的【sleep】函數,實現確定SQL注入點的手段。


插一個數據庫知識點。sleep這個函數通常會用在運維調試的時候,比如我想確定一下我的頁面是不是真的向服務器發起了執行SQL語句的請求的時候,可以通過【sleep(n)】來使頁面反饋停留n秒。


為了直觀可見,我直接使用數據庫來實現。

WEB滲透入門——SQL注入(2)

搜索時間為0.00sec

WEB滲透入門——SQL注入(2)

搜索時間為5.00sec

雖然數據庫不會返回任何數據,但是搜索時間的明顯增長,在我們瀏覽的頁面上,體現為加載時間明顯變長了。

UNION注入

要講明白union注入是什麼,就要先知道union是什麼。


這裡再次插入數據庫知識點:UNION聯合查詢語句。數據庫的查詢指令【select】的具體語法可以從我上面的截圖看到,而UNION是用來連接兩個【select】查詢語句的。我先創建兩個表格test1和test2,如圖

WEB滲透入門——SQL注入(2)

兩個表格,嗯,我手殘打成了lasttname,不要在意

select firstname from test1 where id=1 union select lasttname from test2 where id=1;

WEB滲透入門——SQL注入(2)

查詢結果

我們分別從test1中獲取【xiao】和test2中獲取【bai】這兩個數據,通過UNION查詢將兩個查詢語句的結果聯合輸出。

關於UNION的用法,還有一個很重要的特點是,他前後兩個【select】語句查詢的項的數目必須是一致的。我第一個【select】語句只查詢了一項【firstname】,那麼我第二個【select】語句也只能查詢一項,不然數據庫會報錯。

所以可以通過這個特點,我們可以通過不斷改變我們注入語句的查詢項的數目,來確定目標後臺查詢的具體數目。


UNION可以從另外一個表獲取數據的特性就可以幫助我們搞事情了。

我們來看下一張圖。我通過不斷改變【select】查詢項的數目

1' union select null -- '

1' union select null,null -- '

1' union select null,null,null -- '

得到了靶機的後臺查詢是兩個查詢項,故構造瞭如下的語句來獲得數據庫的版本信息。

WEB滲透入門——SQL注入(2)

@@version也是MYSQL的內置函數

WEB滲透入門——SQL注入(2)

得到數據庫的版本

我們這裡利用了【@@version】這個函數,通過UNION注入獲取到數據庫版本【5.1.41-3】系統信息【ubuntu12.6】。還可以獲取整個MYSQL的數據庫名字,用戶信息等。


這裡又要插入一個數據庫知識點。MYSQL數據庫(>=5.0)中有一個自帶數據庫【information_schema】,從名字我們就可以知道這是一個放著我們數據庫信息的數據庫。我們可以從這裡獲取到諸如整個MYSQL中創建了多少數據庫,權限列表等十分敏感的信息。


這裡我再放一個利用UNION注入拿到MYSQL所有數據庫名字的回顯。

WEB滲透入門——SQL注入(2)

url

WEB滲透入門——SQL注入(2)

回顯

從這裡我們可以看出,靶機中只有【information_schema】和【dvwa】兩個數據庫。至於像用戶信息,用戶權限等信息的獲取,大家可以回去自己嘗試,這裡就不累述了


好吧,今天就碼到這裡。明天繼續更新關於SQL注入的整體思路以及防禦思路。

我的新入門的小白,我將持續分享我的學習動態。

相關推薦

推薦中...