整合營銷服務(wù)商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          「安全菜雞分享」一道送分CTF題發(fā)現(xiàn)的搞笑代碼段

          享的內(nèi)容


          本次分享一下作為一個CTF菜雞與如下“搞笑”代碼的糟心偶遇。



          (上圖[1],下圖[4],然而實際上類似的代碼到處都是,也許你公司的代碼倉也已經(jīng)被“攻占”)




          References:

          [1]. https://www.jianshu.com/p/b854e97fb856.

          [2]. https://stackoverflow.com/questions/13433529/android-4-2-broke-my-encrypt-decrypt-code-and-the-provided-solutions-dont-work.

          [3]. https://www.jb51.net/article/40941.htm.

          [4]. https://github.com/GcsSloop/encrypt/blob/master/encryptlib/src/main/java/com/gcssloop/encrypt/symmetric/AESUtil.java.

          [5]. https://github.com/GcsSloop/encrypt/issues/4

          [6]. https://www.it1352.com/558636.html

          [7]. https://stackoverflow.com/questions/36813098/securerandom-provider-crypto-unavailable-in-android-n-for-deterministially-gen


          開始講糟心的偶遇故事


          作為一只CTF菜雞,當(dāng)遇到一道送分APP題時,是多么的開心;但是因為菜,這么簡單的開心,ta就是不給你!


          題目思路:

          l 使用私有的Base64算法(代號:PBase64)處理了flag的密文(代號:PBase64.en(AES.en(flag))),而私有的Base64算法,實際上只是對標(biāo)準(zhǔn)Base64算法的table進(jìn)行了替換;

          l 密文(AES.en(flag))為flag使用固定的密鑰,使用AES算法加密得到;//此處AES實現(xiàn)與[4]一致~

          l 需要對部分代碼進(jìn)行逆運算得出PBase64.en(AES.en(flag)),處理邏輯主要為亦或,逆運算還是亦或。//開心是吧?


          解題思路:

          1. 反編譯APK拿到代碼;

          2. 簡單寫個Java程序,逆出PBase64.en(AES.en(flag))

          3. 根據(jù)私有Base64算法的table和標(biāo)準(zhǔn)Base64算法table的字符對應(yīng)關(guān)系,由PBase64.en(AES.en(flag))還原出Base64.en(AES.en(flag)),使用標(biāo)準(zhǔn)的Base64庫decode計算得到AES.en(flag);

          4. 摳出APK里AES的實現(xiàn),本地寫個程序調(diào)用AES的decrypt方法使用固定密鑰解密獲得flag,得分!


          1&2&3都很順利,但是Too Young Too Simple! 你就是解密不出來:Such issues can arise if a bad key is used during decryption


          暈,難道是菜雞誤會了題目? 等公布答案,看看大佬們的Writeup學(xué)習(xí)一下吧。

          。。。。。。

          暈,不就是我這思路解的嗎!Base64.en(AES.en(flag))都和我算的是一樣的,為啥我就解密不出來?

          。。。。。。(搗鼓了半天)

          原來是SecureRandom在Windows平臺和Android平臺不一致導(dǎo)致,導(dǎo)致密鑰不一致,分析題目的時候沒仔細(xì)看(需要反省),密鑰還有這么生成的!神了,也許這才是這個題目的精髓吧?


          So 為什么說這段代碼是“搞笑”的?


          這位老哥給出了完美答案[7]:


          根據(jù)密碼學(xué)實踐,Java的SecureRandom原本就不應(yīng)該用來派生密鑰,而應(yīng)該使用更為專業(yè)的密鑰派生算法,比如PBKDF2;因為SecureRandom的具體表現(xiàn),依賴底層隨機數(shù)發(fā)生器的實現(xiàn),如果隨機數(shù)發(fā)生器不一致,即使你set的種子seed(不同的封裝中參數(shù)名可能不一樣,如[1]中就叫seed,[4]中叫password)一樣,結(jié)果也會不一樣,導(dǎo)致不同平臺甚至不同Android SDK版本計算得出的密鑰都不一樣;也就會出現(xiàn)一個平臺加密的密文,使用同樣的password,在另外的平臺解密不出明文的異常情況,即CTF菜雞本次的遭遇。


          理論上正確的實踐(使用PBKDF2或類似算法派生密鑰),應(yīng)該出現(xiàn)在各大公司的安全編碼規(guī)范、安全設(shè)計規(guī)范、密碼學(xué)應(yīng)用規(guī)范等等文檔中。


          但是,隨便搜索一下,會發(fā)現(xiàn)使用類似邏輯派生密鑰的AES封裝以及相關(guān)帖子[1]~[7]隨處可見,說明壞代碼的擴散能力和好代碼一樣強。甚至有兄弟分析了為什么這種方案Windows和Linux上跨平臺解密異常的情況,還給出了“解決方案[6]”,但卻不是把SecureRandom換成類似PBKDF2這樣的專業(yè)算法的滿分答案,可惜了。


          再扯一個很容易被忽視的SecureRandom使用實踐吧


          Java的SecureRandom是一個可以用來高效產(chǎn)生密碼學(xué)意義的安全隨機數(shù)偽隨機數(shù)發(fā)生器,它還是個偽隨機數(shù)發(fā)送器,并不是真隨機數(shù)發(fā)生器,多用在某些需求密碼學(xué)意義的安全隨機數(shù)場景,如AES的IV值。

          但是呢,千萬要注意,這種場景下,千萬千萬千萬千萬千萬不要手動給SecureRandom實例setSeed,就像上面提到的“搞笑”代碼一樣。

          因為set了固定的或不安全的種子seed后,Java的SecureRandom就退化為一個純純的偽隨機數(shù)發(fā)生器,也就產(chǎn)生不了密碼學(xué)意義的安全隨機數(shù)。

          先是舊聞一則:日本一名 13 歲女孩在網(wǎng)上遭遇 Javascript 無限彈窗,然后覺得好玩而將代碼在論壇上進(jìn)行分享,結(jié)果遭到了刈谷警方的詢問和指控(果然讓熊孩子碰電腦容易出事……)。此事引發(fā)了廣泛爭議,以至于日本程序員 Kimikazu Kato 在 GitHub 上發(fā)起了快來逮捕我的抗議活動,呼吁大家一起分享 JS 無限彈窗代碼,讓日本警方來逮捕他們或者去警局自首。

          這段無限循環(huán)代碼主要影響桌面版 Chrome 和移動瀏覽器,而 Edge 和 Firefox 瀏覽器則不受影響,可以正常關(guān)閉窗口。代碼是在 2014 年寫的,已經(jīng)被很多人分享過,而這名女孩不是唯一一位受到調(diào)查的,還有另外兩人受到調(diào)查。

          我們且不說程序員 Kimikazu Kato的做法正確與否,我們今天就在技術(shù)無罪的前提下,來討論這段代碼,咳咳,敲黑板,接下來便是重點.

          以上便是代碼的全部內(nèi)容,下載下來重命名為index.html,然后上傳到任意服務(wù)器,再打開你的鏈接/index.html。嘿嘿嘿,之后便會無限彈出:“你是豬嗎?”,并且關(guān)都關(guān)不掉……那場面,嘖嘖,難以想象。這里建議用電腦,修改文件名后直接雙擊打開就可以在瀏覽器預(yù)覽了。

          注:小庫僅進(jìn)行技術(shù)分析,不承擔(dān)任何責(zé)任,聽說出了事是要扣雞腿的。??

          多人都被大大小小的一些有趣的小網(wǎng)頁玩弄過吧!今天教大家用一個小文本寫一個簡單的惡搞網(wǎng)頁!

          炒雞炒雞簡單哦!

          第一:在電腦新建一個txt文件;

          新建文本文件

          第二:把下面的代碼copy到文本文件里面,這些文字是可以隨便修改的哦;然后把文件后綴改為html;

          <html>

          <head>

          <title>網(wǎng)頁特效---很惡心的常見整人效果</title>

          </head>

          <body>

          <a href="" onMouseover="alert('為什么把鼠標(biāo)放到這里?');

          alert('我不是說過不可以這樣嗎?');

          alert('你把我的話當(dāng)什么了?');

          alert('你知道錯了嗎?');

          alert('什么?你居然....');

          alert('居然還沒意識到自己做錯了?');

          alert('那好,你要為此付出代價!');

          alert('我要你在這里點足一千下......');

          alert('什么?你開始有點后悔了?');

          alert('何必呢?');

          alert('你當(dāng)初干什么去了?');

          alert('不原諒你!');

          alert('好從現(xiàn)在開始再點995下......');

          alert('你的手開始累了嗎?');

          alert('什么?你已經(jīng)沒力氣了?');

          alert('你一直在求我原諒你啊!');

          alert('看來你是真的知道錯了!');

          alert('下次你還會這么做嗎?');

          alert('真的不會了?');

          alert('那好,今天就放你一馬!');

          alert('寫封信給我說聲對不起!');

          alert('你能這么做我很高興!!!');

          document.bgColor='black';

          document.fgColor='White';

          window.location.href='mailto:mygod@god?subject=對不起,下次不敢了!';">不許把鼠標(biāo)移到這里</a>

          嘻試吧爽噢。。

          </body>

          </html>

          就是這樣子

          第三:直接打開這個就好啦,不瞞你們說,小編剛剛打開的時候自己正在編寫的文章重新寫了一遍!

          我就不展示運行效果了;

          每天都會更新一篇簡單的小軟件 小程序呦! 不更你打我


          主站蜘蛛池模板: 人妻少妇精品视频一区二区三区| 日本香蕉一区二区三区| 国产在线精品一区在线观看| 国产在线aaa片一区二区99| 日韩一区二区视频| 99精品高清视频一区二区| 麻豆精品人妻一区二区三区蜜桃| 亚洲成在人天堂一区二区| 精品成人一区二区三区四区| 国产精品区一区二区三| 精品国产乱码一区二区三区| 久久久久成人精品一区二区| 中文字幕无码免费久久9一区9| 国产视频一区二区| 夜夜精品视频一区二区| 人妻互换精品一区二区| 国产精品一区视频| 日韩中文字幕精品免费一区| 成人中文字幕一区二区三区| 精品无码一区在线观看| 亚洲欧洲一区二区| 久久久久人妻精品一区二区三区 | 蜜桃视频一区二区三区| 亚洲av无码一区二区三区四区 | 国产美女av在线一区| 亚洲av成人一区二区三区在线观看| 国产精品一区二区久久乐下载| 国产主播一区二区三区在线观看| 国模视频一区二区| 日本精品一区二区三区在线视频一| 国产精品亚洲专区一区| 精品视频一区二区观看| 成人国内精品久久久久一区| 国产精品一区二区久久精品无码 | 无码人妻一区二区三区在线 | 2014AV天堂无码一区| 丝袜无码一区二区三区| 亚洲国产精品乱码一区二区| 亚洲一区免费视频| 夜精品a一区二区三区| 琪琪see色原网一区二区|