[LOB] succubus -> nightmare
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 | /* The Lord of the BOF : The Fellowship of the BOF - nightmare - PLT */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <dumpcode.h> main(int argc, char *argv[]) { char buffer[40]; char *addr; if(argc < 2){ printf("argv error\n"); exit(0); } // check address addr = (char *)&strcpy; if(memcmp(argv[1]+44, &addr, 4) != 0){ printf("You must fall in love with strcpy()\n"); exit(0); } // overflow! strcpy(buffer, argv[1]); printf("%s\n", buffer); // dangerous waterfall memset(buffer+40+8, 'A', 4); } | cs |
빨리 LOB끝내고 pwnable.kr를 풀어야하므로 간단하게 정리한다
ret주소엔 strcpy(*dst, *src)주소인지 확인한다. 그리고 아래 memset은 strcpy()의 ret를 AAAA로 초기화시킨다.
[buffer][sfp][ret(strcpy@plt)][AAAA(strcpy()의 ret)][dest][src]
페이로드는
argv[1] : [buffer][sfp][strcpy()][AAAA][&AAAA][argv[2]]
argv[2] : [system()][BBBB or exit()][/bin/sh]
strcpy()함수를 사용해 AAAA로 초기화되어있는 strcpy()의 ret주소에 argv[2], system()함수가 있는 두번째 인자값을 복사한다.
strcpy함수가 종료되면서 ret에 의해 argv[2]로 뛰면 성공
&AAAA(strcpy() ret)와 argv[2]의 주소를 구하면 끝. 주소는 소스코드를 수정해 구함
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 | #include <stdio.h> #include <stdlib.h> #include <string.h> #include <dumpcode.h> main(int argc, char *argv[]) { char buffer[40]; char *addr; printf("buffer:%p\n",buffer); printf("argv[2]:%p\n",argv[2]); if(argc < 2){ printf("argv error\n"); exit(0); } // check address addr = (char *)&strcpy; if(memcmp(argv[1]+44, &addr, 4) != 0){ printf("You must fall in love with strcpy()\n"); exit(0); } // overflow! strcpy(buffer, argv[1]); printf("%s\n", buffer); // dangerous waterfall memset(buffer+40+8, 'A', 4); } | cs |
- 수정된 코드
&AAAA : 0xbffffa60+44= 0xbffffa90
argv[2] : 0xbffffc22
페이로드와 Password
'System > LOB' 카테고리의 다른 글
[LOB] nightmare -> xavious (1) | 2015.06.27 |
---|---|
[LOB] zombie_assassin -> succubus (0) | 2015.04.30 |
[LOB] assassin -> zombie_assassin (0) | 2015.04.18 |
[LOB] giant -> assassin (0) | 2015.04.14 |
[LOB] bugbear -> giant (2) | 2015.04.14 |