(8)已知n,e,d求p,q
一看这个标题你就应该有个觉悟,n一定无法直接分解得到p和q。
题目: 10-存货5
题目给出了两个文件,一个是加密脚本chall.py,一个是加密后输出的内容output.txt。
分析一下加密脚本:
from gmpy2 import invert
from md5 import md5
from secret import p, q
e = 65537
n = p*q
phi = (p-1)*(q-1)
d = invert(e, phi)
print n, e, d
print "Flag: flag{%s}" %md5(str(p + q)).hexdigest()
加密脚本真的是很简单啊,flag就是str(p+q)进行md5运算之后的得到的字符串,从output.txt中可以得到n,e,d。
用Winhex打开output文件提取数据
![image desc](./rsa-pic/rsa-11.png)
现在的关键问题就是求出p和q来,google一把梭好像可以找到这种骚操作,当时线上比赛做这个题目的时候真的就是google找到的类似题目,百度啊,可不可以靠谱一点。
解题脚本:
已知n,e,d求p,q
#!/usr/bin/python
#coding:utf-8
import random
from md5 import md5
def gcd(a, b):
if a < b:
a, b = b, a
while b != 0:
temp = a % b
a = b
b = temp
return a
def getpq(n,e,d):
p = 1
q = 1
while p==1 and q==1:
k = d * e - 1
g = random.randint ( 0 , n )
while p==1 and q==1 and k % 2 == 0:
k /= 2
y = pow(g,k,n)
if y!=1 and gcd(y-1,n)>1:
p = gcd(y-1,n)
q = n/p
return p,q
def main():
n = 16352578963372306131642407541567045533766691177138375676491913897592458965544068296813122740126583082006556217616296009516413202833698268845634497478988128850373221853516973259086845725813424850548682503827191121548693288763243619033224322698075987667531863213468223654181658012754897588147027437229269098246969811226129883327598021859724836993626315476699384610680857047403431430525708390695622848315322636785398223207468754197643541958599210127261345770914514670199047435085714403641469016212958361993969304545214061560160267760786482163373784437641808292654489343487613446165542988382687729593384887516272690654309
e = 65537
d = 9459928379973667430138068528059438139092368625339079253289560577985304435062213121398231875832264894458314629575455553485752685643743266654630829957442008775259776311585654014858165341757547284112061885158006881475740553532826576260839430343960738520822367975528644329172668877696208741007648370045520535298040161675407779239300466681615493892692265542290255408673533853011662134953869432632554008235340864803377610352438146264524770710345273439724107080190182918285547426166561803716644089414078389475072103315432638197578186106576626728869020366214077455194554930725576023274922741115941214789600089166754476449453
p,q = getpq(n,e,d)
print p
print q
print "Flag: flag{%s}" %md5(str(p + q)).hexdigest()
if __name__ == '__main__':
main()
(9)私钥文件修复
题目: 11-Jarvis OJ -Crypto-God Like RSA
呵呵,这个题我认了,别的不会的题目起码都能看个大概,这个题绝了,只是知道解题脚本中对应的变量是谁了(哈哈哈),顺带把变量给你们注释了,反正我是写不出来。
这里面涉及到的东西太多了,我觉得绝不单单是Python脚本的问题,什么数学、什么算法的,必须给你安排的明明白白的。So,我把这题作为了一个模板,以后有类似的题目,直接掏出来用,莫非这真是"上帝之手"?
题目给出三个文件,一个是公钥文件pubkey.pem,一个是残损的私钥文件private.corrupted,还有一个是密文文件flag.enc。
首先使用openssl提取公钥信息:
──(holyeyes㉿kali2023)-[~/Misc/RSA/godlikeRSA]
└─$ openssl rsa -pubin -in pubkey.pem -text -modulus
Public-Key: (4096 bit)
Modulus:
00:c0:97:78:53:45:64:84:7d:8c:c4:b4:20:e9:33:
58:67:ec:78:3e:6c:f5:f0:5c:a0:3e:ee:dc:25:63:
d0:eb:2a:9e:ba:8f:19:52:a2:67:0b:e7:6e:b2:34:
b8:6d:50:76:e0:6a:d1:03:cf:77:33:d8:b1:e9:d7:
3b:e5:eb:1c:65:0c:25:96:fd:96:20:b9:7a:de:1d:
bf:fd:f2:b6:bf:81:3e:3e:47:44:43:98:bf:65:2f:
67:7e:27:75:f9:56:47:ba:c4:f0:4e:67:2b:da:e0:
1a:77:14:40:29:c1:a8:67:5a:8f:f5:2e:be:8e:82:
31:3d:43:26:d4:97:86:29:15:14:a9:69:36:2c:76:
ed:b5:90:eb:ec:6f:ce:d5:ca:24:1c:aa:f6:63:f8:
06:a2:62:cb:26:74:d3:5b:82:4b:b6:d5:e0:49:32:
7b:62:f8:05:c4:f7:0e:86:59:9b:f3:17:25:02:aa:
3c:97:78:84:7b:16:fd:1a:f5:67:cf:03:17:97:d0:
c6:69:85:f0:8d:fa:ce:ee:68:24:63:06:24:e1:e4:
4c:f8:e9:ad:25:c7:e0:c0:15:bb:b4:67:48:90:03:
9b:20:7f:0c:17:eb:9d:13:44:ab:ab:08:a5:c3:dc:
c1:98:88:c5:ce:4f:5a:87:9b:0b:bf:bd:d7:0e:a9:
09:59:81:fa:88:4f:59:60:6b:84:84:ad:d9:c7:25:
8c:e8:c0:e8:f7:26:9e:37:95:7c:e1:48:29:0f:51:
e7:bd:98:2f:f6:cc:80:e7:f0:32:0b:89:51:92:4e:
c2:6d:50:53:2b:3b:77:72:d1:bd:1a:1f:92:d7:12:
79:61:61:c5:a4:7e:b3:85:eb:f0:7c:6d:46:03:c5:
e6:d5:81:2c:ba:7e:ea:8d:51:7d:63:55:34:2a:b6:
d4:dc:31:5a:f1:99:e3:dc:8c:83:0b:a2:2a:d5:3c:
41:48:41:54:1a:a9:e8:b6:70:bf:d3:fe:ed:19:17:
14:94:13:b3:17:e3:8b:8e:6f:53:ed:e2:44:e8:4a:
32:d6:5c:0d:a8:80:f5:fc:02:e9:46:55:d5:a4:d3:
e7:c6:30:77:f9:73:e9:44:52:d8:13:9d:5d:bf:9e:
fa:3a:b5:96:79:82:5b:cd:19:5c:06:a9:00:96:fd:
4c:a4:73:88:1a:ec:3c:11:de:b9:3d:e0:50:00:1e:
ac:21:97:a1:96:7d:6b:15:f9:6c:c9:34:7f:70:d7:
9d:2d:d1:48:4a:81:71:f8:12:dd:32:ba:64:31:60:
08:26:4b:09:22:03:83:90:17:7f:f3:a7:72:57:bf:
89:6d:e4:d7:40:24:8b:7b:bd:df:33:c0:ff:30:2e:
e8:6c:1d
Exponent: 65537 (0x10001)
Modulus=C09778534564847D8CC4B420E9335867EC783E6CF5F05CA03EEEDC2563D0EB2A9EBA8F1952A2670BE76EB234B86D5076E06AD103CF7733D8B1E9D73BE5EB1C650C2596FD9620B97ADE1DBFFDF2B6BF813E3E47444398BF652F677E2775F95647BAC4F04E672BDAE01A77144029C1A8675A8FF52EBE8E82313D4326D49786291514A969362C76EDB590EBEC6FCED5CA241CAAF663F806A262CB2674D35B824BB6D5E049327B62F805C4F70E86599BF3172502AA3C9778847B16FD1AF567CF031797D0C66985F08DFACEEE6824630624E1E44CF8E9AD25C7E0C015BBB4674890039B207F0C17EB9D1344ABAB08A5C3DCC19888C5CE4F5A879B0BBFBDD70EA9095981FA884F59606B8484ADD9C7258CE8C0E8F7269E37957CE148290F51E7BD982FF6CC80E7F0320B8951924EC26D50532B3B7772D1BD1A1F92D712796161C5A47EB385EBF07C6D4603C5E6D5812CBA7EEA8D517D6355342AB6D4DC315AF199E3DC8C830BA22AD53C414841541AA9E8B670BFD3FEED1917149413B317E38B8E6F53EDE244E84A32D65C0DA880F5FC02E94655D5A4D3E7C63077F973E94452D8139D5DBF9EFA3AB59679825BCD195C06A90096FD4CA473881AEC3C11DEB93DE050001EAC2197A1967D6B15F96CC9347F70D79D2DD1484A8171F812DD32BA64316008264B0922038390177FF3A77257BF896DE4D740248B7BBDDF33C0FF302EE86C1D
writing RSA key
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwJd4U0VkhH2MxLQg6TNY
Z+x4Pmz18FygPu7cJWPQ6yqeuo8ZUqJnC+dusjS4bVB24GrRA893M9ix6dc75esc
ZQwllv2WILl63h2//fK2v4E+PkdEQ5i/ZS9nfid1+VZHusTwTmcr2uAadxRAKcGo
Z1qP9S6+joIxPUMm1JeGKRUUqWk2LHbttZDr7G/O1cokHKr2Y/gGomLLJnTTW4JL
ttXgSTJ7YvgFxPcOhlmb8xclAqo8l3iEexb9GvVnzwMXl9DGaYXwjfrO7mgkYwYk
4eRM+OmtJcfgwBW7tGdIkAObIH8MF+udE0Srqwilw9zBmIjFzk9ah5sLv73XDqkJ
WYH6iE9ZYGuEhK3ZxyWM6MDo9yaeN5V84UgpD1HnvZgv9syA5/AyC4lRkk7CbVBT
Kzt3ctG9Gh+S1xJ5YWHFpH6zhevwfG1GA8Xm1YEsun7qjVF9Y1U0KrbU3DFa8Znj
3IyDC6Iq1TxBSEFUGqnotnC/0/7tGRcUlBOzF+OLjm9T7eJE6Eoy1lwNqID1/ALp
RlXVpNPnxjB3+XPpRFLYE51dv576OrWWeYJbzRlcBqkAlv1MpHOIGuw8Ed65PeBQ
AB6sIZehln1rFflsyTR/cNedLdFISoFx+BLdMrpkMWAIJksJIgODkBd/86dyV7+J
beTXQCSLe73fM8D/MC7obB0CAwEAAQ==
-----END PUBLIC KEY-----
┌──(holyeyes㉿kali2023)-[~/Misc/RSA/godlikeRSA]
└─$
然后将提取到的公钥信息填充到"恢复私钥的脚本fix.py"中,然后运行这个脚本。
私钥文件修复
github.com/Mr-Aur0ra/RSA/blob/master/(9)%E7%A7%81%E9%92%A5%E6%96%87%E4%BB%B6%E4%BF%AE%E5%A4%8D/godlikeRSA/fix.py
┌──(holyeyes㉿kali2023)-[~/Misc/RSA/godlikeRSA]
└─$ python3 exp1.py
checking 100
checking 200
checking 300
checking 400
checking 500
checking 600
checking 700
checking 800
checking 900
checking 1000
checking 1100
checking 1200
checking 1300
checking 1400
checking 1500
checking 1600
checking 1700
checking 1800
checking 1900
checking 2000
checking 2100
checking 2200
checking 2300
checking 2400
checking 2500
checking 2600
checking 2700
checking 2800
checking 2900
checking 3000
checking 3100
checking 3200
checking 3300
checking 3400
checking 3500
checking 3600
checking 3700
checking 3800
checking 3900
checking 4000
checking 4100
checking 4200
checking 4300
checking 4400
checking 4500
checking 4600
checking 4700
checking 4800
checking 4900
checking 5000
checking 5100
checking 5200
checking 5300
checking 5400
checking 5500
checking 5600
checking 5700
checking 5800
checking 5900
checking 6000
checking 6100
checking 6200
checking 6300
checking 6400
checking 6500
checking 6600
checking 6700
checking 6800
checking 6900
checking 7000
checking 7100
checking 7200
checking 7300
checking 7400
checking 7500
checking 7600
checking 7700
checking 7800
checking 7900
checking 8000
checking 8100
checking 8200
checking 8300
checking 8400
checking 8500
checking 8600
checking 8700
checking 8800
checking 8900
checking 9000
checking 9100
checking 9200
checking 9300
checking 9400
checking 9500
checking 9600
checking 9700
checking 9800
checking 9900
checking 10000
checking 10100
checking 10200
checking 10300
checking 10400
checking 10500
checking 10600
checking 10700
checking 10800
checking 10900
checking 11000
checking 11100
checking 11200
checking 11300
checking 11400
checking 11500
checking 11600
checking 11700
checking 11800
checking 11900
checking 12000
checking 12100
checking 12200
checking 12300
checking 12400
checking 12500
checking 12600
checking 12700
checking 12800
checking 12900
checking 13000
checking 13100
checking 13200
checking 13300
checking 13400
checking 13500
checking 13600
checking 13700
checking 13800
checking 13900
checking 14000
checking 14100
checking 14200
checking 14300
checking 14400
checking 14500
checking 14600
checking 14700
checking 14800
checking 14900
checking 15000
checking 15100
checking 15200
checking 15300
checking 15400
checking 15500
checking 15600
checking 15700
K = 15791
checking 1000
checking 2000
checking 3000
checking 4000
checking 5000
checking 6000
checking 7000
checking 8000
checking 9000
checking 10000
checking 11000
checking 12000
checking 13000
checking 14000
checking 15000
checking 16000
checking 17000
checking 18000
checking 19000
checking 20000
checking 21000
checking 22000
checking 23000
checking 24000
checking 25000
checking 26000
checking 27000
checking 28000
checking 29000
checking 30000
checking 31000
checking 32000
checking 33000
checking 34000
checking 35000
checking 36000
checking 37000
checking 38000
checking 39000
checking 40000
checking 41000
checking 42000
checking 43000
checking 44000
checking 45000
checking 46000
checking 47000
checking 48000
checking 49000
checking 50000
checking 51000
checking 52000
checking 53000
Kp = 53712
checking 100
checking 200
checking 300
checking 400
checking 500
checking 600
checking 700
checking 800
checking 900
checking 1000
checking 1100
checking 1200
checking 1300
checking 1400
checking 1500
checking 1600
checking 1700
checking 1800
checking 1900
checking 2000
checking 2100
checking 2200
checking 2300
checking 2400
checking 2500
checking 2600
checking 2700
checking 2800
checking 2900
checking 3000
checking 3100
checking 3200
checking 3300
checking 3400
checking 3500
checking 3600
checking 3700
checking 3800
checking 3900
checking 4000
checking 4100
checking 4200
checking 4300
checking 4400
checking 4500
checking 4600
checking 4700
checking 4800
checking 4900
checking 5000
checking 5100
checking 5200
checking 5300
checking 5400
checking 5500
checking 5600
checking 5700
checking 5800
checking 5900
checking 6000
checking 6100
checking 6200
checking 6300
checking 6400
checking 6500
checking 6600
checking 6700
checking 6800
checking 6900
checking 7000
checking 7100
checking 7200
checking 7300
checking 7400
checking 7500
checking 7600
checking 7700
checking 7800
checking 7900
checking 8000
checking 8100
checking 8200
checking 8300
checking 8400
checking 8500
checking 8600
checking 8700
checking 8800
checking 8900
checking 9000
checking 9100
checking 9200
checking 9300
checking 9400
checking 9500
checking 9600
checking 9700
checking 9800
checking 9900
checking 10000
checking 10100
checking 10200
checking 10300
checking 10400
checking 10500
checking 10600
checking 10700
checking 10800
checking 10900
checking 11000
checking 11100
checking 11200
checking 11300
checking 11400
checking 11500
checking 11600
checking 11700
checking 11800
checking 11900
checking 12000
checking 12100
checking 12200
checking 12300
checking 12400
checking 12500
checking 12600
checking 12700
checking 12800
checking 12900
checking 13000
checking 13100
checking 13200
checking 13300
checking 13400
checking 13500
checking 13600
checking 13700
checking 13800
checking 13900
checking 14000
checking 14100
checking 14200
checking 14300
checking 14400
checking 14500
checking 14600
checking 14700
checking 14800
checking 14900
checking 15000
checking 15100
checking 15200
checking 15300
checking 15400
checking 15500
checking 15600
checking 15700
checking 15800
checking 15900
checking 16000
checking 16100
checking 16200
checking 16300
checking 16400
checking 16500
checking 16600
checking 16700
checking 16800
checking 16900
checking 17000
checking 17100
checking 17200
checking 17300
checking 17400
checking 17500
checking 17600
checking 17700
checking 17800
checking 17900
checking 18000
checking 18100
checking 18200
checking 18300
checking 18400
checking 18500
checking 18600
checking 18700
checking 18800
checking 18900
checking 19000
checking 19100
checking 19200
checking 19300
checking 19400
checking 19500
checking 19600
checking 19700
checking 19800
checking 19900
checking 20000
checking 20100
checking 20200
checking 20300
checking 20400
checking 20500
checking 20600
checking 20700
checking 20800
checking 20900
checking 21000
checking 21100
checking 21200
checking 21300
checking 21400
checking 21500
checking 21600
checking 21700
checking 21800
checking 21900
checking 22000
checking 22100
checking 22200
checking 22300
checking 22400
checking 22500
checking 22600
checking 22700
checking 22800
checking 22900
checking 23000
checking 23100
checking 23200
checking 23300
checking 23400
checking 23500
checking 23600
checking 23700
checking 23800
checking 23900
checking 24000
checking 24100
checking 24200
checking 24300
checking 24400
checking 24500
checking 24600
checking 24700
checking 24800
checking 24900
checking 25000
checking 25100
checking 25200
checking 25300
checking 25400
checking 25500
checking 25600
checking 25700
checking 25800
checking 25900
checking 26000
checking 26100
checking 26200
checking 26300
checking 26400
checking 26500
checking 26600
checking 26700
checking 26800
checking 26900
Kq = 26920
pwned
p = 30061432003658510087798871614869318011389940352798147030129806359975911392091235344042288409629143229311060231549478211871643725394470760528211801310601767727834886942210718412087541234398453046895030858579989874035849439867334906873642352112428914855967993998732685221108379784833027771293275558876952608462050146340591449046825135890871650866799299533696175818103240024841274114925018619060818213433528894936128306780366785977567327073724428211445259983614467640785163297734447975723664659822673456683284394386723716344090232882990461174301609971805075768328757325956784604364401827152431260896927633163074694121679
q = 26136662545551829820746942051638228325025130519175536694008242208616774469870765684858288042819063837180243501117310278632509413217676559484513481677689042623348188876598901642459170232360966754692434316796014314498263800234390539118817050074978421973817764644287745302885861277447227180288605200894138168586207384484170481511828680117688324729381172912436910052489279406590356734739774635376711681212908417321705094537960645308009611045658947359297373154395500467689532455017647450616447445444254910371922944620114234547655209970657063715028350418518417105772707885648587233103869340985670430269862943630137067052883
d = 189314060947745787654498165274830331174557121266906779862419555225211185530603428281572732893609400752227106390673469015633513601478376007980907685218789784684913841408741295031489754782076172169319157484287361680256043362028296440972189429040371100663239858141284465980874067131885490419967590348201189710575833318886977656522342412509705514383478694693754208398422979228753024497378460051423550810294749332024347106310964901579178253736977778221603016185935642494136204931234524722205937195008837883867578968312663507844825332250280433460469722801545785384920549610305670512211052257540691951435317870875619595628937534523394133353929222521584160841354771534449084153424347188585906251861248309552253930838373561942975707303028732726506301413434343525650181088504211290391497726019689042160550200171411457613452966587499555164618905387343295621486012988196484264365061465147262989915838838473704337695423465093089724153892389725410085609729143077814394217461295117827225090618358013844801017475143005461542391824369921894127873221707688828770261365746173721607819236320716542560206858465665216449930570401369383789211423678295673603341013341777685726223028517376052521329317581752900566710098686429294852358239672182937051082392901
-----BEGIN RSA PRIVATE KEY-----
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
-----END RSA PRIVATE KEY-----
┌──(holyeyes㉿kali2023)-[~/Misc/RSA/godlikeRSA]
└─$
接着,将私钥文件修复脚本fix.py恢复出私钥来,存放到文件private.pem中。
这就结束了吗,没有,god不是白叫的。你会发现你根据私钥使用openssl直接解密密文文件解不开,而且直接根据p,q,d,c也无法直接求出m。这里又涉及到了RSA加密的填充模式。
这里使用的是PKCS1_OAEP填充模式,参考链接:
RSA加密填充模式
www.cnblogs.com/lzl-sml/p/3501447.html
然后,接着运行下面的脚本即可得到flag。
┌──(holyeyes㉿kali2023)-[~/Misc/RSA/godlikeRSA]
└─$ openssl rsautl -decrypt -inkey private.pem -keyform PEM -in flag.enc -oaep
The command rsautl was deprecated in version 3.0. Use 'pkeyutl' instead.
PCTF{0h_U_r_ju5t_lik3_g0d}