일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 도그존
- 토라비
- graphql with RN
- graphql react native
- typescript
- apolloclient
- 홍대 토라비
- promise메서드
- 신촌 소문난집
- promise처리
- 지보싶 신촌점
- 앙버터마카롱
- useMutation error
- 화이트 해커를 위한 웹 해킹의 기술
- apollo react native
- 비동기배열
- graphql mutation error
- 금별맥주
- 잠실새내 도그존
- graphql 400
- 홍대 예술
- 예쁜술집 예술
- 잠실새내
- 화이트해커를 위한 웹 해킹의 기술
- graphql
- 비동기배열처리방법
- 홍대 카페 장쌤
- 운정 소바동
- graphql with reactnative
- 고르드
- Today
- Total
목록wargame 풀이 (61)
yehey's 공부 노트 \n ο(=•ω<=)ρ⌒☆
id: skeleton pw: shellcoder /* The Lord of the BOF : The Fellowship of the BOF - golem - stack destroyer */ #include #include extern char **environ; main(int argc, char *argv[]) { char buffer[40]; int i; if(argc < 2){ printf("argv error\n"); exit(0); } if(argv[1][47] != '\xbf') { printf("stack is still your friend.\n"); exit(0); } strcpy(buffer, argv[1]); printf("%s\n", buffer); // stack destroy..
id: vampire pw: music world /* The Lord of the BOF : The Fellowship of the BOF - skeleton - argv hunter */ #include #include extern char **environ; main(int argc, char *argv[]) { char buffer[40]; int i, saved_argc; 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 y..
id: troll pw: aspirin /* The Lord of the BOF : The Fellowship of the BOF - vampire - check 0xbfff */ #include #include 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(bu..
id: orge pw: timewalker /* The Lord of the BOF : The Fellowship of the BOF - troll - check argc + argv hunter */ #include #include extern char **environ; main(int argc, char *argv[]) { char buffer[40]; int i; // here is changed if(argc != 2){ printf("argc must be two!\n"); exit(0); } // egghunter for(i=0; environ[i]; i++) memset(environ[i], 0, strlen(environ[i])); if(argv[1][47] != '\xbf') { pri..
id: darkelf pw: kernel crashed /* The Lord of the BOF : The Fellowship of the BOF - orge - check argv[0] */ #include #include 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,..
id: wolfman pw: love eyuna /* The Lord of the BOF : The Fellowship of the BOF - darkelf - egghunter + buffer hunter + check length of argv[1] */ #include #include 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') ..
id: orc pw: cantata /* The Lord of the BOF : The Fellowship of the BOF - wolfman - egghunter + buffer hunter */ #include #include 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 fri..
id: goblin pw: hackers proof /* orc code The Lord of the BOF : The Fellowship of the BOF - orc - egghunter */ #include #include 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 frien..
id: cobolt pw: hacking exposed 이전에는 strcpy에 BOF 취약점이 존재해 이를 이용했지만 이번에는 gets함수를 이용해 buffer에 값을 넣고 있다. gets함수 역시 BOF 취약점이 존재하기 때문에 ret의 값을 바꿀 수 있다. 먼저 goblin의 스택구조를 파악하기 위해 디스어셈블해보면 다음과 같다 이를 통해 다음과 같은 스택구조를 그릴 수 있다. 이전 문제에서 사용했던 것과 같은 쉘코드를 사용할 것인데, 20바이트는 쉘코드가 들어가기에 부족해서 이번에도 쉘코드를 환경변수에 등록해 주소 값을 알아낼 것이다. 쉘코드를 알아내는 코드는 다음과 같고 //shell.c code #include int main(){ printf("%p\n",getenv("SHELL2")); re..
id: gremlin pw: hello bof world cobolt의 코드 gate와 비슷하지만 이번에는 buffer가 16바이트로 쉘 코드가 들어가기에는 부족하다. 우리가 사용할 쉘 코드는 25바이트이다. \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 따라서 쉘 코드를 한경변수에 등록해 줄 것이다. (gate에서도 환경변수를 사용했지만....ㅎㅎ) 등록하기 전에 cobolt를 디스어셈블해서 스택 구조를 파악해보자 이번에도 gate와 마찬가지로 dummy 값은 존재하지 않는다. 스택구조를 그려보면 다음과 같다. 이제 쉘 코드를 환경변수에 등록해주자 그리고 환경변수 주소를..