HeartSky's blog


在渗透之路上渐行渐远


HCTF-GAME-week4-writeup

明天就要坐车回去了,因此就只写下我出的几道 Crypto 吧,PENTEST 和 Misc 的 wp 请关注 C014’s blog

进击的 Crypto [3]

题目描述: 你知道什么是一次性密码本吗?
a5f764be8b5e9e20fe6f95a4282d758d8d14b02522fe9d83adc325432b48533dddff79633e0c874fcc0b9f
87f837b4c57a9d26e36dd1c2697d7f8d8710bb2527e8c9a2abc329563a01483993db772d2c07d906c00b9f
91e47eafdf789c6fec6495a8616172969117ac6437e8d9e7aace606730524d37ddfd79743e0fca41cd1bcb
80ed63b3ce429d3bfd5592e178657b91bd0aad5a27ecd3a0adc52f552c5c6f3190d16f2d1417cf008511cc
c6f737b3c27a9a6ffe6999e767613e878717bb6637e4cba2e8c0284f7f524a3598c87f603a118b18ca0ad4
95b660b2df75d23be56fd1f8676177808743aa6a63fed2abbed260433e52402bd3fb79623b42c71ac61391
Hint: 1、题目已经重新出了(包括所有密文)
2、flag格式:hctf{[a-z_]+}

我们知道 $m_1\ xor\ key = c_1$,$m_2\ xor\ key = c_2$,所以 $c_1\ xor\ c_2 = m_1\ xor\ m_2$,进而 $c_1\ xor\ c_2\ xor\ m_1 = m_2$,我们知道某段肯定存在的明文 hctf{,把它当做 $m_1$,从初始位置开始尝试,这里题目可能有个小坑,加密后的 flag 不在同一行密文中,而是分割在了两行中,不过也比较容易发现,最后会得到第三行信息的最后三个字符是 hct,第四行的前两个字符是 f{,由此可以得知部分密钥,然后我们知道除 flag 外的明文的格式是 [a-zA-Z,. ]+,由此我们可以运用 Crib-dragging 方法,爆破 f{ 后面的明文,如果有解出的其他部分的明文不符合此格式则舍弃,在这里我只取只有一个结果的,得到的明文是 f{the-o----iph---i-_---------}--m----udo--s,- 代表不确定元素,由这个异或出的密钥来解密密文,根据解密出的密文,再猜测一些单词,如此反复,最终便能解密出整个密文,脚本比较乱,需要半手动,看懂思想即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/usr/bin/python2.7

from itertools import combinations
import string
from Crypto.Util.number import long_to_bytes

c1 = 'a5f764be8b5e9e20fe6f95a4282d758d8d14b02522fe9d83adc325432b48533dddff79633e0c874fcc0b9f'
c2 = '87f837b4c57a9d26e36dd1c2697d7f8d8710bb2527e8c9a2abc329563a01483993db772d2c07d906c00b9f'
c3 = '91e47eafdf789c6fec6495a8616172969117ac6437e8d9e7aace606730524d37ddfd79743e0fca41cd1bcb'
c4 = '80ed63b3ce429d3bfd5592e178657b91bd0aad5a27ecd3a0adc52f552c5c6f3190d16f2d1417cf008511cc'
c5 = 'c6f737b3c27a9a6ffe6999e767613e878717bb6637e4cba2e8c0284f7f524a3598c87f603a118b18ca0ad4'
c6 = '95b660b2df75d23be56fd1f8676177808743aa6a63fed2abbed260433e52402bd3fb79623b42c71ac61391'
c = [c1,c2,c3,c4,c5,c6]

key = int('hct'.encode('hex'), 16)

def getFlagIndex():
for cc in combinations(c, 2):
print hex(int(cc[0][-6:], 16) ^ int(cc[1][-6:], 16) ^ key)[2:].decode('hex')

def getMessage(key):
l = len(key)
key = int(key,16)
for i in range(6):
cc = int(c[i][:l],16)
m = long_to_bytes(cc ^ key)
print str(i) + ': ' + m

def getKey(m,num):
l = len(m) * 2
m = int(m.encode('hex'),16)
cc = int(c[num][:l],16)
print hex(cc ^ m)[2:]

def xor3(a,b,c):
s = string.ascii_letters + ',' + ' ' + '.'
m = long_to_bytes(a ^ b ^ c)
if m not in s:
return 1

def CribDragging(mm):
l = len(mm) * 2
for k in string.lowercase + '_' + '}':
k = int(k.encode('hex'),16)
cc = ['*'] * 6
print cc
for i in range(6):
cc[i] = int(c[i][l:l+2],16)
if xor3(cc[0],cc[3],k) or xor3(cc[1],cc[3],k) or xor3(cc[2],cc[3],k) or xor3(cc[3],cc[4],k) or xor3(cc[3],cc[5],k):
continue
print long_to_bytes(k)

# getKey('', 1)
# getMessage('')
CribDragging('f{')

进击的 Crypto [4]

题目描述: http://119.29.138.57/crypto/Crypto[4].34b3396feff9f911a61e932a22c4470
Hint: 基本的数论知识

看下代码,只要求出 k 和 x,便能拿到 flag,最主要的是 encrypt 函数

1
2
3
4
def encrypt(data, p, q, g, x, k):
r = pow(g, k, p) % q
s = (invert(k, q) * (SHA1(data) + x * r)) % q
return (r, s)

题目还给了两组数据,因为 r1 和 r2 是相等的,s1 - s2 就能消去 x,求出 k,然后再把求出的 k 和其中一组数据代入 s,便能求出 x

1
2
k = ((SHA1(data1) - SHA1(data2)) * invert(s1 - s2,q)) % q
x = (((k * s1 - SHA1(data1))) * (invert(r1,q))) % q

进击的 Crypto [5]

题目描述: 似曾相识?
http://119.29.138.57/crypto/Crypto[5].34b3396feff9f911a61e932a22c4470

之前出了一道共享素数攻击,这题也是给了10组 n e c,首先还是先看了下 n 是否互素,结果都互素

利用的是中国剩余定理

\begin{matrix} m^e \equiv c_1 \pmod {N_1} \\ m^e \equiv c_2 \pmod {N_2} \\ \vdots \qquad\qquad\qquad \\ m^e \equiv c_n \pmod {N_n} \end{matrix}

假设 $N = N_1 * N_2 * … * N_n$,求出的结果为 C,则 $m^e \pmod C \equiv N$,然后如果 e 比较小的话,$m^e < N$,那么 $m^e = C$,所以对 C 开 e 次方根就是 m 了,附上脚本吧

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/usr/bin/python2.7

from Crypto.Util.number import bytes_to_long, long_to_bytes
import gmpy2

e = 10
n = [
17551188754807399016342420221734945766749930201727412345251590531404061480740932995199065332987719183197199448336435851015540272155441486746027315107821340969105623451575872580170978368650593880274076025520453956378539766228430429142117994616985318963125739076826635459215114946159348678398268099389525414431618517743889314085714390430972783223270985688988995257770363117225472590084489120958397189130958462784532637453482182763505791720641422686749616216521724012108378680177131928438795893866425040489551258902610047574579899692834984999209528110849342042529825594061894238371591910354584305136154355365191215400149,
21840437284422601584177601857355845296420300157767339109572377640408362726674561246210400400760474187121246893712480109326893614162779470768415282900713800983815570602250068673695044749932532689851310770087552524620857623442019428044482787965428075984951982104920901562456426672111590909100736209153905853035127247720276974050404663847547090362780729077829594684995979457326414947449083219461617302643392904522733812903141301332227357689517880801845510579518887472928083718826890369016944549160461428710615747001273521253638766267143341819170249648385341127263707417642925464809788975715332938666417316695941347477577,
30015914133986758133105015082922460910471726819000479872816812806794140887209294393963063273377891203069864711466776200108173672428779293308320460116493040572826915020654293929241843686728296387400110062099074573009645563520805301899962344680821396200256042478539540675850427377958553324581371362112652752444824919601767821622038488365501031636558236126052654241662743070651213369566898998898634441261811655053789384588711547685939927721116404429914329081432990913321296964957260691148704710581681774562904924080813274984809940008968629515304859518629473284018332651831587916402539386242421630250537030688162675751761,
18009718435825445649372629634867772247035138229493108362713630947680338354227735572070882390378632440365163117094233413520107070581908224239210969172094402760924055334584259678276505919418191623762998249724248379302786621689049107500760348303940112840664926231345646325964133281550765454719628161600475143792567309947330130747860125557547051843620899629217636918002929846463097841539446014019579830347356084080488561917440356848465812937246809018168582635191619622041079012450531811237168105634382108634135880887093525611263186925213027913337454706919754923593714509998062073450679720905569489304398625255143801533277,
27090736422393991189249636552945539144039087911497773160371557650625344533254580764344628540515132884576739746597729079146155130899009238110101654711303800340566538298798432929136509923129089904647023409146264405964139002638684510681372633714179570768685640570209727600215295330846361754314973731753734397312932947433225732597524076563605729037998272803472953079912899867244318073144564355326520230078681106746670895643454939714423661018216469020021429142336238301775948794784776906058601395026463842070755547793192470653204078222827768950823747061655106900276571547680451953562314376913592896427730473091360051391129,
22277916445389799876692954866506052125036892596099795492064670519272419621528759837318253665292779127861537748967309681231938516330289846519214661138299205082421968922350230121526530080908053297879027158545040193774647350499415863211113776785399848472712293535289113810322398103983587423306282629848367328743089145940536913390664697321526306054579656600439140061667264516070003507841618352122567379038304294976725469305215682426898731699093794930417366769249256999177339843020364367769712776225743916112170787273891225926246407201080202593858063362565931942590349178361085396799890148505959437244983447934838792051793,
20851005254704933958354817552975190588383962843827122226904964048318053243049822277049715505735762051530592940514007687138882551369906711787133432792478447465241409449145625470766867280545673313710877827491010966285871747638401315338616986782370641881615238434667687936400955629642629748987839996011550408156162317201139746453148874558603034756902297066835592748562014100033050736650359512497633206350878620421058840864178654150287452573363251543090733404389037241843869379543719804499640600546216051812575335078292203435075056740907356476508423562893159958041443951220933694064510275964264723600894558623421819904501,
21745680718194037861694569863678082853797244380310200176477643943644972463871360669070584682807703870684830948023158889780219716829353665600564791257912082043905122048004593803193375178269942973208249276102769671038752489438400731535367257356207098737711096953679231300720903502192144476519811856646400822239966219746455729409375771797064825552958482297097797911599808242875799342438899636328763766908154658738969614707377852147843953614178305416594819846812426828300689497046389665982817209315784313108617753052015326937047712513569322963102500122038505770232917473260057408981125469607573191926134043719437868156273,
23257483042331781031320004066395973098539881870433034498180628292164825476845647596122889756396987220787263478778647199033523248861079487991256044473644515960559630792146394039814096408486541588067643811077716428015000310006227815563853161604153799667073262886506475792902392829571472354691875108497532721686076971371510238161060553858839091026451266521753830084143245517459861325880906431205328541736948784727909518259034781432825317588016829248046749554245422672923121452470552323438808591118050034108325754535134236727740460190849252647561826203675666601441506024780605194340777802389960180532831878689458096046821,
27637004622327338030988157906180324667829916751358977640832765328645718696385482091781513197472066052101704131751158627239657425473994441143385613105528200215275110466263289952962400664293602133856809475295970322767309563273999319926150648399522508592521685688896842833243324070987594588134776515978198364901455727292006058624015674914131447232032058875410956114939938460192876157612457774033922125553271809409381181134668696682847583314698759337802814876161751333701826176655372126746717533228292189928645064111959824895679517476699556313948724818860906006774808944802984477517788391260149504822396276593451707118257
]
c = [
4675182605549711347653299514777826238559040200527747810846901991433127025723361807211672208052862870258047285285949212515664278410499603829663266213968511493974766674071825225536665267049044619340378438531615983696406305841945756396579371794826265549929503043134668360055027276522368879193620937457881486509311711905722483187734650127796510808637890189952840971330768913946884525594627652458745930532219238258911608744112001798136394806004726472890838481881026716605743812674350955258003794590748258523929460446986020794445478076559635145181909093786617716473870604463315696183050495143502762614767485881979217577416,
4586033930015814975553487614321341290358072960539564849589758593801587823414394351862074093343255479635303199078561905260793645869942622136164615776822867275172888812989071016687658023005838776181437470204528335444413852561895603377955959308318399246963213964044984235974352824060625970587119586612774322385216810264819426458641852166009899106655036755913322283219739741020656812034348404092018340277026844114272699170323014050087289715403989671918767712613414346320222745328800096615947138667139053339483278319521201983885423491905171167675501563556563890821756892474999549635650486944010346554641603343238490572689,
12012575342366442210994368605032582129674485327006093552902983877957202172783938071684841031902396156899396879136388606996807608296316795628987877357547213450360953742947781700549506469226564975927361748596520878542651668963131021269851928174681007347771519569914690980744941965086762285630082781013781879511681353119117280354102271439057204066405072328422057721895983540492150402309552609035008272366176657384174081229798739099558539083074489500359062010164358300087124447037922844709870430218019673914305742939927888838599616520300011913022792060392260618046807788302643742874847024153198113792628046678578753632923,
4249005911324898630458723491151576810198619078332972911420166645127258598519950448507640904379342817486426262054889199369385257812524759761245588973651578211291344326619317559377360319507727729535083143293335799588196976241949218037833747839545295030259115279668065886560417877204054684495047181117075603468672292268831273735956964067626837975218539840667641885621426607941950306330198897187683754687379611844278471572791816397950634388907233312117920634807989734011132718334334850592111651631323130933438007008983489782601827321396168104668493332626558911838721998173148508994771473224050827471186478106896949413831,
18557109853898405974924769550105345673703067457537813607252151469933140760798378574244439559372100428971400070351173140348823652755825601433268832363575896137364288069984314151346137206115518309597389268875150549696376813277778514591532615794294637044626683931367510181612383681914421702261592233265455950023252407680604041046629667703207133146853618989187597749132650514038584280417791134426596848369417626039533740827554552117727501565841065077835398951826747855393552731497438983274201599740189743630949174610722118659019630964669901438690028070213710833335622573526403588737092869273969581607637522572757015237506,
19221531342713801219971420455098666365124810169512711030444063942333694562364114172361552139176582476168134219937393468391346535097965763785916484012657401095066804857900941482772687159471483908107669892419626059680168762119954068288719303591498504050604628627299671160225276355636519961578118413913001058744164531470610279168723402009469959377794138715204862239973561494796213624769358906726186769711689962808937828553399403173762034548974335960107700638910231658795639167906700770120741974418495196827830462542130080965552102416180517600397897065113788279096066792533807104187868678848857780735334749865813019681909,
2043866718532927301454127017521835945401727173760352488220517028498861777262807036566165189285730569375083406234212921588654098421290088269551352101830688429903600880691046607902396566775005694148315605616437713115424223594710186677844867273218443350479253279231960061845711898262461185970057002138523262952260834191169438764964758526877361442277664448596129451496415695776781879266732057920583336999766633938582656240607973759756021032489262381190762825081392613689817792764844409877116240223852376311404164963595040347176139494461319495285348608562589901671620063620688524249523700500144604558899272202564535295466,
9018406452041117867927204674649220929160509942604290572303644183451237944912470236367308266319079349289625873447647200474598755869642999213142758825809522474810817609751187533346902667225032452694187162262683056445775455963994237202296104812386374636270188433521927503415507963477240913270879794141170568393025367891003921090015993944946205723601349149601256727433716155121883420271498265967234259068535172501445643752691860997480636101699340740265505767091920668218018002976632111256430655619061247292025654740889077014179258647084698229733160071306390020603636210736363198302407289195286953980520285032528614492926,
17978671919734595201524186618868659656036765546673883938819333911564948587858876495802600244078413312462813938682090761599961604959609423010904187720748539707172853352540370208991902929002036775381503365170196838626379685712050728875172622632447875368166743751159775611642629408534890684109652648484868876710697249351895355111511281037497347712241242908563699707272843032773107477368790419109907271096351457526240471975122296483655337150130000812813081239181653384419149292970320991892073352340649237387406498087734708162094476092368665794350968924289259192893289337038201504066310173284757044802449600666007821509553,
8597067880812456123669594978660135058668875834924201279924162761020137582662367704504988576614934966062323191666982943113656186783894245035267051756178331490881264629774635620179678000947771928854566239213498586078670870127924696459041295848474073879336501325437194563845414699360564571136683492426292766799121155041276162673427700999761055592609213603158576637212003771003996722743170543342885011289692845493598413965688949325670519743413071479057382602222055902593614159427186017797992219490308930116850084553033461316509457834436420821916094206010206229370273622681413176347187252950087428868295965528772832409316
]

le = len(n)

N = 1
for num in n:
N *= num

# N1,N2...Nn
NN = [None] * le
for i in range(le):
NN[i] = N / n[i]

# NN1 * t1 = 1 (mod n1)
t = [None] * le
for i in range(le):
t[i] = gmpy2.invert(NN[i],n[i])

# x
x = 0
for i in range(le):
x += c[i]*t[i]*NN[i]

res = x % N
print long_to_bytes(gmpy2.iroot(res,e)[0])
# result is: When e are small and same,it can be Hastad's broadcast attack.Maybe we won't have topic aboout RSA,but I wish you can explore it Non-stop.hctf{Hastad's_broadcast_attack_is_interesting}

如果仍对题目有疑惑的地方或者 wp 有错误的地方,直接问我吧