並不通用,條件苛刻:
sql語句中,擷取字串函式的索引是從1開始的,php中是從0開始的;
1.過濾or,and,xor
(1)首先oorr有用;
(2)/*!*/,/**/有用;
(3)||,^,&&有用;
(4)十六進製制編碼:select column_name from information_schema.columns where table_name=0x7573657273;
十六進製制的資料(0x7573657273=user)會被解碼,但是也只是到能解碼的地步,不會進一步執行,適合那種只有字元意義的資料,比如表名,資料庫名等這種字段。
2.過濾空格
(1)/**/
(2)()需要用在可以計算出結果的語句中(id),而不能用在(from);
(3)``這個東西不是隨便插進空格裡的,不能用在id=1,1=1這種上:
select`id`from`users`where id=1 and 1=1; yes
select`id`from`users`where`id=1`and`1=1`; no
(4)%0a(換行鍵),%09(水平製表符),%0c(換頁鍵),%0d(回車鍵),%0b(垂直製表符),%a0(?)這種要看
對面會不會解析,也不通用,就沒有通用的。
(5)sqlserver中,空格還可以用0x01~0x0f代替;
3.過濾'和\
(1)mysql使用gbk編碼:加%df,乾掉\;%5c(\),乾掉\;
4.過濾,逗號
並不通用,特定情況下才使用某一種:
5.雜項
過濾=:like,in,regexp(正則),rlike(正則),between 't' and 't',
過濾!==:<>
過濾注釋符號:||',',^'(||管道符號用以連線字串的)
函式替換:sleep()==》benchmark();mid(),substr()==》sbustring();hex(),bin()==》ascii
@@user==》user();@@datadir==》datadir();
測試語句是否執行:and 1=1==>and 1/1=1 ; and 1/0=1;
bin():返回資料的二進位制
oct():返回資料的八進位制
hex():返回資料的十六進製制
6.更改思維方式
比如更改注入點,從cookie或user agent,referer,host欄位。更改提交方式,get或post;
/和\在window裡沒什麼區別,但在mysql中\代表轉義,所以要轉換一下;
like型注入:一般出現在查詢框中1' and user() like 'root
7.編碼應用:
(1)十六進製制在過濾引號,而且只能用在table_name=這種情況下;
(2)gbk編碼繞過引號用在閉合的情況下;
8.運算子問題:
位運算子:&,|,^,!,<>
邏輯運算子:and,or,xor,not
總結:
存在注入點的地方是,可以
在sql存在的地方:
盲注:(1)回顯點(2)邏輯處(3)執行處
時間注入:select case when *** then *** else *** end;
*****除了用and等判斷是否存在注入點,還可以用-,+等運算子判斷。
在mysql中,括號是用來包圍子查詢的。因此,任何可以計算出結果的語句,都可以用括號包圍起來。
在mysql中,連線字串使用函式進行連線的。而+,-號代表著數字運算符號,所以說當用+連線兩個字元時,要把它們轉化為數字才能進行運算。
內聯注釋是mysql為了保持與其他資料相容,將mysql中特有的語句放在/*!...*/中,
這些語句在不相容的資料庫中不執行,而在mysql自身卻能識別,執行。
/*!50001*/表示資料庫版本》=5.00.01時中間的語句才能被執行
查詢沒有長度限制,而插入有 insert into 表名() value()
逗號繞過(使用from或者offset):
mid(from(1)for())
邏輯運算:為0或1,
+,-,=代表算數運算,即如果兩個數相減,要進行型別轉換為數字型。字串-數字,會把字串先轉為數字再和數字做運算。
or和and的區別:or只要有乙個條件為真就不去考慮另乙個條件了,先考慮後面的邏輯,而and需要考慮2個條件當2個條件全為真(id=2成真才能選擇過濾)才能為真。
暫時只遇到這兩種編碼繞過的情景,好難啊!
所以說,對現在的我來說,只能在引號沒被過濾的情況下操作sql注入,還達不到繞過的能力,哎!
mysql中文注入 SQL注入之Mysql報錯注入
志向和熱愛是偉大行為的雙翼。昨天偷懶了沒學什麼東西,先自我反省一下 今天認真的學習了一下mysql報錯注入利用方法及原理,好久之前就像認真的學一下這個了,是在上海市大學生網路安全大賽中遇到的web100。當時懵逼狀態,被學長提醒了一下才知道是mysql報錯注入,因為之前一直都沒接觸過,所以當時只是知...
mysql防止SQL 注入
1 mysql real escape string 轉義 sql 語句中使用的字串中的特殊字元,並考慮到連線的當前字符集 使用方法如下 sql select count as ctr from users where username mysql real escape string userna...
MySQL防SQL注入
1,mysql real escape string 函式已經不安全,可以利用編碼的漏洞來實現輸入任意密碼就能登入伺服器的注入攻擊 2,使用擁有prepared statement機制的pdo和mysqli來代替mysql query 注 mysql query自 php 5.5.0 起已廢棄,並在...