一、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.搜索子域名
2.得到子域名 https://thetransparencyflagishere.cryptohack.org/,打开直接得到flag