728x90



아마도 두 사람의 대화가 저 "공유메모리"에 있을 것이다. 그리고 저 메모리 번지에 접근하는 방법에


저 7530값이 필요 할 것이다. 해서 구글링을 하였더니 친절한 블로그가 있었다.


http://mintnlatte.tistory.com/27


위 블로그에 공유메모리에 대한 api설명이 잘 되어있다.



게으름뱅이여서 예외처리는 하지 않았다.


#include 
#include 
#include 
#include 

int main(void)
{
    char buf[100];      // 도청한 대화를 저장할 문자열 변수

    // 7530을 key로 하는 1024크기의 공유메모리 생성(IPC_CREAT 옵션) 이미 있을 경우 접근 권한 설정 (0660)
    // 성공시 공유메모리 식별 id를 리턴한다.
    unsigned long shmID = (unsigned long)shmget(7530, 1024, IPC_CREAT | 0660);   
    
    // 식별 id에 해당하는 공유메모리를 attach할 나의 프로세스의 주소지정
    // 성공시 attach된 공유메모리 주소 반환
    unsigned long shmADDR = (unsigned long)shmat(shmID, NULL, 0);

    // shmADDR에서 100byte만큼을 buf에 저장
    memcpy((void*)buf, (void*)shmADDR, 100);

    // buf 출력
    printf("%s\n",buf);

    return 0;
}



<공유메모리 원리>



compile하여 실행하면 끝



728x90

'ctf + wargame > 해커스쿨ftz' 카테고리의 다른 글

[ftz] level12  (0) 2015.09.20
[ftz] level11  (0) 2015.09.20
[ftz] level9  (0) 2015.09.18
[ftz] level8  (0) 2015.09.18
[ftz] level7  (0) 2015.09.17
728x90



의무적으로 hint를 열어 보니 소스 코드가 나온다.


buf에 40바이트만큼 표준입력으로부터 읽어드린 뒤


buf2와 "go"가 같으면 uid를 변경하여 bash쉘을 실행한다.



3010은 /etc/passwd파일을 보면 level10의 uid인 것을 알 수 있다.


buf는 buf2보다 코드 상에서 늦게 정의 되었으므로 실제 메모리 stack에서 buf2보다 낮은 주소에 위치하게 될 것이다.


fgets()에서 40바이트를 읽어서 buf에 저장한다. buf는 10byte이기 때문에 10보다 큰 데이터를 입력할 경우 overflow가 일어난다.


처음에 10바이트 입력후 overflow가 일어나는 줄 알았지만 찾아보니 쓰레기값이 있다고 한다.


실제 메모리에는 이렇게 들어있다.


##########메모리###############

낮은 주소

---------------------

|           1           |

|           1           |

|           1           |

|           1           |    ----> bof[10] (linux는 메모리가 4바이트씩 할당되어 12byte다.)

|           1           |

|           1           |

|           1           |

|           1           |

|           1           |

|           1           |

---------------------

|                       |

|       쓰레기         |

|                       |

|                       |

---------------------

|           g          |      -> 우리의 목표

|           o          |

|                       |

|                       |    ----> bof2[10] (역시 12byte다.)

|                       |

|                       |

|                       |

|                       |

|                       |

|                       |

---------------------

|                       |

|      쓰레기          |

|                       |

|                       |

---------------------

|                       |

|       쓰레기         |

|                       |

|                       |

---------------------  ----------------> ebp

|                       |

|        sfp           |

|                       |

|                       |

---------------------  

|                       |

|                       |

|        ret            |

|                       |

---------------------

높은 주소

################################



1을 16개와 go 를 입력하여 overflow가 일어났다.


Good Skill! 과 함께 level10의 쉘을 얻었다. my-pass 하면 끝.



gdb로 까 보면 (level10 권한 필요) buf (ebp-40)와 buf2 (ebp-24) 가 정확히 16 byte 차이가 난다.


## 기본적으로 gdb는 AT&T문법이므로 intel문법으로 변경하고 싶으면

## (gdb) set disassembly-flavor intel 라고 치자.

728x90

'ctf + wargame > 해커스쿨ftz' 카테고리의 다른 글

[ftz] level11  (0) 2015.09.20
[ftz] level10  (0) 2015.09.18
[ftz] level8  (0) 2015.09.18
[ftz] level7  (0) 2015.09.17
[ftz] level6  (0) 2015.09.17
728x90



find부터 쓰자.



find를 보게 되면 size옵션에 "2700c"라고 크기 뒤 c를 붙였는데


default로 b로 되어있어 저렇게 지정을 해 주어야 한다.


/etc/rc.d/found.txt 를 확인 해 보자.


b(default) : 블록단위 512KB

c          : 바이트단위 1Byte

k          : 1 KB

w         : word단위 2Byte



shadow파일형식이다. " : " 로 구분되어 각 필드별로 의미가 있다. 필요한 것은 두번째 필드.


계정의 비밀번호가 암호화되어 들어있다.


John the Ripper(유닉스 계열 전용 password crack툴)을 이용해서 비밀번호를 크랙하자.



설치를 해야 하지만 ftz서버에 미리 푼 사람들이 이미 설치를 해 두었다. 



위 명령의 [shadowFile]에 아까 찾은 파일을 넣으면 풀린다.

728x90

'ctf + wargame > 해커스쿨ftz' 카테고리의 다른 글

[ftz] level10  (0) 2015.09.18
[ftz] level9  (0) 2015.09.18
[ftz] level7  (0) 2015.09.17
[ftz] level6  (0) 2015.09.17
[ftz] level5  (0) 2015.09.17
728x90



힌트를 확인하자. 패스워드를 입력하면 다음레벨의 패스워드를 얻을 수 있다.



가까이 있다고 하니 같은 디렉토리인 /bin을 보았다.


뭔가 수상해 보이는 wrong.txt를 확인해 보니 다음과 같이 모스부호처럼 생긴 문자열이 출력이 되었다.


아무래도 언더바(_)는 0, 하이픈(-)은 1인 2진수 인 것 같다. 그리고 중간에 공백이 3개가 있으니 4글자 이라고 생각이 든다.


해서 다음과 같은 python 스크립트를 짜보았다.



간단히 설명하자면 wrong.txt파일을 열어서 첫 1라인을 읽어드린 뒤


하이픈은 1로, 언더바는 0으로 문자열 교체 후


공백에 따라 문자열을 잘라낸다.


int(i,2)는 i를 정수형으로 바꾸는데 두번째 인자는 i의 형태이다. (2진수 이므로 2)


그리고 chr()은 아스키값을 문자열로 치환한다.



실행 해 보면 mate라는 문자열을 얻게 된다.


/bin/level7 을 실행시켜 mate를 입력하면 끝 

728x90

'ctf + wargame > 해커스쿨ftz' 카테고리의 다른 글

[ftz] level9  (0) 2015.09.18
[ftz] level8  (0) 2015.09.18
[ftz] level6  (0) 2015.09.17
[ftz] level5  (0) 2015.09.17
[ftz] level4  (0) 2015.09.17
728x90



로그인 하자마자 힌트가 뜬다. enter를 입력하니



이런 창이 뜬다. 텔넷 접속 서비스를 이용해 본 적이 없는 세대여서 뭔지 모르겠다.


찾아보니 텔넷 서비스에 접속되기전 Ctrl + C연타로


해킹이 이루어진 적이 있다고하여 힌트창에서 Ctrl + C를 누르니 허무하게 쉘이 뜬다.


그리고 매우 친절하게도 password도 있다.

728x90

'ctf + wargame > 해커스쿨ftz' 카테고리의 다른 글

[ftz] level8  (0) 2015.09.18
[ftz] level7  (0) 2015.09.17
[ftz] level5  (0) 2015.09.17
[ftz] level4  (0) 2015.09.17
[ftz] level3  (0) 2015.09.16
728x90



임시파일의 내용을 확인해 보고 싶어진다. 확인해 보자.



/usr/bin/level5를 실행 한 뒤 /tmp/level5.tmp를 확인해 보니 그런 파일이 없다고 뜬다.


아마도 잠시동안만 생성된 뒤 삭제되는 프로그램인 것 같다.



그래서 위와 같은 간단한 코드를 이용해서 level5.tmp를 확인하도록 하자.


컴파일 후 실행하면 끝.

728x90

'ctf + wargame > 해커스쿨ftz' 카테고리의 다른 글

[ftz] level7  (0) 2015.09.17
[ftz] level6  (0) 2015.09.17
[ftz] level4  (0) 2015.09.17
[ftz] level3  (0) 2015.09.16
[ftz] level2  (0) 2015.09.16
728x90



힌트를 확인한 뒤 해당 디렉토리를 확인하였다.


친절하게 backdoor라는 파일이 있었고


파일 내용을 확인해 보니 finger 명령에 대한 configuration이 있었다.


찾아보니 server 탭에 적힌 디렉토리는 finger명령 실행 시 실행되는 것 같다. 해서


해당 디렉토리의 파일을 실행 해 보았다.



보다시피 my-pass명령이 실행되는 것 같다. 

이제 finger명령을 사용하면 level5의 권한으로 my-pass가 실행 될 것이다.



728x90

'ctf + wargame > 해커스쿨ftz' 카테고리의 다른 글

[ftz] level6  (0) 2015.09.17
[ftz] level5  (0) 2015.09.17
[ftz] level3  (0) 2015.09.16
[ftz] level2  (0) 2015.09.16
[ftz] level1  (0) 2015.09.16
728x90



hint 를 확인 해 보면 간단히 명령인자 1개 받아서 "cmd"라는 문자배열에 붙여서 실행시키는 코드이다.


먼저 "cmd"에 복사되는 dig의 경우 nslookup과 비슷한 역할을 하는 프로그램이다.


more hints를 보면


동시에 여러 명령어를 사용하려면?

; (세미콜론)으로 명령어 사이를 묶어준다.

문자열 형태로 명령어를 전달하려면?

    "" (큰따옴표)로 묶는다.



모든 정보는 모였으니 autodig 파일을 찾는다.



setuid가 걸려 있으므로 이렇게 입력 하면 끝.

728x90

'ctf + wargame > 해커스쿨ftz' 카테고리의 다른 글

[ftz] level6  (0) 2015.09.17
[ftz] level5  (0) 2015.09.17
[ftz] level4  (0) 2015.09.17
[ftz] level2  (0) 2015.09.16
[ftz] level1  (0) 2015.09.16
728x90




hint를 확인해 보니 저런 메시지를 확인 할 수 있다.


일단 아무런 단서가 없으니 level3의 권한으로 setuid가 걸린 파일 검색해 보니 하나가 나온다.


실행 해보면 linux의 대표 텍스트 에디터인 vim이 나온다.


http://web.physics.ucsb.edu/~pcs/apps/editors/vi/vi_unix.html


위 사이트를 보면 명령모드에서 !뒤에 명령어를 실행시킬 수 있다.


위와 같이 실행시키면 level3의 암호 획득.

728x90

'ctf + wargame > 해커스쿨ftz' 카테고리의 다른 글

[ftz] level6  (0) 2015.09.17
[ftz] level5  (0) 2015.09.17
[ftz] level4  (0) 2015.09.17
[ftz] level3  (0) 2015.09.16
[ftz] level1  (0) 2015.09.16
728x90


putty 로 접속.



그리고 level1/level1 으로 로그인을 한다.


               

hint를 확인하니 level2 권한에 setuid가 걸린 것을 찾으라고 한다.


명령어 입력



find 명령어를 이용해서 level2 권한의 파일을 찾았다.


[여기서 잠깐!]

find 명령 뒤에 보면 2>/dev/null 이 볼 수 있는데

"2(표준 에러)" 스트림의 방향을 모니터가 아닌 /dev/null 로 보내므로써 "표준 에러"가 출력이 되지 않는다.

linux의 경우 window와 달리 표준에러와 표준 출력이 분리되어있다.

1>/dev/null 의 경우 "표준 출력"을 버리게 된다.


숫자의 의미는 linux가 예약한 file descriptor로

0 : 표준 입력

1 : 표준 출력

2 : 표준 에러



파일 이름대로 실행해 보니 램프의 요정처럼 명령어 하나를 level2의 권한으로 실행시켜준다는 메시지가 나온다.

쉘을 얻으면 장땡이므로 bash를 실행하여 my-pass를 하면 끝.

728x90

'ctf + wargame > 해커스쿨ftz' 카테고리의 다른 글

[ftz] level6  (0) 2015.09.17
[ftz] level5  (0) 2015.09.17
[ftz] level4  (0) 2015.09.17
[ftz] level3  (0) 2015.09.16
[ftz] level2  (0) 2015.09.16

+ Recent posts