Lord of BOF_19_Xavius


네트워크를 통해 payload를 보내야 한다. 간단한 BOF 문제이다.
핵심 알고리즘은 다음과 같다
- 서버를 연다.
- 클라이언트가 붙으면 child process를 생성한다.
- child process는 클라이언트에게 입력 값을 받는다.

core파일을 보면 0xbffffad0부터 입력값이 들어가며, return address는 0xbffffafc에 들어가고, 이후 입력 값은 0xbffffb00부터 시작한다.
recv 함수 뒤 close 함수 때문에 main 함수 스택 프레임 내의 값은 망가진다. 따라서 return address 이후의 스택에 셸 코드를 넣었다.
0xbffffb00 주소는 \x00 때문에 이용이 불가하므로, 1바이트의 더미 값을 넣었다.

이를 포함한 payload이다.
귀찮아서 사용하던 셸 코드를 이용하였는데, 사실 클라이언트에서 셸에 접근하기 위해서는 sh 서버를 열거나 리버스 셸을 이용해야 한다. 나는 그냥 로컬에서 sh가 실행되도록 하였다.

클라이언트에서 nc를 통해 페이로드를 전송한다.

death_knight의 비밀번호는 got the life 이다.

death_knight가 마지막 문제이다. 로그인 시 이런 파일을 볼 수 있다.
tags: writeup, pwnable, buffer overflow, stack overflow, memory corruption, elf file, linux, remote code execution, c lang, x86asm