6번 문제와 비슷하게 생겼습니다만 맨 밑에 ultra argv hunter라는게 추가되었습니다.
이름만 봐도 무섭습니다.
코드를 보니 모든 argv들을 0으로 초기화 합니다.
buffer도 크기 제한이 있어 뒤쪽에 shell code를 넣을 수가 없습니다.
답이 안보입니다.
하지만
Linux는 프로그램이 실행되면
현재 프로그램이 상대주소로 접근했는지, 절대주소로 접근했는지를 알아보기 위해
현재 프로그램의 경로를 stack의 끝부분에 저장한다고 합니다.
(저의 멘토님께 들은 말씀입니다.)
경로가 저장된 위치를 찾기 위해 임시로 컴파일한 파일에 링크를 걸고 gdb로 열어봅니다.
링크를 건 파일의 이름은 shell code로 이루어져 있어야 합니다.
main 함수가 종료되는 시점인 main+368에 Break point를 걸고 stack을 봅니다.
실행할 때 ret 주소값이 0xbf로 시작하게 맞춰줘야 합니다.
0xbfffff62에 주소값이 보입니다.
이제 공격을 하기위해 skeleton에 링크를 건 파일을 생성합니다.
링크를 건 파일명은 shell code로 이루어져 있어야 합니다.
nop slide 중간쯤에 return 해줍니다.
공격에 성공했습니다.