HackCTF site : https://ctf.j0n9hyun.xyz/
Basic_BOF #2
먼저, 파일을 다운로드 합니다.
다운받은 파일에 실행권한을 부여합니다.
메모리 보호기법 확인
파일을 실행해봅시다.
"하 앙 ㅏ아 앙 ㅏ앙 아앙아앙앙"
;;;;
이제 IDA를 사용해서 파일을 까봅시다.
IDA 왼쪽 Functions window창에서 바이너리에 올라간 함수정보들을 볼 수 있습니다.
* 더블클릭하면 코드 또한 볼 수 있어요!
main 함수와 더불어 뭔가 의심스러운 shell 함수를 찾을 수 있습니다.
* GDB에서는 info function 으로 찾을 수 있음.
먼저 shell 함수부터 확인해봅시다.
shell 함수를 실행시키면 쉘을 얻을 수 있습니다.
Functions Window 창에서 함수 시작 주소를 알 수 있습니다.
shell 함수 주소 : 0x0804849B
다음으로 main 함수를 열어봅시다.
코드를 보면 v5에 sup함수의 주소를 넣고,
s변수에 133byte만큼 입력을 받습니다.
이후, v5변수에 담긴 함수를 실행하게 됩니다.
* sup함수도 열어보면, 입력받은 s변수를 그대로 출력해주게 됩니다.
다시돌아와서,
s변수는 ebp로부터 0x8C, 즉 140byte 만큼의 거리차이가 있어서 RET를 조작할 수 없습니다.
하지만 입력받는 s보다 함수의 주소를 담고 있는 v5가 더 높은 주소라는 것을 알 수 있습니다.
이를 통해 s변수에서 v5의 주소값을 바꿔주면 그 주소에 해당하는 함수가 실행되게 됩니다.
s : ebp-8C
v5 : ebp-C
IDA 아래 Output window에서 내장된 파이썬으로 계산할 수 있습니다.
s와 v5의 거리 : 128byte
입력을 128byte가량 채우고 그 다음 들어가는 입력값을 통해 v5변수의 함수 주소를 바꾸면 되겠죠?
바로 해봅시다.
<exploit code>
실행!
<exploit>
정상적으로 쉘을 실행시켰습니다.
ls
플래그가 보이고 읽으면
플래그를 얻을 수 있습니다.
clear ~_~