코드 섹션 쓰기 질문

안녕하세요. 해당 바이너리에서는 아래와 같이 FSB 취약점이 존재하여, get_shell의 주소를 임의의 주소에 대입할 수 있는 문제입니다.

void get_shell()
{
    system("/bin/sh");
}

int main(int argc, char *argv[])
{
    char buf[0x80];

    initialize();

    read(0, buf, 0x80);
    printf(buf);

    exit(0);
}

여기서 exit(0);이라는 코드가 실행되는 코드 섹션이 아래와 같이 0x08048648 인데,

image.png

의미가 없는 질문이긴 하지만, 혹시 만약 코드 섹션에 쓰기 권한이 존재했다면, 0x08048648get_shell의 주소를 대입해줬다면 익스플로잇이 될까요 ?

코드 섹션에는 인스트럭션 내용이 들어가야 하기 때문에 함수 주소가 들어가도 익스플로잇이 안되겠죠..?

#pwnable
작성자 정보
답변 1

call exit 대신에 call get_shell로 고칠 수 있으면 익스플로잇이 가능합니다. 코드 섹션에는 당연히 instruction 내용이 들어가지만 instruction의 구성 요소로써 함수 주소가 들어갈 수는 있습니다. x64기준 일반적으로 call에 해당하는 기계어는 0xE8이며 해당 기계어의 operand로써 call할 지점이 들어갑니다. 하지만 함수의 주소가 그대로 들어가는 것은 아니며 rip와 call할 함수 주소의 차이에 해당하는 값이 들어가게 됩니다. 어찌되었건, 코드 섹션에 수정을 가하여서 call exitcall get_shell이 되도록 하면 익스가 됩니다.
물론, 코드 섹션에는 쓰기가 불가능하기에 의미가 없는 질문입니다.

2024.08.20. 07:27
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기