搭建dvwa環境學習從MySql注入到GetShell

引言

一轉眼從剛開始看關於安全的基礎書籍到現在已經十個月的時間了,對滲透測試的興趣也不斷的增加,由於剛開始工作的需求,只來得及看一些常見漏洞的基本原理就開始跟隨老師傅開始滲透測試的工作。現在還記得第一次自己發現 xss激動的心情,師傅領進門,學習到了很多知識,後來因為工作原因到了安服務項目上去,三月粗糙的滲透測試能力不足以支撐在項目上有很好的實踐,而且由於項目經過其他滲透測試人員千百遍的洗禮比較嚴重的漏洞也不在外面做項目那麼常見。

有一天之前帶我的師傅說給你網站,幫忙做下滲透,於是我經過一番測試,發現了暴力破解,還有一些驗證繞過的邏輯漏洞,匆匆寫了報告交差,師傅一頓誇之後說他自己通過注入getshell了一個同C段的網站,我說我C段掃描時候並沒有發現這個IP啊(挫敗感之下的藉口),然後我說我如果能發現這個系統應該也能getshell,師傅的一句話有點觸及到我的那啥(你估計應該不會通過mysql注入getshell)。

是啊,在項目上的系統每週每個月經過幾十遍的過濾,平時看到提交參數的地方也就sqlmap跑一跑,對於最基礎的手工注入都沒有紮實的學會,於是我決定要知道如何搭建環境並學會如何通過 mysql 到 getshell。

通過查資料,總結出了這篇文章,把自己心路歷程寫出來分享給初學者也希望能得到大牛的指正,希望入門級玩家能共勉,自己多創建學習的環境,多思考。

搭建環境

在剛開始學習的時候,就是通過搭建DVWA學習各種漏洞,sql注入,xss,文件上傳等等,所以在想到如何搭建一個存在注入的環境時候,腦海中立刻有了這個想法,我們看到的教程往往只會介紹如何通過高中低的安全級別進行漏洞的復現,那為什麼不可以通過注入進行getshell呢,所以我立刻搭建了環境準備嘗試一下。

STEP 1 準備好需要的文件,在網上都可以免費下載的到

1)Xampp集成環境

2)Dvwa壓縮包

搭建dvwa環境學習從MySql注入到GetShell

STEP 2 點擊安裝並啟動xampp,其中可能在開啟apache時會出現錯誤,此時需要通過修改config文件把端口改成未佔用的端口即可,我這裡就改為4433 與8081。

搭建dvwa環境學習從MySql注入到GetShell

把dvwa解壓並放到xampp目錄下的htdoc目錄下

搭建dvwa環境學習從MySql注入到GetShell

STEP 3 此時環境已經搭建完畢,訪問登陸,就可以看到各種各樣的漏洞環境。

搭建dvwa環境學習從MySql注入到GetShell

參考:站內及網上有關於搭建環境的詳細介紹,如按照上述步驟不能搭建成功,可自行搜索解決問題。

鏈接:http://www.freebuf.com/sectool/102661.html

漏洞利用—— 手工篇

手工注入到getshell思路:

1)判斷是否有注入,注入是字符型還是數字型;

2)然後利用sql語句來進行操作磁盤文件(mysql數據庫讀取磁盤文件是非常簡單的,因為mysql提供了load_file()等函數,如果把數據庫與網站裝在同服務器上,就很容易被寫入webshell)。

漏洞利用

STEP 1輸入1,查詢成功

搭建dvwa環境學習從MySql注入到GetShell

輸入1′and ’1 ‘=’2,查詢失敗,返回為空

搭建dvwa環境學習從MySql注入到GetShell

輸入1′or ’1234 ‘=’1234,查詢成功,說明存在注入

搭建dvwa環境學習從MySql注入到GetShell

我們通過查看源代碼功能,看一下在low級別中是如何進行數據庫查詢的

搭建dvwa環境學習從MySql注入到GetShell

我們把我們剛才注入成功的語句拼接到sql查詢語句中進行分析

搭建dvwa環境學習從MySql注入到GetShell

原理其實很簡單,就是通過一個條件語句判斷,如果where後面的條件語句為真,就可以進行查詢,如果條件判斷為假,就為錯,不返回任何結果。在高中我們學習條件語句的時候就知道在進行or運算的時的規則:

搭建dvwa環境學習從MySql注入到GetShell

STEP 2 SQL語句只union查詢

大多數的SQL查詢只包含從一個或多個表中返回數據的單條SELECT語句(比如說我們在id處輸入1,就會返回一個結果),但是SQL也允許執行多個查詢(多條SELECT語句),並將結果作為一個查詢結果集返回。這些組合查詢通常稱為並或複合查詢,一般常見的數據庫有都支持UNION查詢,使用UNION很簡單,所要做的只是給出每條SELECT語句,然後再每條SELECT語句之間加上UNION關鍵字,這樣所給出的SELECT結果集就能組合成一個結果集並返回。

舉例說明

1)我們在id處輸入1 ,返回一個結果

搭建dvwa環境學習從MySql注入到GetShell

2)在id處輸入1′ union select 1,2′,可以看出,我們在數據庫中執行了兩次select查詢

搭建dvwa環境學習從MySql注入到GetShell

並同時返回了兩個結果

搭建dvwa環境學習從MySql注入到GetShell

STEP 3 利用union查詢執行mysql所帶有的函數,對磁盤文件進行操作

1)我們輸入1′ union select 1,’’ into outfile ‘C:/xampp/htdocs/dvwa/1.php’ # 使用into outfile 寫入一句話木馬,文件名為1.php,發現報錯了,查找原因。

搭建dvwa環境學習從MySql注入到GetShell

2)通過報錯信息可以看到應該說是單引號閉合的問題,因為前段時間在學python,所以決定把一句話木馬裡的單引號改成雙引號試一試

1′ union select 1,’’ into outfile ‘C:/xampp/htdocs/dvwa/1.php’ # (剛才開始不知道sql語句中單引號裡要用雙引號,簡直折磨啊,各種用單引號進行閉合,各種報錯,各種頭鐵嘗試,我甚至以為是不是我沒有權限進行寫入文件,錯誤的懷疑人生。)

搭建dvwa環境學習從MySql注入到GetShell

3)沒有報錯信息了,成功了?查看目錄,果然有了1.php文件,趕緊上菜刀(舒服啊,雖然沒有真實環境那麼開心,但是畢竟也算是利用成功了)

搭建dvwa環境學習從MySql注入到GetShell

手工測試到這裡就結束了,像我這種工具狗,肯定想辦法用工具來解決。

漏洞利用—— 工具篇

最常見的利用發現sql注入的方式就是sqlmap了,做滲透測試的人手一本,知道存在sql注入,上來就拿過來跑一跑

STEP1 :發現注入,並且實現

URL:http://127.0.0.1:8081/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#,哇X,結果竟然失敗了,通過下圖的sqlmap中報的302信息中可以看到在進行測試時是跳轉到了登陸界面,原來用sqlmap測試是需要登陸的。

搭建dvwa環境學習從MySql注入到GetShell

搭建dvwa環境學習從MySql注入到GetShell

一番操作,知道要添加cookie進行測試,成功啦。

搭建dvwa環境學習從MySql注入到GetShell

搭建dvwa環境學習從MySql注入到GetShell

STEP 2:利用sqlmap中os-shell 參數繼續進行攻擊(–os-shell 也就是從注入點獲得一個交互式的shell,給我們提供了一個環境可以執行一定的系統命令,講白了也就是類似於在windows下的cmd)。

搭建dvwa環境學習從MySql注入到GetShell

搭建dvwa環境學習從MySql注入到GetShell

STEP 3: 根據具體系統的環境來選擇語言,Dvwa用的是php,自然就選擇php,然後選擇2自定義上傳位置。此處想要獲得shell,就必須知道網站的絕對路徑。(C:\\xampp\htdocs\dvwa中的路徑分隔符\在windows下需要在加上\進行轉譯)。

搭建dvwa環境學習從MySql注入到GetShell

STEP 4 :可以看到獲得了os-shell,並且在網站目錄下上傳了兩個php格式的文件,我們對這兩個文件進行訪問,可看到給我們提供了上傳點,通過上傳點進行木馬文件的上傳。

搭建dvwa環境學習從MySql注入到GetShell

STEP 5: 利用此上傳點上傳2.php,內容為php一句話木馬(熟悉php的可以自己寫,不熟悉的可以百度),然後通過菜刀進行連接,獲得shell。

搭建dvwa環境學習從MySql注入到GetShell

搭建dvwa環境學習從MySql注入到GetShell

總結

自己的學習探索過程遠遠不止這些,因為在搭建環境包括在利用漏洞的時候都會出現各種各樣的問題,都需要通過不斷的探索去解決,比如說在手工進行注入的時候甚至因為單引號是中文的還是英文的吃過虧,還有如何進行單引號閉合,進行sqlmap進行攻擊的時候需要添加cookie,在獲得os-shell時候需要加反斜槓進行轉譯等等…,一次一次的錯誤,一次一次的解決,不放棄靜下心來解決問題,學習的過程就是如此,包括平時的滲透也是如此,需要耐下心來慢慢的摸索,在摸索的過程中不斷提升自己的技術,不斷的成長,畢竟大牛也不是一天練成的。

缺點

1)環境為搭建的環境,權限較高,也沒有防火牆、waf等安全設備的防護,不會出現被攔截等情況,真實的環境往往需要躲過一重又一重的防護。

2)文章中未涉及linux下的攻擊利用方式,因為os-shell一直是一個吐槽的點,這需要注入點有多大的權限啊,有這個權限,我還需要這個操作麼之類的?其中在linux就因為權限的問題沒有解決,所以沒有利用成功,同時看了大牛的文章什麼監聽反彈shell之類的也是有點懵的。

所以希望新手看到這篇文章後,可以自己去裝虛擬機去嘗試。並不是說能學到多少內容,更重要的還是總結出自己平時學習的思路,自己給自己創造環境,多用虛擬機,見識多了自然懂的就多了,也希望大牛看到了能多提意見,給新手成長的空間與機會。


分享到:


相關文章: