note Write-up
이번 문제는 note류 문제다.
보통 ~~note와 같은 네이밍을 가진 문제들은 menu를 제공하고 각 메뉴 기능을 통해 Exploit을 진행한다.
Binary
보호기법에서 특이사항은 No RELRO라는 점이다.
RELRO는 Relocation Read-Only의 약자로 Symbol정보나 .got의 적용되는 보호기법을 말한다.
No RELRO의 경우 ELF Header, Code영역을 제외한 영역에 쓰기권한이 부여된 상태이다.
Problem
바이너리를 실행하면 'Edit note', 'Edit desc' 두 개의 메뉴를 제공한다.
먼저 Edit_note( )에서는 원하는 크기만큼 동적할당 후 값을 입력받는다.
입력받은 값은 전역변수 s에 저장하고, free( )로 할당한 공간을 해제해준다.
Edit_desc( )에서는 전역변수 buf 값이 NULL이면 malloc( )을 통해 32Byte만큼 할당한다.
그리고 32byte만큼 입력받아서 buf에 할당된 주소에 저장한다.
Solve단계로 넘어가기 전에 간단한 힌트를 드리자면 Heap Exploit문제가 아닙니다.
Solve
언뜻 보기에는 Heap Exploit 기법을 사용해서 익스해야될 것 처럼 보인다.
pwnable.kr의 Blukat문제처럼 아는것이 많은 사람한테는 조금은 어려운 문제가 아닐까 싶다.
취약점은 Edit_note( )의 strncpy( )에 있다.
먼저 문제에서 malloc( )으로 할당한 주소를 전역변수 buf로 관리하고 있는데, Edit_note( )에서 s에 원하는 크기만큼 값을 입력할 수 있다.
Edit_desc( )에서는 buf에 저장된 값에 32Byte만큼 원하는 값을 쓸 수 있기 때문에, 두 메뉴를 이용해서 원하는 주소에 원하는 값을 저장할 수 있게된다.
또한, No RELRO로 설정되어 있기 때문에 적절한 함수 .got공간에 win( )주소를 넣어주면 된다.