728x90
우선, 해당 문제는 앞서 진행했던 시스템 해킹 스터디에 이어서 진행하는 문제로 rao.c 파일을 그대로 활용한다. 따라서 제공된 코드 파일의 경우 아래와 같다.
📌 rao.c 코드
#include <stdio.h> #include <unistd.h> void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); } void get_shell() { char *cmd = "/bin/sh"; char *args[] = {cmd, NULL}; execve(cmd, args, NULL); } int main() { char buf[0x28]; init(); printf("Input: "); scanf("%s", buf); return 0; }
위와 같이 작성한 rao 실행파일을 컴파일 한 후 디버깅을 하면 스택에 0x30 크기의 공간이 할당된 것을 알 수 있었다. 현재 스택 프레임의 경우 buf(0x30) + SFP(0x8) + ret(0x8)일 것이라고 추측해볼 수 있다.
이를 바탕으로 반환 주소를 덮어쓸 get_shell()의 주소를 찾아볼 수 있다.
그 결과, get_shell()의 주소는 0x4006aa임을 알 수 있었고, 페이로드는 아래와 같이 작성할 수 있다.
페이로드) b'A'*0x30 + b'B'*0x8 + b'\xaa\x06\x40\x00\x00\x00\x00\x00'
따라서 본 내용을 바탕으로 아래와 같이 rao_exploit.py라는 이름의 익스플로잇 코드를 작성해줄 수 있다.
해당 코드를 터미널 환경에서 실행시키면 위와 같이 플래그 값을 볼 수 있다.
728x90
'Security > System Hacking' 카테고리의 다른 글
[Stack Canary] Return to Shellcode (2) | 2024.09.23 |
---|---|
Stack Canary (0) | 2024.09.23 |
[Stack Buffer Overflow] Return Address Overwrite (3) | 2024.09.15 |
Memory Corruption: Stack Buffer Overflow (0) | 2024.09.15 |
[Stack Buffer Overflow] Calling Convention (2) | 2024.09.15 |