티스토리

sing
검색하기

블로그 홈

sing

lvolz.tistory.com/m

tech blog

구독자
0
방명록 방문하기

주요 글 목록

  • [BOJ/백준] 1003. 피보나치 함수 - 재귀, 메모이제이션, DP (Python) 문제 링크: https://www.acmicpc.net/problem/1003피보나치 수열에서 원하는 수 n을 호출했을 때, 0과 1이 총 몇 번 호출되는지 묻는 문제 접근 1. 재귀문제에 나온 그대로 피보나치 함수를 구현했다.def fibo(n): if n == 0: return 0 elif n == 1: return 1 else: return fibo(n-1) + fibo(n-2)0이 카운트되는 횟수, 1이 카운트되는 횟수를 따로 변수에 저장해서 풀었지만결과는 시간초과!  접근 2. 메모이제이션피보나치 수열은 fibo(n) = fibo(n-1) + fibo(n-2).fibo(5)를 예시로 들어보자, fibo(5)= fibo(4) + fibo(3)= fibo(3) + f.. 공감수 0 댓글수 0 2024. 8. 2.
  • [Spring Boot] @Valid로 유효성 검사하기 1. validation 의존성 추가build.gradle의 dependencies에 아래 코드를 추가해주자.implementation 'org.springframework.boot:spring-boot-starter-validation'  2. 유효성 검사 코드 예시@Getter@Setter@AllArgsConstructorpublic class Member { @NotBlank(message = "아이디는 필수 입력 값입니다.") private String userId; @NotBlank(message = "비밀번호는 필수 입력 값입니다.") private String pw; @Pattern(regexp = "^[ㄱ-ㅎ가-힣a-z0-9-_]{2,10}$", message =.. 공감수 0 댓글수 0 2024. 5. 17.
  • [Spring] @JsonProperty, @JsonNaming 왜 사용할까? 1. Jackson 라이브러리란REST API 방식으로 서버와 클라이언트가 통신할 때, JSON 형식을 주로 사용함.그런데 서버단에서는 Camel Case 방식을, 클라이언트단에서는 Snake Case 방식을 사용함.따라서 서버단과 클라이언트단의 표현 방식이 다르기 때문에, 데이터의 key가 달라지는 경우 존재.이러한 문제를 해결하기 위해 해당 라이브러리의 어노테이션 사용.-> @JsonProperty, @JsonNaming 2. @JsonProperty, @JsonNamingJava 객체의 필드와 JSON 객체 속성 간의 매핑 정의. → Java 필드명과 JSON 속성명이 다를 경우에도 서로 연결 가능. json으로 넘어오는 값이 아래와 같다고 가정하자.{ “name” : “상품명”, “p.. 공감수 0 댓글수 0 2024. 5. 13.
  • [Gradle] build.gradle의 dependencies import keywords 1. dependencies 블록은?받아올 라이브러리를 정의해두는 공간.dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test'}위와 같은 dependencies가 있다고 가정하자.implementation, compileOnly 등 생소한 키워드들이 많은데.. 얘네들은 뒤에 오는 라이브러리들이 적용될 범위(scope)를 정해준다.  2. Keyword 정리 implementation- 전 범위에 걸쳐 적용된다. testIm.. 공감수 0 댓글수 0 2024. 4. 30.
  • 두 번째 페어 프로그래밍 회고 w. 선택 정렬 지난 첫 페어 프로그래밍에 이어, 두 번째로 페어 프로그래밍을 해봤다.>> 지난 글 보기: https://lvolz.tistory.com/70 주제는 선택 정렬 구현하기.구현한 코드는 다음과 같다.# 선택 정렬_오름차순arr = [2, 4, 7, 6, 9, 3, 1, 5, 8, 10]for i in range(len(arr)): min_idx = i for j in range(i+1, len(arr)): if arr[min_idx] > arr[j]: min_idx = j arr[i], arr[min_idx] = arr[min_idx], arr[i]print(arr) 이런 방식으로도 풀 수 있을 것이다. (for j로 돌리지 말고 그냥 min 함수 사용)fo.. 공감수 0 댓글수 0 2024. 4. 29.
  • HTTP Request/Response Request: 클라이언트의 요청. (Client -> Server) Request 구조Request Line - Method 종류, 경로Request Headers(택)Request Message Body - 파라미터 형식 (서버에 전송할 데이터를 body에 담음) Request 주요 요소Request Methods가 중요하다고 생각한다. 서버가 수행해야 할 동작을 지정해서 요청을 보내기에 주요한 것 같다. Response: 요청에 대한 서버의 답변. (Server -> Client) Response 구조Status Line - 요청의 성공 여부를 나타내는 상태 코드 (ex. 200, 404, 302 ..)HeaderBody - 전송할 데이터를 담음 Response 주요 요소Status Code클라이언.. 공감수 0 댓글수 0 2024. 4. 26.
  • 미니 프로젝트 회고 🐡🐟🐠 프로젝트 구상 자바 프로그래밍을 배운 후, 곧바로 이어서 미니 프로젝트를 진행했다. 2024년 4월 11일부터 17일까지, 평일 5일간 아이디어 구상부터 기획, 설계, 개발, 발표까지 마쳤다. Swing을 활용해서 간단하고 재밌는 게임을 구현하고자 했다. 정한 주제는 개복치 키우기 게임 제작하기! 학교에서 자바를 배운지도 오래되어 기억이 잘 안 났고, 자바로만 프로젝트를 진행해본 적이 없었기 때문에 잘 구현할 수 있을지 걱정되었다. 프로젝트 일정 1일차 (4.11목) : 프로젝트 주제 선정, 아키텍처 구조 설계 및 틀 구현 2일차 (4.12금) : Figma 각 화면 디자인, DAO 및 기능 명세서 작성, 역할 분담 3일차 (4.15월) : HomeScreen와 내부 요소 UI 작업, 백엔드 구현 (DA.. 공감수 1 댓글수 0 2024. 4. 17.
  • 설계와 개발 1. 애자일 vs 폭포수 방법론을 적용하기 위한 구체적인 실행은 어떻게? 애자일 방법론; 반복적, 점진적, 계속해서 고객의 피드백을 받으며 개발 진행. - 스크럼: 스프린트 기반으로 애자일 방법론 실행 - 칸반: 칸반 보드를 통해 워크플로우를 가시화, 프로세스 관리 - XP: 짧은 개발 주기를 반복하며, 사용자의 요구 변화에 신속하게 대응 - TDD: 테스트 주도 개발 방법론, 선 테스트 코드 작성 -> 후 구현 - BDD: 비즈니스 중심의 행위 주도 개발 방법론, 시나리오 기반으로 테스트, 특정 기능이 '무엇'을 제공하는지에 초점. 폭포수 방법론; 선형적, 계획적, 완료된(이전) 단계로 되돌아갈 수 없다. - 계획 -> 분석 -> 설계 -> 개발 -> 시험 -> 운영/유지보수 2. 설계가 중요하다 vs.. 공감수 1 댓글수 0 2024. 4. 15.
  • [Java] 인터페이스는 왜 쓰는 걸까? 인터페이스란 뭘까? 자바에서 인터페이스란 일종의 추상 클래스라고 보면 된다. 추상클래스처럼 추상메서드와 상수를 갖지만, 추상화 정도가 더 높아서 몸통을 갖춘 일반 메서드나 멤버 변수를 가질 수 없다. - 추상 클래스: 추상 메서드, 상수, 일반 메서드, 멤버 변수 가짐 - 인터페이스: 추상 메서드, 상수만 가짐 클래스에서 특정 메서드를 구현하도록 강제할 수 있는 기능이라고 봐도 된다. 즉, 인터페이스가 가진 모든 메서드를 구현받은 클래스가 다~~ 구현해야 한다. 클래스를 작성하기 위해 밑그림만 그려진 "기본 설계도"로 이해하면 되겠다. 인터페이스를 왜 쓰지? 동일한 목적 하에 동일한 기능을 수행하게끔 강제하기 위해서. 자바의 다형성 개념을 활용하여 개발코드 수정을 줄이고 유지보수를 쉽게 하기 위해서 인터.. 공감수 0 댓글수 0 2024. 4. 8.
  • 첫 페어 프로그래밍 회고 .. w.버블정렬 처음으로 페어 프로그래밍을 해봤다. 페어 프로그래밍이란, Pair Programming. 말 그대로 짝을 맞춰 프로그래밍 한다는 뜻. 애자일 개발 방법론 중의 하나로, 하나의 컴퓨터를 가지고 두 사람이 작업하는 방법을 의미한다. 사람1의 역할: "네비게이터" - 프로그래밍의 방향을 설정하고 지시한다. 사람2의 역할: "드라이버" - 네비게이터의 지시대로 코드를 작성한다. 규칙 - 보통 5분에서 10분 간격으로 역할을 바꿔가며 진행한다. - "드라이버" 역할은 "네비게이터" 역할의 지시에 반박하지 않고 코드를 작성한다. 물론, 궁금한 점은 당연 물어볼 수 있다. 이번 페어 프로그래밍의 목적은 "둘이서 싸우지 않기" 였다. 코드를 완성하는 것도 중요하지만, 서로 대화를 통해서 생각 없이 코드를 작성하지 않는.. 공감수 0 댓글수 0 2024. 4. 5.
  • [Java] 자바 문법 (클래스의 구성 요소, 다형성) 5. 클래스의 구성 요소 클래스의 구성 요소 필드 (Field) 메소드 (Method) 생성자 (Constructor) 자바는 무조건 클래스 안에서 함수가 쓰이고 있기 때문에, 메소드라고 칭함. 파일 하나에 코드 평균 200줄 ! JUnit - 자바의 테스트 프레임워크 메소드 클래스 안에서 사용하는 함수(특정 기능을 하는 코드 블록) 자바에서는 모든 함수가 클래스 안에 있기 때문에, 메소드로 명칭 통일. 📌 객체를 만들어내는 책이 클래스였지. 그 책 안에 적혀 있어야 하는 게 3가지. 조립하는 방법 (생성자) 부품 (필드) 완성품 기능 사용법 (메소드) → 클래스로 객체 만들 수 있지 ~!! 실습 ! 클래스 작성 순서 (필드 - 생성자 - 메소드) 참조 자료형은 결국에 객체. 객체를 담기 위한 클래스 타.. 공감수 0 댓글수 0 2024. 4. 4.
  • [Java] 개요, 문법 기초 📌 목표: 자바의 기초 문법 배우기 1. 자바 개요 컴파일러 vs. 인터프리터 컴파일 언어 - 한 번에 번역해줘 (통번역) 인터프리트 언어 - 한 줄씩 바로 번역해줘 (동시통역) 자바스크립트는 인터프리트 언어! 한 줄씩 읽어주니까 굉장히 빠름 자바는 컴파일 언어! 파일 전체를 한 번에 번역하니까 느림. JVM, JDK란? 운영체제란 뭘까? : Operating System. 말 그대로 작동 시스템, 프로그램이 뛰어놀 수 있도록 하는 운동장 같은 것. 🗣️ 운영체제: 프로그램들아 내 위에서 뛰어 놀아~ C언어는 OS별로 세팅을 다르게 따로 해야 됨. -> 복잡하고 귀찮음. 반면 Java는 모든 OS 공통으로 환경 세팅 가능 -> JVM 덕분 JDK (Java Development Kit)에 있는 것들. -.. 공감수 0 댓글수 0 2024. 4. 3.
  • [BOJ/백준] 21921. 블로그 - 슬라이딩 윈도우 (Python) 문제 링크: https://www.acmicpc.net/problem/21921 21921번: 블로그 첫째 줄에 $X$일 동안 가장 많이 들어온 방문자 수를 출력한다. 만약 최대 방문자 수가 0명이라면 SAD를 출력한다. 만약 최대 방문자 수가 0명이 아닌 경우 둘째 줄에 기간이 몇 개 있는지 출력한다 www.acmicpc.net 문제 찬솔이는 블로그를 시작한 지 벌써 N일이 지났다. 요즘 바빠서 관리를 못 했다가 방문 기록을 봤더니 벌써 누적 방문 수가 6만을 넘었다. 찬솔이는 X일 동안 가장 많이 들어온 방문자 수와 그 기간들을 알고 싶다. 찬솔이를 대신해서 X일 동안 가장 많이 들어온 방문자 수와 기간이 몇 개 있는지 구해주자. 입력 첫째 줄에 블로그를 시작하고 지난 일수 N와 X가 공백으로 구분되.. 공감수 0 댓글수 3 2024. 3. 12.
  • [Linux] 명령어 정리 (find, 권한 관리) 명령어 정리 awk cut grep more ls -al | grep bash → 현재 디렉토리에서 bash 글자가 들어간 파일만 출력해라 ls -alp aaa → 이름이 aaa인것의 정보를 보여줘라 find 명령을 통한 소유자, 백도어, 파일 찾기 find /dev -type f → /dev/MAKEDEV 만 떠야함 (백도어 찾기) find / -ctime -1 → 하루동안 만들어진 파일 (해킹 당한 듯 싶으면 확인) find / -perm -4000 → setuid 걸린 파일을 찾는 명령어 find / -nouser → 파일에 소유자가 없는 경우의 파일 권한 관리 명령어 chmod : 파일, 디렉토리의 권한(퍼미션, 허가권)을 변경하는 역할 개별적으로 파일 권한 변경하기 u 사용자, g 그룹, o 다.. 공감수 0 댓글수 0 2024. 1. 18.
  • [FTZ] level 20 풀이 <FSB> ID : level20 PW : we are just regular guys 1. 드디어 마지막이다! level20으로 로그인 하고, hint 파일을 읽어보자. 코드를 해석해보자. #include main(int argc,char **argv) //프로그램 실행과 동시에 사용자 입력을 받음 { char bleh[80]; //문자형 bleh변수에 80바이트 만큼의 크기 할당 setreuid(3101,3101); //clear 계정의 프로세스 ID fgets(bleh,79,stdin); //fgets함수로 bleh변수에 79바이트 만큼의 사용자 입력을 받음 printf(bleh); //bleh변수에 저장된 값 출력 } 해석을 참조하면, fgets 함수로 문자열을 입력받고 bleh[80]버퍼에 79만큼 입력 .. 공감수 0 댓글수 0 2024. 1. 18.
  • [FTZ] level 19 풀이 <BOF> ID : level19 PW : swimming in pink 1. level19로 로그인 하고, hint파일을 읽어주자. 간단한 코드이다. buf배열을 gets으로 입력받을 때 길이에 대한 제약이 존재하지 않아서 취약점이 발생할 것이다. 이 코드에는 level20의 권한에 관한 코드가 없기 때문에 setreuid를 따로 넣어서 풀어줘야 한다. 구글링 결과, setreuid가 포함된 41Byte Shell Code가 존재한다. "\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b.. 공감수 0 댓글수 0 2024. 1. 18.
  • [FTZ] level 18 풀이 <BOF> ID : level18 PW : why did you do it 1. level18에 로그인 한 뒤, hint 파일을 열었다. 그 동안과 다르게 복잡해보이는 코드가 있다. 대충 해석해보니, check변수가 0xdeadbeef가 되면 shellout함수가 실행돼 쉘을 딸 수 있을 것 같은데... 그런데 그동안 해왔던 것처럼 string을 넘치게 하여 check에 죽은 고기를 넣는 방법은, 이번에는 string버퍼가 맨 위에 존재하기 때문에 안 될 것 같다. 이 코드에서 키포인트는 0x08 입력이 들어오면 버퍼의 문자수를 조절해주는 count 변수가 1감소하게 된다는 점이다. 그렇다면 배열의 인덱스가 -가 되도록 하면 앞의 메모리에 접근이 가능하게 될 것이다. 즉, string[100]보다 나중에 존재하는 .. 공감수 0 댓글수 0 2024. 1. 18.
  • [FTZ] level 17 풀이 <BOF-env> ID : level17 PW : king poetic 1. level17로 로그인 하고, hint 파일을 읽어보자. 16번 문제와 소스코드가 비슷하지만, shell을 실행시키는 함수 부분이 제외되었다. 그렇다면 환경변수에 쉘코드를 등록하고 쉘코드 주소를 이용해 문제를 해결해보자. (level18의 권한은 실행해주는데 /bin/bash 명령어가 없어서 쉘이 실행이 안 됨. 그래서 쉘코드 넣은 환경변수 주소를 *call에 넣어주는 거) 디버깅. 스택 구조가 buf(20) + dummy(20) + *call ~~~ 임을 알 수 있다. 환경변수에 쉘코드 넣어주고 그 환경변수를 출력하는 코드를 만들어서 실행하자. 페이로드. (python -c 'print "\x90"40 + "\x1e\xfb\xff\xbf"';c.. 공감수 0 댓글수 0 2024. 1. 18.
  • [FTZ] level 16 풀이 <BOF-함수 덮기> ID : level16 PW : about to cause mass 1. 새로운 파일인 attackme.c가 있다. 읽기 권한이 없어서 읽을 수가 없다. 그냥 attackme의 소스코드인 것 같으므로 hint파일을 읽어주자. main함수 부분만 분석해 보도록 하겠다. main(){ int crap; void(*call)()=printit; //call 포인터 함수에 printit 함수를 저장 (call 선언, printit로 초기화) chat buf[20]; fgets(buf,48,stdin); //48바이트 만큼의 입력을 buf변수에 받음 call(); //call 함수 호출 = printit 함수 호출 } 지금까지와는 새로운 유형의 오버플로우 문제인 것 같다. 문제 해결은 다음과 같다. buf[20].. 공감수 0 댓글수 0 2024. 1. 18.
  • [FTZ] level 15 풀이 <BOF-포인터> ID : level15 PW : guess what 1. level15로 로그인 해준 후 hint파일을 읽어주자. 14번 문제와 동일한 코드에서 check변수를 포인터로 변경했다. 포인터 변수는 메모리의 주소 값을 저장하는 변수이다. 따라서 check에 들어가는 값은 메모리의 주소 값으로 저장되며, check 포인터변수에 있는 값이 가리키는 메모리 주소에 0xdeadbeef를 넣어줘야 쉘을 딸 수 있을 것이다. (포인터변수는 메모리의 주소값을 저장하니까, 0xdeadbeef값이 들어있는 주소값을 check포인터변수에 넣어줘야 한다는 뜻) fgets(buf,45,stdin); //45바이트만큼의 입력을 buf변수에 받음 그럼 우리가 해야할 일은? buf[20]에서 부터 *check까지의 거리 구하기 디버깅.. 공감수 0 댓글수 0 2024. 1. 18.
  • [FTZ] level 14 풀이 <BOF-그냥덮> ID : level14 PW : what that nigga want? 1. 어김없이 hint를 읽어줍시다. 이번에는 check의 값이 0xdeadbeef면 쉘을 띄우네요. 리턴값을 덮을 필요 없이 check의 값만 덮어 씌워주면 될 것 같습니다! 그런데 buf에 입력을 45바이트로 제한하네요. fgets(buf, 45, stdin); buf : 문자열이 저장될 포인터 45 : 입력받을 문자열 길이 stdin : 입력받을 스트림 지정 fgets은 이렇게 이해하면 됩니다. attackme를 디버깅하기 위해 디버깅 권한이 있는 tmp디렉토리로 복사하여 디버깅 해줍시다. 근데 tmp디렉토리로 복사하는 건 버퍼의 시작위치를 알기 위해서니까 환경변수로 하거나 지금처럼 값만 덮을때는 그냥 level디렉토리에서 디버.. 공감수 0 댓글수 0 2024. 1. 18.
  • [FTZ] level 13 풀이 <BOF-strcpy+i> ID : level13 PW : have no clue 1. hint를 뜯어보자. level11와 상당히 유사하지만, long i가 추가된 걸 확인할 수 있다. main(int argc, char *argv[]) // 인자를 받음 long → 정수형변수, 4바이트 해석해보자면, i를 4바이트로, buf를 1024바이트로 선언했다. 렙14권한이 걸리고, 인자(인자가 argv임)가 전달되면 buf에 argv[1]을 복사하여 넣는다. 만약 i가 0x1234567이 아니라면 프로세스는 죽는다. (kill은 잘 모르겠음 추후 수정) strcpy함수가 쓰이고 버퍼의 크기에 대해 아무 언급이 없는걸 보면 버퍼오버플로우 문제라는 걸 알 수 있겠지? 바로 attackme를 tmp디렉토리로 복사하여 디버깅 해보자! (+그.. 공감수 2 댓글수 0 2024. 1. 18.
  • [FTZ] level 12 풀이 <BOF-gets> ID : level12 PW : it is like this 1. 상당히 level 11과 유사하다. 그냥 strcpy가 gets으로 바뀌었다 ㅎㅎ 디버깅 해서 보면 str, dummy 크기까지 걍 똑같다. 나이쓰 똑같이 환경변수를 이용해 풀어주었다. 환경변수에 쉘코드 저장하고, ret에 환경변수 주소 넣어주고~ 렙11과 다른 점은 인자를 넣는 방식인데, 페이로드 (python -c 'print "\x90"268 + "\x1e\xfb\xff\xbf"';cat)|./attackme 이렇게 작성하면 된다 ㅎㅎ 렙 13으로 ~ 참고: https://grayfieldbox.tistory.com/entry/FTZFree-Training-Zone-Level-12 (2020.02에 작성한 글을 가져왔습니다.) 공감수 0 댓글수 0 2024. 1. 18.
  • [FTZ] level 11 풀이 <BOF-strcpy> ID : level11 PW : what!@#$? 1. 로그인 후 hint 파일을 읽어주자. 못 보던 attackme 파일도 있네. 코드를 분석해보자. #include #include int main( int argc, char *argv[] ) { char str[256]; //str배열의 크기를 256바이트로 지정 setreuid( 3092, 3092 ); //level12 권한 strcpy( str, argv[1] ); //argv[1]값을 str에 복사 printf( str ); //str 출력 } strcpy 함수는 NULL 문자 전까지의 문자열을 복사하는 함수이다. strcpy 함수에는 취약점이 존재하는데, 문자열의 길이를 검사하지 않기 때문에 버퍼의 크기보다 더 큰 문자열이 들어갈 경우 오버.. 공감수 0 댓글수 0 2024. 1. 18.
  • [FTZ] level 10 풀이 <공유메모리> ID : level10 PW : interesting to hack! 1. hint를 읽어 줍니다. 두 명의 사용자가 대화를 나눈 대화방의 정보를 알려 줬군요 ! 그 대화방은 공유 메모리를 이용하여 만들어졌으며, key_t의 값은 7530이라고 합니다. 공유 메모리에 접근하는 소스코드를 작성해서 공유 메모리 데이터를 읽는 문제입니다. 📌 공유 메모리란? 공유 메모리 (Shared momory)는 여러 프로세스가 함께 사용하는 메모리를 말합니다. 이 공유 메모리를 이용하면 프로세스끼리 통신을 할 수 있으며, 같은 데이터를 공유할 수 있습니다. 이렇게 같은 메모리 영역을 공유하기 위해서는 공유 메모리를 생성한 후, 프로세스의 자신의 영역에 첨부를 한 후에 마치 자기 메모리를 사용하듯 사용합니다. 출처: ht.. 공감수 0 댓글수 0 2024. 1. 18.
  • [FTZ] level 9 풀이 <BOF> ID: level9 PW: apple 1. level9에 로그인해주고 cat 명령어로 hint 파일을 읽어주자. 만약 buf2의 첫 두글자가 "go" 라면, Good Skill!을 출력하고 3010,3010권한으로 bash를 실행시켜 주는 코드인 것 같다 ! 3010,3010은 level10 권한이겠지! 그렇다면 어떻게 buf2 변수에 go 문자열을 넣을 수 있을까? 스택은 이렇게 되겠지? — — — RET[4] → 높은 주소 SFP[4] buf2[10] buf[10] → 낮은 주소 — — — 문제에서 요구하는 건 buf2의 첫 두글자가 "go"여야 하는데, 소스를 보면 buf만 입력받기 때문에 불가능하다. 하지만 ! 이 소스코드에서 취약점은 fgets 이다. 이 함수에서는 buf가 10바이트인데도 불구.. 공감수 0 댓글수 0 2024. 1. 18.
  • [FTZ] level 8 풀이 <John the Ripper> ID: level8 PW: break the world 1. 루트 디렉토리로 이동해서 find 명령으로 사이즈가 2700인 파일들만 출력했다. 📌 참고 ! 우선, 텍스트 파일을 읽기 위해 /etc/rc.d 디렉토리로 이동하여 found.txt를 읽었다. 똑같은 문자열이 여러개 출력되었다. 패스워드 파일의 형식인 것 같으니 분석 해보자 ! (level8의 shadow 파일!) 패스워드 파일이란, 한 서버를 사용하는 사용자들의 모든 정보를 기록해 놓은 파일이다. 1 : 2 : 3 : 4 : 5 : 6 : 7 : 8 : 9 1: 사용자명 2: 패스워드 3: 패스워드 파일 최종 수정일 4: 패스워드 변경 최소일 5: 패스워드 변경 최대일 6: 패스워드 만료 경고 기간 7: 패스워드 파기 기간 (패스워드 파기 후.. 공감수 0 댓글수 0 2024. 1. 18.
  • [FTZ] level 7 풀이 <진법변환, ASCII> 1. 역시 가장 먼저 열어보는 hint 파일. /bin/level7 명령을 실행하면 패스워드 입력을 요청한다니 /bin/level7 명령을 실행해보자 ! 힌트에 나온대로, /bin/level7을 실행하면 패스워드 입력을 요청한다. 아무말이나 입력했더니 wrong.txt 라는 파일이 없다는 에러메세지가 출력된다. 좀 멘붕이 와서 구글링 했더니, 이는 해커스쿨 FTZ 오류란다. 원래는 bin 디렉토리에 아래와 같은 내용이 있어야 한다. 올바르지 않은 패스워드 입니다. 패스워드는 가까운곳에... ——- —__- —--__ —__-- 그래서 이 문제를 풀려면 /bin 디렉토리에 wrong.txt 라는 파일을 추가해줘야 한다. 2. wrong.txt 파일을 포함시키기 위해선, vi 에디터로 내용을 붙여넣으면 되지.. 공감수 0 댓글수 0 2024. 1. 18.
  • [FTZ] level 6 풀이 <bbs 해킹기법> 1. 로그인 하자마자 hint가 보인다. bbs : 쉽게 말해 전자게시판, 오래전에 쓰던 방식 텔넷 : 원격접속 서비스를 제공하는 네트워크 프로토콜 엔터를 치니 이런 화면이 나왔다. 하이텔, 나우누리, 천리안 모두 예전에 쓰던 PC 통신 방법이다. 1, 2, 3번 모두 선택해 보아도 터미널이 그냥 종료된다. 인터넷에 검색해보니, ctrl + c (작업 중지)를 누르면 명령어를 입력하는 창이 나온대서 눌렀더니, Can't use ctrl+c가 출력됐다. 그래서 초기화면에서 ctrl + c를 입력했더니 해결되었다. 이번엔 특이하게 password 파일이 대놓고 보인다. cat 명령으로 password 파일을 읽어주면 level7의 비번이 come together 이라는 것을 알 수 있다. 💡 bbs에서 많이.. 공감수 0 댓글수 0 2024. 1. 18.
  • [FTZ] level 5 풀이 <tmp> 1. ls 명령을 입력하니 아까 만든 backdoor 파일이 있네? 그래서 /home/level5 로 이동해주었다. 역시 hint 파일이 있으니 열어볼까 tmp 디렉토리는 아무나 들어갈 수 있는 곳이며 임시파일을 저장하는, 일종의 공동화장실 같은 곳이다. 2. /usr/bin/level5 파일의 정보를 출력해보자. 이 파일의 소유주는 level6이고 setuid도 걸려있다. 즉 이 파일을 가지고 쉘을 실행시키거나, my-pass를 실행시키면 level6의 패스워드를 알 수 있다. 해당 파일을 실행시키면, level5.tmp를 만든다고 했는데, 한 번 실행시켜보자. /usr/bin/level5 파일을 실행시키고 tmp에 와서 확인해보았지만 level5.tmp는 보이지 않는다. 어찌 된 것일까?? /usr/.. 공감수 0 댓글수 0 2024. 1. 18.
    문의안내
    • 티스토리
    • 로그인
    • 고객센터

    티스토리는 카카오에서 사랑을 담아 만듭니다.

    © Kakao Corp.