기본 콘텐츠로 건너뛰기

글

라벨이 Nebula_study인 게시물 표시

Nebula 해킹스터디 level06

Nebula 해킹스터디 level06 https://exploit-exercises.com/nebula/level06/ 🔶기본 지식 1.credentials in infomation system credential 단어의 뜻은 자격증이라는 뜻이다. 하지만 정보시스템에서는 특정 응용에서 사용하는 암호학적 개인정보를 말한다. 2. legacy unix system 레거시 시스템(legacy system)은 낡은 기술이나 방법론, 컴퓨터 시스템, 소프트웨어 등을 의미한다. 현대까지도 남아 쓰이는 기술과 더이상 쓰이지 않더라도 현대의 기술주는 경우를 모두 의미한다. 3. john the ripper john the ripper는 password crack tool 이다. 암호화된 password를 복호화해준다. 🔶풀이 About flag06의 계정 credential은 legacy unix system 으로부터 왔다. Source code 없음 로그인을 하고 /home/flag06으로 이동했다. 아무것도 없다. 그래서 About을 이용해 생각을 했다. flag06의 계정이 암호화된 것은 레저시 유닉스 시스템으로 부터 왔다 했는데 그럼 과거 유닉스 시스템에서 어떤 방식으로 개인 계정을 암호화했는지 알아보기로 했다. 과거 유닉스 프로그램은 개인 정보를 /etc/passwd에 저장했다. 하지만 여기엔 너무 많은 덩보를 담고 있기 때문에 요즘에는 패스워드만 저장한 /etc/shadow를 사용한다. /etc/passwd 의 구조 사용자명:패스워드(암호화):사용자계정 uid:사용자계정 gid:사용자 계정 이름:사용자 계정 홈 디렉토리: 사용자 계정 로그인 쉘 /etc/shadow 의 구조 사용자명:패스워드:패스워드 파일 최종 수정일:패스워드 변경 최소일:패스워드 변경 최대일:패스워드 만료 기간:패스워드 파기 기간:계정 만료 기간:예약 필드 flag 계정의 /etc/passwd를 알기...

Nebula 해킹 스터디 level05

Nebula Level 05 https://exploit-exercises.com/nebula/level05/ ✨ 기본 지식 1. ssh ssh는 시큐어 셀의 약자이다. 시큐어 셸(Secure Shell, SSH)은 네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해 주는 응용 프로그램 또는 그 프로토콜을 가리킨다. 기존의 rsh, rlogin, 텔넷 등을 대체하기 위해 설계되었으며, 강력한 인증 방법 및 안전하지 못한 네트워크에서 안전하게 통신을 할 수 있는 기능을 제공한다. 기본적으로는 22번 포트를 사용한다. SSH는 암호화 기법을 사용하기 때문에, 통신이 노출된다 하더라도 이해할 수 없는 암호화된 문자로 보인다.(위키백과 참고) ssh를 사용하기 위해서는 클라이언트 프로그램을 설치해야 하고 sshd라는 데몰을 필요로 한다. ssh의 기본이 telnet인 만큼 사용법도 동일하다. ✨풀이 먼저 nebula 사이트에 나와있는 힌트를 확인했다. About flag05를 확인해라. 디렉토리 권한의 약점을 찾아야 한다. 이게 힌트의 전부이다. 일단은 힌트에 따라 flag05로 이동후 어떤 디렉토리가 있는 지 확인했다. 들어있는 디렉토리는 2개이다. backup과 ssh. 먼저 ssh에 어떤 디렉토리인지 확인했다. 하지만 이 디렉토리 안에는 어떠한 파일이나 폴더가 존재하지 않았다. 그래서 backup이란 디렉토리로 이동해 그 안을 확인했다. backup-19072011.tgz라는 파일이 존재했다. . .tgz는 압축했을 경우 붙는 확장자이다. 압축된 파일이 있으니 이걸 출어주기 위해서 tar명령어를 사용했다. 리눅스의 압축과 해제는 tar명령어를 통해서 할 수 있다. tar명령어에 옵션을 붙여 사용하면 여러가지 뜻을 가지는데 기능 옵션 -x는 압축된 것을 풀 때, 부가 옵션인 z도 gzip으로 압축을 할 때나 풀 때 사용한다...

Nebula 해킹 스터디 Level04

Nebula Level04 🔶배경 지식 1. 심볼릭 링크 심볼릭 링크는 원본 파일을 가르킨다. 그리고 이 원본파일은 자신이 가지고 있는 data를 가르키고 있다. 따라서 원본파일이 사라지면 원본 파일이 가리키고 있던 data까지 도달하지 못하기 때문에 더 이상 소용이 없다. 단순히 원본 파일을 가르키고 있다고 생각하면 된다. 2.하드 링크 하드 링크는 원본파일을 직접 가르키는 게 아니라 원본 파일의 inode를 가르킨다. 따라서 원본파일이 사라졌다 하더라도 inode를 통해 원본 파일의 data에 접근할 수 있다. 원본 파일의 데이터에 도달할 수 있는 방법을 새로 만든것이라고 생각하면 된다. 하드링크는 다른 시스템에 있는 파일이나 디렉토리에 대해서는 만들지 못하지만 심볼릭 링크보다 데이터에 도달하느 시간이 더 빠르고 더 작은 용량을 차지한다. *inode 파일이나 디렉토리는 자신에 해당하는 하나의 inode를 가지고 있으며 여기에는 파일에 대한 정보가 담겨있다. 64byte로 표현되는 표로서 파일소유권과 이용할 수 있는 여부에 대한 정보 , 파일내용이 들어있는 디스크 내의 물리적 주소, 파일의 링크 수, 파일의 형태, 파일의 크기,  파일의 만들어진 시간, 최근 사용시간, 최근 수정시간, inode의 최근 수정시간 이 담겨있다. 링크를 만들 수 있는 명령어는 ln이다. 여기에 옵셥을 –s로 두면 심볼릭 링크를, 옵션 없이 사용하면 하드 링크를 실행할 수 있다. Ln [옵션]원본파일 링크파일 🔶풀이 About 토큰 파일을 읽어야 하지만 아래 코드가 이 파일이 읽히는 것을 방해한다.  Source code #include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/types.h> #include <stdio.h> #include <fcntl...

Nebula 해킹스터디 Level03

Nebula Level03 ❆기본 지식 1. crontab 일정한 시간 마다 특정 작업을 실행시키는 데몬. 사용할 수 있는 시간 단위는 분, 시간, 일, 월, 요일이 있다. 자세한 설명( http://blog.naver.com/PostView.nhn?blogId=ekdns7184&logNo=120186813926&beginTime=0&jumpingVid=&from=search&redirect=Log&widgetTypeCall=true   ,  http://byseob.blogspot.kr/2010/08/crontab%ED%81%AC%EB%A1%A0%ED%83%AD-%EC%82%AC%EC%9A%A9-%EB%B0%A9%EB%B2%95.html  ) 2. 쉘 스크립트 쉘이나 명령줄 인터프리터에서 돌아가도록 자겅 되었거나 한 운영체제를위해 쓰인 스크립트.수행하는 일반 기능으로는 파일 이용, 프로그램 실행, 문자열 출력 등이 있다. (참고-위키 백과) 자세한 설명( https://egaoneko.github.io/os/2015/05/24/linux-starter-guide-8.html ) ❆풀이 About flag03 디렉토리 안에 있는 파일에 crongtab이 있으니 주의 깊게 봐라. 일단 힌트는 이게 끝이다. 먼저 로그인을 하고 들어가 flag03을 확인했다. 안에 있는 파일은 2개다. 하나는 writable.d라는 디렉토리와 writable.sh라는 쉘 스크립트. 먼저 writable.d라는 쉘 스크립트를 cat명령어를 통해 확인했다. 쉘 스크립트는 처음이라 완벽하게 이해하지 못해서 구글링의 도움을 많이 받았다. for i in /home/flag03/writable.d/* ; do         →writable.d의 하위 파일을 변수 i 에 집어 넣는다. ulimit -t 5; bash...

Nebula 해킹스터디 Level02

Nebula Level02 https://exploit-exercises.com/nebula/level02/ ** 배경 지식 (문제 해결을 위한 지식과 그 외 내용도 포함) 1.buffer 버퍼(buffer)는 메모리 사용량을 확인할 떄 나온다. free라는  명령어를 쓰면 현재 메모리 사용량을 확인 할 수 있는데 그 중 buffer가 존재한다. 이는 데이타를 잠시 저장해 두는 용도로 사용하는데 예를 들어 만약 파일에서 데이터를 사용해야하는 경우가 오면 리눅스는 바로 메모리를 할당해주기 보다는 버퍼에 맡겨둔다. 2.cache 캐시(cache)는 버퍼와 마찬가지로 free라는 명령어를 사용했을 때 볼 수 있다. 캐시는 버퍼와 비슷하게 잠시 저장해 놓는 용도로 사용하지만 저장하는 건 다르다. 파일이 실행됐던 장면을 저장해 놓는데 이는 후에 다시 사용될 프로그램을 보다 빠르게 진행시키기 위해서다. 3.쉘 변수 특정 쉘에서만 실행 가능한 변수다. 4.환경 변수 쉘 변수와 다르게 모든 쉘에서 사용 가능한 변수다. 일반적으로 가장 많이 볼 수 있는 변수는 PATH이다. USER는 사용자의 이름을 담고있는 환경변수다. ** 풀이 About 이 프로그램은 임의로 실행될 수 있는 프로그램을 허용하는 취약점을 가지고 있다.  Source code #include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/types.h> #include <stdio.h> int main ( int argc , char ** argv , char ** envp ) { char * buffer ; gid_t gid ; uid_t uid ; gid = getegid (); uid = geteuid (); setresgid ( gi...

Nebula 해킹 스터디 Level01

Level01 https://exploit-exercises.com/nebula/level01/ About 설명을 보면 Source code에 나와있는 프로그램은 다른 프로그램을 임의로 실행할 수 있는 취약점을 가지고 있다.  Source code #include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/types.h> #include <stdio.h> int main ( int argc , char ** argv , char ** envp ) { gid_t gid ; uid_t uid ; gid = getegid (); uid = geteuid (); setresgid ( gid , gid , gid ); setresuid ( uid , uid , uid ); system ( "/usr/bin/env echo and now what?" ); } gid_t uid_t는 변수 타입이다. 각각 group id와 user id를 의미한다.  getegid는 현재 로그인 한 group id를 얻는 것이고 geteuid는 현재 로그인 한 user id를 얻는 것이다. setresuid는 real UID, effective UID, and saved  set-user-ID 현재 로그인한 사용자의 id로 바꿔준다. setresgid도 동일하게 작동한다.  system이라는 함수는 뒤에있는 ""안에  존재하는 문자열을 실행시켜주는 함수이다.  일단 로그인을 하고 about에 나온 것처럼 /home/flag01 로 이동해서 보면 flag01이라는 프로그램이 보인다.  실행시켜보면 and now what?라는 말이 뜨면서 종료된다....

Nebula 해킹 스터디 level00

Level00 https://exploit-exercises.com/nebula/level00/ 먼저 위 사이트에 들어가면 About이라는 곳에 필요한 도움말이 있다. 이를 참고하여 문제를 풀면 된다. -->set user id를 찾아라. 계정의 이름은 flag00이다. -->로그인 level00의 패스워드는 level00이다. about에 나온대로 로그인을 한다. find라는 명령어는 특정 파일을 찾을 수 있다. /는 루트부터 있는 모든 파일을 탐색하라는 시작점을 지정해 준 것이다. -user 옵션은 파일의 사용자 계정이 누군지를 정하는 것이다. about에 나온 것 처럼 flag00로 지정했다. Set User ID는 보통 setUID로 쓰이며 이를 사용할 경우 현재 로그인한 사용자가 관리자 권한을 획득하게 된다. 이는 권한 옵션인 perm을 사용해서 찾으면 된다. 보통 비트는 4자리로 표시된다. 첫번째는 setUID, setGID, stricky 이고 각각 4, 2, 1로 표시한다.  두번째 자리는 사용자가 가진 권한을 의한다. r, w, x를 8진수로 표현하면 된다. 세번째 자리는 그룹이 가진 권한을, 마지막 자리는 모두가 가진 권한을 의미하며 이는 사용자 권한과 마찬가지로 r, w, x의 8진수로 표현하면 된다. 일반적으로 숫자만 입력했을 경우 그 정확한 숫자의 권한을 가진 파일을 찾는 걸 의미한다. 하지만 + 또는 -를 붙이면 의미가 달라지는데 +일 경우는 써진 숫자의 권한 중 하나만 이라도 가진 파일을 모두, -일 경우는 숫자의 권한 이상으로 있는 파일을 다 찾으라는 의미이다. 2>/dev/null 은 find 명령어에 해당하는 파일이 없을 경우 출력값을 나오지 않게 해주는 명령어이다. 현재 걸어둔 옵션에 해당하는 파일이 2개가 나왔다. 하나는 /bin 디렉토리에 있고 하나는 /rofs라는 디렉토리에 있다. 먼저 bin이라는 디렉토리는 리눅스의 기본 명령어들이 모여있다. ...