sql注入就是指web應用程式,前端對使用者輸入的資料合法性沒有進行驗證,後端對前端傳來的資料也沒有進行合法性驗證,導致一些惡意使用者在資料互動的位置構造惡意sql語句對資料庫進行任意操作
找到乙個有資料互動的頁面,通過表單或者url裡輸入'等特殊字元來判斷頁面返回結果是否正常(有些頁面不會返回任何異常資訊,這時則需要盲注判斷),如果不正常,則進一步檢視確認and 1=1,檢視是否正常,正常,然後測試1=2是否正常,如果異常,則說明該**可能存在注入點
當直接在引數後面跟上and 1=1或and 1=2,沒有得到預期返回的結果時,這時應判斷引數是否為字元型,在引數後使用' and 1=1 ## 使用該公式來判斷並注入的方式,稱為字元型sql注入
顧名思義,該引數在資料庫中是乙個數值型,這時直接在引數後跟上and1=1,and1=2來判斷並注入即可
使用sql語句常見的union進行查詢注入的方式
報錯型sql注入的產生條件是因為後端對資料庫的錯誤資訊,沒有進行遮蔽顯示,惡意使用者通過構造惡意payload,從後端返回的錯誤資訊中得到自己想要的資訊, 可以使用updatexml(),extractvalue(),floor(),exp()等函式
sql盲注的使用場景,當乙個**存在注入點,但後端對錯誤資訊的顯示做了遮蔽處理,我們無法從前端頁面上得到任何資訊,這時就只能通過盲注來實現,sql盲注又分為布林盲注和時間盲注兩種型別,手動盲注的工作量非常大,建議通過配合攻擊burp-suite來進行
二字注入可以應用於乙個**多個頁面,因為我們找到注入點以後,可以通過插入語句讓資料庫存入我們的構造好的payload語句,然後再直接呼叫存於這條資料的字段(或者直接用後端sql語句去呼叫這條惡意字段)就可以實現想要的效果了,二次注入一但實現,威力不容小視
堆疊查詢注入應用場景比較受限制,因為使用堆疊查詢注入的前提是後端對資料庫的查詢操作中使用了mysqli_multi_query()的這個多條查詢函式(php**)
除了常見的get和post傳值,有些**也會用cookie進行資料前後端資料互動,並且一些粗心(或者說根本沒有心吧)的程式設計師不會對cookie的值進行過濾,就直接帶入sql去查詢,這時我們就可以使用cookie注入
在有些**的後端中,會把request-head裡的一些資料字段儲存,並帶入資料庫中查詢,這時我們可以使用burp-suite截斷資料報,找到字段構造payload進行注入,xff(偽造瀏覽器ip)也是如此
瀏覽器url會對一些字元進行編碼比如#編譯成%23,這是乙個單位元組,而在使用了gbk編碼的資料庫中,會把兩個連在一起的單位元組識別成乙個雙位元組(成為乙個中文)這時我們就可以利用這個特性進行報錯注入,並且是能繞過使用addslashes(),mysql_real_escape_string()函式的gbk字符集資料庫
當後端對使用者輸入的資料進行了過濾,比如過濾掉了select,update,delete,inster,『,/,等關鍵字或者一些關鍵字元,這是我們猜測過濾規則來進行繞過,比如使用select,update,delete,upupdatedate來繞過關鍵字,而特殊字元,我們可以使用ascii或16進製制編碼來代替
base64是一種編碼格式,可以將,文字等資訊轉換成一種編碼,有些**為了防止引數被篡改,會將所有引數和關鍵字進行base64編碼後再傳入後端進行處理,利用這一點,我們也可以將我們構造的惡意payload轉成base64編碼後傳入
使用盲注的時候,因為要進行頻繁的驗證操作,這樣做很容易被waf截斷並阻止,這時我們通過自己搭建dns伺服器,再結合mysql load_file函式,讓目標資料庫對我們的dns伺服器發起請求,從dns解析日誌得到自己想要資訊
SQL注入總結
在大部分語言中都一樣是注釋。這個之中的語句是不被執行的。但mysql中 為了保持相容,比如從mysqldump 匯出的sql語句能被其它資料庫直接使用,它把一些特有的僅在mysql上的語句放在 中,這樣這些語句如果在其他資料庫中是不會被執行,但在mysql中它會執行。僅當mysql的版本等於或高於指...
sql注入總結
第一天 url 統一資源定位符 協議 主機號 目錄 注釋符 20 代表空格 order by 15 閉合條件為 猜測列數 union all select 1,2,3 猜測顯示位 select schema name from information schema.schemata 查庫名 sele...
sql注入總結
資料庫支援,並採用gbk格式進行編碼 在獲取url資料時,使用addslashes或是其他方式對單引號 進行了轉義,使其變成了 php的get post等方法預設都會進行此操作 上面的兩個條件缺一不可,gbk編碼不太好確定,但是第二個比較好確認,例如輸入的url為?id 1 返回了?id 1 當遇到...