亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

GBK字符編碼(字符集)缺陷導(dǎo)致web安全漏洞

 更新時間:2016年06月05日 00:37:42   投稿:mdxy-dxy  
很多時候,一個web站點,選擇什么樣的字符編碼,我們不會太過在意的。象中文網(wǎng)站,我們一般用gb2312,gbk,gb18030,也可以用utf-8。但是,可能我們不知道,選擇不同編碼,可能因此導(dǎo)致程序本身設(shè)計缺陷

多字節(jié)編碼由來
我們先來看看最常用的,最小字符集是ascii,對應(yīng)的二級制可以表示為:00-7F 編碼 。它也是我們計算機使用最早通用的字符集。前期幾乎可以表示所有英文字符。后來,更多使用計算機國家加入后,我們就想在計算機中表示中文字符。我們知道常見中文就有7000多個字符。ascii碼就只有128字符,只有0-127編碼位置,遠遠不夠用了。因此,我們就開始制作更大字符集,并且保證兼容ascii編碼。要支持更多字符,選擇更大字符集。我們只能用多個字節(jié)來描述一個字符了。為了很好的與ascii碼,區(qū)分開來!一般做法是:每個字節(jié)值都大于>7F,如果是2個字節(jié),那么就是:[>7F][>7F]。這樣編碼,保證很好的與ascii區(qū)分開,并且擴大了字符集。像gb2312范圍在[0xA1-0xF7][0xA1-0xFE](中間很多沒有填滿),它完全保證所有字節(jié)在A0之上,也就完全滿足在7F之上了。
GBK編碼漏洞緣由
通過上面的分析,我們知道gb2312編碼是很好的跟ascii碼分開了。 那么我們看看,GBK編碼呢,它是完全兼容gb2312(就是說在gb2312字符集中每個字符位置,與gbk字符集里面位置完全一致,而且包含于gb2312),但是,它有2萬多個字符。從上面看,只能選擇往下排序了。 就是從A1A0往下排了,我們發(fā)現(xiàn)它編碼實際范圍是:[0x81-0xFE]([0x40-0x7E|0x80-0xFE] ) (GBK編碼),我們發(fā)現(xiàn)由2個字節(jié)組成,首字節(jié)范圍在7F之上,而第2個字節(jié),有一部分在0x40-0x7E了。這就是導(dǎo)致bug原因。我們看看下面例子吧!

從ASCII碼表中,我們知道0x40-0x7E 包含字符有:“

選擇gbk編碼,運行上面代碼,就一條簡單的命令導(dǎo)致出現(xiàn)錯誤,說字符串 賦值 沒有結(jié)束! 呵呵,估計很多人看到這個就會認為是php 出Bug了。但是,如果我們變成$a=”誠a”,發(fā)現(xiàn)可以正常運行了。是不是覺得很奇葩啦??!

原因分析:我們知道文件存在磁盤都是二級制方式,無論你存什么字符,最終都是以該字符的在所選字符集中字符編碼保存。php解析時候,最小分析單元是字節(jié)。無論你是多字節(jié)還是單字節(jié)字符。最終都是按照字節(jié)來處理的?!罢\” GBK編碼是 D55C,php按字節(jié)來解釋,5C對應(yīng)字符是“\” 字符。后面直接跟個‘”',相當(dāng)于被轉(zhuǎn)義了。 因為沒有閉合,因此出現(xiàn)錯誤!。大家看出問題所在了吧,按自己處理的話,會自然把多字節(jié)拆成單字節(jié)了。這樣就會出現(xiàn)很多奇怪問題了。
總結(jié):通過上面講解,我們知道了多字節(jié)編碼過程,以及GBK導(dǎo)致簡單程序出錯的原因。其實,我們很多程序語言里面,都會以單個字節(jié)來解析的。這樣,當(dāng)你選擇多字節(jié)GBK編碼中文時,剛好有字節(jié)落在特殊位置,將會出現(xiàn)奇怪錯誤問題。而且,還將給系統(tǒng)帶來本身的漏洞,后面我再說說,GBK編碼缺陷,導(dǎo)致漏洞、以及專門利用該編碼漏洞缺陷進行系統(tǒng)入侵!好了,先到這里了,歡迎交流!

GBK字符編碼(字符集)缺陷攻擊(注入)原理

上一節(jié),我們分析了。選擇不同編碼可能會導(dǎo)致程序帶來本身潛在的漏洞。這次我們以GBK編碼為例,看看怎么樣通過該編碼注入到系統(tǒng)中。目前很多開源系統(tǒng)都存在類似的注入問題。我們先來,從一個Demo開始!

GBK字符集漏洞注入原理

<?php
$u=isset($_GET['u'])? $_GET['u']:'';
$u=addslashes($u);
$sql = "select * from user where user='$u'";

以上是我們寫的一個測試?yán)樱℅BK編碼),現(xiàn)在很多開源系統(tǒng),比較少的進行統(tǒng)一參數(shù)過濾,有時候為了防止注入,就直接對參數(shù)進行轉(zhuǎn)義處理。我們看看,這樣一個例子,我們怎么樣注入進系統(tǒng)!

步驟 備注
1.傳入值%D5%27 or 1=1# u參數(shù)參入上面值 (%27 對應(yīng)是“'” 單引號字符)
2.GET獲取的值 0xD50x27 or 1=1#
3.Addslashes后值 0xD50x5C0x27 or 1=1 (意思是:誠' or 1=1#') #字符后面被注釋掉
4.sql值 將變成 select * from user where user='誠' or 1=1#'
#號是sql注釋符號,后面字符將截取掉

GPC轉(zhuǎn)義打開,或者是通過addslashes函數(shù),會自動在字符是單引號(‘)、雙引號(")、反斜線(\)與 NUL(NULL 字符)等字符前面增加“\”字符(0x5c),例子里面,我們采用一個特殊前面字節(jié)0xD5,它將與該字節(jié)組合變成:0xD50x5c ,剛好是gbk字符集中字符:”誠“ 了。 后面的0×27這個單引號被保留下來了!

GBK字符集漏洞注入總結(jié)

呵呵,這個很有意思吧,好了。我們來總結(jié)下,這類注入是2個條件的。第一是:gbk編碼,第二是:程序采用了轉(zhuǎn)義方法,轉(zhuǎn)義了輸入。 這2個條件不苛刻,目前大部分開源系統(tǒng)都有g(shù)bk,utf-8編碼的源碼,剩下的就去看看,源碼里面有沒有用類似轉(zhuǎn)義方法,過濾字符串了。如果有,那么這個系統(tǒng)某個功能,你可以去滲透下了。這個編碼漏洞,網(wǎng)上面提的很多,不過很多時候,沒有引起開發(fā)人員的足夠重視,還是在不斷的重現(xiàn)!

那么我們?nèi)绻⑷胍粋€參數(shù),我們該選擇什么樣的入?yún)?shù)呢?其實這種轉(zhuǎn)義字符是單引號(‘)、雙引號(")、反斜線(\)與 NUL(NULL 字符),我們這些字符往往在程序中有特殊作用,我們只需要在前面加一個在>7F字符,后面接一個%27(‘)、%22(")、%5C(\)、%00(NULL 字符),就可以自己讓這4個字符,可以逃脫轉(zhuǎn)義了。

好了,這個漏洞原理及注入過程分析就這些了。我們開發(fā)時候,需要注意這個問題,特別是使用GBK編碼開發(fā)程序,要有這個方面的預(yù)備知識,對于自己開發(fā)安全的代碼會有幫助的。更多的GBK編碼,可以看http://doc.chacuo.net/gbk !(這里有很多落在5c中文字符呢)也歡迎討論!

相關(guān)文章

  • superset在linux和windows下的安裝和部署詳細教程

    superset在linux和windows下的安裝和部署詳細教程

    Superset 是 Airbnb開源的數(shù)據(jù)探查與可視化平臺,是個輕量級的BI工具,開發(fā)者可以在其開源代碼上根據(jù)需要進行二次開發(fā)。這篇文章主要介紹了superset在linux和windows下的安裝和部署詳細教程,需要的朋友可以參考下
    2020-10-10
  • 最新IDEA永久激活教程(支持最新2019.2版本)

    最新IDEA永久激活教程(支持最新2019.2版本)

    這篇文章主要介紹了最新IDEA永久激活教程,此教程已支持最新2019.2版本,適用Windows、Mac、Ubuntu等所有平臺,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • 基數(shù)排序算法的原理與實現(xiàn)詳解(Java/Go/Python/JS/C)

    基數(shù)排序算法的原理與實現(xiàn)詳解(Java/Go/Python/JS/C)

    基數(shù)排序(RadixSort)是一種非比較型整數(shù)排序算法,其原理是將整數(shù)按位數(shù)切割成不同的數(shù)字,然后按每個位數(shù)分別比較。本文將利用Java/Go/Python/JS/C不同語言實現(xiàn)基數(shù)排序算法,感興趣的可以了解一下
    2023-03-03
  • GitHub Eclipse配置使用教程詳解

    GitHub Eclipse配置使用教程詳解

    本文主要介紹GitHub Eclipse,這里對Eclipse 使用GitHub的教程,圖文并茂詳細說明如何操作,有需要的小伙伴可以參考下
    2016-09-09
  • git用戶自定義變量查看修改及調(diào)用教程詳解

    git用戶自定義變量查看修改及調(diào)用教程詳解

    這篇文章主要為大家介紹了git用戶自定義變量查看修改及調(diào)用教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-04-04
  • 羊了個羊破解方法(嘎嘎猛已入羊群n次)

    羊了個羊破解方法(嘎嘎猛已入羊群n次)

    這篇文章主要介紹了羊了個羊破解(嘎嘎猛,已入羊群n次),經(jīng)本人測試找到的未修復(fù)的bug:?一旦通關(guān)一次后,后續(xù)入羊群不再需要循環(huán)浪費時間淦帝,只需要點換裝點擊新皮膚,點確定即可嘎嘎增加入群次數(shù),需要的朋友可以參考下
    2022-09-09
  • Dubbo?2.7X?安裝部署詳細流程分析

    Dubbo?2.7X?安裝部署詳細流程分析

    這篇文章主要介紹了Dubbo?2.7X?安裝部署詳細流程分析,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-02-02
  • 詳解DES&3DES算法的原理以及C#和JS的實現(xiàn)

    詳解DES&3DES算法的原理以及C#和JS的實現(xiàn)

    DES?全稱為?Data?Encryption?Standard,即數(shù)據(jù)加密標(biāo)準(zhǔn),是一種使用密鑰加密的塊算法。3DES?算法通過對?DES?算法進行改進,增加?DES?的密鑰長度來避免類似的攻擊。本文就來聊聊它們的原理與實現(xiàn)吧
    2023-03-03
  • 使用Git向GitHub上傳更新內(nèi)容

    使用Git向GitHub上傳更新內(nèi)容

    這篇文章介紹了使用Git向GitHub上傳更新內(nèi)容的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • 一文了解文檔寫作利器 Markdown

    一文了解文檔寫作利器 Markdown

    這篇文章主要介紹了一文了解文檔寫作利器 Markdown,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2020-04-04

最新評論