在2023年,一位名為rfp的黑客發表了一篇題為「nt web technology vulnerabilities」的文章
注入攻擊的兩個條件:
(1).使用者能夠克制資料的輸入--在這裡,使用者能夠控制變數;
(2).原本要執行的**,憑藉了使用者的輸入;
一般輸入乙個『單引號就能引起執行查詢語句的語法錯誤,有些伺服器會直接返回錯誤回顯,有些伺服器則不返回任何東西。
盲注(blind injection)
在web伺服器關閉了錯誤回顯的時候,我們就可以採用盲注的技巧
所謂盲注,就是在伺服器沒有錯誤回顯時完成的注入攻擊。伺服器沒有錯誤回顯,對於攻擊者來說缺少了非常重要的「除錯資訊」,所以攻擊者必須找到乙個方法來驗證注入的sql語句是否得到執行。
最常見的就是構造簡單的條件語句,根據返回頁面是否法神變化,來判斷sql語句是否得到執行
例 ?id=2 and 1=2,因為1=2是個假命題,所以永遠無法成立。?id=1 and 1=1,如果它能正確的返回時,就說明了sql語句的「and" 成功執行,所以就存在注入的漏洞。
timing attacks
在mysql中有乙個benchmark()函式用於測試函式效能的。利用這個benchmark()函式,可以讓同乙個函式執行若干次,使得結果返回的時間比平時要長;通過時間長短的變化,可以判斷出注入語句是否執行成功。
payload:
1170 union select if(substring(current,1,1)=char(119),benchmark(5000000,encode('msg','by 5 seconds')),null) from (select database() as current) as tbl;
這段payload用於判斷庫名的第乙個字母是否是char(119),即小寫的w。
mysql->benchmark(10000000,md5(1)) or sleep(5)
porstgresql->pg_sleep(5) or generate_series(1,1000000)
ms sql server->waitfor delay '0:0:5'
資料庫攻擊方式
雖然有各種各樣的payload,但是有一些非常麻煩,記起來也不怎麼容易。
所以上sqlmap跑就好了。
命令執行
除了可以通過到處webshell間接的執行命令外,還可以利用」使用者自定義函式「的技巧,即udf(user-defined functions)來執行命令
另外的方法,通過lib_mysqludf_sys提供的幾個函式執行系統命令,其中最主要的函式是sys_eval()和sys_exec()。
編碼問題
當使用gbk編碼時,0xbf27和0xbf5c都會被認為是乙個字元(雙位元組字元)
在進入資料哭之前,在web語言中則沒有考慮到雙位元組字元的問題,雙位元組字元會被認為是兩個位元組,比如php中的addslashes()函式,或者當magic_quotes_gpc開啟時,會在特殊的字元前增加乙個轉義字元"\"。
如何防禦sql注入攻擊
1.使用預編譯的語句
使用預編譯的語句,sql語句的語義不會發生改變,變數用?表示,攻擊者無法改變sql的結構
2.使用儲存過程
使用安全的儲存過程對抗sql注入。
3.檢查資料型別
4.使用安全函式
sql注入攻擊
使用者可以利用向php表單輸入的資料完成對mysql的注入攻擊。例如我的查詢是 insert table into xx values 使用者名稱 號碼 檔案 0 在使用者輸入時最後一位只能是0.使用者不需要輸入 這時使用者在號碼處輸入 10000 x.gif.1 雙連字元後加乙個空格是sql的注釋...
sql注入攻擊
簡單判斷是否有漏 www.abc.asp?id 1,www.abc.asp?id 1 and 1 1 kali 檢視所有的資料庫 sqlmap u www.abc.asp?id 1 dbs current user 是否有漏洞會有相應資訊 檢視所有的表 sqlmap u www.abc.asp?id...
jdbc之防sql注入攻擊
1 sql注入攻擊 由於dao中執行的sql語句是拼接出來的,其中有一部分內容是由使用者從客戶端傳入,所以當使用者傳入的資料中包含sql關鍵字時,就有可能通過這些關鍵字改變sql語句的語義,從而執行一些特殊的操作,這樣的攻擊方式就叫做sql注入攻擊 preparedstatement利用預編譯的機制...