1、堆疊注入,
資料庫查詢陳述句語法是以分號;結尾,當資料庫中出現允許多條查詢陳述句同時成立時候,就能使用堆疊注入,
正常情況:
select * from users where id='1';
堆疊注入情況:
select * from users where id='1';insert into ....#';
演示案例:sqli-lab less38
-1'; insert into users (id,username,password) value (38,'admin38','pass38')%23
原因是我們的輸入被放置在 mysqli_multi_query()中了,被允許執行多條資料庫查詢陳述句
2、二次注入
如果在初始輸入點遇到有sql注入防護的時候,比如addslashes(),我們輸入的單引號會被轉義,變成反斜杠',其問題就在于當初始輸入被轉義后存入資料庫中的時候,資料庫保存的時候會把\去掉,那一旦我們再次呼叫該資料的時候,就會形成二次注入,
演示案例:sqli-lab less24
通過對網站的觀察,發現有個登陸口,有個注冊口,登錄后可以修改密碼,剛好符合二次注入的場景
我們的攻擊目標是 管理員賬號admin
首先注冊 admin '# ,密碼隨意,注冊成功后,在資料庫中顯示的就是:
admin '#
然后使用上述賬戶登錄,修改密碼,此時資料庫的查詢就變成:
update users set password='123456' where username = 'admin'' #;
通過上述陳述句可以看出,實際上'閉合前面的單引號,#注釋了后面的單引號,最終修改的username就變成了admin了,也達到了我們在不知道管理員密碼的情況下重置了他的密碼,
3、寬位元組注入
所謂寬位元組,主要出現在中文頁面上,因為漢字字符的關系,中文編碼會占用2個位元組位,編碼使用的是GBK編碼,會把兩個字符組合一個漢字,
寬位元組注入的產生也是因為對引號的過濾,在url編碼中,\的編碼是%5c,而'的編碼是%27,當被addslashes等過濾手段過濾后,本來輸入的: 1' =》1'=>1%5c%27,這本來是一種很好的防御手段,可是在寬位元組編碼中,%5c恰好可以和其他字符組成一個寬位元組漢字,當我們輸入1%df'的時候:=>1%df%5c%27 =>1(寬位元組)%27,這樣就使我們的單引號脫離了反斜杠的束縛,形成特殊字符注入,
以kuan.php為例:
想使用常規的sql注入陳述句的時候,輸入id=1' ,其在資料庫中就變成:
select * from wuser where id ='1\''
當使用寬位元組注入,輸入id=1%df',其在資料庫中就變成:
select * from wuser where id ='1運''
接著就可以繼續使用常規的sql注入來攻擊,輸入id= -1%df' union select 1,2,3%23:
select * from wuser where id ='-1運' union select 1,database(),3#'
在sqli-lab less33中,也有類似的應用
4、urldecode編碼注入
這種注入的場景主要出現在有urldecode()解碼函式的地方,正常的話,瀏覽器在接收到http請求的時候,特殊字符都是通過url編碼的,瀏覽器會自動解一次碼,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/5091.html
標籤:其他
上一篇:SQL注入中的檔案讀寫
下一篇:SQLMAP常見用法
