CTFPlus-密码学每周练习-奇怪的短信、Ez_RSA、RSA?、ezCrypto、babyRSA"

admin 2026-10-23 23:34:35 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

cover_image

CTFPlus-密码学每周练习-奇怪的短信、Ez\_RSA、RSA?、ezCrypto、babyRSA

原创

李北辰
李北辰

SPEEDCoding

2026年6月27日 14:53
山西

在小说阅读器读本章

去阅读

1. 奇怪的短信

短信内容是:335321414374744361715332

拖入随波逐流解码,发现是九宫格键盘编码:

2. Ez\_RSA

题目文件是一个python脚本:

from Crypto.Util.number import getPrime, bytes_to_longimport gmpy2def generate_twin_primes(bits, delta_bits):    \"\"\"生成间距极小的孪生素数\"\"\"    p = getPrime(bits)    q = p + (1 << delta_bits)  # 设置素数间距为2^delta_bits    while not gmpy2.is_prime(q):        q += 2  # 保持奇数特性    return p, q# 安全参数bits = 512delta_bits = 18  # |p-q| ≈ 2^18p, q = generate_twin_primes(bits, delta_bits)# 加密流程n = p * qe = 65537# 真实CTF中会删除此行,仅保留加密结果m = bytes_to_long(flag)c = pow(m, e, n)# 仅输出公开参数print(\"[+] 公开的RSA参数:\")print(f\"n = {n}\")print(f\"e = {e}\")print(f\"c = {c}\")#n = 156015412971134825784995317753399683894906793391308032626888615976930925748500176423984400218274373730878087646971649297488998628926317502352437085740879970415010398250501458046160378576412025008488504577864728979671718404518999445105511632801253199467687301754361012571700473381930563891632815395065300635357#e = 65537#c =145659164213625745393731913671198533318773493955865949134151384195147607511261373290164813518695360211148466970760974852185584184837376376039163766504104222029224517534603434140831986412683498654473368081081077806357860045809479182485360340123081484936709292496026637791199418448869603320211940344310493770879

给了n、e、c,然后p和q的生成算法,首先使用yafu因式分解n得到p和q:

然后写python脚本进行解密c:

import gmpy2import binasciip = 12490612994210285185822125788537718180229091672597001124723418817980815919026153698854362083537424897294344975322996570504070535675249475750072701982231499q = 12490612994210285185822125788537718180229091672597001124723418817980815919026153698854362083537424897294344975322996570504070535675249475750072701981969143e = 65537c = 145659164213625745393731913671198533318773493955865949134151384195147607511261373290164813518695360211148466970760974852185584184837376376039163766504104222029224517534603434140831986412683498654473368081081077806357860045809479182485360340123081484936709292496026637791199418448869603320211940344310493770879phi = (p-1)*(q-1)d = gmpy2.invert(e,phi)m = gmpy2.powmod(c, d, p * q)print(binascii.unhexlify(hex(m)[2:]).decode('utf-8'))

得到flag:

3. RSA?

题目附件给了n,e,c

N=0x180be86dc898a3c3a710e52b31de460f8f350610bf63e6b2203c08fddad44601d96eb454a34dab7684589bc32b19eb27cffff8c07179e349ddb62898ae896f8c681796052ae1598bd41f35491175c9b60ae2260d0d4ebac05b4b6f2677a7609c2fe6194fe7b63841cec632e3a2f55d0cb09df08eacea34394ad473577dea5131552b0b30efac31c59087bfe603d2b13bed7d14967bfd489157aa01b14b4e1bd08d9b92ec0c319aeb8fedd535c56770aac95247d116d59cae2f99c3b51f43093fd39c10f93830c1ece75ee37e5fcdc5b174052eccadcadeda2f1b3a4a87184041d5c1a6a0b2eeaa3c3a1227bc27e130e67ac397b375ffe7c873e9b1c649812edcde=0x1c=0x4963654354467b66616c6c735f61706172745f736f5f656173696c795f616e645f7265617373656d626c65645f736f5f63727564656c797d

这里e=1,导致原来的加密方法:c = m^e mod n变成c = m mod n,RSA加密中m<n,所以c=m,这时密文和明文相同,直接把c转换成字符串即可:

import binasciic=0x4963654354467b66616c6c735f61706172745f736f5f656173696c795f616e645f7265617373656d626c65645f736f5f63727564656c797dprint(binascii.unhexlify(hex(c)[2:]))

输出flag:

4. ezCrypto

题目给了一段编码:

ZmF7NHlDeXRfdXViYzBsZzNzX3Jwb2Jjb3V1fQ==

先base64解码:

fa{4yCyt_uubc0lg3s_rpobcouu}

然后再栅栏fence解码,栏数为2:

flag{34sy_Crypto_bucuobucu0}

5. babyRSA

下载题目附件,是一个python脚本:

import gmpy2from Crypto.Util.number import bytes_to_long, getStrongPrimeflag = b\"FZNCTF{xxxxxxxxxxxxxxxxxxxxxx}\"m = bytes_to_long(flag)p = getStrongPrime(1024)q = getStrongPrime(1024)n = p * qe1 = 65537e2 = 2333assert gmpy2.gcd(e1, e2) == 1c1 = pow(m, e1, n)c2 = pow(m, e2, n)print(\"n = \", n)print(\"c1 = \", c1)print(\"c2 = \", c2)'''n =  20116181115185256137151544962617461969127485079539874123483790179691451026659727409952002522890170053136432251484598758202749921581090222404128778286934496528266389586853622784941814905724374659722595150921699219297623333597701057604954651692729250881800409786303147914726282180533059864870515367790648247781809163302813093152120079755029826297153011886828297246071460547641705486357297417233767122432498694486964352342801912061641754894572829465334992075139630449930115173945624459850685926333265959551792326024379566586598102224813413893610109613076229994854338779713676554568790353735720642800095499489845542499243c1 =  12574615186232508658058781239986357997690221455470707882708919538344867889046756940392586425215083828833917124513057649780713973391884806015516720789553246206689136824212927709627728801288304629797527956697243414600762350309939098109707454770146886759387428373061131102235552303687641823437812335805429238591967849935403611629054866383093303269886760991083623181420555220699498615783586898665752705379697907365417049724321589193519522361497873285356095894318360385694468646045503420079559869794438944147268173957051158766280963203638656844473553699835099487100606197891044561669390594778573658401240732422863142027023c2 =  8662571349644155432847824828393121776098409938437916669251107156874603954233944520039184762114790042807930511195272715449923236367967421315595229284040395158368328305331059953339506075385510377512416235056474493145376149687125036012499178684540639274797034307771820863938251633851132423882652884158338847776108707048056678532767030904154141724336547346190841924329986431350894721191694788035732072169271856487733779585742838903331792853668246043440328934976370767441620664696662437609635592559825455438053522844176591659902503216608366261175995953153271651775486985191394510128456927543378761783994086684673696547021'''

这里给了c1、c2、e1、e2、n,可以使用共模攻击,扩展欧几里得算法找出a和b,满足ae1+b\*e2=1,构造出等式:

c1^a \ c2^b mod n = ((m^e1 mod n)^a \ (m^e2 mod n)^b) mod n = m^(a\e1 + b \ e2) mod n,这里因为a和b满足ae1+b\e2=1,所以m= c1^a \ c2^b mod n

求解python代码为:

import gmpy2import binasciin =  20116181115185256137151544962617461969127485079539874123483790179691451026659727409952002522890170053136432251484598758202749921581090222404128778286934496528266389586853622784941814905724374659722595150921699219297623333597701057604954651692729250881800409786303147914726282180533059864870515367790648247781809163302813093152120079755029826297153011886828297246071460547641705486357297417233767122432498694486964352342801912061641754894572829465334992075139630449930115173945624459850685926333265959551792326024379566586598102224813413893610109613076229994854338779713676554568790353735720642800095499489845542499243c1 =  12574615186232508658058781239986357997690221455470707882708919538344867889046756940392586425215083828833917124513057649780713973391884806015516720789553246206689136824212927709627728801288304629797527956697243414600762350309939098109707454770146886759387428373061131102235552303687641823437812335805429238591967849935403611629054866383093303269886760991083623181420555220699498615783586898665752705379697907365417049724321589193519522361497873285356095894318360385694468646045503420079559869794438944147268173957051158766280963203638656844473553699835099487100606197891044561669390594778573658401240732422863142027023c2 =  8662571349644155432847824828393121776098409938437916669251107156874603954233944520039184762114790042807930511195272715449923236367967421315595229284040395158368328305331059953339506075385510377512416235056474493145376149687125036012499178684540639274797034307771820863938251633851132423882652884158338847776108707048056678532767030904154141724336547346190841924329986431350894721191694788035732072169271856487733779585742838903331792853668246043440328934976370767441620664696662437609635592559825455438053522844176591659902503216608366261175995953153271651775486985191394510128456927543378761783994086684673696547021e1 = 65537e2 = 2333s = gmpy2.gcdext(e1,e2)a = s[1]b = s[2]if a < 0:    a = -a    c1 = gmpy2.invert(c1, n)else:    b = -b    c2 = gmpy2.invert(c2, n)m = (gmpy2.powmod(c1, a, n) * gmpy2.powmod(c2, b, n)) % nprint(binascii.unhexlify((hex(m)[2:])))

输出flag:


CTFPlus-密码学每周练习-奇怪的短信、Ez_RSA、RSA?、ezCrypto、babyRSA" 网络安全文章

CTFPlus-密码学每周练习-奇怪的短信、Ez_RSA、RSA?、ezCrypto、babyRSA"

该文档详细解析了5道CTF密码学题目解法,涉及九宫格键盘编码解码、RSA孪生素数攻击(通过yafu分解n)、e=1时的明文直接提取、Base64+栅栏密码组合破译、共模攻击(扩展欧几里得算法求解)。关键发现包括针对特殊参数RSA的实用破解技巧,可操作建议涵盖具体工具使用(如yafu、随波逐流解码器)和Python脚本实现加解密流程。
[PWN]Voidexec" 网络安全文章

[PWN]Voidexec"

该文档分析PWN题目Voidexec的解题思路,核心是通过mprotect修改内存权限并采用自修改shellcode技术绕过forbidden函数对0xF和0xCD80指令的检测。关键发现包括利用动态计算syscall地址避免硬编码、通过inc指令修改内存中的syscall字节码。可操作建议涉及使用lea指令计算函数地址、控制shellcode长度在99字节内。
第九届御网杯网络安全大赛线下半决赛Writeup" 网络安全文章

第九届御网杯网络安全大赛线下半决赛Writeup"

本文详细解析第九届御网杯网络安全大赛线下半决赛解题过程,涵盖Web、Misc、Crypto三大方向。Web部分展示IP绕过与命令执行漏洞利用技巧;Misc涉及文件隐写、频率分析、二维码修复及流量分析;Crypto包含编码识别与自定义算法逆向。文档提供完整payload和工具操作指引,具有较高实战参考价值。
十几种EDUSRC信息收集技巧+统一身份认证登录绕过分享" 网络安全文章

十几种EDUSRC信息收集技巧+统一身份认证登录绕过分享"

该文档详细介绍了针对EDUSRC(教育行业安全响应中心)的信息收集技巧与统一身份认证登录绕过方法。主要内容包括使用域名查询、邮箱收集、ICP备案检索、空间搜索引擎(FOFA/鹰图)、企查查/小蓝本等工具进行资产发现,并通过逻辑缺陷修改返回包参数(如false改为true)、爆破用户名、前端验证绕过等方式实现统一身份认证系统的未授权访问。文档还提供了针对特定系统开发商的通杀弱口令爆破策略及Google黑客语法等实操建议。
评论:0   参与:  0