SQL注入之寬字節注入演示(詳細介紹寬字節)

寬字節介紹原理即繞過演示

自己對寬字節的認識和理解,如果有錯誤望指出,共同學習。

寬字節的介紹

  1. GBK 是佔兩個字節(也就是名叫寬字節,只要字節大於1的都是)
  2. ASCII 佔一個字節
  3. PHP中編碼爲GBK ,函數執行添加的是ASCII編碼,mysql默認字符集是GBK等寬字節字符集

爲什麼要介紹寬字節?

寬字節的出現個人感覺是因爲SQL語句過濾了一些字符,比如 ’ 轉義成 /’ 或者 " 轉義成 /" 在這裏插入圖片描述在這種情況下就不容易完成注入,所以出現了寬字節注入,通過寬字節繞過轉義字符

過濾的函數

  1. mysql_real_escape_string()
  2. addslashes() 功能一樣過濾
    在這裏插入圖片描述

繞過原理

  1. 比如使用%df’:會被PHP當中的addslashes函數轉義爲“ %df’ ”。
  2. “ \ ”即url裏面的“ %5c ”, “ ’ ”對應的url編碼是“%27”,那麼也就是說,“ %df’ ”會被轉義“ %df%5c%27 ”
  3. 倘若網站的字符集是GBK,mysql使用的編碼也是GBK的話,就會認爲“ %df%5c%27 ”是一個寬字節。
  4. “ %df%5c ”會結合(因爲寬字節是佔兩個字節),也就是“縗” 。後面就有一個“ ’ ”。就造成了一個攻擊效果。**
    在這裏插入圖片描述

使用其他寬字節

  1. 不僅僅只是使用%df’ 進行寬字節繞過也可以使用其他的寬字節,只有滿足字符串編碼的要求
  2. 常見使用的寬字節就是%df,其實當我們輸入第一個ascill大於128就可以,轉換是將其轉換成16進制,eg:129轉換0x81,然後在前面加上%就是%81
  3. GBK首字節對應0x81-0xfe(129-239),尾字節對應0x40-0xfe(64-126)(除了0x7f【128】)
  4. 比如一些 %df’ %81’ %82’ %de’ 等等(只有滿足上面的要求就可以)

通過sqlmap進行演示

  1. 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注入有很多很多方法,這裏的只是九牛一毛。供大家學習。小白自己總結的,不喜勿噴,小白在進步~
如果文章有錯誤希望大家指出,共同學習~

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