<pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
    <pre id="vvttv"></pre>

      <p id="vvttv"></p>

          <p id="vvttv"></p>

                <p id="vvttv"></p>

                <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                  <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                    <p id="vvttv"></p>

                    原文地址:http://drops.wooyun.org/papers/2609

                    本文只是對異或算法的科普文 逆向dede漏洞的原作者是 @my5t3ry 而不是我
                    有些圖片甚至直接借用 我不是抄襲狗 - -
                    哥就是抱在大牛的大腿上的那個人
                    研究對稱算法的時候 對異或加密產生了性欲

                    剛剛高考完??高中閉關結束??I AM BACK~?

                    科普文 幫助新手對算法的理解吧 異或加密是web應用中十分流行的加密算法,通過將可信任(已安全過濾)的用戶數據和加密key用算法加密,生成字符串再來傳遞以執行sql操作。

                    但是這種算法極其不安全 因為在異或算法里面

                    A^K=E  
                    E^A=K  
                    

                    有了A和E(加密前后的字符串)就等獲得k,一旦我們知道了key 就能本地構造那個字符串(evilcode)進行攻擊!
                    今天 我們研究DedeCMS(buy_action.php)

                    2014071622331932510.png

                    這是個簡單的異或算法

                    0x01初識你的美,算法分析


                    string[0]^key[0] 
                    

                    然后是

                    string[1]^key[1] 
                    

                    將他們添加到$code尾部,如此循環。這時會有兩種情況。

                    case one

                    $key長度(18)<=$string長度  
                    

                    那么當$k=$i=17,就取盡了$key,下一次執行會變成:

                    $i=18??$k=0  
                    

                    也就是說 重新開始一遍位運算 示意圖如下

                    key? ? |??i??a??m??a??k??e??y? ?i? ?m   
                    string |??i??a??m??a??s??r? ?i? ?n? ?g   
                    

                    等于key被重復了多次直到string被完全加密!
                    case two

                    $key長度(18)>$string長度  
                    

                    那么當

                    $k=$i=??strlen($string) -1
                    

                    就取盡了$string,下一次執行會直接跳出,也就是說,此時的key都沒完整進入$code。
                    示意圖如下

                    key? ? |??i??a??m??a??k??(e??y )  
                    string |??i??a??m??a??s
                    

                    ??
                    括號里面表示沒能進入$code部分
                    現在分析完了算法 我們就能夠來思考如何注入到key了

                    0x02 禁不起推敲的美 攻擊算法


                    現在我們要得到key 當然是要完整的
                    所以是選擇case one

                    所以思路應該是構造一個

                    string>=18  
                    

                    然后在受害web上構造string 并且獲得$code,再到本地。

                    $string^$code 
                    

                    就能得到 $key的...md5 破解得到密匙,就能構造$pr_verify騙取驗證進入此支。

                    $pr_verify=md5("payment".$pr_encode.$cfg_cookie_encode);
                    

                    通過變量覆蓋進行GLOBALS[cfg_dbprefix]覆蓋注入

                    2014071622373460573.png

                    接下來看圖看代碼
                    我們先看看$string(代碼中的$pr_encode)是如何獲取的

                    $pr_encode = '';  
                    ? ? foreach($_REQUEST as $key => $val)  
                    ? ? {  
                    ? ?? ???$pr_encode .= $pr_encode ? "&$key=$val" : "$key=$val";  
                    ? ? }  
                    
                    ? ? $pr_encode = str_replace('=', '', mchStrCode($pr_encode));  
                    
                    ? ? $pr_verify = md5("payment".$pr_encode.$cfg_cookie_encode);  
                    
                    ? ? $tpl = new DedeTemplate();  
                    ? ? $tpl->LoadTemplate(DEDEMEMBER.'/templets/buy_action_payment.htm');  
                    ? ? $tpl->Display();  
                    

                    知道了獲取辦法 讓我們控制它吧

                    2014071622394580644.png

                    此處的

                    $string=product=card&pid=1.$_COOKIES
                    

                    因為$_REQUEST獲取參數是從$_GET->$_POST->$_COOKIE依次獲取

                    所以加密得到的$code(也就是$pd_encode) 包含了post和cookies全部內容? 如圖

                    2014071622402082199.png

                    也就是符合

                    $string>=$key  
                    

                    所以我們直接取post的巧合18位,進行破解,后面的其實不用管,要不然得到的key由于case one的不同重復,就是真正key的一遍遍重復。

                    2014071622413034353.png

                    這樣我們就得到了MD5形式的key 不過是18位 去掉最后兩位開始跑吧

                    2014071622422219738.png

                    后來的故事就是變量覆蓋 不在本文的討論之類

                    0x03 金絮其外 敗絮其中 算法優缺點分析


                    簡單異或算法實際上并不復雜,因為它并不比維吉尼亞密碼多什么東西。它之所以被包括在這本書中,是因為它在商業軟件包中很流行,至少在MS-DOS和 Macintosh世界中是這樣[1502,1387]。不幸的是,如果一個軟件保密程序宣稱它有一個“專有”加密算法(該算法比DES更快)??---|||應用密碼學
                    確實異或算法輕巧,采用位運算,在速度方面有十分大的優勢。
                    但是輕巧簡單卻帶來了弱邏輯,所以更應該小心使用 比如對$key的復雜程度 應該有更苛刻的要求
                    否則會讓safe_code變成evil_code

                    0x04 你本來就很美?好的程序員才寫得出安全算法


                    那么怎么樣的異或才是安全簡便的? 我們看看齊博cms的這個吧

                    2014071622454411580.jpg

                    優點有兩個
                    一, 絕密字串有三部分 兩部分可控

                    $webdb[mymd5].$rand.'5*j,.^&;?.%#@!' 
                    

                    復雜程度令人發指。

                    二,引入MD5code 把傳入參數加入到key里面

                    $md5code=substr($string,-10);? ? $key = md5($md5code.$secret_string);  
                    

                    使得key無比復雜。??

                    兩次加鹽加醬油的MD5,一定時間內,基本不可破解了。

                    所以 異或算法用得好,其實可以是強算法,不過前提是保證key安全。 當然,qibo這個系統有幾處能夠讀取key的漏洞,也導致了算法成為evilcode 最終能獲得后臺權限,但那是后話。

                    0x05 參考文章 ?


                    DedeCMS最新通殺注入(buy_action.php)漏洞分析

                      <pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
                      <pre id="vvttv"></pre>

                        <p id="vvttv"></p>

                            <p id="vvttv"></p>

                                  <p id="vvttv"></p>

                                  <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                                    <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                                      <p id="vvttv"></p>

                                      这里只有精品视频