0x00 2020sdnisc-ezRSA

共模攻击。

import gmpy2
from Crypto.Util.number import long_to_bytes

e1 = 0xf4c1158f
e2 = 0xf493f7d1
n = 0xa1d4d377001f1b8d5b2740514ce699b49dc8a02f12df9a960e80e2a6ee13b7a97d9f508721e3dd7a6842c24ab25ab87d1132358de7c6c4cee3fb3ec9b7fd873626bd0251d16912de1f0f1a2bba52b082339113ad1a262121db31db9ee1bf9f26023182acce8f84612bfeb075803cf610f27b7b16147f7d29cc3fd463df7ea31ca860d59aae5506479c76206603de54044e7b778e21082c4c4da795d39dc2b9c0589e577a773133c89fa8e3a4bd047b8e7d6da0d9a0d8a3c1a3607ce983deb350e1c649725cccb0e9d756fc3107dd4352aa18c45a65bab7772a4c5aef7020a1e67e6085cc125d9fc042d96489a08d885f448ece8f7f254067dfff0c4e72a63557
c1=12051796366524088489284445109295502686341498426965277230069915294159131976231473789977279364263965099422235647723775278060569378071469131866368399394772898224166518089593340803913798327451963589996734323497943301819051718709807518655868569656941242449109980876397661605271517459716669684900920279597477446629607627693769738733623143693170696779851882404994923673483971528314806130892416509854017091137325195201225617407959645788145876202882024723106204183257094755002924708009138560347432552090905489132135154932987521239299578509008290614398700799670928805692609756924823628055245227290288940649158862576448537833423
c2=16648382384980770705624348910895797622774711113202207693584907182552301186239613809347201161450012615995859738410661452438496756353485538305614949211776668793864984429696790944750894691957799234264508530084026894611228513698963347402329109838109621609770406925700520983387811451074838470370044678634099202003480925903267508744006195455234025325060817223813858985074720872124168142943926467694676717713503559007112874381750005406371400109962943508349497151148446064846096531445037416174913915923050332242843403926133165817310272633884358263778516770288515592959832151762499526363131801945163501999337808208074381212795


_, r, s = gmpy2.gcdext(e1, e2)

m = pow(c1, r, n) * pow(c2, s, n) % n
print long_to_bytes(m)

0x01 山东省大学生网络技术大赛-baby

给了e=3。低加密指数攻击:

import gmpy2
e = 3
c =  3442467842482561323703237574537907554035337622762971103210557480050349359873041624336261782731509068910003360547049942482415036862904844600484976674423604861710166033558576921438068555951948966099658902606725292551952345193132973996288566246138708754810511646811362017769063041425115712305629748341207792305694590742066971202523405301561233341991037374101265623265332070787449332991792097090044761973705909217137119649091313457206589803479797894924402017273543719924849592070328396276760381501612934039653
n = 691316677109436623113422493782665795857921917893759942123087462879884062720557906429183155859597756890896192044003240821906332575292476160072039505771794531255542244123516929671277306361467074545720823735806308003091983427678300287709469582282466572230066580195227278214776280213722215953097747453437289734469454712426107967188109548966907237877840316009828476200388327329144783877033491238709954473809991152727333616022406517443130542713167206421787038596312975153165848625721911080561242646092299016802662913017071685740548699163836007474224715426587609549372289181977830092677128368806113131459831182390520942892670696447128631485606579943885812260640805756035377584155135770155915782120025116486061540105139339655722904721294629149025033066823599823964444620779259106176913478839370100891213072100063101232635183636552360952762838656307300621195248059253614745118852163569388418086291748805100175008658387803878200034840215506516715640621165661642177371863874586069524022258642915100615596032443145034847031564356671559179212705466145609698475546210994748949121359853094247990533075004393534565421776468785821261291309463205314057882016266066365636018084499158806717036972590848458891019171583268920180691221168453612029698510271
print 'n=', n
print 'c=', c
print '[+]Detecting m...'
result = gmpy2.iroot(c, 3)
print ' [-]The c has cubic root?', result[1]
if result[1]: print ' [-]The m is:', '{:x}'.format(result[0]).decode('hex')
print '[!]All Done!'

0x02 2018 AFCTF 可怜的RSA

以前做过:戳我

0x03 easy_rsa

在线可以分解p和q。拿工具梭就行。

0x04 easy_base

用的羽师傅的脚本:

#author:羽
import base64
import base91
import base58
import py3base92
def hex_to_str(s):
        k=''
        for i in range(0,len(s),2):
                j = s[i]+s[i+1]
                k+=chr(int(j,16))
        print('16')
        return k

def ba32(s):
        s = base64.b32decode(s)
        s = bytes.decode(s)
        print('32')
        return s

def ba58(s):
        s = base58.b58decode(s)
        s = bytes.decode(s)
        print('58')
        return s

def ba64(s):
        s = base64.b64decode(s)
        s = bytes.decode(s)
        print('64')
        return s

def baa85(s):
        s = base64.a85decode(s)
        s = bytes.decode(s)
        print('a85')
        return s

def bab85(s):
        s = base64.b85decode(s)
        s = bytes.decode(s)
        print('b85')
        return s

def ba91(s):
        s = base91.decode(s)
        s = s.decode()
        print('91')
        return s

def ba92(s):
        s = py3base92.decode(s)
        print('91')
        return s

def start(s):
        for i in range(50):
                if len(s)<50:
                        print(s)
                try:
                        s=hex_to_str(s)
                except:
                        try:
                                s=ba32(s)
                        except:
                                try:
                                        s=ba58(s)
                                except:
                                        try:
                                                s=ba64(s)
                                        except:
                                                try:
                                                        s = baa85(s)
                                                except:
                                                        try:
                                                                s=bab85(s)
                                                        except:
                                                                try:
                                                                        s = ba92(s)
                                                                except:
                                                                        try:
                                                                                s=ba91(s)
                                                                        except:
                                                                                print('nonono')
                                                                                
if  __name__=="__main__":
        f = open('BaseAllInOne.txt','r')
        s = f.read()
        start(s)

0x05 hill

y   g   c       17  17  5

24  6   2   *   21  18  21  =   538 520 284

                2   2   19

538 = 24 * 17 + 6 * 21 + 2 * 2

520 = 24 * 17 + 6 * 18 + 2 * 2

284 = 24 * 5 + 6 * 21 + 2 * 19

(538,520,284) mod 26 = (18,0,24)=(s,a,y)

0x06 2018 AFCTF MagicNum

以前做过:戳我