본문 바로가기

System Hacking

(26)
[드림핵] Return Address Overwrite 풀이 - 티스토리 문제 코드 1. 정적 분석 - main함수 스택프레임에 buf가 쌓이고 buf를 입력 받을 때 ret까지 덮어서 get_shell() 함수를 실행 시키자 - buf의 위치를 찾은 후 쓰레기값이 존재하면 쓰레기 값까지 덮어 씌운 후 ret 값에 get_shell() 함수 주소를 넣어야 한다 scanf의 인자를 넘겨주는 부분에서 buf는 rsi레지스터에 넘겨지기 때문에 buf의 위치는 rbp-0x30이다 get_shell 주소 : 0x4006aa 페이로드 : "A" * 56 + "get_shell주소" 끝 init함수 분석 setvbuf는 스트림 버퍼링 방식과 버퍼 크기를 설정하는 함수이다 setvbuf(stdin, 0, 2, 0) : 입력 버퍼를 사용하지 않는다 setvbuf(stdout, 0, 2, 0)..
[드림핵] shell_basic 풀이 - 티스토리 execve, execveat 함수 사용 못하니까 open, read, write 함수들을 사용해서 출력해야 된다 먼저 셀코드를 작성 문자열의 끝을 명시해주기 위해서 널값도 푸쉬 해준다 근데 여기서 rax에 문자열들을 안 옮기고 그대로 push 하니까 에러뜬다 찾아보니까 push는 레지스터를 대상으로 이루어지기 때문에 옮겨 놓고 하는게 정석이라고 한다 nasm -f elf64 shell_basic.asm (해당 파일을 64비트 실행파일로 컴파일) objcopy --dump-section .text=shell_basic.bin shell_basic.o (shell_basic.o파일에서 text 부분만 추출해서 shell_basic.bin 파일로 저장) xxd shell_basic.bin (해당 파일의 내용..