목록War game/해커 스쿨 FTZ (20)
둘둘리둘둘리둘둘리둘둘리둘둘리둘
공유 메모리는 이름 그대로 여러 프로세스가 함께 사용하는 메모리이다. key_t값 7530으로 공유메모리에 접근해서 내용을 읽어 오면 되겠다shmget() //공유 메모리 식별자 획득shmat() //공유 메모리의 주소 획득 --풀이--[level10@ftz tmp]$ cat ./t.c#include #include #include int main(){ int shm_id; void *shm_addr; shm_id = shmget( (key_t)7530, 1024,0); shm_addr = shmat( shm_id, 0, 0); printf("%s\n",(char *)shm_addr); return 0;}[level10@ftz tmp]$[level10@ftz tmp]$ gcc ./t.c[level10@f..
10byte 크기 buf, buf2가 있고 fgets로 40byte를 표준입력에서 받아와 buf에 넣는다. buf에 입력을 받고 buf2를 "go"와 비교해서 맞으면 쉘을 띄워준다..소스를 보고 스택을 유추해보면 대충 [그림 1]과 같다. Low address buf (10byte) buf2 (10byte) SFP RETHigh address[그림 1] buf가 10byte이니까 fgets에서 더미로 10byte를 체우고 go 를 입력하면 될것같지만 buf와 buf2사이에 CPU가 처리하기 편하도록 줄을 맞추기 위해 쓰레기값이 들어가기 때문에 아래 결과처럼 생각처럼 성공하지 않을것이다. 그럼 디버거로 buf크기를 구해야 할탠데 아래처럼 bof파일에는 setuid가 level10권한으로 걸려있어서 디버거로..
hint를 단서로 find의 -size N[bckw] 옵션을 이용해서 찾아보면 ..(b: 블록, c:바이트, k:키로바이트, w:2바이트 워드)[level8@ftz level8]$ find / -size 2700b 2>/dev/null[level8@ftz level8]$ find / -size 2700c 2>/dev/null/var/www/manual/ssl/ssl_intro_fig2.gif/etc/rc.d/found.txt/usr/share/man/man3/IO::Pipe.3pm.gz/usr/share/man/man3/URI::data.3pm.gz 상당히 수상해 보이는 found.txt가 있는고, 파일을 열어보면 level9의 shadow 데이터가 나온다.[level8@ftz level8]$ cat /..
실행 화면은 이렇다 .. [level7@ftz tmp]$ /bin/level7Insert The Password : aaaacat: /bin/wrong.txt: No such file or directory /bin/level7을 실행하면 먼저 문자열을 입력받고 cat으로 /bin/wrong.txt를 보여주려는것 같은데 cat이 /bin/wrong.txt를 찾을 수 없다고 한다. [level7@ftz tmp]$ ls -l /total 197drwxr-xr-x 2 root root 4096 Sep 10 2011 bin 물론 level7에겐 /bin 디렉토리에 쓰기권한이 없다. 다른 글을 보면 wrong.txt의 내용은 이렇다. 올바르지 않은 패스워드 입니다. 패스워드는 가까운곳에...--_--_- --__..
옛날 옛쩍 천리안,나온누리등의 텔넷 서비스있던 시절의 버그?를 이용하는 문제라 문제 자체가 취소된거같다 password파일이 있다.
/usr/bin/level5는 level6권한의 setuid가 걸려있고, [그림 1]처럼 실행을해도 /tmp디렉토리에는 level5.tmp라는 파일이 생기지 않는다. [그림 1] 아무래도 level5가 실행되는동안 /tmp에 level5.tmp를 생성했다가 종료되기전에 지워버리는것 같은데, 출제자의 의도를 따르려면 심볼릭 링크를 이용하여 해결 해아할것 같다. 심볼릭 링크는 윈도우의 바로가기 같은 개념으로 원본파일 a와 심볼릭링크 b가 있다면b를 수정하면 a가 변경되지만, b파일 자체를 삭제해도 a에는 영향을 주지 않는다. 그렇다면 심볼릭 링크를 이용하여 level5.tmp의 변경사항은 적용되면서 /usr/bin/level5에의해 삭제되지않는 파일을 만들 수 있다. --풀이 -- 빈파일 A를 하나 생성하고..
힌트 내용이 심플하다. /etc/xinetd.d 디렉토리를 보면 [그림 1]과 같다. [그림 1] [그림 2] 상당히 수상해보이는 backdoor파일을 열어보면 [그림 2]와 같은데 backdoor파일을 해석하기전에 xinetd.d에 대해 알고 있어야 한다. 네트워크를 통해 서비스를 할때 xinetd서비스와 Standalone서비스로 나눠지는데, 지금은 Standalone이 직접 socket 함수를 이용하여 사용자와 연결되는 서비스, xinetd(수퍼데몬)은 수퍼 데몬이 서비스를 관리하여 socket함수 필요없이 표준 입출력을 직접 이용자에게 연결시켜주는 개념이라고 보면 된다. 이제 [그림 2]를 뜯어보면service이름은 finger이고서비스시 실행될 프로그램은 /home/level4/tmp/backd..
[그림 1] level3의 힌트는 [그림 1]과 같다. 먼저 find명령어와 -name옵션으로 autodig가 어딨는지부터 찾아보자. [그림 2] [그림 2]와 같이 autodig는 level4 setuid가 걸려있다. autodig의 소스코드를 보면system함수를 이용하여 커널에 "dig @인자1 version.bind chaos txt"라는 명령을 내린다.dig는 DNS서버에 쿼리를 날리는 툴인데, dig의 사용법까지는 알필요가 없고 우리는 dig 실행 후 다른 명령어를 실행시킬 방법만 생각하면 된다. autodig의 인자값1을 조작해 autodig가 dig뿐만 아니라 my-pass까지 실행하게 하면 된다. - 동시에 여러 명령어를 사용 하려면? -> 세미콜론(;)을 사용하면 왼쪽의 명령이 끝난후 ..
[그림 1] level2의 힌트는 [그림 1]과 같은데. 파일 편집 중 쉘 명령을 실행시키더라도 level2의 권한으로 실행된다면 의미가없다.level1 풀이과정과 마찬가지로 find명령을 이용해 다음레벨(level3)의 권한으로 실행되는 파일 편집기를 찾아보자.. [그림 2] 검색결과 누가봐도 편집기 같은 파일이 나오는데 실행 결과는 [그림 2]와 같은 vi editor다.vi editor 명령어 중 편집중에 다른 명령어를 실행 시킬 수 있는 느낌표(!) 옵션을 이용해서 Shell을 띄운다면편집기에 걸려있는 setuid에 의해 level3의 권한으로 커널에 명령을 내릴 수 있다. 편집기 내에서 /bin/sh 실행 명령을 내리면 [그림 3] [그림 3]과 같이 level3의 권한으로 명령을 내릴 수 있다.
Hacker school FTZ의 첫번째 문제의 힌트는 [그림 1]과 같다 [그림 1] 힌트의 조건을 찾기 명령어 find 옵션 '-user NAME'과 '-perm [+-]MODE'를 이용해 맞춰준 후 검색한다. 검색 결과 파일을 확인하면 -rwsr-x---으로 setuid가 걸려있고 파일 소유주는 level2로 되어있으므로결과 파일은 level2의 권한으로 실행된다. 2>/dev/null 명령은 파일 디스크립터(stdin: 0, stdout: 1, stderr: 2)중 표준 에러 메세지를 /dev/null 로 보내어 에러가 화면에 출력되지 않게 해준다. [그림 2] 조건에 맞는 검색 결과파일은 [그림 2]와 같이 실행 되는데 Shell파일을 실행 시키는 명령어를 입력한다면Shell이 level2의 권..