注入攻擊分類
- SQL注入
- 命令注入
- XML注入
- LDAP注入
SQL注入
概念:
SQL的攻擊方式是在客戶端的輸入數據中插入SQL命令,然後發送到 服務端,服務端對數據進行解析並執行非預期的操作。
可以SQL注入的條件:
- SQL語句中包含不可信任的數據,如用戶輸入等。
- 動態構建SQL語句。(比如說在名字中添加一些單引號,分號,來人爲的改變select語句的形式,以達到自己想要輸出的結果)
例如:
ShipCity = TianJin
select * from OrdersTable where ShipCity = ‘TianJin’
ShipCity = TianJin’; drop table OrdersTable- -
select * from OrdersTable where ShipCity = ‘TianJin’; drop table OrderTable --’
(這裏提示說,這個;後就表示是另一個SQL語句了,上面第二個強行在名字後加單引號,使得名字這個串就封閉了,所以後面跟的drop語句依舊可以執行,這樣就達到了sql注入攻擊的目的)
注:連續兩個減號字符“–”後的文字 爲註解;“/”和“/”包圍起來的文字爲註釋,採用“;”字符區分不同命令 注意字符都是單引號括起來的。
SQL注入的特點:
- 普遍性
- 隱蔽性
- 簡單性
- 危害性
SQL注入攻擊過程:*重點
- 探測SQL注入點
- 通常來說sql注入攻擊存在於一個動態網頁中,需要你輸入一些參數的操作中
- 如果參數是數字,測試id=2-1與id=1返回的結果- 是否相同,如果做了 2-1=1的運算,說明可能存在數字型注入。
- 在參數後面加單引號或雙引號,判斷返回結果是否有報錯
- 添加註釋符,判斷前後是否有報錯,如id=1’ --+ 或 id=1" --+ 或 id=1’ # 或id=1" --+ 這裏的+號是用來當做空格來用,防止註釋減一這樣的情況
- 在括號裏面的參數:SELECT first_name, last_name FROM users WHERE user_id = (’$id’);可以在參數後面加單雙引號和括號,如 id=1’) --+ 或 id=1") --+ 或id=1’) # 或id=1") --+
- 參數後面跟or 或者and,判斷返回結果是否有變化,如1’ or ‘a’='a
或者and ‘a’=‘a或者1’ or ‘1’='2 - 如果返回的正確頁面與錯誤頁面都一樣,可以使用時間延遲判斷是否存 在注入,如 1’ and sleep(5)
- 判斷數據庫類型 (你比如說如果是mysql數據庫的話,會有一個默認的數據庫名和表名來訪問,也可以獲得很多信息)
MySql中的information_schema 結構用來存儲數據庫系統信息
information_schema 結構中這幾個表存儲的信息,在注入中可以用到的幾個表。
SCHEMATA 存儲數據庫名的,
關鍵字段:SCHEMA_NAME,表示數據庫名稱
TABLES 存儲表名的
關鍵字段:TABLE_SCHEMA表示表所屬的數據庫名稱;
TABLE_NAME表示表的名稱
COLUMNS 存儲字段名的
關鍵字段:TABLE_SCHEMA表示表所屬的數據庫名稱;
TABLE_NAME表示所屬的表的名稱
COLUMN_NAME表示字段名
- 提升權限,進一步攻擊
SQL注入分類: