우선 문제 파일을 다운로드 받으면 basic_exploitation_001이라는 이름의 C언어 파일과 실행파일이 있는 것을 볼 수 있다. 두 파일 중 실행파일을 gdb 모드로 실행하고 checksec 명령어를 활용하여 적용된 보호기법을 확인해보자.
아래와 같이 gdb 모드를 실행하고
checksec 명령어를 통해 NX 보호 기법이 활성화 되어있으므로 쉘 코드가 실행되지 않고 있다는 것을 알 수 있다.
이번에는 basic_exploitation_001.c 코드에 대해 분석해보자.
✅ main 함수
: buf에 0x80만큼 사이즈가 할당되고, intialize 함수가 실행된 이후 gets로 buf를 입력받고 있음
✅ initialize 함수
: 실행되고 30초가 지나면 Time Out 메시지를 출력하고 프로그램 종료
✅ read_flag 함수
: system 명령어로 flag 값을 보여줌
다음으로 gdb 모드에서 info func 명령어로 함수의 정보를 출력해볼 수 있다. 여기서 우리가 필요한 정보는 read_flag 함수의 주소 값이다.
확인한 read_flag 함수의 주소값을 바탕으로 플래그 값 확인을 위해 아래와 같이 익스플로잇 코드를 작성해주었다.
pwn 모듈을 사용하기 위해 import를 시키고, 해당 문제가 있는 서버로 접속하고자 remote 클래스를 사용한다. 이후 바이트 형식 변환 문자열인 'b'를 포함하여 132 바이트까지 입력할 문자열을 만들고, read_flag 함수의 주소 값을 32비트 리틀엔디안 방식으로 넣어줄 수 있다. 마지막으로 sendline을 통해 payload의 값을 전송하고, interactive를 통해 쉘에 접속하도록 코드를 작성해줄 수 있다.
작성한 코드를 실행하면 아래와 같이 플래그 값을 확인할 수 있다.
문제 해결-!
'Security > System Hacking' 카테고리의 다른 글
[Bypass NX & ASLR] NX & ASLR (0) | 2024.10.09 |
---|---|
basic_exploitation_000 (0) | 2024.10.09 |
[Bypass NX & ASLR] Return Oriented Programming (0) | 2024.10.09 |
[Dreamhack] seccomp write-up (0) | 2024.09.23 |
[Dreamhack] __environ write-up (0) | 2024.09.23 |