BUUCTFCrypto详细完整Writeup(持续更新ing)AllFalls

每一天都要努力啊----2024-01-0118:11:36

原题:下面的字符串解密后便能获得flag:ZmxhZ3tUSEVfRkxBR19PRl9USElTX1NUUklOR30=注意:得到的flag请包上flag{}提交

由小写字母大写字母和数字组成,尾部是’=‘,猜测为base64编码,base64解密后得到flag:flag{THE_FLAG_OF_THIS_STRING}

特征:密文由64个字符(A-Z,a-z,0-9,+,/)组成,末尾可能会有1或2个’=’最多有2个。举例:MDEyMzQ1Njc4OTA=、

原题:e00cf25ad42683b3df678c61f42c6bda

md5解密得到flag:admin1

md5

原题:%66%6c%61%67%7b%61%6e%64%20%31%3d%31%7d

有很多百分号的就是url编码,直接url解码

得到flag:flag{and1=1}

原题:synt{5pq1004q-86n5-46q8-o720-oro5on0417r1}

一看就是ceaser密码,直接网站工具或者脚本,我这里给出一个小写字母的暴力破解,每个偏移量都试一试。

#-*-coding:utf-8-*-"""作者:WangXinwei日期:2023年12月27日"""importstringalphabet='abcdefghijklmnopqrstuvwxyz'itoc=lambdai:alphabet[i]#返回字母表中对应的字符ctoi=lambdac:alphabet.index(c)defCaesar_dec(ciphertext,k):plaintext=''forchinciphertext:ifchnotinalphabet:plaintext+=chelse:plaintext+=itoc((ctoi(ch)-k)%len(alphabet))returnplaintexts="synt{5pq1004q-86n5-46q8-o720-oro5on0417r1}"foriinrange(1,27):print(Caesar_dec(s,-i))得出flag:flag{5cd1004d-86a5-46d8-b720-beb5ba0417e1}

原题:...-..---...-.-.-----..-

直接toolsFX中的morse解密,得到flag:ILOVEYOU

原题:姓名:张三生日:19900315key格式为key{xxxxxxxxxx}

社会工程,猜测密码为zs19900315

原题:加密密文:afZ_r9VYfScOeO_UL^RWUc格式:flag{}

#-*-coding:utf-8-*-"""作者:WangXinwei日期:2023年12月27日"""defdec_cipher(s,shift):dec=""forvalins:dec+=chr(ord(val)+shift)shift+=1returndecs="afZ_r9VYfScOeO_UL^RWUc"foriinrange(1,27):print(dec_cipher(s,i))得到flag:flag{Caesar_variation}

原题:=E9=82=A3=E4=BD=A0=E4=B9=9F=E5=BE=88=E6=A3=92=E5=93=A6

如题目一样:直接解密

得到flag:那你也很棒哦

原题:U2FsdGVkX1/+ydnDPowGbjjJXhZxm2MP2AgI

U2Fsd,典型的兔子流。

rabbit解密,得到flag:Cute_Rabbit

栅栏密码,W-type=14,得到flag:flag{wethinkw}ehavetheflag

得到flag:flagisn1_2hen-d3_hu1-mi-ma_a(注意需要分析两次)

原题:89FQA9WMD

题目说的很明白,直接unencode编码,得到flag:flag{dsdasdsa99877LLLKK}

原题:-..../.----/-..../-..../-..../...--/--.../....-/-..../-..../--.../-.../...--/.----/--.../...--/..---/--.../--.../....-/...../..-./--.../...--/...--/-----/...../..-./...--/...--/...--/....-/...--/...../--.../----./--.../-..

直接用toolsFX的morse解密,得到61666374667B317327745F73305F333435797D,只有数字和字母A--F,猜测为16进制,再16进制转化为ascii码

得到flag:afctf{1s't_s0_345y}

原题:c1,n,e1,c2,e2

显然公用了一个模数n,为共模攻击:当两个用户使用相同的模数,不同的私钥,加密同一明文信息的时候就存在共模攻击

#-*-coding:utf-8-*-"""作者:WangXinwei日期:2023年12月25日"""fromCrypto.Util.numberimport*defedge(a,b):u,u1=1,0v,v1=0,1whileb:q,r=divmod(a,b)#返回除数和商u,u1=u1,u-q*u1v,v1=v1,v-q*v1a,b=b,rreturnu,v,ae1=1e2=2n=0;c1=1;c2=1r,s,_=edge(e1,e2)ifr<0:r=-rc1=inverse(c1,n)else:s=-sc2=inverse(c2,n)#取逆元m=pow(c1,r,n)*pow(c2,s,n)%nprint(long_to_bytes(m))得到flag:flag{49d91077a1abcb14f1a9d546c80be9ef}

dp泄露

适用情况:题目提供dp\dq

有时候除了e,n,c之外题目还会给你像dp,dq这样的值,这是为了方便计算产生的,同时也给了我们另一种解题思路。首先,了解dp,dq是什么东西:

dp=d%(p-1)

然后就可以进行推导,简单过程如下:

d=dp+k1*(p-1)

d*e=1+k2(p-1)(q-1)

把第二个式子的d代换掉:

e*(dp+k1(p-1))=1+k2(p-1)(q-1)

两边同时对(p-1)取模,消去k

e*dp%(p-1)=1

e*dp=1+k(p-1)

得到这个式子之后我们就可以通过爆破k的方式来求出p,进而求出d。

原题:我们得到了一串神秘字符串:TASCO3RJMVWDJKXZM,问号部分是未知大写字母,为了确定这个神秘字符串,我们通过了其他途径获得了这个字串的32位MD5码。但是我们获得它的32位MD5码也是残缺不全,E9034DAB0851808A,请猜出神秘字符串的原本模样,并且提交这个字串的32位MD5码作为答案。注意:得到的flag请包上flag{}提交

直接暴力破解:上脚本

importstringfromitertoolsimportproductimporthashlibraw=list("TASCO3RJMVWDJKXZM")md5="E9034DAB0851808A"table=string.ascii_uppercaseforvalinproduct(table,repeat=3):raw[4]=val[0];raw[11]=val[1];raw[-3]=val[2]md=hashlib.md5("".join(raw).encode()).hexdigest().upper()ifmd[:4]==md5[:4]:print(md)30.异性相吸原题:最近出现了一个奇葩观点,说性别都不一样,怎么能谈恋爱?为了证明这个观点错误,请大家证明异性是相吸的。注意:得到的flag请包上flag{}提交,下载附件,有两个文件,其中一个是key.txt:asadsasdasdasdasdasdasdasdasdasdqwesqf,另外一个密文打不开。

解题:本题一直强调异性,由此猜测是异或,网上大多wp都是要先转2进制010,但是其实并不用。以下给出解题代码:

fromCrypto.Util.numberimport*frombinasciiimportunhexlifywithopen("F:/百度网盘/b8c1caee-43d6-42ee-aecc-d72502a5ade2/key.txt","rb")asf:file1=(bytes_to_long(f.read()))withopen("F:/百度网盘/b8c1caee-43d6-42ee-aecc-d72502a5ade2/密文.txt","rb")asf:file2=(bytes_to_long(f.read()))re=file1^file2c=hex(re)[2:]print(unhexlify(c))得到flag:flag{ea1bc0988992276b7f95b54a7435e89e}

原题:给了两个文件flag.enc和pub.key。其中pub.key可以直接打开。我用的是脚本,但是还是解释一下把:一下是pub.key的内容

-----BEGINPUBLICKEY-----MDwwDQYJKoZIhvcNAQEBBQADKwAwKAIhAMAzLFxkrkcYL2wch21CM2kQVFpY9+7+-->n/AvKr1rzQczdAgMBAAE=-->e-----ENDPUBLICKEY-----

我们可以直接拿到网站上去得到n和e的值,不过那么太没有技术含量了,我们还是写脚本。

#-*-coding:utf-8-*-"""作者:WangXinwei日期:2023年12月27日"""importrsaimportbase64fromCrypto.PublicKeyimportRSAfromCrypto.Util.numberimport*withopen('****/pub.key','r')asf:key=RSA.importKey(f.read())public_key=key.publickey().exportKey()#private_key=key.exportKey()#print(public_key.decode())#print(private_key.decode())n=key.nprint(n)e=key.eprint(e)#得到n之后分解nq=863653476616376575308866344984576466644942572246900013156919p=965445304326998194798282228842484732438457170595999523426901phi=(q-1)*(p-1)d=inverse(e,phi)private_key=rsa.PrivateKey(n,e,d,q,p)#直接得到私钥.withopen('****/flag.enc','r')asfi:m=fi.read()print(m)m=base64.b64decode(m)print(rsa.decrypt(m,private_key))32.RSAROLL原题:题目.txt:RSAroll!roll!roll!Onlynumberanda-z(don'tuseeditorwhichMSprovide)

查看代码

{920139713,19}70479679275221115227470416418414022368270835483295235263072905459788476483295235459788476663551792475206804459788476428313374475206804459788476425392137704796792458265677341524652483295235534149509425392137428313374425392137341524652458265677263072905483295235828509797341524652425392137475206804428313374483295235475206804459788476306220148看到这题你或许会很懵,但是看到{920139713,19},你很容易想到给出了公钥,n和e。下面的数字需要一个一个解密:

fromCrypto.Util.numberimport*n=920139713e=19q=18443p=49891li=704796792phi=(q-1)*(p-1)d=inverse(e,phi)withopen("F:\百度网盘/02c01a13-3a86-47de-8648-f03328a5e5d8\RsaRoll/data.txt","r")asf:f.readline();f.readline()c=f.read().strip().split("\n");m=""foriinc:m+=chr(pow(int(i),d,n))print(m)得到flag:flag{13212je2ue28fy71w8u87y31r78eu1e2}

#n:0x52d483c27cd806550fbe0e37a61af2e7cf5e0efb723dfc81174c918a27627779b21fa3c851e9e94188eaee3d5cd6f752406a43fbecb53e80836ff1e185d3ccd7782ea846c2e91a7b0808986666e0bdadbfb7bdd65670a589a4d2478e9adcafe97c6ee23614bcb2ecc23580f4d2e3cc1ecfec25c50da4bc754dde6c8bfd8d1fc16956c74d8e9196046a01dc9f3024e11461c294f29d7421140732fedacac97b8fe50999117d27943c953f18c4ff4f8c258d839764078d4b6ef6e8591e0ff5563b31a39e6374d0d41c8c46921c25e5904a817ef8e39e5c9b71225a83269693e0b7e3218fc5e5a1e8412ba16e588b3d6ac536dce39fcdfce81eec79979ea6872793L#e:0x3#c:0x10652cdfaa6b63f6d7bd1109da08181e500e5643f5b240a9024bfa84d5f2cac9310562978347bb232d63e7289283871efab83d84ff5a7b64a94a79d34cfbd4ef121723ba1f663e514f83f6f01492b4e13e1bb4296d96ea5a353d3bf2edd2f449c03c4a3e995237985a596908adc741f32365so,howtogetthemessage可以看到n很大,e很小,为低加密指数攻击。

#-*-coding:utf-8-*-"""作者:WangXinwei日期:2024年01月30日"""importgmpy2fromCrypto.Util.numberimport*frombinasciiimporta2b_hex,b2a_hexp=262248800182277040650192055439906580479q=262854994239322828547925595487519915551e=65533n=p*qphi=(p-1)*(q-1)d=inverse(e,phi)#c=pow(int(b2a_hex(flag),16),e,n)c=27565231154623519221597938803435789010285480123476977081867877272451638645710m=pow(c,d,n)m=long_to_bytes(m)print(m)35.[GXYCTF2019]CheckIn原题:dikqTCpfRjA8fUBIMD5GNDkwMjNARkUwI0BFTg==

base64解码后得到:v)*L*_F0<}@H0>F49023@FE0#@EN

得到flag:GXY{Y0u_kNow_much_about_Rot}

还能提示什么呢?公平的玩吧(密钥自己找)Dncnoqqfliqrpgeklwmppu注意:得到的flag请包上flag{}提交,flag{小写字母}

试了各种都解不出来,看了网上的答案才知道是“普莱费尔密码”(playfair)

其实题目也暗示你了:“公平的玩吧”

flag:Itisnotaproblemhavefun

二战时期,某国军官与一个音乐家情妇相好,然而自从那时起,他屡战屡败,敌人似乎料事如神。他也有怀疑过他的情妇,但是他经过24小时观察他的情妇,发现她每天都只是作曲,然后弹奏给战地电台,为士兵们鼓气,并未有任何逾越。那么,间谍到底是谁?这张曲谱是否有猫腻?(答案为一个明文字符串,提交获得的有意义语句通顺字符串即可)注意:得到的flag请包上flag{}提交

思想8进制转十进制再转ASCII,以下给出解题脚本:

a="111,114,157,166,145,123,145,143,165,162,151,164,171,126,145,162,171,115,165,143,150"li=a.split(",")flag=""foriinli:flag+=chr(int(i,8))print(flag)得到flag:ILoveSecurityVeryMuch4

原题:

p+q:0x1232fecb92adead91613e7d9ae5e36fe6bb765317d6ed38ad890b4073539a6231a6620584cea5730b5af83a3e80cf30141282c97be4400e33307573af6b25e2ea(p+1)(q+1):0x5248becef1d925d45705a7302700d6a0ffe5877fddf9451a9c1181c4d82365806085fd86fbaab08b6fc66a967b2566d743c626547203b34ea3fdb1bc06dd3bb765fd8b919e3bd2cb15bc175c9498f9d9a0e216c2dde64d81255fa4c05a1ee619fc1fc505285a239e7bc655ec6605d9693078b800ee80931a7a0c84f33c851740e:0xe6b1bee47bd63f615c7d0a43c529d219d:0x2dde7fbaed477f6d62838d55b0d0964868cf6efb2c282a5f13e6008ce7317a24cb57aec49ef0d738919f47cdcd9677cd52ac2293ec5938aa198f962678b5cd0da344453f521a69b2ac03647cdd8339f4e38cec452d54e60698833d67f9315c02ddaa4c79ebaa902c605d7bda32ce970541b2d9a17d62b52df813b2fb0c5ab1a5enc_flag:0x50ae00623211ba6089ddfae21e204ab616f6c9d294e913550af3d66e85d0c0693ed53ed55c46d8cca1d7c2ad44839030df26b70f22a8567171a759b76fe5f07b3c5a6ec89117ed0a36c0950956b9cde880c575737f779143f921d745ac3bb0e379c05d9a3cc6bf0bea8aa91e4d5e752c7eb46b2e023edbc07d24a7c460a34a9a(p+1)*(q+1)=n+q+p+1.

所以可以直接求出n。

而phi=(p-1)*(q-1)=n-q-p+1

给出解题脚本

自己编的base64表,我们要将它还原

整理后得到:......-...-..---.--.....--.....-.....-.-.-.--..-.....-...------.--.-......--.

翻译得

密码是:HELLOWHATISTHEKEYITISBOOPBEEP

N=101991809777553253470276751399264740131157682329252673501792154507006158434432009141995367241962525705950046253400188884658262496534706438791515071885860897552736656899566915731297225817250639873643376310103992170646906557242832893914902053581087502512787303322747780420210884852166586717636559058152544979471e=46731919563265721307105180410302518676676135509737992912625092976849075262192092549323082367518264378630543338219025744820916471913696072050291990620486581719410354385121760761374229374847695148230596005409978383369740305816082770283909611956355972181848077519920922059268376958811713365106925235218265173085importhashlibflag="flag{"+hashlib.md5(hex(d)).hexdigest()+"}"尝试分解n,e很大。尝试wiener利用。

这道题的确是wiener利用。但是解题网站的确能分出p和q。

给了很多c和n应该解出来都是明文m。寻找其中两个人的最大公因数。

给出解题代码。

斐波那契数列还原顺序

#-*-coding:utf-8-*-"""作者:WangXinwei日期:2024年01月31日"""a="01235813213455891442333776109871597258441816765109461771128657463687502512139319641831781151422983204013462692178309"b="02333258413462691445196418211597610377109468951422998785567652178309121393317811463684181183204022865775025341317711"a=a.split("")b=b.split("")flag=[]m="36968853882116725547342176952286"foriinrange(len(a)):forjinrange(len(a)):ifa[i]==b[j]:flag.append(m[j])breakprint(''.join(flag))44.[WUSTCTF2020]佛说:只能四天

猪圈密码加圣堂武士密码。

flag{CRYPTOFUN}46.rot原题:83897884458696451151211101161361321321321081281171181341101231111101271081121241221081181281081311141271341081161241241131087676767613823908166716469114651126466636961701146266616269677063611101101126468627061112111112

看样子很像ASCII码,但有些不是,结合rot。

ROT5、ROT13、ROT18、ROT47编码是一种简单的码元位置顺序替换暗码。此类编码具有可逆性,可以自我解密,主要用于应对快速浏览,或者是机器的读取,而不让其理解其意。ROT5是rotateby5places的简写,意思是旋转5个位置,其它皆同。下面分别说说它们的编码方式:ROT5:只对数字进行编码,用当前数字往前数的第5个数字替换当前数字,例如当前为0,编码后变成5,当前为1,编码后变成6,以此类推顺序循环。ROT13:只对字母进行编码,用当前字母往前数的第13个字母替换当前字母,例如当前为A,编码后变成N,当前为B,编码后变成O,以此类推顺序循环。ROT18:这是一个异类,本来没有,它是将ROT5和ROT13组合在一起,为了好称呼,将其命名为ROT18。ROT47:对数字、字母、常用符号进行编码,按照它们的ASCII值进行位置替换,用当前字符ASCII值往前数的第47位对应字符替换当前字符,例如当前为小写字母z,编码后变成大写字母K,当前为数字0,编码后变成符号_。用于ROT47编码的字符其ASCII值范围是33-126,具体可参考ASCII编码。

前移13位后,得到提示FLAGISflag{www_shiyanbar_com_is_very_good_}MD5:38e4c352809e150186920aac37190cbc

看样子要破解后4位,于是开始编脚本:开始只用了小写字母表发现找不到,于是扩大范围。大约要运行几分钟。

importstringimportitertoolsimporthashliba="83897884458696451151211101161361321321321081281171181341101231111101271081121241221081181281081311141271341081161241241131087676767613823908166716469114651126466636961701146266616269677063611101101126468627061112111112"b=a.split("")re=""foriinb:re+=chr(int(i)-13)#print(re)#FLAGISflag{www_shiyanbar_com_is_very_good_}#MD5:38e4c352809e150186920aac37190cbcFLAG="flag{www_shiyanbar_com_is_very_good_"MD5="38e4c352809e150186920aac37190cbc"table=string.printable[:96]#可打印字符print("运行中......")forjinitertools.product(table,repeat=4):j="".join(j)md=hashlib.md5((FLAG+str(j)+"}").encode()).hexdigest()ifmd==MD5:print(FLAG+j+"}")breakelse:print("NOFIND")47.这是什么查看16进制,发现一堆奇怪的字符。

控制台运行。会弹出flag。

n可以直接分解。也可以减1后分解质因数。

以下是解题代码

#-*-coding:utf-8-*-"""作者:WangXinwei日期:2024年01月31日"""importbase64frombase64importb64encodefromgmpy2importinvert,gcd,irootfromCrypto.Util.numberimport*frombinasciiimporta2b_hex,b2a_heximportrandom#e=random.randint(50000,70000)#whileTrue:#ifgcd(e,phi)==1:#break;#else:#e-=1;c="==gMzYDNzIjMxUTNyIzNzIjMyYTM4MDM0gTMwEjNzgTM2UTN4cjNwIjN2QzM5ADMwIDNyMTO4UzM2cTM5kDN2MTOyUTO5YDM0czM3MjM"#print(base64.b64decode(c[::-1]))#c=pow(int(b2a_hex(flag),16),e,n)#print(b64encode(str(c))[::-1])#2373740699529364991763589324200093466206785561836101840381622237225512234632p=177077389675257695042507998165006460849n=37421829509887796274897162249367329400988647145613325367337968063341372726061c=2373740699529364991763589324200093466206785561836101840381622237225512234632q=n//pphi=(p-1)*(q-1)foriinrange(50000,70000):ifGCD(phi,i)==1:d=inverse(i,phi)m=str(long_to_bytes(pow(c,d,n)))if'flag'inmor'ctf'inm:print(m)#whileTrue:#ifgcd(e,phi)==1:#break;#else:#e-=1;

原题:oooyyyiiwuuueeuuuuyyyuuuuywuuuiirrwiirrrrruuuurrruuuutiiuuuuiwurrreewwweeyyyeeewwwwttee

脑洞实在是太大了,想不出来。

flag:flag{youaresosmartthatthisisjustapieceofcake}

给了三组n与c。

模不互素

16进制解密,BJD{We1c0me_t4_BJDCTF}

c=28767758880940662779934612526152562406674613203406706867456395986985664083182n=73069886771625642807435783661014062604264768481735145873508846925735521695159e=65537

THE END
1.asdasd:asdadadasdadasdsadad曾经和有问必答病情分析:请问您这是什么意思啊?指导意见:完全没有写清楚你的症状,建议写清楚再发。https://www.120ask.com/question/19754966.htm
2.SegmentFaultflask的问题</p>" + request.host https://segmentfault.com/q/1010000043590616 2023-03-27T20:28:00+08:00 2023-03-27T20:28:00+08:00 Verk?ufer https://segmentfault.com/u/verkfer 0 asdasdasdasdasdasdas https://segmentfault.com/q/1010000043581751 2023-03-24T18:09:47+08:00 2023-03...https://segmentfault.com/feeds/tag/flask
3.C语言基础#include <stdio.h> int main(int argc, char const *argv[]) { /** char **a; a是一个指针,指向另一个指针,那个指针指向一个字符(串) ,所以它不是我们要的字符串数组 */ /** char a[][10]; a是一个二维数组 */ char a[][10] = { "Hello", "World", "sdasASsSaADASDASDasdds",//...https://www.jianshu.com/p/8da39995207a
1.flex子元素内容超出盒子容器宽度问题解决CSS教程CSS网页制作adasdasdasdadasdasdasdasdasadasdasdasdadasdasadasdasdasdadasdasdasdasdasadasdasdasdadasdas css 1 2 3 4 5 6 7 8 9 10 11 12 13 .flex { width:300px; height:100px; display: flex; } .left{ flex:1; background-color:aqua; ...https://www.jb51.net/css/877418.html
2.快速理解C++中的sizeof和memset{charc;char* c0;charc1[4];inta0;inta1[10];int* a2;int* a3=newint[10];stringa4;stringa5="abcd";string* a6=newstring("asdasdasd");cout<<sizeof(c)<<endl//1<<sizeof(c0)<<endl//8<<sizeof(c1)<<endl//4<<sizeof(a0)<<endl//4<<sizeof(a1)<<endl//40<<sizeof(a2)<<endl...https://blog.csdn.net/Yuta233/article/details/79057451
3.Nessus指南nessusopenvasmob64ca140dc73b的技术博客'X-API-Token': 'XXADADASDASDASD'} resp = requests.post('%s/scans/%s/launch' % (url, scan_id), headers=headers, verify=False) print(resp.status_code) print(resp.text) 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 5.如何调用商用API ...https://blog.51cto.com/u_16213673/10175730
4.实战记一次邮件系统C段引发的SQL手注和内网渗透但是如果你再堆叠的第二行语句输入错误的语法,它还是会检查语法正确性的a';select asdasdasd-- 这时候直接进行一个基本信息的看,select @@version 我看了看这个Windows NT 5.0 (Build 2195: Service Pack 4),人麻了,这不是windows2000 吗 再看了看这个 WEB 的 IIS 8.5,怎么也不相信一个 windows 2000 ...https://cloud.tencent.com/developer/article/2204674
5.空调型号KF72LW各字母代表什么意思通迅故障...https://ask.zol.com.cn/x/15719717.html
6.buyhydroneerforpcviasteamasdasdasd 帐户内拥有 313 项产品 15 篇评测 推荐 总时数 54.5 小时 (评测时 45.0 小时) 发布于:10 月 30 日 多人模式什么时候有啊 这篇评测是否有价值? 是 否 欢乐 奖励 Eason Zhai 9 篇评测 推荐 总时数 29.2 小时 (评测时 24.6 小时) 发布于:11 月 6 日 good 这篇评测是否有价...https://store.steampowered.com/app/1106840/Hydroneer/