【網絡空間安全】SQL Injection_SQL 注入...

聯合查詢 unionweb

由於查詢語句構造問題,可直接否定掉以前的查詢,執行一個全新的語句來執行,須要注意的是查詢的列應當與以前對應。數據庫

在MySQL中,把information_schema 看做是一個信息數據庫,其中保存着關於MySQL服務器所維護的全部其餘數據庫的信息,如數據庫表名,數據庫的表,表欄的數據類型與訪問權限瀏覽器

此數據庫是MySQL自帶的,information_schema.SCHEMATA表中的SCHEMA_NAME有着全部的數據庫。bash

萬能密碼繞過登錄服務器

經過在用戶名處傳入參數 ' or 1 = 1 # 進行萬能密碼登錄session

在SQL查詢語句中,where 條件中爲檢驗username,每每要where username = '..'svg

此時若是在 ..後加上構造的參數,那麼就會出現驗證提早中斷,而且換做一個或的條件函數

咱們知道1 = 1 這個條件恆成立,username就跳過驗證了,接下來,AND password = '...'網站

就天然而然的被 # 註釋掉。編碼

select * from users where username = '..'or 1 = 1 #' AND password = '...'

【上述 # 也能夠換做 – 都是SQL註釋】

數字型注入

輸入參數爲整數,若是存在注入型漏洞,則爲數字型注入

字符型注入

與數字型注入的區別在於:字符型注入通常要用單引號或雙引號來閉合

檢測方法
..?id=8 and 1=1  【數字型】 --change--> ..? id=8' 【字符型】 ..? user=admin' and '1'='1' 【字符型】

SQL盲注

不能經過直接顯示的途徑來獲取數據庫數據的方法。

在盲注中,攻擊者根據其返回頁面的不一樣來判斷信息(多是頁面內容不一樣也多是響應時間不一樣)

  1. 布爾盲注
  2. 時間盲注
  3. 報錯型盲注

因爲某些限制,布爾盲注的關鍵字帶入不進去,這時候能夠用slee來進行時間盲注,去頁面執行時間,來判斷sleep函數是否正常執行.

基於時間盲注在使用延遲函數上有兩個選擇,BENCHMARK(count,expr)函數,sleep(time)函數,前者經過將expr語句執行count次來達到延遲的目的,後者是直接延遲time時間.

某些查詢是不須要返回結果的,僅判斷語句是否正確執行便可,因此返回能夠看做是一個布爾值,正常顯示true,報錯或者不正常顯示爲false.

SQL文件頭注入

User-Agent:使得服務器可以識別客戶使用的操做系統,瀏覽器版本,不少數據量大的網站終會記錄客戶使用的操做系統或者瀏覽器版本等存入數據庫中

Cookie:網站爲了辨別用戶,進行session跟蹤而儲存在用戶本地終端上的數據 , 一般通過加密

X-Forwarded-For:簡稱XFF頭,它表明客戶端,也就是HTTP的請求段真實的IP,一般一些網站的防注入功能會記錄請求端真實IP並寫入數據庫or某文件。【經過修改XXF頭能夠實現僞造IP】

Rerferer:瀏覽器向web服務器代表本身是從哪一個頁面連接過來的

Host:客戶端制定本身想訪問的web服務器的域名/IP地址和端口號

  1. Cookie注入
  2. Refer注入
  3. UA注入
  4. XFF注入

寬字節注入

理想規範下,程序都使用unicode , 網站都使用 utf-8 ,但有些國家使用本身的編碼,例如gbk,一個gbk編碼的漢字佔用兩個字節,一個utf-8佔用三個字節,簡體中文系統中ANSI就表明GBK。

Scenes:
正常狀況下經過輸入單引號來探測有沒有SQL注入漏洞
但因爲使用了select函數或者其餘字符轉義函數,咱們會在單引號前加反斜槓
若是咱們構造的是`%df'`做爲輸入,在前面加上\,即`%df\'`,將會變成`%df%5c%27`
但gbk是兩個字節表示一個漢字,因此`%5c變成漢字`
`單引號逃逸`,原本轉義以後是不能做爲特殊字符的
如今能夠與前面的語句進行`引號閉合`,使得報錯或者檢測漏洞。
相關文章
相關標籤/搜索