Buu-Crypto

jrl Lv3

BuuCTF刷题记录-Crypto

1.异性相吸

TASK:

最近出现了一个奇葩观点,说性别都不一样,怎么能谈恋爱?为了证明这个观点错误,请大家证明异性是相吸的。

1
2
key:asadsasdasdasdasdasdasdasdasdasdqwesqf
密文:ἇ̀Ј唒ဃ塔屋䩘卖剄䐃堂ن䝔嘅均ቄ䩝ᬔ

WP:

  • 用010打开两个文件,获得他们的二进制数,再进行异或
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from Crypto.Util.number import long_to_bytes
a = '0110000101110011011000010110010001110011011000010111001101100100011000010111001101100100011000010111001101100100011000010111001101100100011000010111001101100100011000010111001101100100011000010111001101100100011000010111001101100100011000010111001101100100011100010111011101100101011100110111000101100110'
b = '0000011100011111000000000000001100001000000001000001001001010101000000110001000001010100010110000100101101011100010110000100101001010110010100110100010001010010000000110100010000000010010110000100011000000110010101000100011100000101010101100100011101010111010001000001001001011101010010100001010000011011'
c = ''

for i in range(len(a)):
if(a[i] == b[i]):
c+='0'
else:
c+='1'
print(c)
#0110011001101100011000010110011101111011011001010110000100110001011000100110001100110000001110010011100000111000001110010011100100110010001100100011011100110110011000100011011101100110001110010011010101100010001101010011010001100001001101110011010000110011001101010110010100111000001110010110010101111101

print(long_to_bytes(13040004482825639027998127915416848738127988052104145969389882111109559127041106665604212093))
#flag{ea1bc0988992276b7f95b54a7435e89e}

2.RSA(证书公钥解析)

TASK:

image-20230618214433507

题目给了两个附件,没遇到过,了解后知道是证书公钥解析类型的题目。(证书公钥解析 - CNW - 博客园 (cnblogs.com)

WP:

  • pub-key:
1
2
3
4
-----BEGIN PUBLIC KEY-----
MDwwDQYJKoZIhvcNAQEBBQADKwAwKAIhAMAzLFxkrkcYL2wch21CM2kQVFpY9+7+
/AvKr1rzQczdAgMBAAE=
-----END PUBLIC KEY-----
  • 公钥解析后就是基本的RSA,脚本如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import gmpy2
import libnum
from Crypto.Util.number import *
import rsa

e= 65537
n= 86934482296048119190666062003494800588905656017203025617216654058378322103517
p= 285960468890451637935629440372639283459
q= 304008741604601924494328155975272418463
d= 81176168860169991027846870170527607562179635470395365333547868786951080991441

key = rsa.PrivateKey(n,e,d,q,p) #在pkcs标准中,pkcs#1规定,私钥包含(n,e,d,p,q)

with open("D:\CTF\\buu\\0eaf8d6c-3fe5-4549-9e81-94ac42535e7b\\flag.enc","rb") as f: #以二进制读模式,读取密文
f = f.read()
print(rsa.decrypt(f,key)) # f:公钥加密结果 key:私钥

得到flag: flag{decrypt_256}

3.RSA1(dp,dq泄露)

TASK:

1
2
3
4
5
p = 8637633767257008567099653486541091171320491509433615447539162437911244175885667806398411790524083553445158113502227745206205327690939504032994699902053229 
q = 12640674973996472769176047937170883420927050821480010581593137135372473880595613737337630629752577346147039284030082593490776630572584959954205336880228469
dp = 6500795702216834621109042351193261530650043841056252930930949663358625016881832840728066026150264693076109354874099841380454881716097778307268116910582929
dq = 783472263673553449019532580386470672380574033551303889137911760438881683674556098098256795673512201963002175438762767516968043599582527539160811120550041
c = 24722305403887382073567316467649080662631552905960229399079107995602154418176056335800638887527614164073530437657085079676157350205351945222989351316076486573599576041978339872265925062764318536089007310270278526159678937431903862892400747915525118983959970607934142974736675784325993445942031372107342103852

题目给出了p,q,dp,dq,c

考虑使用crt,欧拉定理求解

WP:

  • 推导过程如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from gmpy2 import invert
from libnum import*

p = 8637633767257008567099653486541091171320491509433615447539162437911244175885667806398411790524083553445158113502227745206205327690939504032994699902053229
q = 12640674973996472769176047937170883420927050821480010581593137135372473880595613737337630629752577346147039284030082593490776630572584959954205336880228469
dp = 6500795702216834621109042351193261530650043841056252930930949663358625016881832840728066026150264693076109354874099841380454881716097778307268116910582929
dq = 783472263673553449019532580386470672380574033551303889137911760438881683674556098098256795673512201963002175438762767516968043599582527539160811120550041
c = 24722305403887382073567316467649080662631552905960229399079107995602154418176056335800638887527614164073530437657085079676157350205351945222989351316076486573599576041978339872265925062764318536089007310270278526159678937431903862892400747915525118983959970607934142974736675784325993445942031372107342103852
#n=p*q

I = invert(q,p) #求p的逆元
mp = pow(c,dp,p) #求幂取模运算
mq = pow(c,dq,q) #求幂取模运算

m = int((((mp-mq)*I)%p)*q+mq)
m=m%n
print(n2s(m))

解出flag: noxCTF{W31c0m3_70_Ch1n470wn}

  • Title: Buu-Crypto
  • Author: jrl
  • Created at: 2023-06-18 21:42:46
  • Updated at: 2023-08-25 14:07:48
  • Link: https://jrl777.github.io/2023/06/18/Buu-Crypto/
  • License: This work is licensed under CC BY-NC-SA 4.0.
 Comments