CTF/리버싱

[2022 화이트햇 콘테스트] 나-1 - 리버싱 / IDA / Pwntool

SecurityMan 2023. 12. 14. 11:00

 

2022 화이트햇 콘테스트 예선에 출제되었던 문제

 

이번 문제는 이전 포렌식 문제들과 이어지진 않는다.

 

가-1, 가-2 문제도 있었으나, 캡쳐를 제대로 하지 못해 

 

나-1 문제에 대해서만 Write up을 작성한다.

 

반응형

 

 

문제에서는 secretBox 라는 바이너리 파일이 주어진다.

 

문제 설명처럼 패스워드 프로그램이다.

 

 

해당 바이너리를 IDA로 열어,

 

main 함수의 수도코드를 살펴보았다.

 

열자마자 눈에 띄는 부분이 있었는데

 

v3 배열에 대해 특정한 값이 들어있는지 검증하는 부분이었다.

 

조건문 다음에 main_printFlag 함수가 호출되는걸로 보아

 

뭔가 플래그와 관련이 있어 보였다.

 

password = [0] * 13

password[0] = 39
password[9] = 80
password[12] = 79
password[4] = 84
password[6] = 102
password[7] = 66
password[1] = 40
password[2] = 44
password[11] = 60
password[5] = 37
password[10] = 66
password[3] = 46
password[8] = 54

pw = "".join([chr(x) for x in password]).encode()

print(pw)

 

 

위와 같이 Python 코드를 작성해 실행시켜 보았는데

 

 

뭔가 알 수 없는 문자열이나왔다.

 

그래서 단순히 이걸 출력시키는게 아니라

 

secretBox에 전달해야 할 것이라고 생각했다.

 

from pwn import *

p = process("./secretBox")
print(p.recv())

password = [0] * 13

password[0] = 39
password[9] = 80
password[12] = 79
password[4] = 84
password[6] = 102
password[7] = 66
password[1] = 40
password[2] = 44
password[11] = 60
password[5] = 37
password[10] = 66
password[3] = 46
password[8] = 54

pw = "".join([chr(x) for x in password]).encode()
print(pw)

p.sendline(pw)

print(p.recv())
p.interactive()

 

 

이번엔 위와 같이 코드를 수정하여

 

secretBox에 password 값을 전달해 보았다.

 

 

 

그런데 뭔가 잘못된 듯 Bye 라고만 출력되었다.

 

 

 

더 살펴보니 checkPrivilege 라는 함수가 있었다.

 

conf.ini 파일에 있는 값을 가져와서

 

그 안에 있는 값의 sha1 해시가 b3aca92c ... 인지 확인하고 있는 로직이었다.

 

 

 

해당 해시값은 

 

administrator 의 sha1 해시값이었다.

 

 

conf.ini 파일의 내용을 administrator 로 작성하고 

 

코드를 다시 실행하면 플래그를 확인할 수 있다.

반응형