HBCTF第二場(chǎng)WP
https://blog.ctftools.com/2017/05/post153
發(fā)表于2017年5月23日
Misc
中非共和國(guó)-簽到題
題作者:Dr3@m WriteUp作者:Dr3@m
\u0068\u0062\u0063\u0074\u0066\u007b\u7b7e\u5230\u9898\u007d
Unicode編碼,解碼即可煤篙,如下圖
埃塞俄比亞-隱寫術(shù)
題作者:Dr3@m WriteUp作者:Dr3@m
原題下載:http://hbctf-1252906577.costj.myqcloud.com/misc/color.png
用Stegsolve打開圖片并左右翻頁(yè)得到如圖:
使用binwalk提取或者直接將文件后綴改為.zip解壓打開得到如圖:
連起來就是flag荒椭。
坦桑尼亞-知己知彼
題作者:Dr3@m WriteUp作者:Dr3@m
原題下載:http://hbctf-1252906577.costj.myqcloud.com/misc/2-1.zip資源庫(kù):https://www.ctftools.com/down/
下載附件打開看到BurpLoader.jar,如圖:
想到burpsuite舰蟆,猜想是明文攻擊趣惠,題目給了提示去看資源庫(kù),于是到資源庫(kù)下載并解壓出BurpLoader.jar身害,如圖:
順便把明文攻擊工具AZPR下載下來味悄,在暴力破解一欄中。將BurpLoader.jar用好壓壓縮塌鸯。安裝并打開AZPR侍瑟,可以點(diǎn)擊Option把語(yǔ)言改為簡(jiǎn)體中文。將待解密壓縮包放到“加密的ZIP文件”,攻擊類型選擇文本攻擊(就是明文攻擊)涨颜,點(diǎn)擊下方文本费韭,將剛剛壓縮的BurpLoader.zip放到“文本文件路徑”,如圖操作:
點(diǎn)擊上方開始庭瑰,一會(huì)之后即可得到如圖:
出題時(shí)為了防止暴力破解星持,使用了一個(gè)md5作為壓縮密碼,所以上邊顯示沒有找到密碼弹灭,如果密碼位數(shù)較短就可以找到督暂,不過這不影響我們做題,點(diǎn)擊確定后即可得到如圖:
解壓解密后的壓縮包即可獲得flag:
Crypto
馬達(dá)加斯加-MIX大禮包
題作者:pcat WriteUp作者:pcat
原題下載:http://hbctf-1252906577.costj.myqcloud.com/crypto/MIX%E5%A4%A7%E7%A4%BC%E5%8C%85.py
這題的py腳本里面其實(shí)涉及了偽隨機(jī)數(shù)穷吮,只要種子一樣逻翁,之后的隨機(jī)值都相同,關(guān)鍵點(diǎn)在于不同的操作系統(tǒng)捡鱼,在題目里已經(jīng)標(biāo)明使用windows系統(tǒng)八回,而且為了不讓新手陷入困惑,我都加上了assert來判斷驾诈。解密的腳本直接把輸出當(dāng)輸入缠诅,然后修改中間的運(yùn)算
Python
# -*- coding:utf8 -*-# 使用windows系統(tǒng)fromrandomimport*defdemix():en_flag='SACBK8AEJCAOW52YL9ANBO7PQ0YvrEajcxnu7784704595388694801'seed("www.ChaMd5.org")out=''assertrandrange(0,100)==78forcinen_flag:ifc.islower():out+=chr((ord(c)-0x61-randrange(0,26))%26+0x61)elifc.isupper():out+=chr((ord(c)-0x41-randrange(0,26))%26+0x41)elifc.isdigit():out+=chr((ord(c)-0x30-randrange(0,10))%10+0x30)else:out+=cprintout#得到mixed_flag為 NBRGG5DGPNRGC43FL5XGSY3FX2FueGlhbmdf8316025876259956605passif__name__=='__main__':demix()
這題得到NBRGG5DGPNRGC43FL5XGSY3FX2FueGlhbmdf8316025876259956605,這才是真正要考查的地方翘鸭,也許第一眼看起來會(huì)很懵逼。
本題的提示“MIX大禮包”戳葵,能否聯(lián)想起類似的“BASE全家桶”就乓,這題就是base32+base64+base16拼接起來,做題的突破口在于先拿去base64解碼拱烁,直接解碼是會(huì)報(bào)padding錯(cuò)生蚁,只要末尾加個(gè)=即可,然后看起來雖然是亂碼戏自,但中間你可以看到”_anxiang_”邦投,
而”_anxiang_”的b64編碼是X2FueGlhbmdf,從而把前后給分開擅笔,前面是NBRGG5DGPNRGC43FL5XGSY3F志衣,字符集為[A-Z2-7],就很大可能是base32猛们,解碼為”hbctf{base_nice”念脯,而后面8316025876259956605是十進(jìn)制的表示,改為十六進(jìn)制為0x73687579696e677d弯淘,十六進(jìn)制變字符就是”shuying}”
所以flag是hbctf{base_nice_anxiang_shuying}
剛果(金)-DoYouKnowRSA
題作者:pcat WriteUp作者:pcat
原題下載:http://hbctf-1252906577.costj.myqcloud.com/crypto/DoYouKnowRSA.txt
這題純屬是給新手入門RSA(我的e值設(shè)置偏小绿店,而且n值可以直接在factor.com上分解到,以前那網(wǎng)站上還沒那條記錄),題目里給出了c假勿、n借嗽、dp、dq转培《竦迹可能比較陌生的是dp和dq,但只要搜索一下堡距,找找資料的還是可以做的啦甲锡。
以下提供腳本即可,在腳本里你就會(huì)找到你想要的羽戒。
Python
# -*- coding:utf8 -*-__author__='pcat'__blog__='http://pcat.cnblogs.com'try:importgmpy2exceptImportError:print("Error: you must install the gmpy2")print("http://pcat.cnblogs.com/p/5746821.html")exit()deffoo():#已知n=0x27335d21ca51432fa000ddf9e81f630314a0ef2e35d81a839584c5a7356b94934630ebfc2ef9c55b111e8c373f2db66ca3be0c0818b1d4eda7d53c1bd0067f66a12897099b5e322d85a8da45b72b828813af23c=0x258f85f5d08a95a909a4d9a4c66bf4249fba21091ddfe9fcfcd33c9f4cf285af9eb99c77f839a1a7ee7791c1e98f023adf3b02561a8c45e651f1984852b9a0280e24bee7bd4fc95d217b874f135e693f748d7bdp=0x40dadac6db130c9b1a33bab328dc7335220e0e1ec26cc03bf405211013cdb500a70d1a619565f2c0aafdq=0x2f1af91dc6ae2abba0a0b7cb4bf1a6361157f39b06bb3b17c2ce6b208aa0b5be634922a7ccfcfc586c5#由factordb.com可計(jì)算p和q缤沦,建議先轉(zhuǎn)10進(jìn)制#或者用yafu來分解np=3423616853305296708261404925903697485956036650315221001507285374258954087994492532947084586412780871q=3423616853305296708261404925903697485956036650315221001507285374258954087994492532947084586412780869'''
d=gmpy2.invert(e,(p-1)*(q-1))
dp=d%(p-1)
dq=d%(q-1)
'''#解法InvQ=gmpy2.invert(q,p)mp=pow(c,dp,p)mq=pow(c,dq,q)m=(((mp-mq)*InvQ)%p)*q+mqprint'{:x}'.format(m).decode('hex')passif__name__=='__main__':foo()print'ok''''
#由于本題是面對(duì)新手的,e值弄個(gè)很小的易稠,所以事實(shí)上你估計(jì)e值后也可以過關(guān)
e=0x10001
d=0x23ba51b0a167ed1733fa7655f5f4dd560a701f6e7b8ea9a3b21b9fd5a4ff971b9f86a91e60662f34afdb40f5f5551aebd489f39dff6c7b8c58852ccd3c2d07403b73ee83a859558b3318c279c26438e6e0c549
m='hbctf{RSA_15_C001_BEST_WISHES_TO_YOU_pcat}'
'''
Crypto
肯尼亞-creakme
題作者:逍遙自在 WriteUp作者:Fourele(點(diǎn)擊訪問原文)
原題下載:http://hbctf-1252906577.costj.myqcloud.com/reverse/creakme.exe
首先在ida中查看缸废,從main函數(shù)可以看出程序大致流程是先讀入一個(gè)字符串,然后經(jīng)過encrypt處理驶社,最后在check中與一個(gè)數(shù)組進(jìn)行比較企量。
先看看check中的比較:
雖然用了rand函數(shù),但是由于隨機(jī)數(shù)種子已經(jīng)給出亡电,所以這個(gè)數(shù)組是相當(dāng)于是已知的届巩。
再來看encrypt中對(duì)輸入的處理,就是將每個(gè)數(shù)和0x14異或份乒,所以應(yīng)輸入的字符串可以由下面的程序生成:
Markup
#include
#include
int main()
{
? ? srand(12);
? ? for(int i=0; i<=13; i++)
? ? putchar((rand()%10+48)^0x14);
? ? return 0;
}
然后應(yīng)該就是這道題的坑了吧恕汇,注意到在兩個(gè)函數(shù)中都用到了flag這個(gè)全局變量,當(dāng)此變量值為1的時(shí)候才執(zhí)行輸出flag的操作或辖,于是在OD中先將這個(gè)變量修改為1瘾英,再輸入剛剛生成的字符串,便得到flag了
下次比賽時(shí)間待定颂暇,感謝參賽缺谴。HBCTF官方群(點(diǎn)擊加入):595176019
在博客中遇到的問題可以聯(lián)系admin@ctftools.com
本文由Dr3@m原創(chuàng)發(fā)布,轉(zhuǎn)載請(qǐng)注明來自HBCTF BLOG耳鸯,轉(zhuǎn)載代碼(點(diǎn)擊全選湿蛔,請(qǐng)按"Ctrl"+"C"復(fù)制):