Midnight Flag CTF 2025

周末還是三個比賽,可惜不好弄。不是遠端連不上就是遠端打不開。再有就是太難了。

Crypto

A2+B2=C

這個題還是不算難的。給了兩個30位數的平方和,并且p=u1*base+r0,q=u2*base+r1其中r 都很小,可以copper。

只是sage里的two_squres不管用,因為有4組(正數)解,需要全弄出來試試是哪個。

from sage.all import randint, next_prime
from Crypto.Util.number import bytes_to_longclass RSA:def __init__(self, hb, lb) -> None:self.hb = hbself.lb = lbself.u1 = randint(0, 2**30)self.u2 = randint(0, 2**30)self.keygen()def keygen(self) -> None:self.base = randint(2**self.hb-1, 2**self.hb)self.e = 0x10001self.p = next_prime(self.u1*self.base + randint(2, 2**self.lb))self.q = next_prime(self.u2*self.base + randint(2, 2**self.lb))self.n = self.p * self.qdef sum(self):return self.u1**2 + self.u2**2def encrypt(self, m: bytes) -> int:m_ = bytes_to_long(m)c = pow(m_, self.e, self.n)return crsa = RSA(hb=2048,lb=256
)
print(f"c0 = {rsa.sum()}")
print(f"c1 = {rsa.encrypt(b'MCTF{ThisIsAFakeFlag}')}")
print(f"c2 = {rsa.encrypt(b'Lorem Ipsum is simply dummy text of')}")
print(f"c3 = {rsa.encrypt(b'the printing and typesetting industry')}")
c0 = 815188129004593690
c1 = 127925291615994657581931619146695269807090069321028068300026702785628490435087413298680092490257386473119689267569976305630148807575684825719646470673354518537583693756638610236703360575725390523075157347945650329643185755019374721283312409555437073732909098741047201773844526561647418227464551267229483364364787507813737149585117565634566192141414340259600731010898093526776126496041547237731611641645486484003184145020567881814736379969229029494635289881135938616525514478902350456632528118064943796968955206904548914444880294647813769276998813113219946458705248043346165647674144729512746228364422970492090341913955974680328429531371057246002643999064173272750228905488785306922291142352536443928185480992771540164041351189897263855717835200997174303403999921094709386555246470299674355058943232903678863339196093611888915090594863104904225697723818302850752252778621729255567862244645828296741411364052759345927008961382069718216739397512177938134054358858778504307167668875379987274830574712603824004594928740077761311104953146589024383734236839245668317380100215644546947907324757631546712895527026941128733402210258099040798244092233062921213678241433301492159422755411303594795618110694805740300672599304274581599355787281881473140136530753285
c2 = 104454128536114134666041330893412849924539319238173846030358370053912259066553198144201647771409151179389296499444225182922737580937571253329036303241246786394696273703737240494606350619424942154134043974057071462964750990605316877522861478098457922126670980711982715700886739488588258928454751146720846461285104408526738717417461756044249496795236713285815410740335507214955619176318929380672905570604946736070454970829122165657529519191829096299562653289959758115282220314539044233440940890830246113981226775616062418119272940675413756550528704261381830683804964448149613789234326868825958311202712158979318207791357868949882157781068305218079123962336473944242076822566261833638654949217602001305205868861207596016799305223552788863815955231724125485952140180911558328890683991762828843660578236671443539626857037266048369875048432191608492096923173890923193063698396903093080818130375913491435899432596884306387277070900092571026594195475769816837963280460673050909448174467601579491721191905742242149320815840931148597139521486968369237822382185925961430998718690684270284663782612688833325942954176755873192287461806363161966656749124978838440843037636615696962613067946478062682619739085469224316287147692903237078068956379036902948739451784308
c3 = 287293965964521577536949600465877039412983676330501517864975724662075373903418313335625721299388975721491357903306320184247853204477040142941778760057485916689064629860222657837690248122034022696608633347098541733229160810131864253603149064874701423636836348322909135954798560398776651665237804954916116590130313684752444052866519034694526102201271444707642449670451542864865493541141728546221679654661093081848121118684594168895062943920921063566925549212250270641028144352434459819122102852072762780335391277683962786782857084040582699842796641523261150308932398544110620418151887847658837961044285094404774616962577265970393150696357457400719726381090518685568644813512490876890790663593699326420593277088351600861395830498853994952245899881834621106473224692036187989636146643992437367194572335837111809655664187790935259739926115874944166340456171845363032300979740488782920318711668046034568790879401209465850491455677846746238706089490902017942125993304620807882387410264371825909245185927481186838760450566656551893404361562801495420174484277284394683958112760663980049171039021132584343301267863299152953512497843386144751245181609419591873712505993146385725244308823894723973026051800808472848805433371109206822668160634407950261536850484088#u1,u2 = 615951939,660144937
#u1,u2 = 60616161,900840613
#u1,u2 = 96674589,897687113
u1,u2 = 492011439,757042187 #okm1 = b'Lorem Ipsum is simply dummy text of'
m2 = b'the printing and typesetting industry'n = gcd(bytes_to_long(m1)^e-c2, bytes_to_long(m2)^e-c3)r = isqrt(n//u1//u2)
P.<k1,k2> = PolynomialRing(Zmod(n))
f = (u1*r + k1)*(u2*r + k2)
small_roots(f,bounds=(2^256,2^256), m=3, d=5)r = isqrt(n//u1//u2)
P.<x> = Zmod(n)[]
f = u1*r + x
v = f.small_roots(X=2^256, beta=0.499, epsilon=0.02)
p = int(f(v[0]))m = pow(c1, inverse_mod(0x10001,p-1),p)
long_to_bytes(int(m))
#b'MCTF{hardy_muskat_williams2coppersmith}'

Counter On Me

AES CTR模式 padding oracle的題

from Crypto.Cipher import AES
from Crypto.Util import Counter
from Crypto.Util.Padding import pad, unpad
from Crypto.Util.number import bytes_to_long
import osclass CTR:def __init__(self):self.key = os.urandom(16)def encrypt(self, pt):iv = os.urandom(16)ctr = Counter.new(128, initial_value=bytes_to_long(iv))cipher = AES.new(self.key, AES.MODE_CTR, counter=ctr)enc = iv + cipher.encrypt(pad(pt, 16))return encdef decrypt(self, ct):try:ctr = Counter.new(128, initial_value=bytes_to_long(ct[:16]))cipher = AES.new(self.key, AES.MODE_CTR, counter=ctr)dec = unpad(cipher.decrypt(ct[16:]), 16)return decexcept Exception:return Falseif __name__ == "__main__":cipher = CTR()flag = os.getenv('FLAG', 'MCTF{ThisIsAFakeFlag}').encode()ct = cipher.encrypt(flag)print(f"CTR(flag)={ct.hex()}")while 1:enc = bytes.fromhex(input("enc="))dec = cipher.decrypt(enc)if bool(dec) or dec == flag:print('Look\'s good')else:print('Hum,this is a weird input')

CTR模式是每用counter生成密文再與明文異或。從后向前調整密文,使尾部符合pad就不會報錯。這樣得到未異或的密文,從而得到明文。

不過由于一些小問題,這個全自動有點麻煩。第1個是尾塊,因為尾塊是pad過的,所以爆破的時候會有兩個不報錯的情況。第2個是頭塊,頭塊不能出現pad 16的情況,所以第1個字符爆不出來,但是可以猜出來。

沒有遠端只能弄個測試數據了。

from pwn import *
#context.log_level = 'debug'#p = remote('',)from Crypto.Cipher import AES
from Crypto.Util import Counter
from Crypto.Util.Padding import pad, unpad
from Crypto.Util.number import bytes_to_long
import os
class CTR:def __init__(self):self.key = b'0123456789abcdef' #os.urandom(16)def encrypt(self, pt):iv = b'abcdef0123456789' #os.urandom(16)ctr = Counter.new(128, initial_value=bytes_to_long(iv))cipher = AES.new(self.key, AES.MODE_CTR, counter=ctr)enc = iv + cipher.encrypt(pad(pt, 16))return encdef decrypt(self, ct):try:ctr = Counter.new(128, initial_value=bytes_to_long(ct[:16]))cipher = AES.new(self.key, AES.MODE_CTR, counter=ctr)dec0 = cipher.decrypt(ct[16:])#print(ct[:16],ct[16:],dec0)dec = unpad(dec0, 16)return decexcept Exception:return Falsedef getstate(enc):dec = cipher.decrypt(enc)if bool(dec) or dec == flag:return b'Look\'s good'else:return b'Hum,this is a weird input'flag = 'MCTF{ThisIsAFakeFlag}'.encode()
cipher = CTR()
ct = cipher.encrypt(flag)
print(ct)
#p.recvuntil(b"CTR(flag)=")
#ct = bytes.fromhex(p.recvline().strip().decode())#1
iv = ct[:16]
c1 = ct[16:]
print(iv,c1)
tail = b''
#末位,確定最后一個字符 如pad為 \x0b 則在 \x01,\x0b時都會正常返回good
for i in range(c1[-1]+1, c1[-1]+16):tc = c1[:len(c1)-1]+xor(bytes([1]), bytes([i])+tail)msg = getstate(iv+tc)if b'good' in msg:print(i, msg)#37^47^1 = 0xb
tail = xor(c1[-11:],b'\x0b'*0xb)#末段
for j in range(len(tail)+1, 17):#print(j)for i in range(256):tc = c1[:len(c1)-len(tail)-1]+xor(bytes([j]), bytes([i])+tail)msg = getstate(iv+tc)#print('send ',j,tc.hex(), msg)if b'good' in msg:tail = bytes([i]) + tail#print('--',i,tail)break#得到
#tail = b'\x9b\xe9\x94\x91\xcb!\xd2\xe0B\xaf\x13\xe0\x0c\xe1\x97'
print(len(tail),tail, xor(tail,c1[-16:]))tail = b''
c1 = c1[:-16]
#前邊段,第1段少1位
for j in range(len(tail)+1, 17):#print(j)for i in range(256):tc = c1[:len(c1)-len(tail)-1]+xor(bytes([j]), bytes([i])+tail)msg = getstate(iv+tc)#print('send ',j,tc.hex(), msg)if b'good' in msg:tail = bytes([i]) + tailprint('--',i,tail)breakprint(len(tail),tail, xor(b'\0'+tail,c1[-16:]))

NeuraTek's Secrets

共用素數的題,gcd一下就得到p了。同時由于e很小crt也行

from Crypto.Util.number import getPrime, bytes_to_long
import math
from oh import FLAGpublic_keys = []
private_keys = []p = getPrime(512)
q1 = getPrime(512)
q2 = getPrime(512)
N1 = p * q1
N2 = p * q2
public_keys.extend([(N1, 3), (N2, 3)])
private_keys.extend([(p, q1), (p, q2)])for _ in range(8):p = getPrime(512)q = getPrime(512)N = p * qpublic_keys.append((N, 3))private_keys.append((p, q))ciphertexts = [pow(bytes_to_long(FLAG), 3, N) for N, _ in public_keys]with open("public_keys.txt", "w") as f:for N, e in public_keys:f.write(f"{N},{e}\n")with open("ciphertexts.bin", "wb") as f:for ct in ciphertexts:f.write(ct.to_bytes((ct.bit_length() + 7) // 8, 'big'))

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/901520.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/901520.shtml
英文地址,請注明出處:http://en.pswp.cn/news/901520.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深度學習--激活函數

激活函數通過計算加權和并加上偏置來確定神經元是否應該倍激活&#xff0c;它們將輸入信號轉換為輸出的可微運算。大多數激活函數都是非線性的&#xff0c;由于激活函數是深度學習的基礎&#xff0c;下面簡要介紹一些常見的激活函數。 1 RelU函數 最受歡迎的激活函數是修正線性…

深入解析 OrdinalEncoder 與 OneHotEncoder:核心區別與實戰應用

標題&#xff1a;深入解析 OrdinalEncoder 與 OneHotEncoder&#xff1a;核心區別與實戰應用 摘要&#xff1a; 本文詳細探討了機器學習中類別特征編碼的兩種核心方法——OrdinalEncoder 和 OneHotEncoder。通過對比兩者的功能、特點、適用場景及代碼實現&#xff0c;幫助讀者…

CTF web入門之命令執行 完整版

web29 文件名過濾 由于flag被過濾,需要進行文件名繞過,有以下幾種方法: 1.通配符繞過 fla?.* 2.反斜杠繞過 fl\ag.php 3.雙引號繞過 fl’‘ag’.php 還有特殊變量$1、內聯執行等 此外 讀取文件利用cat函數,輸出利用system、passthru 、echo echo `nl flag.php`; ec…

【Linux實踐系列】:用c/c++制作一個簡易的進程池

&#x1f525; 本文專欄&#xff1a;Linux Linux實踐項目 &#x1f338;作者主頁&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客勵志語錄&#xff1a; 人生沒有標準答案&#xff0c;你的錯題本也能寫成傳奇。 ★★★ 本文前置知識&#xff1a; 匿名管道 1.前置知識回顧…

2.2 函數返回值

1.回顧def def sum(x,y): return xy res sum(10,20) #調用函數 print(res) 2.函數的三個重要屬性 -函數的類型&#xff1a;function -函數的ID&#xff1a;16進制的整數數值 -函數的值&#xff1a;封裝在函數中的數據和代碼 # - 函數是一塊內存空間&#xff0c;通過…

【3GPP核心網】【5G】精講5G網絡語音業務系統架構

1. 歡迎大家訂閱和關注,精講3GPP通信協議(2G/3G/4G/5G/IMS)知識點,專欄會持續更新中.....敬請期待! 目錄 1. 音視頻業務 2. 消息類業務 SMS over IMS SMS over NAS 3. 互聯互通架構 3.1 音視頻業務互通場景 3.2 5G 用戶與 5G 用戶互通 3.3 5G 用戶與 4G 用戶的互通…

系統環境變量有什么實際作用,為什么要配置它

系統環境變量有什么實際作用,為什么要配置它 系統環境變量具有以下重要實際作用: 指定程序路徑:操作系統通過環境變量來知曉可執行文件、庫文件等的存儲位置例如,當你在命令提示符或終端中輸入一個命令時,系統會根據環境變量PATH中指定的路徑去查找對應的可執行文件。如果…

qt/C++面試題自用學習(更新中)

最近在找工作…面試中遇到了的問題總以為自己會但回答的時候磕磕巴巴&#xff0c;覺得還是要總結一下&#xff1a; vector和list的區別 vector list 底層數據結構 基于動態數組實現&#xff0c;元素在內存中連續存儲 基于雙向鏈表實現&#xff0c;元素在內存中非連續存儲&…

Day09【基于Tripletloss實現的簡單意圖識別對話系統】

基于Tripletloss實現的表示型文本匹配 目標數據準備參數配置數據處理Triplet Loss目標Triplet Loss計算公式公式說明 模型構建網絡結構設計網絡訓練目標損失函數設計 主程序推理預測類初始化加載問答知識庫文本向量化知識庫查詢主程序main測試測試效果 參考博客 目標 在此之前…

說說什么是冪等性?

大家好&#xff0c;我是鋒哥。今天分享關于【說說什么是冪等性&#xff1f;】面試題。希望對大家有幫助&#xff1b; 說說什么是冪等性&#xff1f; 1000道 互聯網大廠Java工程師 精選面試題-Java資源分享網 冪等性&#xff08;Idempotence&#xff09; 是指在某些操作或請求…

【自相關】全局 Moran’s I 指數

自相關&#xff08;Autocorrelation&#xff09;&#xff0c;也稱為序列相關性&#xff0c;指的是同一變量在不同時間或空間點的值之間的關系。簡而言之&#xff0c;自相關就是一個變量與自身在不同位置或時間點的相關性 自相關&#xff1a;針對同一屬性之間進行分析相關性 本…

【C#】Html轉Pdf,Spire和iTextSharp結合,.net framework 4.8

&#x1f339;歡迎來到《小5講堂》&#x1f339; &#x1f339;這是《C#》系列文章&#xff0c;每篇文章將以博主理解的角度展開講解。&#x1f339; &#x1f339;溫馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不對之處望指正&#xff01;&#…

KrillinAI:視頻跨語言傳播的一站式AI解決方案

引言 在全球內容創作領域&#xff0c;跨語言傳播一直是內容創作者面臨的巨大挑戰。傳統的視頻本地化流程繁瑣&#xff0c;涉及多個環節和工具&#xff0c;不僅耗時耗力&#xff0c;還常常面臨質量不穩定的問題。隨著大語言模型(LLM)技術的迅猛發展&#xff0c;一款名為Krillin…

AllDup:高效管理重復文件

AllDup 是一款免費高效的重復文件管理工具&#xff0c;專為 Windows 系統設計&#xff0c;支持快速掃描并清理冗余文件&#xff0c;優化存儲空間。它通過智能算法識別重復內容&#xff0c;覆蓋文本、圖片、音頻、視頻等常見文件類型?。軟件提供便攜版與安裝版&#xff0c;無需…

C++進程間通信開發實戰:高效解決項目中的IPC問題

C進程間通信開發實戰&#xff1a;高效解決項目中的IPC問題 在復雜的軟件項目中&#xff0c;進程間通信&#xff08;Inter-Process Communication, IPC&#xff09;是實現模塊化、提高系統性能與可靠性的關鍵技術之一。C作為一門高性能的編程語言&#xff0c;廣泛應用于需要高效…

用 Depcheck 去除Vue項目沒有用到的依賴

1. 安裝 Depcheck 插件 npm i -g depcheck 2. 運行命令&#xff0c;查看為用到的依賴 npx depcheck depcheck 3. 查詢到所有為用到的依賴 E:\Project>depcheck Unused dependencies * riophae/vue-treeselect * codemirror * connect * qs * sortablejs * vue-count-t…

猿輔導集團推首個教育AI范式小猿AI 聚焦家校應用場景發布3款新品

近兩年&#xff0c;通用大模型呈爆發式發展&#xff0c;垂類AI遭遇“技術平替”危機。 4月15日&#xff0c;猿輔導集團在“小猿AI暨智能硬件戰略發布會”上&#xff0c;正式推出首個教育AI范式——“小猿AI”&#xff0c;并發布覆蓋家校兩端的“軟件應用智能終端通識課程”三位…

英語單詞 list 11

前言 這一個 list 是一些簡單的單詞。感覺這個瀏覽單詞的方法比較低效&#xff0c;所以準備每天最多看一個 list &#xff0c;真要提升英語水平&#xff0c;感覺還是得直接做閱讀理解題。就像我們接觸中文閱讀材料一樣&#xff0c;當然光知道這個表面意思還不夠&#xff0c;還…

BufferedReader 終極解析與記憶指南

BufferedReader 終極解析與記憶指南 一、核心本質 BufferedReader 是 Java 提供的緩沖字符輸入流&#xff0c;繼承自 Reader&#xff0c;通過內存緩沖和行讀取功能極大提升文本讀取效率。 核心特性速查表 特性說明繼承鏈Reader → BufferedReader緩沖機制默認 8KB 字符緩沖…