(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}

   

04-10 00:59