728x90

FTZ Training 5

- 아니요.

- 전혀요.

- 나중에는 어려울 꺼 같아요.

 

어렵지 않은 리눅스를 해보자

 

- 아아 이건 좀 논란 여지가 있지만

- 실력입니다. 정보 입니다.

- 무조건 실력,,,

 

 

- whoami 를 입력하면 자신이 누구인지 알 수 있다.

 

 

- id 를 입력하면 자세한 자신의 정보가 나온다. 

- 거짓말쟁이.. 아까는 정보가 중요하다면서..

 

 

- cat /etc/passwd를 입력하면 passwd 내용을 볼 수 있다.

 

 

 

- uname -a 를 입력하면 커널 버전을 볼 수 있다.

 

 

 

- 해킹에 가장 마지막 관리자 권한을 탈취하는게 목표라고 할 정도로 관리자 권한은 모든 시스템에 대한 권한이 있다.

 

 

 

- cat /etc/*release 를 입력하면 OS 버전을 확인 할 수 있따.

 

 

 


- rpm -qa 를 입력하면 패키지 정보를 얻을 수 있다.

 

 

 

- cat /proc/cpuinfo 를 입력하면 CPU에 정보를 수집할 수 있따.

 

 

 

- 이번 시간에는 OS에 다양한 정보를 얻는 방법을 배웠다.

728x90

'pwn > FTZ 풀이' 카테고리의 다른 글

FTZ Training 7  (0) 2021.03.13
FTZ Training 6  (0) 2021.03.13
FTZ Training 4  (0) 2021.03.13
FTZ Training 3  (0) 2021.03.09
FTZ training 2  (0) 2021.03.09
728x90

FTA Training4

디렉토리 이동에 대한 부분을 배우는 것 같다. 

 

화이팅이다.

 

- ls -al  명령어로 디렉토리와 파일 목록을 보자

- bin : 이곳에는 가장 필수적인 리눅스 실행 파일들이 들어가 있다. ls, rm 모두 이곳에 들어가 있다.

- boot : 리눅스 부팅 관련 파일들과, 리눅스의 심장인 커널이라는것이 들어있다.

- dev : 이곳은 컴퓨터에 설치된 하드웨어에 관한 정보들이 파일 형태로 저장되어 있는 곳이다.

- etc : 중요한 파일들이 이곳에 들어가 있다. 패스워드 파일, 쉐도우 파일, 대부분의 리죽스 설정 파일 등

- home : 일반 사용자들의 디렉토리가 들어가는 곳이다. guest와 trainer1~10, level 1~10 모두 이 디렉토리안에 속해 있다.

- lib : 많은 라이브러리 파일들이 들어가 있다.

- mnt : mount 명령을 사용하여, 마운트 시킨 시디를 플로피 디스켓등이 들어가는 디렉토리 이다.

- proc : 프로세스들이 파일 형태로 저장되는 디렉토리 이다.

- root : 일반 사용자의 디렉토리는 /home 아래 존재 하짐나, 루트의 홈 디렉토리는 따로 이곳에 저장된다.

- sbin : 기본 명령을 제외한 시스템 관리용 실행파일 들이 들어 있는 디렉토리이다.

- tmp : 임시로 파일을 저장하는 디렉토리로서, 권한에 상관없이 누구나 이 디렉토리에 파일을 생성할 수 있다.

- usr : 다양한 응용 프로그램들이 설치되어 있는 곳 이다. 

- var : 시스템 운영 중에 생성되는 각종 임시 파일 들이 들어가 있으며, 외부 접속에 대한 로그 파일들이 바로 이곳에 저장된다.

 

 

- etc에 담긴 디렉토리와 파일들은 중요파일이 많기 때문에 중요시 해야한다.

 

- 이번에는 각 디렉토리가 하는 역할에 대해 알아 보았다.

- 중요하기 때문에 꼭 기억하고 넘어가자

728x90

'pwn > FTZ 풀이' 카테고리의 다른 글

FTZ Training 6  (0) 2021.03.13
FTZ Training 5  (0) 2021.03.13
FTZ Training 3  (0) 2021.03.09
FTZ training 2  (0) 2021.03.09
FTZ Training 1  (0) 2021.03.09
728x90

Training 3

지금까지 ls, pwd, cd, mkdir, rmdir, rm, cp, mv 등 기본적인 명령어를 배워보았다.

 

어렵지는 않지만, 그래도 기본을 튼튼하게 라고 생각하고 열심히 해보자

 


- 사용자들의 정보를 자세하게 보자

- finger -l 을 입력하면 사용자들의 정보를 볼 수 있다.

 

 

- 현재 접속한 서버의 ip를 확인해 보자

- ifconfig 명령어를 입력하면 ip를 확인할 수 있다.

 

 

(중간에 w 명령어 사진 생략됨,,, 잃어버림.,,,)

 

w 명령어를 입력하면 현재 접속된 사용자가 접속한 터미널의 종류를 볼 수 있다.

- pts 는 원격을 통해서 접속한 터미널이다.

- tty 는 서버에서 집적 접속한 터미널이다.

 

728x90

'pwn > FTZ 풀이' 카테고리의 다른 글

FTZ Training 6  (0) 2021.03.13
FTZ Training 5  (0) 2021.03.13
FTZ Training 4  (0) 2021.03.13
FTZ training 2  (0) 2021.03.09
FTZ Training 1  (0) 2021.03.09
728x90

저번에 이어서 

 

트레이닝 2번째를 시작해보자

 

Training 2

- pwd를 입력하면 현재 경로를 출력해서 경로를 확인 할 수 있다.

 

 

- cd.. 을 입력하면 경로에서 한 단계 위로 이동할 수 있다.

- pwd를 입력해보면 위에 경로로 이동했다는 것을 확인 할 수 있다.

 

 

- cd "원하는 디렉토리 명"을 입력하면 이동할 수 있다.

 

 

- cd / 을 입력하면 최상위 디렉터리로 이동할 수 있다.

 

 

- 새로운 디렉토리를 만들어보자

- mkdir "생성할 디렉토리 명" 을 입력하면 디렉토리가 생성된다.

 

 

- 이번에는 디렉토리를 지워보자.

- rmdir "삭제할 디렉토리 명" 을 입력하면 디렉토리는 지워지게 된다.

- 디렉토리를 삭제하는 용도이기 때문에 잘 사용하지 않는다.

- rm을 많이 사용한다.

 

 

- 복사를 해보자

- 복사를 할 때는 cp "복사할 파일 명" "새롭게 복사한 파일 명"

 

 

- 파일을 삭제해 보자

- rm "삭제할 파일 명" 을 입력하면 파일을 삭제 할 수 있다.

* rmdir과 rm에 차이가 있다. rmdir은 디렉토리를 지우는 명령어이고 꼭 디렉토리가 비워져있어야 한다.

 

 

- 파일명을 변경해보자

- mv "변경할 파일" "새롭게 변경할 파일 명" 을 입력하면 파일명이 입력한대로 변경이된다.

 

 

728x90

'pwn > FTZ 풀이' 카테고리의 다른 글

FTZ Training 6  (0) 2021.03.13
FTZ Training 5  (0) 2021.03.13
FTZ Training 4  (0) 2021.03.13
FTZ Training 3  (0) 2021.03.09
FTZ Training 1  (0) 2021.03.09
728x90

FTZ ?

 

시스템보안 공부는 실습이 중요하다

 

실습으로 직접 명령어 작성을 통해서 공부하며 재미도 즐기고 성취감도 얻는다면 

 

가장 효과적인 공부 방법이라고 생각한다.

 

- 가상환경에서 Red Hat Linux 9 OS 기반으로 환경을 구성하고

- FTZ 환경을 준비해보자

- 기본 제공 ID: root, PW: hackerschool 으로 로그인 하면 본 문제

- 트레이닝을 위해서는 ID: trainer(과정숫자), PW: 과정별 얻은 패스워드

- ifconfig 명령어로 ip 주소를 얻을 수 있다.

 

 

- Xshell을 이용해서 ssh 접속으로 ifconfig로 얻은 ip를 입력하면 가상환경에서 가 아닌 메인로컬PC로도 접속할 수 있다.

* 가상환경을 켜져있어야 한다. 포트포워딩을 안했기 때문에 ip노출에 문제는 없다.

 

 

이제 트레이닝을 시작해보자

 

FTZ training 은 본 문제에 들어 가기 전 명령어와 환경에 익숙해 지기 위한 가이드와 같은 과정이다.

 

Training1

trainer1@ftz trainer1

- 왼쪽부터 trainer1은 우리가 접속한 접속 ID를 뜻한다.

- ftz는 우리가 사용하는 서버 이름이다.

- 오른쪽 trainer1은 현재위치하는 공간에 이름이다.

 

- ls는 우리가 위치한 곳에서 디렉터리와 파일들을 보여주는 명령어이다.

- ls -l 옵션을 입력하면 디렉터리와 파일들에 권한을 볼 수 있다.

 

 

- rw-rw-r-- 이러한 문구를 앞으로 자주 볼 것이다.

- 앞에 d가 붙는 다면 디렉터리를 뜻한다.

 

- ls -a를 입력하면 숨겨진 중요한 파일을 볼 수 있다.

 

 

728x90

'pwn > FTZ 풀이' 카테고리의 다른 글

FTZ Training 6  (0) 2021.03.13
FTZ Training 5  (0) 2021.03.13
FTZ Training 4  (0) 2021.03.13
FTZ Training 3  (0) 2021.03.09
FTZ training 2  (0) 2021.03.09
728x90

문제1. (함수 작성+포인터) swap 함수 만들기 (Call by Reference) -코드업-

codeup.kr/problem.php?id=1581

 

(함수 작성+포인터) swap 함수 만들기 (Call by Reference)

$2$개의 정수 $a$, $b$가 공백으로 분리되어 입력된다.($-1,000,000 <= a, b <= 1,000,000$)

codeup.kr

#include <stdio.h>
// 이 부분에 들어가야 될 코드를 작성하여 제출
main()
{
    int a, b;
    scanf("%d%d", &a, &b);
    myswap(&a, &b);
    printf("%d %d", a, b);
}

- 중요 키워드는 포인터 a와 b에 비교 인것 같다.

- swap에 대한 사용 방법인거 같다.

 

우선 swap를 찾아보았다.

참고한 사이트는 blog.naver.com/PostView.nhn?blogId=lyw94k&logNo=220847883516&proxyReferer=https:%2F%2Fwww.google.com%2F

 

swap를 사용해 비교만 하면 문제를 해결할 수 있다.

코드는

- swap 방식을 사용해서 풀었다. 

- 정수형 포인터 a와 b를 조건식 에서 (*a > *b)일때 swap하는 코드를 짜보았다.

 


 

문제2. (포인터) 부분 문자열 -코드업-

codeup.kr/problem.php?id=1810

 

(포인터) 부분 문자열

어떤 문자열에서 부분문자열을 추출하여 출력하는 프로그램을 작성하시오. 단 배열 대신 동적메모리 할당방법을 사용하시오. 이 문제는 배열을 이용하여 풀 수 없습니다. 포인터(*)를 사용하시

codeup.kr

- 문자열을 입력 받는다. char 문자열로 100자 미만을 주면 될거 같다.

- 만약 abcdefg를 첫번째 입력으로 하고, 두 번째 입력으로 1 3을 할경우 어떻게 문자열이 입력 받은 정수로 구분 해서 출력할지 고민해봐야 겠다.

 

코드를 짜보았다.


 

문제3. 35.7 심사문제: 두 정수의 합 구하기 -코딩도장 심사문제-

dojang.io/mod/quiz/view.php?id=283

- malloc을 사용해서 동적 할당을 해주면되는 문제인거 같다.

 

코드를 짜보자.

- 빈칸에 들어갈 코드는 정수형 포인터를 메모리에 동적 선언하는 것이다.

 


 

문제 4. 동적 메모리 할당을 사용하여 숫자를 입력 받아 합산하기 - Do it C언어 문제 -

 

조건

- 사용자가 입력한 개수만큼 정수를 저장할 수 있는 메모리 할당, 

- 중간에 9999를 누르면 종료함

 

#include <stdio.h>
#include <stdlib.h>

voin main()
{

    int *pNum, count = 0, sum = 0, li = 0, i; // 정수형 포인트 변수와 합을 구할 변수를 선언
    
    printf("할당 최대 개수를 입력 : ");
    
    scanf("%d", &li);
    
    pnum = (int *)malloc(sizeof(int)*li);
    
    while(count < li) {
    	printf("(9999를 입력하면 종료) 숫자를 입력하세요. : ");
        scanf("%d", pNum + count);
        if(*(pNum + count) == 9999) break;  // 9999에서 멈춤
        count++; // 입력한 횟수 계산
}

for(i = 0; i < count; i++) {
	if(i > 0) printf(" + ");  // +(플러스) 문자를 출력
    printf("%d, *(pNum + i));  // 입력한 숫자 출력
    sum = sum + *(pNum + i); // 입력 숫자 합산
}
printf(" = %d\n", sum);  // 변수 합산 출력
free(pNum);  //메모리 할당 해제
}
728x90

'프로그래밍 > C 문제 100' 카테고리의 다른 글

문제2. 3 6 9 게임의 왕이 되자!  (0) 2021.02.28
문제1 . 주사위를 2개 던지면?  (0) 2021.02.28
728x90

포인터를 사용해서 변수의 메모리 주소를 저장해왔다. 

 

그렇다면 포인터에 원하는 만큼 메모리 공간을 할당해 주는 방법은 없을까?

 

malloc와 free를 사용하면 메모리에 원하는 만큼 공간을 할당 받을 수 있다.

 

malloc? free? 이게 무슨 말일까?

 

malloc는 "memory allocation"으로 메모리 할당이라는 함수이다.

 

free는 할당해주었던 것을 끝내는 함수이다.

 

직접 코딩해보자.

- #include <stdlib.h>는 malloc, free 함수가 선언된 헤더 파일이다.

- numPtr2 포인터는 malloc(sizeof(int))로 동적 메모리 할당을 해주는 부분이다. sizeof 연산자를 사용하면 int의 크기 만큼 할당 해줄 수 있다.

- %p numPtr1, numPtr2로 할당된 메모리 주소를 출력한다.

- free(numPtr2)는 free 함수를 사용해 해당 포인터 numPtr2 동적 메모리 해제를 하는 부분이다.

* 동적 메모리 할당을 했다면 반드시 free로 해제 해줘야한다.

 

결과는

 

그렇다면 동적으로 할당한 메모리에 값을 저장하려면 어떻게 해야할까?

 

아주 쉽다.

    int *numPtr2;    // int형 포인터 선언

    numPtr2 = malloc(sizeof(int));    // int의 크기 4바이트만큼 동적 메모리 할당

    *numPtr2 = 10;   // 포인터를 역참조한 뒤 값 할당

    printf("%d\n", *numPtr2);    // 10: 포인터를 역참조하여 메모리에 저장된 값 출력
    
    free(numPtr2); 

- 먼저 malloc 함수로 동적 메모리 할당을 해준 뒤

- 포인터에 역참조로 값을 할당 해주면 된다.

728x90
728x90

포인터에 포인터를 선언할 수 있을까 하는 의문점으로 

 

이중 포인터에 대해 알아보자

 

포인터에 변수의 메모리 주소를 저장한다면, 포인터에 주소도 포인터에 저장할 수 있을까?

 

이중포인터가 바로 위에 질문에 답이다.

 

포인터도 포인터로 감쌀 수 있다.

- **을 사용해서 이중 포인터를 사용하면

- 역참조를 2번 진행해서 num1 변수 메모리 주소에서 값을 가져온다.

728x90
728x90

포인터를 이용해서 역참조 연산자를 사용해보자

 

우리는 전에 포인터를 사용하는 방법을 배웠다.

 

다시 이야기하면 변수의 메모리주소를 불러올 수 있다는 것이다.

 

그렇다면 포인터를 이용해서 변수의 값을 가져와 보자!

 

- %d를 사용한 이유는 정수형으로 값을 출력하기 때문이다. 

- 포인터 변수 앞에 *을 붙여서 출력하면, 포인터가 가리키는 변수의 메모리 주소에 저장된 값을 가져온다.

 

그림으로 보면

포인터 변수 앞에 *(에스더리스크)을 붙이는 것을 역참조 연산자라고 부른다.

 

그렇다면 

 

이것을 이용해 num1에 값을 변경해보자

- *numPtr은 num1 변수 메모리 주소에 저장된 값을 가리키는데 이때 =으로 값을 저장하면

- num1 변수 메모리 주소에 저장된 값이 20으로 변경이 된다.

- 출력시 num1을 출력해보면 20이라는 결과가 나온다.

 

그림으로 간단하게 설명하면

- 우리는 이미 num1의 메모리 주소를 numPtr에 저장했다.

- 그리고 *numPtr을 사용해서 num1의 메모리주소에 저장된 값을 가리키며 =을 사용해 20이라는 값을 num1 메모리 주소에 저장했다.(역참조 연산자 사용)

 

 

728x90
728x90

우리는 지금까지 배워온 변수를 지정하는 방법은 아래 코드와 같이 변수를 지정해 줬다.

int a = 10;

그렇다면 이 변수는 어디에 저장이 될까?

 

메모리에 대해 깊게 다른 컨텐츠로 다루겠지만 포인터 부분에서 메모리에 대해 간단하게 알고 가야한다.

 

그 이유는

 

포인터에 대한 이해가 메모리 부분에서 어렵기 때문이다.

 

다시 본론으로..

 

우리가 변수를 지정하면 변수는 메모리에 일정 공간을 확보하고 그곳에서 원하는 값을 저장하고 불러오는 방식이다.

 

그렇다면

 

도대체 메모리 어느부분에 저장이 되는지 어디서 불러오는지 궁금증이 생길것이다.

 

아래 코드를 사용해서 메모리에 할당된 변수 메모리 주소를 확인할 수 있다.

- %p 서식 지정자를 사용하 16진수로 출력하고, & 주소 연산자를 변수 앞에 사용하면 변수의 메모리 주소를 16진수로 확인 할 수 있다. 

우리는 변수가 저장된 메모리 주소를 출력해 보았다.

 

 

이번에는 포인터 변수를 선언해보자

 

포인터 변수는 쉽게 설명하면 변수가 메모리 주소에 할당 되고 포인터 변수가 그 메모리 주소를 가리키는 것이다.

그림과 같이 numPtr 포인터 변수가 변수 num1의 메모리 주소를 가리키게 되는 방식이다.

 

그림이 이해가 안간다면 코드로 보자

출력을 하면 위 그림과 같이 같은 메모리 주소 16진수 값이 나온다.

 

코드를 해석해 보면

- 포인터 변수를 선언해줄때는 *(애스터리스크)를 자료형 뒤에 붙여준다.

- 포인터 변수를 선언 후 &가 붙은 변수의 메모리 주소를 포인터 변수에 저장한다.

- 포인터와 num1의 메모리 주소는 같다는 의미이다.

 

728x90

+ Recent posts