目標蒐集:
手工簡單識別:
and 1=1
and 1=2
and '1'='1
and '1'='2
and 1 like 1
and 1 like 2
工具識別:
sqlmap -m filename (filename中儲存檢測目標)
sqlmap --crawl (sqlmap對目標**進行爬取,然後依次進行測試)
高階識別:
tips:
**審計
資訊蒐集
資料獲取
提權常見資料庫
關係型資料庫:oracle、db2、mysql
非關係型資料庫:nosql、cloudant
基於特定函式的判斷
len()和length()
在mssql和mysql以及db2中,返回長度值是呼叫len()函式,
在oracle和informix則是通過length()來返回長度值
當使用and len(『a』)=1的時候,返回正常頁面時,可以推斷當前的資料庫型別可能是mssql,或mysql,或是db2。反之則可能會是oracle和informix。
@@version和version
在mysql內,可以用@@version或是version()來返回當前的版本資訊。但無法判斷是mysql還是mssql時,可以用version()函式來構造判斷。version()>1 返回與@@version>1 相同頁面時,則可能是mysql。如果出現提示version()錯誤時,則可能是mssql。
substring和substr
在mssql中可以呼叫substring。oracle則只可呼叫substr
基於輔助的符號判斷
「/*」是mysql中的注釋符,返回錯誤說明該注入點不是mysql,繼續提交如下查詢字元:
「–」是oracle和mssql支援的注釋符,如果返回正常,則說明為這兩種資料庫型別之一。繼續提交如下查詢字元:
「;」是子句查詢識別符號,oracle不支援多行查詢,因此如果返回錯誤,則說明很可能是oracle資料庫。
在注入點後加(必須為注入點);–(乙個分號,兩個橫線),例如:http://***x/article/as.asp?id=1;--
如果返回正常的話,說明資料庫是mssql。在mssql資料庫中;和–都是存在的,;用來分離兩個語句,而–就是注釋符,它後面語句都不執行。如果返回錯誤,基本可以肯定是access資料庫了。
and exists (select count(*) from sysobjects)
and exists (select count(*) from msysobjects)
如果第一條返回正常,就是mssql資料庫,如果兩條都不正常,那就是access資料庫了。第一句意思是查詢sysobjects表裡記錄數大於,返回正常的,說明大於0且存在sysobjects這個表,因為這個表只有mssql資料庫才有,所以可以判斷為mssql資料庫。返回錯誤則表示不是。第二句提交是不會返回正常頁面的,就算是access資料庫也不會返回正常。因為預設情況下我們沒有許可權查詢這個表裡的資料。web會提示我們「記錄無法讀取;
'msysobjects』沒有讀取許可權」,如果返回的是這個錯誤資訊的話,那就證明是access資料庫了
以上引數都是int的時候,如果是字元型的話首先在引數後面加上單引號,然後再在查詢語句後加上;–
基於顯示錯誤資訊判斷
在注入點後直接加上單引號,根據伺服器的報錯資訊來判斷資料庫。錯誤提示microsoft jet database engine 錯誤 『80040e14』,說明是通過jet引擎連線資料庫,則表明資料庫為access資料庫,如果是odbc的話則說明是mssql資料庫。
網易web安全高階
SQL注入流程
輸入單引號 進行檢驗是否存在輸入 id 1 原理 頁面發生了報錯,說明輸入的單引號 影響了資料庫查詢,說明此處存在可控的引數,存在注入點 輸入 and 1 2 檢驗是字元型還是數字型 id 1 and 1 2 報錯,證明是數字型。原理 字元型在查詢有閉合符號,如果直接將and 1 2帶入查詢,以及後...
hdmi插入流程
50ms定時器,一直在迴圈輪訓。當5v檢測插入後,判斷在當前訊號源後 rx.open fg會被設定為1 繼續往下走,檢測不到不往下走 void hdmirx timer handler unsigned long arg rx.open fg 1 的情況下走hdmirx hw monitor rx....
PEAP接入流程
證書主要用來進行終端和網路的相互認證。radius 伺服器首先向 ca證書頒發機構申請伺服器證書,用來代表 radius 伺服器的合法性。客戶端向 caca 根證書,用來驗證 radius 客戶端通過開放系統接入的方法 open system 和ap 之間建立好物理連線。1 client向ap 裝置...