본문 바로가기

워게임/lord of bof

level 2 -> 3


[cobolt@localhost cobolt]$ cat goblin.c 

/*

        The Lord of the BOF : The Fellowship of the BOF

        - goblin

        - small buffer + stdin

*/


int main()

{

    char buffer[16];

    gets(buffer);

    printf("%s\n", buffer);

}


Dump of assembler code for function main:

0x80483f8 <main>: push   %ebp

0x80483f9 <main+1>: mov    %ebp,%esp

0x80483fb <main+3>: sub    %esp,16

0x80483fe <main+6>: lea    %eax,[%ebp-16]

0x8048401 <main+9>: push   %eax

0x8048402 <main+10>: call   0x804830c <gets>

0x8048407 <main+15>: add    %esp,4

0x804840a <main+18>: lea    %eax,[%ebp-16]

0x804840d <main+21>: push   %eax

0x804840e <main+22>: push   0x8048470

0x8048413 <main+27>: call   0x804833c <printf>

0x8048418 <main+32>: add    %esp,8

0x804841b <main+35>: leave  

0x804841c <main+36>: ret    

0x804841d <main+37>: nop    

0x804841e <main+38>: nop    

0x804841f <main+39>: nop 

이거 진짜 별거다해봤네여

RTL해도 안되고 환경변수해도 안되길래 내 손가락이 이렇게 멍청할 리가 없어! 했는데

이거 쉘 따도 sh$처럼 표시가 안되더라구요; 그냥 입력대기중..

아무튼 buffer부분은 코볼트랑 마찬가지로 20byte 채워넣고 쉘코드주소넣고 쉘코드 넣었습니다.

[buffer][sfp][ret][shellcode+nop] 이런식으로 되겠네요.. 뭐 gets의 특성상 무한히 입력을 받기 때문에 저런식으로도 활용 가능합니다.

또한 잊지 말으셔야하는게.. gets가 엔터까지 문자열로 인식하기 때문에 마지막에 cat을 해주셔야해요.

위 사항을 다 알고계신다고 해도.. 저처럼 sh$ 안뜬다고 멀뚱멀뚱하지마시길 ㅠㅠ;

my-pass

euid = 503

hackers proof




'워게임 > lord of bof' 카테고리의 다른 글

level 5 -> 6  (0) 2015.10.23
level 4 -> 5  (0) 2015.10.23
level 3 -> 4  (0) 2015.10.23
level 1 -> 2  (0) 2015.10.23
level gate -> 1  (0) 2015.10.23