
今天,我將教大家如何使用基于整型的手動SQL注入技術來對MySQL數據庫進行滲透測試。提醒一下,這是一篇寫給newbee的文章。話不多說,我們直奔主題!
SQL注入線上實驗室
1. 初學者可以使用這個網站來練習自己的SQL注入技術。
2. 訪問線上實驗室,請點擊【傳送門】。
第一步:對查詢語句動手
首先,訪問網站地址:
testphp.vulnweb.com/artists.php?artist=1
接下來,我們在URL地址結尾添加一個單引號并查看網站是否存在SQL注入漏洞:
testphp.vulnweb.com/artists.php?artist=1′

此時,我們通過修改查詢語句成功接收到了數據庫返回的錯誤消息。但是,我們卻沒有收到關于輸入數據(我們所添加的那個單引號)的錯誤提示,這也就說明我們的輸入已經成功了。現在我們就可以知道,我們所輸入的這個字符串(單引號)是不會讓數據庫返回相關錯誤信息的,接下來我們嘗試修復一下這個問題,去掉單引號:

上圖說明,我們在查詢語句中采用了基于整型的方法之后就不會在觸發錯誤了,這也就是我們所說的基于整型的SQL注入方法。
第二步:查詢數據庫條目
確認了漏洞存在之后,我們就可以嘗試弄清楚這個數據庫表中到底有多少列了,這里我們可以使用order by命令實現。我們可以不斷嘗試輸入任意值的數字來測試數據庫中有多少列。

上圖中,我輸入了數字4,我想要查詢4列,但是得到了一條錯誤提示。所以我得嘗試其他數字,試試3呢?

大家可以看到,這里沒有返回SQL錯誤。是的,就是3列!
第三步:查詢后臺數據庫表和表名
接下來,我們需要獲取表路徑,這里使用union all select:

上圖表明,union all select語句返回了表.2和3的表路徑:

上圖顯示了database() & version()命令的執行結果,并拿到了數據庫名和版本信息。
大家可以看到,數據庫名為acuart,版本信息為5.1.73-0ubuntu0.10.04.1。
第四步:導出數據庫表
Group_concat()函數可以從一個group中獲取與非空值級聯的字符串,這里我們可以使用這個函數來枚舉出數據庫中所有的表。除此之外,我們還可以使用Information_Schema來查看關于數據庫中對象的元數據:


上圖顯示的是目標數據庫中導出的所有表信息,即:carts,categ,featured,guestbook,pictures,products,users。
第五步:導出數據庫表中所有列的數據
接下來,我們導出目標數據庫中user表的所有數據:


從上圖的結果中可以看到,這個數據庫表中包含的列條目有:uname,pass,cc,address,email,name,phone,cart。
第六步:導出所有的用戶名和密碼
接下來,我們就可以導出目標數據庫中所有的用戶名及密碼了:


這樣一來,我們就成功拿到了用戶名為test且密碼為test的用戶信息了。
后話
希望大家可以不斷練習,并嘗試導出數據庫表中包含以下列名的數據:address, email, name, phone, cart。
最后,祝大家Happy Hacking!
|