idna與utf 8編碼漏洞

2021-10-17 00:27:39 字數 622 閱讀 9700

來自black hat 2019

原理什麼是idn?

國際化網域名稱(internationalized domain name,idn)又名特殊字元網域名稱,是指部分或完全使用特殊文字或字母組成的網際網路網域名稱,包括中文、發育、阿拉伯語、希伯來語或拉丁字母等非英文本母,這些文字經過多位元組萬國碼編碼而成。在網域名稱系統中,國際化網域名稱使用punycode轉寫並以ascii字串儲存。

import idna

print(idna.encode(u』ドメイン.テスト』))

結果:xn–eckwd4c7c.xn–zckzah

print idna.decode(『xn–eckwd4c7c.xn–zckzah』)

結果:ドメイン.テスト

demo:

℆這個字元,如果使用python3進行idna編碼的話

print(『℆』.encode(『idna』))

結果b』c/u』

如果再使用utf-8進行解碼的話

print(b』c/u』.decode(『utf-8』))

結果c/u

通過這種方法可以繞過**的一些過濾字元

介紹utf8編碼

utf8並不算是一種電腦編碼,而是一種儲存和傳送的格式,如前所述,每個unicode ucs字元都以 2或4個bytes來儲存,看看以下的比較 以 i am chinese 為例 用ansi儲存 12 bytes 用unicode ucs2儲存 24 bytes 2 bytes header 用uc...

UTF8編碼 解碼

參考文件 rfc3629標準.對於任意乙個字,都可以用乙個唯一碼 unicode碼,由標準編制 表示,在應用過程中,需要對碼進行編碼.常用的編碼方式為utf 8.utf 8採用類似於ip位址分配的機制.即對於不同範圍的unicode碼,採用不同的模板進行編碼.流程概述為 2.1 查表獲取unicod...

ANSI與UTF 8編碼轉換

將ansi編碼裝換為utf 8在windows mfc環境下測試下面的 static int ansi2utf8 in const char csrc,out char cdest 以下 將utf 8 轉換為gb2312 intutf8togb2312 const char sourcebuf,si...