Textbook-DH 패딩?? 에러인데 어떻게해야할까요
검색해서 넷켓으로 플래그 가져와서 복호화하는건 어찌저찌 되었는데
파이썬프로그램으로 바로 들어가서 플래그만 싹뽑아내는걸 해보려는데 자꾸 에러가 나오네요
오류라고 하는 지점??
#!/usr/bin/python3
from pwn import *
from Cryptodome.Util.number import getPrime
from Cryptodome.Util.Padding import pad, unpad
from Cryptodome.Cipher import AES
import hashlib
import random
class Person(object):
def init(self, p):
self.p = p
self.g = 2
self.x = random.randint(2, self.p - 1)
def calc_key(self):
self.k = pow(self.g, self.x, self.p)
return self.k
def set_shared_key(self, k):
self.sk = pow(k, self.x, self.p)
aes_key = hashlib.md5(str(self.sk).encode()).digest()
self.cipher = AES.new(aes_key, AES.MODE_ECB)
def encrypt(self, pt):
return self.cipher.encrypt(pad(pt, 16)).hex()
def decrypt(self, ct):
return unpad(self.cipher.decrypt(bytes.fromhex(ct)), 16)
p = remote("host3.dreamhack.games",20137)
p 받아옴
p.recvuntil(b"Prime: ")
prime = int(p.recvline()[:-1],16)
클래스 생성
attacker_a = Person(prime)
attacker_b= Person(prime)
Alice의 공개키 탈취
p.recvuntil(b"Alice sends her key to Bob. Key: ")
alice_k = int(p.recvline()[:-1],16)
attacker_a.set_shared_key(alice_k)
p.sendafter(b">> ",b'32\n')
Bob의 공개키 탈취
p.recvuntil(b"Bob sends his key to Alice. Key: ")
bob_k = int(p.recvline()[:-1],16)
attacker_b.set_shared_key(bob_k)
p.sendafter(b">> ",b'32\n')
flag 복호화
p.recvuntil(b"Alice: ")
alice_encrypt_message = p.recvline()[:-1].decode()
p.recvuntil(b"Bob: ")
bob_encrypt_message = p.recvline()[:-1].decode()
flag = ''
flag = attacker_a.decrypt(alice_encrypt_message)
flag += attacker_b.decrypt(bob_encrypt_message)
print("FLAG : {}".format(flag))
인터넷에있는것 가져왔는데
호스트아이디랑 포트만 바꿔서 사용했습니다
p = remote("host3.dreamhack.games",20137) 이부분
아르단위드
댓글 40