-
[Pwn] BOF_PIECTF write_up/Hack CTF 2019. 9. 24. 00:28
문제를 해결하기 위해서 실행을 해보겠습니다.
문제 제목에서도 BOF_PIE 인것 으로 보아 PIE를 이용해야 할 것 같습니다.
checksec 명령어로 확인해 보겠습니다.
PIE : PIE enabled 라고 되어 있습니다.
PIE 보호 기법 때문에 주소가 바뀌기 때문에 base주소를 알아야 합니다.
이점을 유의해서 문제를 풀어 보겠습니다.
IDA 32bit 로 열어보겠습니다.
welcome 함수로 넘어갑니다.
v1이라는 변수에 입력을 받고 main으로 넘어가 프로그램이 종료 됩니다.
함수를 살펴 보던중 다음과 같은 함수를 발견했습니다.
어딘가에 해당 함수 주소로 변조하면 될 것 같습니다.
PIE는 주소값이 전부 상대적으로 표시 되어 있기 때문에 실행시 입력되어 지는 값을 가지고 실제 주소를 찾아야 합니다.
실제 함수의 주소 = base주소 + offset 주소 가 되기 때문에 이를 이용해서 값을 찾아야 하는데 저희가 알아야 하는 주소는 flag를 출력해주는 j0n9hyun함수 입니다.
파일을 실행시 출력되는 주소는 welcome 함수의 주소입니다.
그렇기 때문에 출력 되어 지는 주소는 실제 함수의 주소입니다.
우리가 문제를 풀기 위해 제공되어진 주소를 정리해 보자면 아래와 같습니다.
1. welcome 함수의 실제 주소 값
2. welcome 함수의 offset 값
3. j0n9hyun 함수의 offset 값
welcome 함수의 실제값 - welcome함수의 offset 값을 가지고 base 주소의 값을 찾고,
해당 base 주소 값 + j0n9hyun 함수의 offset 값을 계산 하면 실제 j0n9hyun 함수의 주소를 찾을 수 있습니다.
j0n9hyun 함수의 offset 값을 찾아 보겠습니다.
welcome 함수의 offset 값도 알아 보겠습니다.
아래와 같이 입력 하는 변수의 크기가 0x12입니다.
dummy[22] + RET[ j0n9hyun의 실제 주소값 ] 을 페이로드로 전달하면 될 것 같습니다.
이 내용을 바탕으로 exploit code를 작성해 보겠습니다.
Flag : HackCTF{243699563792879976364976468837}
'CTF write_up > Hack CTF' 카테고리의 다른 글
[Pwn] Poet (0) 2019.09.24 [Pwn] g++ pwn (0) 2019.09.24 [Pwn] Offset (0) 2019.09.24 [Pwn] x64 Simple_size_BOF (0) 2019.09.24 [Pwn] Basic_FSB (0) 2019.09.20