2017-09-03 70 views
0

我正在做一些webpentesting練習,並且有一個任務說我需要使用SQL注入使用此名稱和此密碼創建一個新帳戶。在網頁上有一個文本輸入用戶名和另一個文本輸入'密碼'。我可以在用戶名文本輸入內輸入任何我想要的字符,但在密碼文本輸入內需要輸入特定的注入。如何使用SQL注入接收SQL語法錯誤?

我知道我需要注入插入查詢,但事情是我不知道表名。爲了插入一個新用戶,我需要知道表名,所以我想知道如何讓Web顯示我顯示的表名錯誤。

錯誤的表現應該是這樣的:在語句命令 意外結束[SELECT * FROM(表名),其中...]

我想只有一個字符輸入(也許> 1個字符爲必填項)在密碼區域內部使錯誤顯示甚至刪除參數文本輸入密碼。但它不會顯示SQL語法錯誤。

所以問題是:我怎樣才能利用利用漏洞使網頁查看SQL語法錯誤顯示錶名稱?

爲什麼不注入用戶名字段,但它在密碼字段?

回答

0

第一件事是瞭解「應用程序」錯誤(例如,「用戶不存在」)和執行錯誤之間的區別,其中應用程序自身失敗,如您提到的「意外終止命令」 。從安全角度來看,第一種情況通常不是問題(除非應用程序編程非常糟糕),第二種情況可能會導致黑客入侵。

編程良好的Web應用程序理想情況下應該只有應用程序錯誤,但更現實的方法是應對意外的執行錯誤,而不會使其易受攻擊。此外,應用程序應以不會導致執行錯誤的方式處理任何用戶輸入。

看起來,他們教你最容易犯SQL SQL注入的情況,應用程序比不對用戶輸入做任何處理(所以很容易把文本放在輸入域中導致執行錯誤),以及不能處理執行錯誤(在這種情況下,向用戶顯示內部執行消息)。

Web應用程序中的一個常見錯誤是使用字符串連接構造SQL查詢,因此使其失敗的最簡單方法是在字段中使用字符串分隔符('),導致字符串值過早結束。在一個草率的Web應用程序,它會導致執行錯誤,顯示完整的錯誤信息,通常包括表名。

從那裏您可以在輸入字段中創建SQL查詢,將用戶插入表中,您可以在線查找示例(請注意,您至少需要有關SQL和PHP(或ASP,Java等)的基本知識。 ,爲了執行SQL注入,因爲您需要知道數據庫訪問如何工作才能使其失敗)。

最後,SQL注入可以在任何未正確處理的輸入字段中工作,但這取決於應用程序的編程方式。我想這兩個字段都可以工作,但使用密碼字段很容易,因爲這可能是SQL查詢中的最後一個字段。