# Báo cáo lần 1 ### Hackthebox #### BabyEncryption ``` import string from secret import MSG def encryption(msg): ct = [] for char in msg: ct.append((123 * char + 18) % 256) return bytes(ct) ct = encryption(MSG) f = open('./msg.enc','w') f.write(ct.hex()) f.close() ``` Đây là Affine Cipher. ``` from Crypto.Util.number import* def decryption(data): pt = '' for byte in data: pt += chr((byte - 18)*inverse(123, 256) % 256) return pt data = bytes.fromhex("6e0a9372ec49a3f6930ed8723f9df6f6720ed8d89dc4937222ec7214d89d1e0e352ce0aa6ec82bf622227bb70e7fb7352249b7d893c493d8539dec8fb7935d490e7f9d22ec89b7a322ec8fd80e7f8921") print(decryption(data)) ``` #### Baby Time Capsule ``` from gmpy2 import iroot import json from Crypto.Util.number import* from pwn import* io = remote("159.65.20.166", 32371) io.recvuntil(b'(Y/n) ') io.sendline(b"Y") data = io.recvuntil(b'}').decode() data = json.loads(data) time_capsule_1 = (data["time_capsule"]) n1 = data["pubkey"][0] n1 = bytes_to_long(bytes.fromhex(n1)) time_capsule_1 = bytes_to_long(bytes.fromhex(time_capsule_1)) io.recvuntil(b'(Y/n) ') io.sendline(b"Y") data = io.recvuntil(b'}').decode() data = json.loads(data) time_capsule_2 = (data["time_capsule"]) n2 = data["pubkey"][0] time_capsule_2 = bytes_to_long(bytes.fromhex(time_capsule_2)) n2 = bytes_to_long(bytes.fromhex(n2)) io.recvuntil(b'(Y/n) ') io.sendline(b"Y") data = io.recvuntil(b'}').decode() data = json.loads(data) time_capsule_3 = (data["time_capsule"]) n3 = data["pubkey"][0] time_capsule_3 = bytes_to_long(bytes.fromhex(time_capsule_3)) n3 = bytes_to_long(bytes.fromhex(n3)) e = 5 c1,c2,c3 = time_capsule_1, time_capsule_2, time_capsule_3 N = n1*n2*n3 N1 = n2*n3 N2 = n1*n3 N3 = n1*n2 u1 = inverse(N1,n1) u2 = inverse(N2,n2) u3 = inverse(N3,n3) x = (N1*c1*u1 + N2*c2*u2+ N3*c3*u3) % N print(long_to_bytes(iroot(x,5)[0])) io.close() io.interactive() ``` #### The Last Dance ``` from pwn import xor iv = bytes.fromhex("c4a66edfe80227b4fa24d431") data = bytes.fromhex("7aa34395a258f5893e3db1822139b8c1f04cfab9d757b9b9cca57e1df33d093f07c7f06e06bb6293676f9060a838ea138b6bc9f20b08afeb73120506e2ce7b9b9dcd9e4a421584cfaba2481132dfbdf4216e98e3facec9ba199ca3a97641e9ca9782868d0222a1d7c0d3119b867edaf2e72e2a6f7d344df39a14edc39cb6f960944ddac2aaef324827c36cba67dcb76b22119b43881a3f1262752990") flag = bytes.fromhex("7d8273ceb459e4d4386df4e32e1aecc1aa7aaafda50cb982f6c62623cf6b29693d86b15457aa76ac7e2eef6cf814ae3a8d39c7") message = b"Our counter agencies have intercepted your messages and a lot " message += b"of your agent's identities have been exposed. In a matter of " message += b"days all of them will be captured" print(xor(xor(data,flag),message)) ``` #### xorxorxor ``` from pwn import* data = bytes.fromhex("134af6e1297bc4a96f6a87fe046684e8047084ee046d84c5282dd7ef292dc9") key = xor(data[:4], b'HTB{') print(xor(data,key)) ``` #### Lost Modulo ``` from pwn import* from Crypto.Util.number import* from gmpy2 import* data = bytes_to_long(bytes.fromhex("05c61636499a82088bf4388203a93e67bf046f8c49f62857681ec9aaaa40b4772933e0abc83e938c84ff8e67e5ad85bd6eca167585b0cc03eb1333b1b1462d9d7c25f44e53bcb568f0f05219c0147f7dc3cbad45dec2f34f03bcadcbba866dd0c566035c8122d68255ada7d18954ad604965")) print(long_to_bytes(iroot(data,3)[0]).decode()) ``` #### RSAisEASY ``` from Crypto.Util.number import* from math import gcd from os import urandom sum = 601613204734044874510382122719388369424704454445440856955212747733856646787417730534645761871794607755794569926160226856377491672497901427125762773794612714954548970049734347216746397532291215057264241745928752782099454036635249993278807842576939476615587990343335792606509594080976599605315657632227121700808996847129758656266941422227113386647519604149159248887809688029519252391934671647670787874483702292498358573950359909165677642135389614863992438265717898239252246163 n1 = 101302608234750530215072272904674037076286246679691423280860345380727387460347553585319149306846617895151397345134725469568034944362725840889803514170441153452816738520513986621545456486260186057658467757935510362350710672577390455772286945685838373154626020209228183673388592030449624410459900543470481715269 c1 = 92506893588979548794790672542461288412902813248116064711808481112865246689691740816363092933206841082369015763989265012104504500670878633324061404374817814507356553697459987468562146726510492528932139036063681327547916073034377647100888763559498314765496171327071015998871821569774481702484239056959316014064 c2 = 46096854429474193473315622000700040188659289972305530955007054362815555622172000229584906225161285873027049199121215251038480738839915061587734141659589689176363962259066462128434796823277974789556411556028716349578708536050061871052948425521408788256153194537438422533790942307426802114531079426322801866673 q = (gcd(sum,n1)) p = n1 // q f1 = (long_to_bytes(pow(c1,inverse(65537,(p-1)*(q-1)),n1))) n2 = sum%n1 z = n2 // q f2 = (long_to_bytes(pow(c2,inverse(65537,(z-1)*(q-1)),n2))) print(f1+f2) ``` #### Embryonic Plant Challenge này khá hay, liên quan tới LCG, mình có [**LINK**](https://crypto.stackexchange.com/questions/87220/cryptographically-secure-linear-congruential-generator-is-it-possible) này có thể giúp ích cho bạn rất nhiều. ``` from Crypto.Util.number import* from math import gcd def extended_gcd(a, b): if b == 0: return a, 1, 0 else: d, x, y = extended_gcd(b, a % b) return d, y, x - (a // b) * y def find_x(a, b, c): gcd, x_prime, _ = extended_gcd(b, c) if a % gcd != 0: return None a_prime = (a // gcd) % c x = (x_prime * a_prime) % c return x def find_d(a, b, c, n): bc_mod_n = (b * c) % n d = (a - bc_mod_n) % n return d n = 875160154252520186251141359813376844205078837688859219647998263059390545455666959868272831956779132045330105458640460325486680058028233270020291614157451317894110269639780507518860757299450578151147748572019371950843986400076289065334864577087504297359676338166424192877389197803442490978821375794048316553853085966558794240760959161987598108459441945291723309230665829568115073301763544532552179053221908864303864014278134933463597319119189753348991487712539547783209384907074459767339389912999640300731884080101606842315180302622347685382825488775275363493924203654141256657466019975768214244502429057343992946031175889606627829209702720334661107181627261133702840164098042293465302874342367 s = [45948196110742333078791904670754464213578139076280109814760521831353273605782767324779081189039031009815013571451298379981707915542440414220083426012609548317078548002379773850309022768943249397294154504631709396600886029113258544, 665421018479354408650321321446504004021595291664664613059639369284378526681870680990726015080235767661978417143890017835302285399955943814186163819783105747360598346167878408804511855184450139017542601099343516459031570045750334635, 116901116055486713179543809270968616175254891027356317875260251653063459332706332539151662885597749087527500088196623717000607610204151297409257838680010556067036481294394312559141590536968964270065614095041734217016802912127551399, 257185387102952423422505329148493981831897715690584197952849048768011651303898015179171902245107615610642197589412557491017458513344338002354160349045327465820185865360211004133692933165886876481285477189851986291296987966454584913, 600597039831835988459465667623398229366883082253281715825043750022005882279772326647162809398726368298023180858058246314753665389921411839577046046481816334727242911521098595075675355340100111145925656700034968689114367721111389240] x0 = s[0] x1 = s[1] x2 = s[2] x3 = s[3] x4 = s[4] t0 = x1 - x0 t1 = x2 - x1 t2 = x3 - x2 t3 = x4 - x3 r = (gcd(abs(t2*t0-t1*t1),abs(t3*t1-t2*t2)))//2 p = (find_x(x1-x2,x0-x1,r)) q = find_d(x1,p,x0,r) print(r) print(p) print(q) from Crypto.Cipher import AES key = b"'\xa2U\x03\xf6\x7fG?N\x1d\x11\xae\xda!\x07\xa60\xb1\xa8\x8bd\x9cr\xe2\xe4#\xf8i\xe9\xd7tR" cipher = AES.new(key, AES.MODE_ECB) print(cipher.decrypt(bytes.fromhex("df534b412fbbb5bf920a9c8a76f85013b2c6cb49642c30a7e5e801f9576b4f36071945f46d3e78c8b1e2adff0c090d7d88e9a068caae958d87ca56bcd0763e00e527371f271530bd6bb779284233ec45"))) ``` #### Weak RSA ``` from Crypto.Util.number import* from factordb.factordb import FactorDB with open("flag.enc", "rb") as file: ciphertext = file.read() ciphertext = bytes_to_long(ciphertext) e = 68180928631284147212820507192605734632035524131139938618069575375591806315288775310503696874509130847529572462608728019290710149661300246138036579342079580434777344111245495187927881132138357958744974243365962204835089753987667395511682829391276714359582055290140617797814443530797154040685978229936907206605 n = 573177824579630911668469272712547865443556654086190104722795509756891670023259031275433509121481030331598569379383505928315495462888788593695945321417676298471525243254143375622365552296949413920679290535717172319562064308937342567483690486592868352763021360051776130919666984258847567032959931761686072492923 f = FactorDB(n) f.connect() q, p = f.get_factor_list() d = inverse(e,(p-1)*(q-1)) print(long_to_bytes(pow(ciphertext,d,n))) ``` ### MAPNACTF ### Các task đã hoàn thành #### Task 1 https://hackmd.io/@nhatviet/r1SLEfqua #### Task 2 Part 1: https://hackmd.io/@nhatviet/SJhi9nfKT Part 2: https://hackmd.io/@nhatviet/Bk6klwXt6 #### Task 3 https://hackmd.io/@nhatviet/ByBWmkz9p