다른 풀이

문제는 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를 보려고 하는 것입니다.

2021.07.04. 19:48
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기