본문 바로가기

System Hacking

[드림핵] 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)

: 출력 버퍼를 사용하지 않는다

 

사용자가 입출력 하는 것들이 프로그램에 곧바로 전달되게 하는 방식

 

아마 scanf함수 특성상 개행 문자를 고려해야 되기 때문에 문제풀이를 원할하게 만들기 위해 쓰여진 함수인거 같다

 


bof는 동아리에서 이미 배운적이 있기에 쉘코드에 비해 비교적 수월했다