일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 리눅스커널
- 시그널
- 포너블
- 알고리즘
- 워게임
- css
- Pwnable.kr
- 컴퓨터구조
- 리버싱
- pwncollege
- 리눅스 커널
- C언어
- 시스템
- 어셈블리어
- write up
- wargame
- 시스템해킹
- Bandit
- multiplexing
- 시스템프로그래밍
- 커널
- Leviathan
- 리눅스
- radare2
- 하드링크
- pwn.college
- kernel
- 시스템 프로그래밍
- 프로그래밍
- C++
- Today
- Total
Computer Security
#6 Wargame bandit 4 (Level7 ~ Level9),파이프라인,grep,sort,uniq 명령어 본문
#6 Wargame bandit 4 (Level7 ~ Level9),파이프라인,grep,sort,uniq 명령어
쿠리 Kuri 2022. 7. 12. 18:30Level7 -> Level8
다음 비밀번호는 백만번째라는 단어 옆에있는 data 파일에 저장되어 있다 한다. 찾아보자!
1.일단 millionth라는 문자열을 출력하기 위해선 grep과 파이프라인 명령어가 필요한데, 이 명령어들에 대해 알아보자!
grep (Global Rgular Expression Print)이란?
텍스트 파일에서 원하는 문자열이 들어간 행을 찾아 출력하는 명령어
]#grep 옵션 [문자열] [파일명]
-b : 문자와 일치하는 줄의 시작점 출력
-c : 문자와 일치하는 줄의 수 출력
-h : 여러 파일에서 문자열을 찾을 때, 파일이름이 붙는것을 방지
-i : 대소문자를 구분하지 않는다.
-n : 줄의 번호와 내용을 같이 출력
-v : 문자가 포함되지 않는 행 출력
-w : 문자와 한 단어로 일치해야 출력
-l : 문자가 들어간 파일 이름을 출력
-r : 하위 디렉토리에서도 문자를 찾는다.
-A : 특정문자 아래 추가로 여러 행 출력
-B : 특정문자 위 추가로 여러행 출력
]# grep "^문자열" = 문자열로 행이 시작되는 경우 출력
]# grep "문자열&" = 문자열로 행이 끝나는 경우 출력
]# grep "문자1\|문자2" = 여러 문자열을 한번에 검색
]# grep -A2 "문자열" = 해당 문자열이 들어강 행을 포함해 아래 2행 출력
]# grep -v "문자열" = 해당 문자를 제외한 행 출력
]# grep "문자열" * = 현재 위치의 모든파일 (*)에서 특정 문자열 출력
1. 하나의 파일에서 특정 문자열 찾기
▶ grep "문자열" [파일이름]
]# grep "DHCPACK" messages
파일에서 특정 문자열이 들어간 행 출력
2. 여러 파일에서 특정 문자열 찾기
▶ grep "문자열" [파일이름] [파일이름]
]# grep "address" messages.txt messages2.txt
]# grep "address" *.txt
여러개의 파일에서 특정 문자열이 들어간 행을 출력한다.
파일이름은 <space>(띄어쓰기)로 구분해도 좋고, 모든파일을 뜻하는 *를 사용해도 좋다.
3. 특정 문자를 제외한 행 찾기
▶ grep -v "문자열" [파일이름]
]# grep -v "dhclient" messages.txt
-v 옵션은 파일에서 특정 문자를 제외한 행만 출력한다.
4. 두 가지 문자열 한번에 찾기
▶ grep "문자열1\|문자열2" [파일이름]
]# grep "address\|prefix" messages.txt
역슬러쉬 or 달러표시 (\) 와 파이프라인 ( | ) 을 이용해
두 가지 문자열을 한 번에 검색할 수 있다.
여기서 역슬러쉬와 달러표시는 같은 의미로 사용되기 때문에 둘 중 아무거나 사용해도 무방하다.
파이프라인은 [Shift] + [\] 로 사용할 수 있다.
5. 특정 문자열의 위,아래행 추가 출력
▶ grep -A [문자열] [파일이름]
▶ grep -B [문자열] [파일이름]
]# grep -A2 "address" messages.txt
]# grep -B2 "domain name" messages.txt
특정 문자열을 기준으로 위, 아래행을 추가로 출력할 수 있는 옵션으로,
grep 명령어에 익숙한 사람 중에서도 생각보다 모르는 사람이 많은 옵션이다.
-A, B 옵션 뒤의 숫자에 따라 원하는 행을 추가로 출력할 수 있다.
(-A2 = 2행을 추가로 출력)
6. 파이프라인을 이용한 중복사용 후 별도로 저장하기
▶ grep "문자열" [파일이름] | grep "문자열" | grep "문자열" ...
▶ grep "문자열" [파일이름] >> [따로 저장할 파일명]
]# cat messages.txt | grep "" | grep -v "address" >> test
grep 명령과 파이프라인을 같이 사용할 경우,
텍스트 파일에서 원하는 내용을 필터처럼 여러번 걸러 사용할 수 있다고 생각하면 편하다.
문자열을 이용해 원하는 부분을 출력하거나, 지우는 등 파일을 재가공할 수 있다.
]# cat messages.txt
= 파일 내용 출력
]# cat messages.txt | grep "<info>"
= 파일 내용 중 <info> 문자가 들어간 행만 출력
]# cat messages.txt | grep "<info>" | grep -v "address"
= 위 출력물에서 address 문자가 들어간 행 삭제
파이프 라인이란?
명령어 1 | 명령어2 <--이런 형태이다.
명령어 1의 처리 결과를 명령어 2로 전달해준다.
2. 이제 data.txt 파일을 cat 명령어로 읽어서 grep과 파이프라인을 이용해 그중에 millionth 옆에있는 비밀번호를 알아낸다!
3.비밀번호를 확인했으면, 이 비밀번호를 이용해 bandit8에 접속 하면 성공!
Level8 -> Level9
다음 레벨의 암호는 data.txt 파일에 저장되며 한 번만 나타나는 텍스트의 유일한 줄입니다.
위 조건을 해석해 문제를 풀어보자!
1.문제를 풀기 위해선, 이 문제에 사용될 sort와 uniq 명령어에 대해 알아보자!
sort
사용자가 지정한 파일의 내용을 정렬하거나, 정렬된 파일의 내용을 병함할 때 사용한다.
옵션
- 위치 지정 옵션
- -k: key를 기준으로 정렬
- -t: 필드 구분자로 데이터 컬럼을 나눠줌(기본 값은 공백)
- 정렬 기준 옵션
- -f: 대소문자 무시
- -g: 일반 숫자 정렬
- -n: 숫자 정렬
- -r: 내림차순 정렬
- -u: 정렬 후 행이 같을 경우 중복 제거
-g와 -n의 차이는 -g는 숫자를 부동 소수점으로 비교하므로 느리고 반올림하는 과정에서 오류가 발생할 수 있다.
uniq
중복된 내용의 행이 연속으로 있으면 하나만 남기고 삭제한다.
전체적으로 분산된 중복은 찾아내지 못한다.
따라서, 정렬하여 순차적으로 만든뒤에 적용한다
옵션
- -d: 중복된 내용만 출력
- -u: 고유한 내용만 출력
- -i: 대소문자 무시
- -c: 같은 라인이 몇번 나오는지를 표시
- -N: 필터링은 무시할 라인을 정한다. / 시작 라인부터 N번째 라인까지는 검사하지 않는다.
- -w: N번째 문자까지만 비교대상으로 하여 uniq 명령을 수행
- -s: N번째 문자까지는 비교대상에서 제외하고 uniq 명령을 수행
- -f : N번째 필드를 비교대상에서 제외하고 uniq 명령을 수행
2. sort 명령어를 통해 각 문자열을 정렬하고, 이 문장이 몇번 나왔는지를 uniq -c 를 통해 알아낸다!
위와 같이 많이 나오는데, 하나의 문장만 1회 나왔다고 뜨고 있다! 이는, 우리가 앞서 bandit9에 비밀번호 힌트를 얻은 것과 동일한 조건이므로, UsvVyFSfZZWbi6wgC7dAFyFuR6jQQUhR 가 bandit9의 비밀번호가 된다!
3.위에서 얻은 비밀번호로 bandit9에 로그인하면 성공!
'Wargame:Bandit' 카테고리의 다른 글
#8 Wargame bandit 6 (Level11 ~ Level13), tr,mkdir,cp,xxd,gzip,bzip2,tar,mv명령어 (0) | 2022.07.14 |
---|---|
#7 Wargame bandit 5 (Level9 ~ Level11), string,base64명령어 (0) | 2022.07.13 |
#5 Wargame Bandit 3 (Level 5 ~ Level 7) ,ls,cd,find명령어 (0) | 2022.07.11 |
#4 Wargame Bandit 2 (Level 3 ~ Level 5) ,hidden,file명령어 (0) | 2022.07.10 |
#3 Wargame Bandit 1 (Level0 ~ Level3), ls,exit,clear,cat명령어 (0) | 2022.07.09 |