sql注入練習2(寬字節)

文章爲自我記錄,相關原理還是得自己查呀
其中一點點內容轉載於此文 sql注入繞過技巧

利用場景: 網站對客戶端輸入(傳入的參數)的引號等字符進行了轉義(轉義之後這些符號就無效了,這些符號也不會成爲代碼的一部分了,你原先的注入就無效了)
網站數據庫採用了gbk編碼
gbk是雙字節編碼,ascii爲單字節編碼,所以寬字節注入的思路也就產生了—
加入%df 這樣的編碼,讓系統轉義加入的""符號被喫掉,這樣的話就留下了你需要的單引號 ' 所以又可以按照原來的方法注入了
舉個栗子:傳入參數id=1' or 1=1--+ 進行試探
失敗:id=1\' or 1=1--+
但是我們這樣傳入參數 id=1%df' or 1=1--+
就可以了:id=1[]' or 1=1--+ []是一個奇怪的gbk編碼的字符 注入成功

練習一下

sqli-labs Less33 bypass Addslashes()

Addslashes()是用來將字符串中的預定義字符(單引號,雙引號,反斜槓等)轉義的

然後要走流程測試
1.?id=1'

在這裏插入圖片描述
此處給出了hint:輸入的1’被轉義成了1’ ,十六進制是315C27 也就是多了5C 聯想寬字節注入
2.進行寬字節的繞過

?id=1%df'
有報錯了
3.因爲出現了報錯,所以可以使用報錯注入,之前提到的xpath報錯注入,也可以union聯合注入,拿到庫名,表名,字段名…
然後中間小白又遇到問題了,如何繞過單引號什麼的???可以用16進制編碼繞過,網上搜方法(面向搜索引擎):利用16進制的話就不需要輸入引號啦


會使用到引號的地方一般是在最後的where子句中。如下面的一條sql語句,這條語句就是一個簡單的用來查選得到users表中所有字段的一條語句:

select column_name  from information_schema.tables where table_name="users"

這個時候如果引號被過濾了,那麼上面的where子句就無法使用了。那麼遇到這樣的問題就要使用十六進制來處理這個問題了。
users的十六進制的字符串是7573657273。那麼最後的sql語句就變爲了:

select column_name  from information_schema.tables where table_name=0x7573657273

比如users轉16進製爲7573657273,記得加上標誌0x~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章