다른 풀이
문제는 buf에 어떠한 값을 넣고 ret에 buf주소를 넣는 방식으로 해결했습니다.
이떄 그냥 buf에 어떠한 값을 넣기 보다는 buf에는 쓰레기 값들을 입력해주고 bof로 ret에 직접적으로 값을 넣어서 실행시키면 안되는 것인가요?
왜 다들 ret에 buf의 주소를 넣는 방식으로 풀이를 하신 건가요..? 궁급합니당
#pwnable
작성자 정보
답변
1
Karatus
워게임: 50
쓰레기값을 넣어서 ROP(Return Oriented Programming)
으로 풀 수도 있겠지만, 그러려면 libc base 주소를 알기 위한 루틴 + /bin/sh 같은 문자열 + system 함수 주소(libc base + system function offset)
이런식의 payload가 필요합니다.
하지만 문제에서 입력할 수 있는 길이가 ROP를 진행하기에는 불충분하기 때문에 위의 payload는 불가능합니다.
아니면 basic_exploitation_001
의 문제처럼 아예 flag를 출력해주는 거저주는 함수가 존재한다면 충분히 할 수 있지만 없기 때문에 다른 방법을 모색해야 합니다.
결과적으로 적용된 방어기법이 하나도 없고 flag를 출력해주는 함수가 없기 때문에 간단하게 buf에 shellcode
를 넣고 eip를 조작해 이 shellcode
를 실행해서 쉘을 열어 flag를 보려고 하는 것입니다.