질문

그냥 print read_flag 할때는 주소가 0x8e2로 뜨는데

pwndbg> print read_flag
$1 = {<text variable, no debug info>} 0x8e2 <read_flag>

run 하고 다시 구해보면

pwndbg> print read_flag
$2 = {<text variable, no debug info>} 0x5555555548e2 <read_flag>

이렇게뜨는데 차이가 뭔가요 그리고 둘다 주소로 해서 해봐도 /cat flag가 실행이 안되는데 다른 주소가 있는건가요

#pwnable
작성자 정보
답변 1
avatar
믕믕이부하
대표 업적 없음

해당 문제에서 제공되는 바이너리를 이용하셔야 합니다. 제공되는 c 코드를 임의로 컴파일해서 이용하시면 메모리 보호 기법이 걸리게 됩니다.

메모리 보호 기법 PIE가 걸리게 되면 프로그램이 실행될때 code 영역의 주소가 랜덤화되게 됩니다. gdb로 실행했을때는 무조건 0x555555554000+offset으로 주소가 정해지지만 실제로 바이너리를 실행했을때는 계속해서 다른 주소가 할당되서 주소가 맞지 않아 작동하지 않는 것입니다.

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