强网杯2019 Copperstudy
強網(wǎng)杯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()函數(shù):獲取一個指定長度的隨機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
轉(zhuǎn)為十六進制為f0302d
加上前面的為32f574e3aff0302d
然后呢,,,,,把它輸?shù)侥陌““?#x1f636;
在菜菜的不懈努力下終于下載好了nc(并且刪完了所以由于下載而附帶的一系列軟件🤬)
然后發(fā)現(xiàn)在虛擬機上早就有安裝好的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~了
(靶機題目數(shù)據(jù)每次打開是不同的)
按照前面程序,求得: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然后按基礎(chǔ)解法就可
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)))總結(jié)
以上是生活随笔為你收集整理的强网杯2019 Copperstudy的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [GKCTF 2021]Random
- 下一篇: [watevrCTF 2019]Baby