본문 바로가기

리버싱/FTZ

(12)
해커스쿨 FTZ Level11 (버퍼오버플로우 : 기초) + GDB 설명 ID : level11Password : what!@#$? 힌트 : #include #include int main( int argc, char *argv[] ){ char str[256]; setreuid( 3092, 3092 ); strcpy( str, argv[1] ); printf( str );} 문제를 풀기 전에 : gdb 사용법 1. 실행 gdb 프로그램(또는 프로세스번호) -q 또는 -silent 또는 -quiet : 실행 시 쓰레기 설명글 제거 2. 종료 quit (또는 q) 컨트롤 + D 3. 폭조절 set width 값 set height 값 4. 디버깅 중간에 쉘 명령어 사용하기 shell 명령어 (경로는 프로그램 위치와 같음) 5. 팁 탭 : 자동 명령 생성 (중복 항목이 있을 경우..
해커스쿨 FTZ Level10 (공유 메모리 취약점) ID : level10Password : interesting to hack! 힌트 : 두명의 사용자가 대화방을 이용하여 비밀스런 대화를 나누고 있다. 그 대화방은 공유 메모리를 이용하여 만들어졌으며, key_t의 값은 7530이다. 이를 이용해 두 사람의 대화를 도청하여 level11의 권한을 얻어라 - 레벨을 완료하셨다면 소스는 지우고 나가주세요. 문제를 풀기 전에 : 공유메모리란 ? 1) 공유메모리란 여러 프로세스가 함께 사용할 수 있는 메모리이다. 2) 이 공유메모리를 이용하면 커널에 내려가지 않고 프로세스끼리 통신을 할 수 있으며 같은 데이터 공유를 할 수 있다. 3) 프로세스가 공유 메모리를 사용하기 위해선 커널에 요청을 해야 한다. 4) 프로세스가 지워져도 해당 공유메모리는 잔재한다. shm..
해커스쿨 FTZ Level9 (버퍼오버플로우 : 로컬영역 침범) ID : level9Password : apple 힌트 : 다음은 /usr/bin/bof의 소스이다.#include #include #include main(){ char buf2[10]; char buf[10]; printf("It can be overflow : "); fgets(buf,40,stdin); if ( strncmp(buf2, "go", 2) == 0 ) { printf("Good Skill!\n"); setreuid( 3010, 3010 ); system("/bin/bash"); } }이를 이용하여 level10의 권한을 얻어라. 문제를 풀기 전에 : 함수 호출의 스택 구조 변화는 다음 그림과 같다. 이는 기초적인 함수 수행을 gdb로 분석하면서 필요한 부분만 요약한 그림이다. 여기서 ..
해커스쿨 FTZ Level8 (리눅스 패스워드 크랙) ID : level8Password : break the world 힌트 : level9의 shadow 파일이 서버 어딘가에 숨어있다.그 파일에 대해 알려진 것은 용량이 "2700"이라는 것 뿐이다. 문제를 풀기 전에 : /etc/passwd 모든 사용자의 정보가 담겨있는 파일이다. 필드는 다음과 같다. 계정명 : 패스워드부분 : UID : GID : 코멘트 : 홈디렉토리 : 기본사용쉘 여기서 중요한 부분은 패스워드 부분인데 보면 x로 설정되어있는 것을 볼 수 있다. 패스워드 파일의 권한을 확인하면 다음과 같다. 모든 사용자가 이 파일을 읽을 수 있으므로 이 파일은 매우 취약할 수 있다. 따라서 리눅스는 passwd의 가장 중요한 암호 필드는 특정한 경로에 파일을 만들어 관리자만 접근할 수 있도록 관리한..
해커스쿨 FTZ Level7 (이진수 -> 헥사 -> 문자열) ID : level7Password : come together 힌트 : 문제를 풀기 전에 : level7의 힌트를 알려주는 실행파일이 변경 되었다. 따라서 그냥 이 level은 넘어가도록 하자원래는 다음과 같이 출력되어야 한다. [level7@ftz level7]$ /bin/level7Insert The Password : abc올바르지 않은 패스워드 입니다. 패스워드는 가까운곳에...--_--_- --____- ---_-__ --__-_- 풀이 : --_--_- --____- ---_-__ --__-_- 이것은 모스부호를 위아래로 표현한 것인데- : 1 _ : 0으로 표현하고 이를 10진수로 표현하면109, 97, 116, 101이 된다. 이를 아스키 값으로 표현하면 mate라는 글자가 나온다. 위는..
해커스쿨 FTZ Level6 (프로세스 종료 후 쉘 접근) ID : level6Password : what the hell 힌트 : 인포샵 bbs의 텔넷 접속 메뉴에서 많이 사용되던 해킹 방법이다. 문제를 풀기 전에 : 프로세스란?실행중인 프로그램 백그라운드 프로세스 : 실행을 시켜도 쉘은 그대로 존재한다. 하지만 백그라운드로 프로세스는 진행중이고 프로세스가 종료되면 결과를 출력한다. 실행방법 : command & 포그라운드 프로세스 : 화면에서 사용자의 명령을 받아 프로세스가 종료될 때까지 기다린다. 실행이 완료되면 결과와 함께 쉘을 다시 실행한다. 포그라운드 -> 백그라운드 : 포그라운드 프로세스를 ctrl+z를 입력한뒤 bg를 입력하여 상태를 변경한다. 백그라운드 -> 포그라운드 : jobs 명령어를 통해 프로세스 번호를 확인하고 fg + 프로세스 번호를 ..
해커스쿨 FTZ Level5 (레이스 컨디션) ID : level5Password : what is your name? 힌트 : /usr/bin/level5 프로그램은 /tmp 디렉토리에 level5.tmp 라는 이름의 임시파일을 생성한다.이를 이용하여 level6의 권한을 얻어라. 문제를 풀기 전에 : 노삼혁교수님의 운영체제 수업을 들었던 기억이 난다.레이스컨디션이라는 용어를 배웠지만 그 당시에는 의미만 겉핥기로 이해했지 명확이 이해하지 못했었다. 레이스 컨디션(race condition)이란? 여러 프로세스가 동일한 자원을 읽고 쓸 때 문제가 발생한다. 만약 하나의 파일이 쓰고 있는 데 다른 프로세스가 읽으려고 한다면? 또는 두 프로세스가 동시에 하나의 파일을 쓰려고 한다면? 문제가 발생할 것이다. 프로세스 스케줄링의 상호배제 원칙에 의하면 하나..
해커스쿨 FTZ Level4 (backdoor) ID : level4Password : suck my brain 힌트 : 문제를 풀기 전에 : /etc/xinet.d/ 해당 디렉토리에는 어떤 설정 파일이 들어있을까?리눅스의 인터넷 슈퍼데몬인 xinetd의 서비스 파일은 거의 /etc/xinet.d/ 에 존재한다.슈퍼데몬이란 리눅스 시스템에서 실행되는 하나의 데몬이다. 하지만 sendmail, httpd의 데몬과 달리 슈퍼데몬이라 불리는 이유는 리눅스 서버의 여러 데몬을 제어 및 연결시키기 때문이다.대표 서비스로는 telnet이 존재한다. 우리가 putty와 같은 프로그램을 이용해 telnet으로 연결할 때는 바로 되는 것이 아니라 1) xinetd에 의해 허가된 사용자인가를 검사한다.2) /etc/xinet.d/telnet 에 정의된 telnet 서비..