一般的代碼:$id=$_GET['id'];
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
就是這里,對id進行了修飾,用'(單引號)把id括了起來。所以我們構造語句的時候,一是要把我們構造的語句‘逃逸’出來,二是要把結構進行補全或者適當的注釋。
注釋可以用--+;-- -;#把后面的'或者多余的修飾符注釋掉,當然肯定不止這三種我只是舉個例子而已。
一般常見的結構有以下幾種:
or 1=1--+
'or 1=1--+
"or 1=1--+
)or 1=1--+
')or 1=1--+
") or 1=1--+
"))or 1=1--+
既把前面進行補全,后要保證格式的正確,讓我們的語句可以順利執行。
至於and和or的用法:
首先and是有假即假。我們先看一個例子 ?id=1' and 1=2 -- - ,很明顯1是不等於2的,所以在?id=1是正確回顯的情況下,例子一般情況下是不會給予正常回顯的。
而or是有真即真,我們也來看一個例子 ?id=1' and 1=2 -- - ,和上面一樣,1是不等於2的,而這個例子網頁卻可以正確回顯。
通常情況下,or和and在注入的時候影響不算很大,兩者區別一般在於盲注。很多時候防火牆攔截過濾了and的時候or可能沒有,那就可以用or來進行盲注,節省繞過的時間。又或者用xor(異或)繞過防火牆,異或在這不作過多闡述,因為不在本次范圍之內。