CryptoHack-wp(一)

本文档详述了一系列网络安全和编码解谜挑战,包括ASCII、Hex、Base64编码,XOR操作,数学问题如最大公约数、扩展欧几里得算法、模幂运算和模逆运算,以及数据格式解析如PEM、DER证书和RSA密钥。通过解决这些挑战,可以学习到加密、解密和数据格式转换等关键技术。
摘要由CSDN通过智能技术生成

一、INTRODUCTION

1.Great Snacks
下载py文件,直接运行得到flag

2.Network Attacks
下载py文件,运行得到flag
在这里插入图片描述

二、GENERAL

1.ENCODING

1.1ASCII
在这里插入图片描述

1.2Hex
在这里插入图片描述
运行得到同样的结果flag

1.3Base64
在这里插入图片描述

1.4Bytes and Big Integers
在这里插入图片描述

1.5Encoding Challenge

from pwn import *
from Crypto.Util.number import bytes_to_long, long_to_bytes
import json
import codecs

r = remote('socket.cryptohack.org', 13377, level = 'debug')

def json_recv():
    line = r.recvline()
    return json.loads(line.decode())

def json_send(hsh):
    request = json.dumps(hsh).encode()
    r.sendline(request)

received = json_recv()

for x in range(100):
	
	encode_type = received["type"]
	encoded_value = received["encoded"]

	if encode_type == "base64":
	    decoded = base64.b64decode(encoded_value.encode()).decode()
	elif encode_type == "hex":
	    decoded = bytes.fromhex(encoded_value).decode()
	elif encode_type == "rot13":
	    decoded = codecs.decode(encoded_value, 'rot_13')
	elif encode_type == "bigint":
		decoded_long = int(encoded_value, 16)
		decoded = long_to_bytes(decoded_long).decode()
	elif encode_type == "utf-8":
		decoded = ''.join(chr(b) for b in encoded_value)

	to_send = {
	    "decoded": decoded
	}
	json_send(to_send)

	received = json_recv()

2.XOR

2.1XOR Starter
在这里插入图片描述

2.2XOR Properties

from pwn import xor
from binascii import unhexlify

key1 = 'a6c8b6733c9b22de7bc0253266a3867df55acde8635e19c73313'
k21 = '37dcb292030faa90d07eec17e3b1c6d8daf94c35d4c9191a5e1e'
k23 = 'c1545756687e7573db23aa1c3452a098b71a7fbf0fddddde5fc1'
fk132 = '04ee9855208a2cd59091d04767ae47963170d1660df7f56f5faf'
flag = xor(unhexlify(fk132), unhexlify(key1), unhexlify(k23))
print(flag)

2.3Favourite byte

from pwn import xor
data = '73626960647f6b206821204f21254f7d694f7624662065622127234f726927756d'
decoded_data = bytes.fromhex(data)
print(decoded_data)
for i in range(256):
	try:
		flag = ''.join(chr(d ^ i) for d in decoded_data)
		print(str(i) + ":" + flag)
	except:
		print("error")

2.4You either know, XOR you don’t

data = '0e0b213f26041e480b26217f27342e175d0e070a3c5b103e2526217f27342e175d0e077e263451150104'
decoded_data = bytes.fromhex(data)
print(decoded_data)
str = 'crypto{'
key = ''.join((chr(decoded_data[i] ^ ord(str[i]))) for i in range(7)) 
print(key)
#猜测key
key = 'myXORkey'
flag = xor(decoded_data, key.encode())
print(flag)

2.5Lemur XOR
下载两张图片,使用stegsolve打开其中一张
在这里插入图片描述
然后Analyse-Image Combiner,打开另一张,得到flag
在这里插入图片描述

3.MATHEMATICS

3.1Greatest Common Divisor

from Crypto.Util import number
def gcd(a,b):
    if b == 0:
        return a
    else:
        return gcd(b, mod(a,b))
#或者直接调用gcd函数
n = number.GCD(66528,52920)
print(n)

3.2Extended GCD

def extended_gcd(a,b):
    if a==0:
        return b,0,1
    else:
        gcd, x, y = extended_gcd(b%a, a)
        return gcd, y-(b // a) * x, x
print(extended_gcd(26513, 32321))

3.3Modular Arithmetic 1

print(min(11%6, 8146798528947 % 17))

3.4Modular Arithmetic 2

#to compute x^y mod m
def power(x,y,m): 
    if (y == 0): 
        return 1
    p = power(x, y // 2, m) % m 
    p = (p * p) % m 
    return p if(y % 2 == 0) else  (x * p) % m
x = 27324678765465536
y = 65536
m = 65537
print(power(x,y,m))

3.5Modular Inverting

#to compute d while a * d = 1 mod m
def modInverse(a,m): 
  
    if (gcd(a, m) != 1): 
        print("Inverse doesn't exist") 
    else: 
        # If a and m are relatively prime, then 
        # modulo inverse is a^(m-2) mode m 
        print("Modular multiplicative inverse is ", 
             power(a, m - 2, m)) 
print(modInverse(3,13))
#或者使用函数print(number.inverse(3,13))

4.DATA FORMATS

4.1Privacy-Enhanced Mail?
下载openssl asn1parse -i -in privacy_enhanced_mail_1f696c053d76a78c2c531bb013a92d4a.pem
kali:
输入命令

openssl asn1parse -i -in privacy_enhanced_mail_1f696c053d76a78c2c531bb013a92d4a.pem

得出

0:d=0  hl=4 l=1187 cons: SEQUENCE          
    4:d=1  hl=2 l=   1 prim:  INTEGER           :00
    7:d=1  hl=4 l= 257 prim:  INTEGER           :CEF283B7E10EF80EA81352C8B52BA791627CBCDE9381CBBC0A4D3BEE3A060DF1B636DC43E2FC90C464D09E0AFA8C4289B95CF6308C0371D5ED14B205F88497F477C02D0DF289E74D4BCD27FD347504D7094A5CC8BAA2E617175D9A399F52F1C5B852EFC605D181ADE6837AFBA254D6FB57F1392D1955E0C9A8509A39146FA0060E80B82E776FC4D1A69A262F5C37B0A399D27B4379BAAF21AE0B0A84BD9D4A8155966BB7CA705A299E5FDF72C49E7306C35798567E6BF1880509CB598D48FC247F9621190FBCDE0F4DE7CF11A4B2CC5E682DE8A8A6B625A726CAAD0CF465638063C5DA6E57743251DA36CA6AA7AAE66713FBE553F867EBFB3CF9CB5D4EA7D20B
  268:d=1  hl=2 l=   3 prim:  INTEGER           :010001
  273:d=1  hl=4 l= 256 prim:  INTEGER           :7C3B1D534F299B43C1260876303C0A95BE17BF91A5DF2F1CACDA7C75A0236E4F81E1210D27C0126FB34D80F27A41A4D7E48CA7C5B0E78878B19FD0D6C0BF6830FB8A4401B16D938AD54C4D0B356862056CB0554EB2AB8390AD1825B31DAFBF2FC05D194F38C2F22420D3210ADA0230242640CAE005EB85CBC8DCCA1825EA7496D9B170C5CBFE354FE19A63102B82F38D5D7C251735208B83A54240927F899848C16A5FE70CE950DAFF7BF9F4B71B598101A52048CD30C16CB994330B10592D2C95D4D0E579F5287FF74A88268D0389698C8F7B9AE813F39246893D02661CF08D9CBCEC9F722CF76D0E96F1E17737E29ECE8676767CB6E1DF0DBD2D731ED848B1
  533:d=1  hl=3 l= 129 prim:  INTEGER           :EDFB4715EBA93BC4C2CBE712C8081027CC86A8D28D2C78C9720E6DE6F68031E0E34FFA5EEF0FD1D085AE49C0A800388BF7EE98A94A77E1181E603924B3B3BB9DCE97B80062F2830C8F11983DFADD55F1F9CE5362992E14C25F776EF7DACEEB719E1CF9F2F62F4BA6D003DE4D427EEB5A4D9815644FCE1255931BDF2BA37FC7A7
  665:d=1  hl=3 l= 129 prim:  INTEGER           :DE9DB5C35D2562F1CD3622342818C7BEBA0333207EDFDBC3F2648E6D1410B8914974A5AE32AFA8E4EAE40B42ADA5867E1B0E332FD0D0A2C8A9DE1ADBEDBD81F9BAB4C8FEC8CE3E660155E2CD04C6925B93FD88AFBE05DCC552A836E353A931209B23A13E7EB0F8FA919C44AC485CE37D6ADA8530AB56899C6669D44C5874AEFD
  797:d=1  hl=3 l= 128 prim:  INTEGER           :444CDEBCFAD2AA35B15685EE0CFCCB6E30B3E115F4B073C614F6F131DD43338D808FBEA2AA67D6E6CAC717A1B455C3E4DFF6595814E84CF0F81ED3A7A5EF8A8422FBC6324E339DCAE7F0BBC9E60ACA14D58612C67482163126E70731195A53965B33A3C4C84510A8428129B6F0C3AE564F78BB82FBA87FF8916CE96303DCB377
  928:d=1  hl=3 l= 129 prim:  INTEGER           :D3F4F73E16EEE4E173510A89FC6F73A79E3633B4C9F85CA7999FB2981AD5BCD5E049A70250123E4E0F73A7610A32A2F668CE4160528283AB694926EBA5D59CEE689D7F0E4FA5477619E96B73670BA60879C49923335B2393E11A76804584BF58DB3DB665E97C98E30246F67FCEBA5A836C7CB8F9D8F92136FFAFDDC9FF22C205
 1060:d=1  hl=3 l= 128 prim:  INTEGER           :76BC5D830BCC7EB721E87AF55645FFB8CEDDDDE56782E5304613D0117BB329DF7BDABAC7BB3489AF5B7FAFD00A498EC4F0BCEBCAA138C8124B8F0BF9330A9903504A6F5BF68CB620B94B034283B17E4EFC5A328B3D6C730AFB9E1EAD67EB5540246F16F88810691A5DD12204DE1E4DB7237DCE6677FBBD780E4DDB53F381DFC6

已知:
在PKCS#1 RSA算法标准中定义RSA私钥语法为:

RSAPrivateKey ::= SEQUENCE {

version Version,

modulus INTEGER, – n

publicExponent INTEGER, – e

privateExponent INTEGER, – d

prime1 INTEGER, – p

prime2 INTEGER, – q

exponent1 INTEGER, – d mod (p-1)

exponent2 INTEGER, – d mod (q-1)

coefficient INTEGER, – (inverse of q) mod p

otherPrimeInfos OtherPrimeInfos OPTIONAL

}
所以偏移量为273的数据为d

273:d=1  hl=4 l= 256 prim:  INTEGER           :7C3B1D534F299B43C1260876303C0A95BE17BF91A5DF2F1CACDA7C75A0236E4F81E1210D27C0126FB34D80F27A41A4D7E48CA7C5B0E78878B19FD0D6C0BF6830FB8A4401B16D938AD54C4D0B356862056CB0554EB2AB8390AD1825B31DAFBF2FC05D194F38C2F22420D3210ADA0230242640CAE005EB85CBC8DCCA1825EA7496D9B170C5CBFE354FE19A63102B82F38D5D7C251735208B83A54240927F899848C16A5FE70CE950DAFF7BF9F4B71B598101A52048CD30C16CB994330B10592D2C95D4D0E579F5287FF74A88268D0389698C8F7B9AE813F39246893D02661CF08D9CBCEC9F722CF76D0E96F1E17737E29ECE8676767CB6E1DF0DBD2D731ED848B1

使用python转化为decimal

from Crypto.Util import number
encoded = '7C3B1D534F299B43C1260876303C0A95BE17BF91A5DF2F1CACDA7C75A0236E4F81E1210D27C0126FB34D80F27A41A4D7E48CA7C5B0E78878B19FD0D6C0BF6830FB8A4401B16D938AD54C4D0B356862056CB0554EB2AB8390AD1825B31DAFBF2FC05D194F38C2F22420D3210ADA0230242640CAE005EB85CBC8DCCA1825EA7496D9B170C5CBFE354FE19A63102B82F38D5D7C251735208B83A54240927F899848C16A5FE70CE950DAFF7BF9F4B71B598101A52048CD30C16CB994330B10592D2C95D4D0E579F5287FF74A88268D0389698C8F7B9AE813F39246893D02661CF08D9CBCEC9F722CF76D0E96F1E17737E29ECE8676767CB6E1DF0DBD2D731ED848B1'
decoded = bytes.fromhex(encoded)
data = number.bytes_to_long(decoded)
print(data)

4.2CERTainly not
下载2048b-rsa-example-cert_3220bd92e30015fe4fbeb84a755e7ca5.der
先将der转换成PKCS#8格式密钥

openssl x509 -in 2048b-rsa-example-cert_3220bd92e30015fe4fbeb84a755e7ca5.der -inform der -outform pem -out cert.pem

从证书中提取公钥

openssl x509 -pubkey -in cert.pem -out public.pem
cat public.pem 
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtM/RXjMp7AvPrnb1/i3I
mcZ4ebkY+AvUurTXngJSBgn0GJNM1HDRQqApE5JzUHf2BImsAyzW8QarrWzA2dWm
q8rNWtJWJlHlSwiKr8wZDyU0kLAqKUEPVfFrk9uds8zc7OvHVRjXQiXeSTUUMpKc
HsZp4zz79Jr4+4vF4Bt+/U8luj/llleaJHlJFyfXiUtqLg2HUdkjPQaFVvhYMQ7u
gZl4aM1uRH7J2oxaexy/JEApSNEDnO/cripd+Pdqx+m8xbBZ9pX8FsvYnO3D/BKQ
k3hadbRWg/r8QYT2ZHk0NRyseoUOc3hyAeckiSWe2n9lvK+HkxmM23UVtuAwxwj4
WQIDAQAB
-----END PUBLIC KEY-----

分析公钥数据

openssl asn1parse -i -in public.pem
得到
0:d=0  hl=4 l= 290 cons: SEQUENCE          
    4:d=1  hl=2 l=  13 cons:  SEQUENCE          
    6:d=2  hl=2 l=   9 prim:   OBJECT            :rsaEncryption
   17:d=2  hl=2 l=   0 prim:   NULL              
   19:d=1  hl=4 l= 271 prim:  BIT STRING

查看偏移量为19的数据

openssl asn1parse -i -in public.pem -strparse 19
    0:d=0  hl=4 l= 266 cons: SEQUENCE          
    4:d=1  hl=4 l= 257 prim:  INTEGER           :B4CFD15E3329EC0BCFAE76F5FE2DC899C67879B918F80BD4BAB4D79E02520609F418934CD470D142A0291392735077F60489AC032CD6F106ABAD6CC0D9D5A6ABCACD5AD2562651E54B088AAFCC190F253490B02A29410F55F16B93DB9DB3CCDCECEBC75518D74225DE49351432929C1EC669E33CFBF49AF8FB8BC5E01B7EFD4F25BA3FE596579A2479491727D7894B6A2E0D8751D9233D068556F858310EEE81997868CD6E447EC9DA8C5A7B1CBF24402948D1039CEFDCAE2A5DF8F76AC7E9BCC5B059F695FC16CBD89CEDC3FC129093785A75B45683FAFC4184F6647934351CAC7A850E73787201E72489259EDA7F65BCAF8793198CDB7515B6E030C708F859
  265:d=1  hl=2 l=   3 prim:  INTEGER           :010001

由公钥数据格式可知,n为偏移量为4的数据

4:d=1  hl=4 l= 257 prim:  INTEGER           :B4CFD15E3329EC0BCFAE76F5FE2DC899C67879B918F80BD4BAB4D79E02520609F418934CD470D142A0291392735077F60489AC032CD6F106ABAD6CC0D9D5A6ABCACD5AD2562651E54B088AAFCC190F253490B02A29410F55F16B93DB9DB3CCDCECEBC75518D74225DE49351432929C1EC669E33CFBF49AF8FB8BC5E01B7EFD4F25BA3FE596579A2479491727D7894B6A2E0D8751D9233D068556F858310EEE81997868CD6E447EC9DA8C5A7B1CBF24402948D1039CEFDCAE2A5DF8F76AC7E9BCC5B059F695FC16CBD89CEDC3FC129093785A75B45683FAFC4184F6647934351CAC7A850E73787201E72489259EDA7F65BCAF8793198CDB7515B6E030C708F859

同上题计算decimal代码得出n

4.3SSH Keys
1.将OpenSSH格式转换为PKCS8格式

ssh-keygen -f bruce_rsa.pub -e -m PKCS8
-----BEGIN PUBLIC KEY-----
MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEArTy6m2vhhbwx3RVbNVb3
ZOenCqqsOXHaJpbtN+OuulLKBSKpIoPB+ZDbDXn0qWkf4lOxtGSgolkUbgG07Lhz
fgs+dul4UL84CkwZExmF3Rf1nRv+v7pqLt2dPsCb02YLxJnhHJb4rQaz2ZM4QCtT
OcqYDUeKfLHCaZU4Ekm/OApKrpfw4/0ofn8KOrFN0t4/dqnNuwVRgoaUIhsI47re
ApB2rs0AP4CggSIi8s6BXCxB4YzgThBK5760T1giACYQC5MFdq1Gw+INSFmu0CNq
t5wdJ5Z4z5448Gke06R+IMtjUiGDQ3QtT2fK3gWhZxk14M4UNrdETgTW/mQ4B/Bc
vikxvoBGpKbttG0agfOjTen6wyzpGfcd8N9rSbaqqyUwC8uDotzFtFzzutVAU9d9
1TagGzWBhNoMfplwVTns27GOOgv1dn5sQSSSmP0hTbPMDlThysKkR9BiOVbBtWGQ
pV936pPBgyWERGqMqC9xykLdVHv2Vu05T0WMwKCAetgtAgMBAAE=
-----END PUBLIC KEY-----

写入bruce_rsa.pem中
2.同上题步骤分析公钥

openssl asn1parse -i -in bruce_rsa.pem
    0:d=0  hl=4 l= 418 cons: SEQUENCE          
    4:d=1  hl=2 l=  13 cons:  SEQUENCE          
    6:d=2  hl=2 l=   9 prim:   OBJECT            :rsaEncryption
   17:d=2  hl=2 l=   0 prim:   NULL              
   19:d=1  hl=4 l= 399 prim:  BIT STRING
openssl asn1parse -i -in bruce_rsa.pem -strparse 19
    0:d=0  hl=4 l= 394 cons: SEQUENCE          
    4:d=1  hl=4 l= 385 prim:  INTEGER           :AD3CBA9B6BE185BC31DD155B3556F764E7A70AAAAC3971DA2696ED37E3AEBA52CA0522A92283C1F990DB0D79F4A9691FE253B1B464A0A259146E01B4ECB8737E0B3E76E97850BF380A4C19131985DD17F59D1BFEBFBA6A2EDD9D3EC09BD3660BC499E11C96F8AD06B3D99338402B5339CA980D478A7CB1C26995381249BF380A4AAE97F0E3FD287E7F0A3AB14DD2DE3F76A9CDBB0551828694221B08E3BADE029076AECD003F80A0812222F2CE815C2C41E18CE04E104AE7BEB44F58220026100B930576AD46C3E20D4859AED0236AB79C1D279678CF9E38F0691ED3A47E20CB6352218343742D4F67CADE05A1671935E0CE1436B7444E04D6FE643807F05CBE2931BE8046A4A6EDB46D1A81F3A34DE9FAC32CE919F71DF0DF6B49B6AAAB25300BCB83A2DCC5B45CF3BAD54053D77DD536A01B358184DA0C7E99705539ECDBB18E3A0BF5767E6C41249298FD214DB3CC0E54E1CAC2A447D0623956C1B56190A55F77EA93C1832584446A8CA82F71CA42DD547BF656ED394F458CC0A0807AD82D
  393:d=1  hl=2 l=   3 prim:  INTEGER           :010001

将偏移量为4的大数转化为十进制数

4.4Transparency
1.搜索子域名
kali自带Maltego
2.得到子域名 https://thetransparencyflagishere.cryptohack.org/,打开直接得到flag

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值