Level19 Password is swimming in pink. 힌트는 다음과 같다. main(){ char buf[20]; gets(buf); printf("%s\n",buf);} 매우 간단해 보이는 코드인데 gets 함수를 쓴다. gets를 사용하면 위와 같이 buf는 20이지만 20이 넘어도 값을 받을 수 있고, 그대로 출력해준다.gets 함수는 bof에 매우 취약한 함수이며, scanf와 같이 입력받는 문자열의 크기와 주어진 변수의 크기를 고려하지 않는다.그렇다면, buf에 쭉 입력을 해줘서 ret을 건드리거나 하면 되지 않을까 라는 생각이 들었다. gdb로 본 어셈 코드도 엄청 짧다!! Dump of assembler code for function main:0x08048440 :push e..
level18 password is why did you do it 힌트는 다음과 같다. #include #include #include #include void shellout(void);int main(){ char string[100]; int check; int x = 0; int count = 0; fd_set fds; printf("Enter your command: "); fflush(stdout); while(1) { if(count >= 100) printf("what are you trying to do?\n"); if(check == 0xdeadbeef) shellout(); else { FD_ZERO(&fds); FD_SET(STDIN_FILENO,&fds); if(select(FD..
pw is king poetic 이번엔 .c 파일은 없고 다른 문제들과 동일하게 attackme 파일만 있다. 힌트는 다음과 같다. #include void printit() { printf("Hello there!\n");} main(){ int crap; void (*call)()=printit; char buf[20]; fgets(buf,48,stdin); setreuid(3098,3098); call();} main 안에 setreuid가 있는걸 보니 왠지 환경변수를 사용해야할 것 같다.일단export SHELLCODE=$(python -c 'print "\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x68..
16번은 attackme.c 파일도 존재한다. 힌트는 다음과 같다. #include void shell() { setreuid(3097,3097); system("/bin/sh");} void printit() { printf("Hello there!\n");} main(){ int crap; void (*call)()=printit; char buf[20]; fgets(buf,48,stdin); call();} 코드만 볼땐 shell() 함수가 실행돼야 하는데, shell() 함수가 사용된 곳은 없고왠지 *call 부분을 수정해 shell 함수의 주소를 실행하도록 하면 될 것 같다. gdb로도 보자.Dump of assembler code for function main:0x08048518 :push ..
힌트는 다음과 같다 #include main(){ int crap; int *check; char buf[20]; fgets(buf,45,stdin); if (*check==0xdeadbeef) { setreuid(3096,3096); system("/bin/sh"); }} level15는 level14와 전체적인 코드는 비슷하지만포인터 변수 check와 0xdeadbeef 를 비교하는게 다르다.이번 문제는 포인터에 대한 이해가 요구되는 것 같다. A가 39개까진 들어가고 40개부터는 Segmentation fault가 뜬다. (gdb) disas mainDump of assembler code for function main:0x08048490 :push ebp0x08048491 :mov ebp,esp..
level14도 bof 문제이다.힌트는 다음과 같다. 레벨14 이후로는 mainsource의 문제를 그대로 가져왔습니다.버퍼 오버플로우, 포맷스트링을 학습하는데는 이 문제들이최고의 효과를 가져다줍니다. #include #include main(){ int crap; int check; char buf[20]; fgets(buf,45,stdin); if (check==0xdeadbeef) { setreuid(3095,3095); system("/bin/sh"); }} 대충 코드를 보면 buf의 공간은 20이지만 fgets로 45만큼 받아서 buf에 저장한다.그리고 check가 0xdeadbeef 와 일치하면 level15의 쉘을 따낼 수 있다.crap은 어디서 쓰이는 걸까 궁그미 (gdb) disas ma..
level13도 bof 문제인 것 같다. 힌트는 다음과 같다. #include main(int argc, char *argv[]){ long i=0x1234567; char buf[1024]; setreuid( 3094, 3094 ); if(argc > 1) strcpy(buf,argv[1]); if(i != 0x1234567) { printf(" Warnning: Buffer Overflow !!! \n"); kill(0,11); }} i = 19088743buffer는 1024인자가 1개보다 많으면 strcpy를 통해 buf에 인자로 받은 값을 복사한다. 복사한 후, i가 0x1234567이 아니면 Warnning을 출력하고, 프로그램을 종료시킨다. gdb로도 한번 보자. (gdb) disas mai..
level12도 attackme가 있는걸 보니 또 bof 문제인 것 같다. 힌트는 다음과 같다. #include #include #include int main( void ){char str[256]; setreuid( 3093, 3093 );printf( "문장을 입력하세요.\n" );gets( str );printf( "%s\n", str );} (gdb) disas mainDump of assembler code for function main:0x08048470 :push ebp0x08048471 :mov ebp,esp0x08048473 :sub esp,0x1080x08048479 :sub esp,0x80x0804847c :push 0xc150x08048481 :push 0xc150x0804848..
level11 의 파일 목록은 지금까지와 조금 다르다hint 말고도 attackme 라는게 있다 게다가 level12 가 붙어있다attackme를 attack 하면 level12로 넘어가거나, pw를 알려줄 것 같다. 힌트는 다음과 같다.[level11@ftz level11]$ cat hint #include #include int main( int argc, char *argv[] ){char str[256]; setreuid( 3092, 3092 );strcpy( str, argv[1] );printf( str );} attackme를 그냥 실행시키면 Segmentation fault가 뜬다. [level11@ftz level11]$ gdb -q attackme(gdb) set disassembly-..
level10의 hint의 내용은 다음과 같다. 두명의 사용자가 대화방을 이용하여 비밀스런 대화를 나누고 있다.그 대화방은 공유 메모리를 이용하여 만들어졌으며,key_t의 값은 7530이다. 이를 이용해 두 사람의 대화를 도청하여level11의 권한을 얻어라. - 레벨을 완료하셨다면 소스는 지우고 나가주세요. 공유 메모리를 이용해 대화방이 만들어졌고, key_t의 값이 7530 이라고 해서공유 메모리와 관련된 명령어를 이용해봤다. IPC 확인 => ipcs -q공유 메모리 확인 => ipcs -m세마포어 확인 => ipcs -s 공유 메모리를 확인했을 때, key 값에 hex로 0x00001d6a 가 있어서 10진수로 변환했더니 7530이 떴다. 우선 공유메모리에 대해 공부를 하고 tmp 디렉토리에 들어..
- Total
- Today
- Yesterday
- wargame.kr
- 우분투
- 파이썬
- 자바
- 웹해킹
- 설치
- my-pass
- ftz
- pwnable
- lord of sqlinjection
- WebHacking
- Python
- attackme
- Los
- webhacking.kr
- ubuntu
- lob
- cobolt
- 1번
- java
- 0xdeadbeef
- 명령어
- wargame
- Lord of SQL Injection
- C
- BOF
- 워게임
- MySQL
- pwnable.kr
- c언어
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |