일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Router
- 웹해킹
- wpscan
- leetcode
- todo List
- 써니나타스
- meterpreter
- HTML Injection
- study
- java
- 취약점
- 미터프리터
- 모의해킹
- StringBuilder
- 모드 설정
- SQL Injection
- todo
- 정보시스템
- algotithm
- metasploit
- CSRF
- Suninatas
- SQLMap
- stock price
- programmers
- 취약점진단
- 라우터
- hackerrank
- ToDoList
- Algorithm
- Today
- Total
보안 / 개발 챌린저가 목표
쉘의 이해와 스크립트 작성 본문
쉘(Shell) 이란
- 운영체에 상에서 다양한 운영체제 기능과 서비스를 구현하는 인터페이스를 제공하는 프로그램이다.
- 사용자가 입력한 명령을 커널에 전달한다. 그 커널이 운영체제에게 전달해서 운영체제는 처리를 하고, 운영체제가 다시 커널에게 주면 커널이 사용자에게 돌려준다.
- 현재도 bourne Shell이 존재하지만 대부분의 배포판에서는 /bin/bash로 심볼릭 링크가 설정되어있다.
- Ubuntu 는 chsh 명령어에 -l 옵션이 없다.
- /bin/dash : echo 할 때 -e 옵션을 주지 않아도 이스케이프 문자 사용 가능( ex) \n, \t )
- /bin/bash : echo 할 때 -e 옵션을 주어 이스케이프 문자를 인식 시켜줘야함
- 만약 문자열 자체를 묶어주고 싶을 때 "", '' 뭐든 상관 없음
▶ 쉘의 입출력
1. '>' 와 '>>'
- '>' : 덮어쓰기
- '>>' : 이어쓰기
# vi test.sh 에 위와 같이 데이터를 입력한다.
# chmod +x test.sh 를 하여 실행 권한을 준다.
# ./test.sh 를 이용하여 실행한 후 # cat file.txt 로 쓰여진 파일을 출력한다.
잘 작성된 것이 확인된다.
다시 test.sh 파일을 열어서 Hi!! 부분에 '>>'를 '>'로 변경한다.
데이터가 덮어쓰여진 것이 확인된다.
2. 파이프( | )
- 명령과 명령을 연결할 때 사용
- 표준 출력 값을 다음 명령에 표준 입력으로 넣어주는 것
- 주의사항! 파이프 라인을 너무 많이 사용하면 중간에 값이 없어짐
# cat /etc/passwd | grep kisec 을 이용하여 /etc/passwd 안에 있는 kisec 이 포함된 문자열을 찾는다.
* grep : 입력으로 전달된 파일의 내용에서 특정 문자열을 찾고자 할 때 사용하는 명령어
3. awk
- 문자열에서 특정 문자의 패턴을 추출하여 원하는 포맷으로 처리하는 명령어
- 내부적으로 C언어와 같은 연산, 반복문, 제어문 등이 가능
# cat /etc/passwd | grep kisec | awk -F":" '{ print $1, $6 }'
1번째 필드와 6번째 필드를 찾는 명령어이다.
☞ -F"구분자" : 필드 사이를 구분하는 구분자를 지정하여 사용. 지정하지 않을 시에는 공백이 기본값
☞ -v 변수=값 : awk 명령어 내부 처리 중에 사용할 변수를 지정
☞ -f 스크립트 파일 : 여러 개의 미리 만들어진 스크립트 파일을 사용하여 문자열을 처리
반복문을 사용하여 출력도 가능하다.
if 안의 "~"는 /ㅇㅇㅇ/이 포함되어 있으면! 이라는 뜻이다.
▷ 표준 스트림
- 0 : 표준입력
- 1 : 표준출력
- 2 : 표준에러 출력
- & : 추가로 리다이렉션 스트림을 지정할 때 사용
- 2>&1 : 표준 에러를 표준 출력으로 표준 입력 리다이렉션
- echo "Hello World!" > file.txt : 표준 에러 출력을 터미널에 작성
- echo "Hello World!" > file.txt 2>&1 : 표준 에러 출력까지 파일에 작성
- 2>/dev/null : 표준 에러 출력을 /dev/null 쪽으로 표준 입력 리다이렉션
- /dev/null 파일 : 아무것도 존재하지 않는 특수 파일. 이 파일에 쓰여지는 모든 데이터는 버려지지만 정상적으로 쓰기 작업이 종료되었다고 인식. 블랙홀 또는 버킷 이라고 불리움.
▶ 문자열 파싱 명령어
# cat /etc/login.defs 와 같이 아무 파일을 열어서 읽은 후, 다음 파일의 빈 줄과 주석을 없애서 읽어본다.
# cat /etc/login.defs | sed -e '/^$/d' -e '/^#/d' 를 이용하면 된다.
- '-e' 로 명령어 사이를 구분함
- '/^$/d' 는 빈 줄 없애기
- '/^#/d' 는 주석 없애기
▷ 변수
- 변수 생성 시 타입 지정(int, float, long 등)은 하지 않으며, 생성과 동시에 값을 할당한다.
- 값 사용 시 변수 명 앞에 "$"를 붙여서 사용한다.
- 이미 생성된 쉘 변수에 다른 값을 재 대입 시 "$"를 붙이지 않고 사용한다.
test.sh 에 이와 같이 저장한다.
* 쉘 스크립트 작성 시 /bin/bash 가 아닌 /bin/sh 로 하는 이유는 bash가 없는 경우가 있을 수 있기 때문!
다음과 같이 결과가 출력된다.
▶ 조건문
if(띄어쓰기)[(띄어쓰기)조건식(띄어쓰기)];(띄어쓰기)then
실행 구문
fi
if(띄어쓰기)[(띄어쓰기)조건식(띄어쓰기)];(띄어쓰기)then
실행 구문
elif(띄어쓰기)[(띄어쓰기)조건식(띄어쓰기)];(띄어쓰기)then
실행 구문
else
실행 구문
fi
입력 받을 데이터는 read val 로 입력받는다.
만약 입력 받은 값이 1이면 1 출력, 2면 2 출력, 그 외의 숫자라면 else를 출력한다.
다음과 같이 실행이 잘 되는 것을 볼 수 있다.
'IT Security > Class_Do it' 카테고리의 다른 글
Window 서버 진단 (1) (0) | 2020.09.21 |
---|---|
리눅스 쉘 스크립트 작성 실습 (0) | 2020.09.16 |
Linux 서버 수동 진단 항목 (0) | 2020.09.14 |
취약점(Vulnerability)과 MyDLP의 이해 및 구축 (0) | 2020.09.11 |
캐슬(CASTLE)을 이용한 웹 방화벽 구축 (0) | 2020.09.09 |