완료됨
풀이 방식
버퍼가 80이고 read를 통해 0x80만큼 버퍼에 입력되니
버퍼 시작 주소(rbp-0x60)를 확인하고
SFP 8바이트 고려해서 더미데이터 입력하고
리턴 주소를 버퍼 시작 주소로 바꾸는 형태로 실행시켰습니다..
payload=shellcode+ b'a'*(0x68-len(shellcode))+p64(buf_add)
이렇게 입력했는데 안되는 이유가 뭘까요?
#pwnable
작성자 정보
답변
1
int main(int argc, char *argv[]) {
int stdin_fd = 0;
int stdout_fd = 1;
int flag_fd;
int tmp_fd;
char buf[80];
initialize();
// read flag
flag = (char *)malloc(FLAG_SIZE);
flag_fd = open("./flag", O_RDONLY);
read(flag_fd, flag, FLAG_SIZE);
close(flag_fd);
tmp_fd = open("./tmp/flag", O_WRONLY);
write(stdout_fd, "Your Input: ", 12);
read(stdin_fd, buf, 0x80);
write(tmp_fd, flag, FLAG_SIZE);
write(tmp_fd, buf, 80);
close(tmp_fd);
return 0;
}
여기서 보시면 flag를 읽어서 flag라는 변수에 저장하게됩니다.
그리고 flag를 write로 ./tmp/flag에 저장을 하게되는데, 이때 잘 생각해 보시면 풀리실겁니다.
shellcode를 넣어봤자 stack 주소를 몰라서 안풀리십니다..
힌트는 tmp_fd 입니다.