HackCTF site : https://ctf.j0n9hyun.xyz/
Basic_BOF #1
먼저, bof_basic 파일을 다운합니다.
저는 IDA 분석을 하기위해 Linux, Windows 둘다 다운합니다.
Linux에서는 다운로드 링크를 복사한 후, wget를 통해 다운할 수 있습니다.
다운로드가 잘 되었고, 실행권한이 없는 것을 볼 수 있습니다.
chmod 명령어를 통해 실행권한을 부여합니다.
checksec을 이용해 보호기법을 확인합니다.
32bit이고 NX가 걸려있습니다.
그냥 한번 실행해봅시다.
실행 후 입력을 받은 다음, buf의 값과 함께 의문의 주소값이 출력됩니다.
GDB로 열어봅시다.
1. fgets(ebp-0x34,45,stdin)
2. if (ebp-0xC == 0xdeadbeef)
ELF 파일을 IDA로 열어봅니다.
IDA(Interactive DisAssembler)란?
컴퓨터 소프트웨어 용 디스어셈블러이다.
디스어셈블러는 기계어 코드로부터 어셈블리어 소스 코드를 생성한다.
이것은 다양한 실행 파일과 중앙 처리 장치 그리고 운영 체제를 지원한다.
IDA 왼쪽 Functions window창에서 main함수를 찾을 수 있고,
더블클릭하면 코드를 확인할 수 있습니다.
v5가 먼저 선언되어 s보다 더 높은 주소를 가지고 있으며,
s에 45byte만큼 입력하는 것을 통해 v5의 값을 바꿀 수 있습니다.
s : ebp-0x34
v5 : ebp-0xC
s와 v5의 거리 : 40byte
main 코드에서-559038737을 16진수형태로 바꿔줍니다.
마우스로 선택한 뒤 'H'를 누르면 변환됩니다.
s의 fgets 입력을 통해 v5값을 0xDEADBEEF로 바꿔주면 쉘을 딸 수 있겠군요.
해봅시다.
<exploit code>
40byte만큼 A를 입력하고, 주소값을 패킹해서 넣어줍니다.
<exploit>
쉘이 따지고 플래그를 볼 수 있습니다.
짠!