日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

强网杯2019 Copperstudy

發布時間:2025/3/21 编程问答 61 豆豆
生活随笔 收集整理的這篇文章主要介紹了 强网杯2019 Copperstudy 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

強網杯2019 Copperstudy

靶機:node4.buuoj.cn:29678

第一次見靶機的題,找題目找了半天😊

打開VMware中的瀏覽器,輸入靶機地址,得到:

[+]proof: skr=os.urandom(8) [+]hashlib.sha256(skr).hexdigest()=67fbc84508c4087471605c92639387450c6d41fa97936c8a64405408403b0f72 [+]skr[0:5].encode('hex')=32f574e3af [-]skr.encode('hex')= bye~

os.urandom()函數:獲取一個指定長度的隨機bytes對象
hashlib.sha256(x).hecdigest():使用sha256算法計算x的散列并返回十六進制的值。

爆破得到skr

from Crypto.Util.number import * import hashlibfor i in range(10000,20000000):tar = 0x32f574e3afpayload = long_to_bytes(i)payload = long_to_bytes(tar) + payloadif hashlib.sha256(payload).hexdigest() == '67fbc84508c4087471605c92639387450c6d41fa97936c8a64405408403b0f72' :print(i)break

運行得到:15740973
轉為十六進制為f0302d
加上前面的為32f574e3aff0302d

然后呢,,,,,把它輸到哪啊啊啊😶

在菜菜的不懈努力下終于下載好了nc(并且刪完了所以由于下載而附帶的一系列軟件🤬)

然后發現在虛擬機上早就有安裝好的nc😓

但是,有了nc之后呢,,,,

咳咳咳,打開虛擬機終端,輸入:nc node4.buuoj.cn 27362

得到:

第一題

[+]proof: skr=os.urandom(8) [+]hashlib.sha256(skr).hexdigest()=c8753a2c2e65194731a5c821803c197b018b157d3b43920dbc0e632ad108e835 [+]skr[0:5].encode('hex')=4f2d16389b [-]skr.encode('hex')=

終于不直接出bye~了
(靶機題目數據每次打開是不同的)

按照前面程序,求得:4f2d16389b9d3681

輸入后得到:

第二題

proof completed[+]Generating challenge 1[+]n=13112061820685643239663831166928327119579425830632458568801544406506769461279590962772340249183569437559394200635526183698604582385769381159563710823689417274479549627596095398621182995891454516953722025068926293512505383125227579169778946631369961753587856344582257683672313230378603324005337788913902434023431887061454368566100747618582590270385918204656156089053519709536001906964008635708510672550219546894006091483520355436091053866312718431318498783637712773878423777467316605865516248176248780637132615807886272029843770186833425792049108187487338237850806203728217374848799250419859646871057096297020670904211 [+]e=3[+]m=random.getrandbits(512)[+]c=pow(m,e,n)=15987554724003100295326076036413163634398600947695096857803937998969441763014731720375196104010794555868069024393647966040593258267888463732184495020709457560043050577198988363754703741636088089472488971050324654162166657678376557110492703712286306868843728466224887550827162442026262163340935333721705267432790268517[+]((m>>72)<<72)=2519188594271759205757864486097605540135407501571078627238849443561219057751843170540261842677239681908736[-]long_to_bytes(m).encode('hex')=

很明顯的RSA,已知n、e、c,而且e=3,用小明文攻擊

import gmpy2 from Crypto.Util.number import long_to_bytesc =15987554724003100295326076036413163634398600947695096857803937998969441763014731720375196104010794555868069024393647966040593258267888463732184495020709457560043050577198988363754703741636088089472488971050324654162166657678376557110492703712286306868843728466224887550827162442026262163340935333721705267432790268517 m = gmpy2.iroot(c,3)[0] print(long_to_bytes(m))

運行得到:b'FLAG{2^8rsa7589693fc689c77c5f5262d654272427}'

然后在用在線hex加密,或者

print(binascii.hexlify(long_to_bytes(m)))

得到:b'464c41477b325e3872736137353839363933666336383963373763356635323632643635343237323432377d'

輸入(記得不要把b’'輸入上去)得到:

第三題

challenge1 completed[+]Generating challenge 2[+]n=12784625729032789592766625203074018101354917751492952685083808825504221816847310910447532133616954262271205877651255598995305639194329607493047941212754523879402744065076183778452640602625242851184095546100200565113016690161053808950384458996881574266573992526357954507491397978278604102524731393059303476350167738237822647246425836482533150025923051544431330502522043833872580483142594571802189321599016725741260254170793393777293145010525686561904427613648184843619301241414264343057368192416551134404100386155751297424616254697041043851852081071306219462991969849123668248321130382231769250865190227630009181759219 [+]e=65537[+]m=random.getrandbits(512)[+]c=pow(m,e,n)=627824086157119245056478875800598959553774250161670787506083253960788230737588761787385686125828765665617567887904228030839535317987589608761534500003128247164233774794784231518212804270056404565710426613938264302998015421153393879729263551292024543756422702956470022959537221269172084619081368498693930550456153543628170306324206266216348386707008661128717431426237486511309767286175518238620230507201952867261283880986868752676549613958785288914989429224582849218395471672295410036858881836363364885164276983237312235831591858044908369376855484127614933545955544787160352042318378588039587911741028067576722790778[+]((p>>128)<<128)=97522826022187678545924975588711975512906538181361325096919121233043973599759518562689050415761485716705615149641768982838255403594331293651224395590747133152128042950062103156564440155088882592644046069208405360324372057140890317518802130081198060093576841538008960560391380395697098964411821716664506908672[-]long_to_bytes(m).encode('hex')=

依舊是RSA,已知n、e、c

分解n然后按基礎解法就可

import gmpy2 import binascii from Crypto.Util.number import long_to_bytes e = 65537 n = 12784625729032789592766625203074018101354917751492952685083808825504221816847310910447532133616954262271205877651255598995305639194329607493047941212754523879402744065076183778452640602625242851184095546100200565113016690161053808950384458996881574266573992526357954507491397978278604102524731393059303476350167738237822647246425836482533150025923051544431330502522043833872580483142594571802189321599016725741260254170793393777293145010525686561904427613648184843619301241414264343057368192416551134404100386155751297424616254697041043851852081071306219462991969849123668248321130382231769250865190227630009181759219 c = 627824086157119245056478875800598959553774250161670787506083253960788230737588761787385686125828765665617567887904228030839535317987589608761534500003128247164233774794784231518212804270056404565710426613938264302998015421153393879729263551292024543756422702956470022959537221269172084619081368498693930550456153543628170306324206266216348386707008661128717431426237486511309767286175518238620230507201952867261283880986868752676549613958785288914989429224582849218395471672295410036858881836363364885164276983237312235831591858044908369376855484127614933545955544787160352042318378588039587911741028067576722790778 p = 97522826022187678545924975588711975512906538181361325096919121233043973599759518562689050415761485716705615149641768982838255403594331293651224395590747133152128042950062103156564440155088882592644046069208405360324372057140890317518802130081198060093576841538008960560661715295741651653499691458486798196487 q = 131093675711613661161476275473445206682597559447006571385482255727609238786596952165801814021602699749876712682307789568113374768689632642728986573211776526473651771104432443501294668372441525987174391472994271054873305324343666279426741897612827889525440428582592216151586138881806196331920758968403508531637 phi = (q-1) * (p-1) d = gmpy2.invert(e,phi) m = gmpy2.powmod(c,d,n)print(long_to_bytes(m)) print(binascii.hexlify(long_to_bytes(m)))

運行得到:b'464c41477b325e3872736136653237376633353564626536646133656464366633353664326462366436667d'

輸入得到:

第四題

challenge2 completed[+]Generating challenge 3[+]n=92896523979616431783569762645945918751162321185159790302085768095763248357146198882641160678623069857011832929179987623492267852304178894461486295864091871341339490870689110279720283415976342208476126414933914026436666789270209690168581379143120688241413470569887426810705898518783625903350928784794371176183 [+]e=3[+]m=random.getrandbits(512)[+]c=pow(m,e,n)=56164378185049402404287763972280630295410174183649054805947329504892979921131852321281317326306506444145699012788547718091371389698969718830761120076359634262880912417797038049510647237337251037070369278596191506725812511682495575589039521646062521091457438869068866365907962691742604895495670783101319608530[+]d&((1<<512)-1)=787673996295376297668171075170955852109814939442242049800811601753001897317556022653997651874897208487913321031340711138331360350633965420642045383644955[-]long_to_bytes(m).encode('hex')=

看起來跟前面第二題一樣,但是用相同代碼運行出來的是:1b5b7fc18b0db820211ba55ceeb56dcbbf1e181447f65f3b40dd8119dab89864ac15a28db8495fb0aa0692

輸入顯示bye~,很顯然錯了,又要重來一次

還有個事:
運算時<< >>位移運算,也就是p右移128位再左移128位,右移直接吞左移不足位補零

例如:

然后第四題是已知d的地位

能力不夠百度來湊

def partial_p(p0, kbits, n):PR.<x> = PolynomialRing(Zmod(n))nbits = n.nbits()f = 2^kbits*x + p0f = f.monic()roots = f.small_roots(X=2^(nbits//2-kbits), beta=0.3) # find root < 2^(nbits//2-kbits) with factor >= n^0.3if roots:x0 = roots[0]p = gcd(2^kbits*x0 + p0, n)return ZZ(p)def find_p(d0, kbits, e, n):X = var('X')for k in range(1, e+1):results = solve_mod([e*d0*X - k*X*(n-X+1) + k*n == X], 2^kbits)for x in results:p0 = ZZ(x[0])p = partial_p(p0, kbits, n)if p:return pif __name__ == '__main__':n = 92896523979616431783569762645945918751162321185159790302085768095763248357146198882641160678623069857011832929179987623492267852304178894461486295864091871341339490870689110279720283415976342208476126414933914026436666789270209690168581379143120688241413470569887426810705898518783625903350928784794371176183e = 3d = 787673996295376297668171075170955852109814939442242049800811601753001897317556022653997651874897208487913321031340711138331360350633965420642045383644955nbits = n.nbits()kbits = d.nbits()print ("lower %d bits (of %d bits) is given" % (kbits, nbits))p = find_p(d, kbits, e, n)q = n//pprint ("d0 = %d" % d)print ("d = %d" % inverse_mod(e, (p-1)*(q-1)))

總結

以上是生活随笔為你收集整理的强网杯2019 Copperstudy的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。