오늘은 BOF_PIE라는 문제를 풀어보겠습니다 !
우선 mitigation 체크를 해봅시다.
NX bit와 함께 PIE가 Enabled 되어 있네요
그래서 문제 이름이 BOF_PIE인가 봅니다
문제를 풀기 앞서 PIE에 대해 간단히 공부하여 봅시다.
PIE (Position Independent Executable)
위치 독립 코드로 이루어진 실행 가능한 바이너리
(위치 독립 코드 : 실행할 때마다 매핑되는 주소가 어디든지에 상관없이 실행되는 파일)
→ 바이너리의 주소를 랜덤화하여 바이너리의 특정 주소의 값을 수정하는 것과 같은 공격을 방어한다.
이런 보호 기법이라고 합니다..
제가 이해한 느낌대로 설명을 해보자면
Non-PIE 상태에서는 주소가 offset값으로 mapping 되어 나오지만
PIE상태에서는 파일이 실행될 때마다 주소가 랜덤화되어서 mapping됩니다
- 만약 틀린부분이 있다면 알려주세요 ! -
그럼 이제 다시 문제로 돌아가봅시다.
IDA로 파일을 열어보겠습니다.
main을 열어보면 welcome이라는 함수와 함께 "Nah..."라는 문자를 출력합니다.
welcome 함수에 들어가봅시다
j0n9hyun을 아냐는 문장과 함께 welcome의 주소를 출력하는군요 !
그 후 v1에 입력을 받습니다.
아마도 length check를 해주지 않으니 저 부분에서 BOF가 터지지 않을까 싶습니다.
한번 실행시켜보겠습니다
연속해서 실행시켰을때 welcome함수의 주소가 달라지는것을 보니
PIE가 확실히 걸려 있는거 같습니다!
이제 공격할 방법을 생각해봅시다.
우선 PIE가 걸려 주소가 랜덤하게 mapping이 되니 저희는
memory leak을 해야될거 같습니다.
그 후 flag의 진짜 주소를 구하고 BOF를 터트려 ret의 주소를
flag의 주소로 덮으면 될 거 같습니다!
바로 payload를 짜봅시다!
저는 이런식으로 payload를 짰습니다!
성공적으로 payload를 짰다면
성공적으로 FLAG가 출력됩니다!
FLAG = HackCTF{243699563792879976364976468837}
학교에서 하도 하는게 많고 플젝도 많이 진행해서
최근 블로그가 뜸하네요...
더 열심히 하겠습니다
감사합니다! 🙌
'Wargame > HackCTF' 카테고리의 다른 글
[Crypto] Smooth CipherText (0) | 2020.11.15 |
---|---|
[Crypto] Great Binary (0) | 2020.11.15 |
[Pwnable] Offset (0) | 2020.09.19 |
[Pwnable] Simple_Overflow_ver_2 (0) | 2020.09.19 |
[Pwnable] x64 Simple_size_BOF (0) | 2020.09.19 |