0%

BUUCTF 每日打卡 2021-7-17

BUUCTF 每日打卡 2021-7-17

引言

[INSHack2019]Yet Another RSA Challenge - Part 1

加密代码如下:

1
2
3
4
5
6
7
8
9
import subprocess
p = subprocess.check_output('openssl prime -generate -bits 2048 -hex')
q = subprocess.check_output('openssl prime -generate -bits 2048 -hex')
flag = int('INSA{REDACTED}'.encode('hex'), 16)

N = int(p,16) * int(q,16)
print N
print '0x'+p.replace('9F','FC')
print pow(flag,65537,N)

其实就是随机生成p,q,然后常规RSA加密,就是输出的时候对p进行了一些小的改动 解题时不能确定原来的p是否也含有“FC”,所以不能直接替换回去,要遍历所有情况,符合条件的p应当整除N 写了一个简陋的递归程序来解密:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
from Crypto.Util.number import *

N = 719579745653303119025873098043848913976880838286635817351790189702008424828505522253331968992725441130409959387942238566082746772468987336980704680915524591881919460709921709513741059003955050088052599067720107149755856317364317707629467090624585752920523062378696431510814381603360130752588995217840721808871896469275562085215852034302374902524921137398710508865248881286824902780186249148613287250056380811479959269915786545911048030947364841177976623684660771594747297272818410589981294227084173316280447729440036251406684111603371364957690353449585185893322538541593242187738587675489180722498945337715511212885934126635221601469699184812336984707723198731876940991485904637481371763302337637617744175461566445514603405016576604569057507997291470369704260553992902776099599438704680775883984720946337235834374667842758010444010254965664863296455406931885650448386682827401907759661117637294838753325610213809162253020362015045242003388829769019579522792182295457962911430276020610658073659629786668639126004851910536565721128484604554703970965744790413684836096724064390486888113608024265771815004188203124405817878645103282802994701531113849607969243815078720289912255827700390198089699808626116357304202660642601149742427766381
p = '0xDCC5A0BD3A1FC0BEB0DA1C2E8CF6B474481B7C12849B76E03C4C946724DB577D2825D6AA193DB559BC9DBABE1DDE8B5E7805E48749EF002F622F7CDBD7853B200E2A027E87E331AFCFD066ED9900F1E5F5E5196A451A6F9E329EB889D773F08E5FBF45AACB818FD186DD74626180294DCC31805A88D1B71DE5BFEF3ED01F12678D906A833A78EDCE9BDAF22BBE45C0BFB7A82AFE42C1C3B8581C83BF43DFE31BFD81527E507686956458905CC9A660604552A060109DC81D01F229A264AB67C6D7168721AB36DE769CEAFB97F238050193EC942078DDF5329A387F46253A4411A9C8BB71F9AEB11AC9623E41C14FCD2739D76E69283E57DDB11FC531B4611EE3'
c = 596380963583874022971492302071822444225514552231574984926542429117396590795270181084030717066220888052607057994262255729890598322976783889090993129161030148064314476199052180347747135088933481343974996843632511300255010825580875930722684714290535684951679115573751200980708359500292172387447570080875531002842462002727646367063816531958020271149645805755077133231395881833164790825731218786554806777097126212126561056170733032553159740167058242065879953688453169613384659653035659118823444582576657499974059388261153064772228570460351169216103620379299362366574826080703907036316546232196313193923841110510170689800892941998845140534954264505413254429240789223724066502818922164419890197058252325607667959185100118251170368909192832882776642565026481260424714348087206462283972676596101498123547647078981435969530082351104111747783346230914935599764345176602456069568419879060577771404946743580809330315332836749661503035076868102720709045692483171306425207758972682717326821412843569770615848397477633761506670219845039890098105484693890695897858251238713238301401843678654564558196040100908796513657968507381392735855990706254646471937809011610992016368630851454275478216664521360246605400986428230407975530880206404171034278692756
e = 65537

def join_p(tmp, s, l):
s += tmp[0]
if s[-2:] == 'E3':
l.append(s)
# print(s)
for c in ['FC', '9F']:
if s[-2:] == 'FC':
s = s[:-2]
s += c
if len(tmp) > 1:
join_p(tmp[1:], s, l)
return l

tmp = p.split('FC')
list_p = join_p(tmp, '', [])
for _p in list_p:
if N % int(_p, 16) == 0:
p = int(_p, 16)
print(p)
break
q = N//p
phi = (p-1)*(q-1)
d = inverse(e, phi)
m = pow(c, d, N)
print(long_to_bytes(m))

结果为: 在这里插入图片描述

[AFCTF2018]花开藏宝地

题干描述如下: 第80804238007977405688648566160504278593148666302626415149704905628622876270862865768337953835725801963142685182510812938072115996355782396318303927020705623120652014080032809421180400984242061592520733710243483947230962631945045134540159517488288781666622635328316972979183761952842010806304748313326215619695085380586052550443025074501971925005072999275628549710915357400946408857号藏宝图

我把我的宝藏都藏在了那里! 那个神秘的地方! 于是我把藏宝图分成了5份,交给五位贤者让他们帮我妥善保管,并且只要搜集3份就可以获得宝藏的地址。

第一位贤者将藏宝图放进时空门中说道: “那么口令就是我的生日吧,那可是个好数字呢。”

第二位贤者将藏宝图放进宝箱,【小】声念着自己的名字锁上了宝箱。

第三位贤者将藏宝图施上咒语丢进大海:“只要【大】声喊出那句咒语就可以把水驱逐!”

第四位贤者找了个破锁锁上了宝箱,狡黠地笑着:“谁知道它是坏的呢?”

第五位贤者给藏宝图裹上了隐身衣,放入了一个匣子里

据说,只有拥有【智慧】与【力量】就可以获得宝藏了呢!~ 你是这样的勇者吗?

题目给了五个压缩包,只要搞出三个就行 前三个都可以爆破密码 爆破工具链接详见我2021-4-25的博客 第一个提示是生日,应当为8位数字密码 爆破结果如下: 在这里插入图片描述 第二个提示是小写名字 爆破结果如下: 在这里插入图片描述 第三个提示是大写咒语 爆破结果如下: 在这里插入图片描述 第四个是伪加密,参考我2021-4-19的博客 只要把如下图所示位置改成偶数即可 在这里插入图片描述 第5个根据官方wp是NTFS隐写 但是我解压rar文件之后拿ntfsstreamseditor怎么扫都扫不出流文件,我以为是ntfsstreamseditor的问题,然后换了个工具叫AlternateStreamView,也扫不出来 后来又找了一些资料,发现解压工具用的都是WinRAR,而我用的是BandZip 改用WinRAR解压后,就能扫出来了 AlternateStreamView界面如下: 在这里插入图片描述 之后点导出然后确定即可 在这里插入图片描述 附上ntfsstreamseditor的下载地址和AlternateStreamView的下载地址以及WinRAR的下载地址

得到的文件都是一对(x,m),不知道是干什么的 看了一个大佬的wp之后知道是门限方案 而题目提示“花开(bloom)”暗指Asmuth-Bloom门限方案 在这里插入图片描述 首先是传统艺能sagemath中国剩余定理(CRT): 在这里插入图片描述 5对(x,m)全用上结果是一样的: 在这里插入图片描述 然后p即为第几号藏宝图 在这里插入图片描述 如上图所示,由于\(y<p\),所以只需将\(y'(CRT的结果)-Ap\)\(p\)即可得到\(S\)(密文)了 代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from Crypto.Util.number import *

x1 = 305345133911395218573790903508296238659147802274031796643017539011648802808763162902335644195648525375518941848430114497150082025133000033835083076541927530829557051524161069423494451667848236452337271862085346869364976989047180532167560796470067549915390773271207901537847213882479997325575278672917648417868759077150999044891099206133296336190476413164240995177077671480352739572539631359
m1 = 347051559622463144539669950096658163425646411435797691973701513725701575100810446175849424000000075855070430240507732735393411493866540572679626172742301366146501862670272443070970511943485865887494229487420503750457974262802053722093905126235340380261828593508455621667309946361705530667957484731929151875527489478449361198648310684702574627199321092927111137398333029697068474762820813413
x2 = 152012681270682340051690627924586232702552460810030322267827401771304907469802591861912921281833890613186317787813611372838066924894691892444503039545946728621696590087591246339208248647926966446848123290344911662916758039134817404720512465817867255277476717353439505243247568126193361558042940352204093381260402400739429050280526212446967632582771424597203000629197487733610187359662268583
m2 = 347051559622463144539669950096658163425646411435797691973701513725701575100810446175849424000000075855070430240507732735393411493866540572679626172742301366146501862670272443070970511943485865887494229487420503750457974262802053722093905126235340380261828593508455621667309946361705530667957484731929151875527489478449361198648310684702574627199321092927111137398333029697068474762820818553
x3 = 40952412095267791829743119118333311932687870987919948671780408726886151430242690997238831410249436653299224291445012397813221016909468630372862610415470277301591535416193017906909638241212666990959976187895288689640250810487806568164431359887246760313154046201720715301307811951233077581047872827004824833876458687145628724339714212107812941785880896399800008924818580623979723496070665230
m3 = 347051559622463144539669950096658163425646411435797691973701513725701575100810446175849424000000075855070430240507732735393411493866540572679626172742301366146501862670272443070970511943485865887494229487420503750457974262802053722093905126235340380261828593508455621667309946361705530667957484731929151875527489478449361198648310684702574627199321092927111137398333029697068474762820819351
x4 = 100459779913520540098065407420629954816677926423356769524759072632219106155849450125185205557491138357760494272691949199099803239098119602186117878931534968435982565071570831032814288620974807498206233914826253433847572703407678712965098320122549759579566316372220959610814573945698083909575005303253205653244238542300266460559790606278310650849881421791081944960157781855164700773081375247
m4 = 347051559622463144539669950096658163425646411435797691973701513725701575100810446175849424000000075855070430240507732735393411493866540572679626172742301366146501862670272443070970511943485865887494229487420503750457974262802053722093905126235340380261828593508455621667309946361705530667957484731929151875527489478449361198648310684702574627199321092927111137398333029697068474762820820091
x5 = 230502064382947282343660159791611936696520807970361139469603458689311286041516767875903549263861950740778705012699983268093626403307298415066249636346303539570207577050391796770068203937723627361951969413683246596072925692670365490970847825269581004483964261491917680759091791653759514213188778401968676433284753781006738293752440186858616315727565803777032119737689210471541053061940547213
m5 = 347051559622463144539669950096658163425646411435797691973701513725701575100810446175849424000000075855070430240507732735393411493866540572679626172742301366146501862670272443070970511943485865887494229487420503750457974262802053722093905126235340380261828593508455621667309946361705530667957484731929151875527489478449361198648310684702574627199321092927111137398333029697068474762820822249
x = [x1, x2, x3]
m = [m1, m2, m3]

p = 80804238007977405688648566160504278593148666302626415149704905628622876270862865768337953835725801963142685182510812938072115996355782396318303927020705623120652014080032809421180400984242061592520733710243483947230962631945045134540159517488288781666622635328316972979183761952842010806304748313326215619695085380586052550443025074501971925005072999275628549710915357400946408857
_m = 30876976368086692285558250036880406604917636310753345643851443311621560437660524037995161241308442036379469552063806443002181224753860983594447977830810170201541624128881271226685934621113368082630765925118134834325144756352463621990490982075331418652446742943160748740071265060573720998451298794523954529649159404329795707381755731242527536198482385928070127829060902084889604193497570570666454987614622192127799628914721314092255874223423836747903381309023217090349405981222877770048197886205341954349001378037043986104483577949386469631664327951317484659223470641035291599627126044129328116138456709005193822302098284284434695284085356908092040649892546733042792734012082009931947240120686605195896740999916349434920823829741045025395035620492258352790658333703219086923204432403214249952956353508095035923172933873864816804322018707765332798796032165097476986184856220405455000518836225976464413270841989241690755609748164301706451818506613253021035612120841991720836023832195539291404838851109196963155279844798918459609655314345181964484399235640350608446994546531900893730936604087604005537829207389277430878456169931854713629162410944416019365035094299249030737
print(long_to_bytes(_m % p))

结果为: 在这里插入图片描述

结语

希望继续坚持

欢迎关注我的其它发布渠道

-------- 本文结束 感谢阅读 --------