get_shell 호출시 do_system() 내에서 Segmentation Fault 발생하는 이유?
0x7f48eb379e3c <do_system+364>    movaps xmmword ptr [rsp + 0x50], xmm0
   0x7f48eb379e41 <do_system+369>    mov    qword ptr [rsp + 0x68], 0
   0x7f48eb379e4a <do_system+378>    call   posix_spawn                <posix_spawn>

thread_routine으로부터 master canary를 추출하고 get_shell로 return address를 정상적으로 변경했음에도 불구하고 do_system() 호출과정에서 해당 위치에서 자꾸만 segmentation fault를 발생시키는데 해결방법이 있을까요?
master canary를 유출시키는 과정에서 thread local storage 혹은 덮어쓰지 말아야할 공간을 덮어쓴 걸까요?

#pwnable
작성자 정보
답변 1
avatar
Dreamhack
대표 업적 없음

system을 호출하기 전에 ret instruction을 추가하여 스택 alignment를 맞춰주면 될 것 같아보입니다.
xmm 관련 instruction은 rsp 값이 16바이트(0x10) 단위로 정렬되어야 합니다.
감사합니다.

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