이번에는 3번입니다. 이번에도 bash2 설정부터 해주겠습니다.
위의 사진에서 3번 문제 코드를 보면 2번과 비교했을때 버퍼의 크기는 같지만 인자가 사라지고 대신에 표준입력인 gets함수가 사용되었습니다. 그렇기 때문에 2번 문제와 같은 방법인 환경변수를 쓸 것이지만 페이로드 작성방식을 좀 다르게 해주어야 합니다.
저번과 같이 환경변수를 등록해주었습니다.
그리고 위와 같은 환경변수의 주소를 구하는 코드는 다음 코드를 사용했습니다.
그리고 나서 환경변수가 잘 등록 되어 있는지 확인하기 위해서 env 명령어를 통해 확인해보았습니다.
확인해 보니 제가 등록한 shellcode가 잘 등록되어 있습니다.
그리고 2번 설명에서 했던 것처럼 주소를 구하면
위와 같습니다.
1,2번처럼 페이로드를 ./gremlin ~~. ./cobolt ~~이런 식으로 페이로를 보내게 되면 모두 함수의 인자로 인식하게 됩니다. 그렇기 때문에 gets함수 처럼 길이 제한이 없는 취약점이 있는 표준입력 함수를 공격하는 페이로드는 (페이로드)./파일이름의 방식으로 공격하여야합니다. 이 방식은 나중에 문제를 풀 때 필요할 것 같기 때문에 기억하는 것이 좋을 것 같습니다.
위의 삽질은 환경변수의 주소를 잘못 구할경우 제대로 작동하지 않는 것을 알 수 있습니다. 위와 같은 페이로드를 통해 다음 문제 비밀번호인 hackers proof를 구했습니다.