-
JMP Table Write-upSystem/Pwnable.xyz 2020. 1. 20. 02:51
간단한 OOB문제다.
OOB도 바로 터지고 원샷 함수도 있어서 익스를 수월하게 진행할 수 있다.
Problem
바이너리에서 메뉴마다 각 기능을 제공해주고, 각 기능을 통해 Exploit을 진행하는 방식이다.
특이사항은 메뉴를 호출할 때, 전역변수 vtable을 인덱싱하여 실행하고 있다.
여기서 포인트는 사용자 입력값으로 인덱스를 참조하고 있다는 점이다.
vtable외에도 size와 heap_buffer가 전역변수로 관리되고 있다.
size와 heap_buffer는 malloc( )메뉴에서 값을 입력할 수 있다.
size는 malloc( )으로 할당할 크기가 저장되고, heap_buffer는 할당된 Chunk의 주소가 저장된다.
Solve
위에서도 말했듯이 이 문제는 OOB(Out of Bound)취약점이 발생한다.
메뉴를 실행할 때, vtable을 사용자 입력으로 인덱싱하는데 큰 값에 대한 예외처리는 이루어지고 있지만 작은 값에 대한 예외처리는 이루어지지 않고 있다.
따라서, -n으로 다른 공간에 저장된 주소를 호출할 수 있게 된다.
vtable 이전 주소에 우리가 입력할 수 있는 공간은 malloc( ) size가 저장되는 0x6020B0이 있다.
size공간에 oneshot( )주소 0x400A31(4196913)을 저장해주고, -2로 vtable을 인덱싱해주면 size공간을 참조하게 된다.
메뉴를 호출할 때 size공간에 저장된 0x400A31을 참조하게 되면서 oneshot( )가 호출된다.
'System > Pwnable.xyz' 카테고리의 다른 글
two targets Write-up (1) 2020.01.20 note Write-up (0) 2020.01.19 misalignment Write-up (0) 2020.01.19 xor Write-Up (1) 2019.12.22 Welcome Write-Up (0) 2019.12.08 댓글