Over The Wire
Bandit Level 10 → Level 11
힌트: 다음 단계의 패스워드는 data.txt라는 파일에 저장되어 있으며, base 64로 암호화된 data를 가지고 있다.
1. ls 입력 후 파일 존재 확인
2. cat 파일명 입력 후 파일 내용 확인
3. base64로 암호화되어있는 파일을 base64로 decode 시켜줘서 파일 내용 확인
Bandit Level 11 → Level 12
힌트: 다음 단계의 패스워드는 data.txt라는 파일에 저장되어 있으며, 모든 대소문자 글자는 알파벳 순 13번 째 뒤 자리 글자로 교체되어있다.
1. ls 입력 후 파일 존재 확인
2. cat 파일명 입력 후 파일 내용 확인
3. tr 을 통해 파일 내용 확인
<tr>
tr + ‘문자열 1’ + ‘문자열 2’ = 문자열1을 문자열2로 변경
ex) tr ‘a-g’ ‘A-G’ = 소문자를 대문자로 변경
Bandit Level 12 → Level 13
힌트: 다음 단계의 패스워드는 data.txt라는 파일에 저장되어있는데, 반복적으로 압축되어있는 헥스덤프의 파일이다. 여기서 mkdir을 사용하여 작업할 수 있는 /tmp 아래에서 directory를 만드는게 유용할 것이다. 그리고 나서 cp를 사용하고 mv를 이용해서 이름을 바꾸는 방식 역시 유용할 것이다
1. ls 입력해 data.txt의 존재를 확인한 뒤 cat으로 내용을 확인하다.
2. 출력하면 힌트에서 말했던 것 처럼 헥스덤프(16진수 덤프파일)로 이루어져있다.
3. /tmp 아래에 임의의 디렉토리 형성 후 그 안으로 이동해서 data.txt 을 옮겨준다.
4. xxd -r로 16진수를 2진수로 바꾼 뒤 임의의 다른 파일로 redirection해준다.
5. file (임의의 다른 파일)로 이 파일의 형식을 확인해준다.
6. gzip으로 압축되어 있기에 gzip -d (파일명).(파일형식) 압축을 풀어준다
7. 다시 file로 확인해보면 bzip2로 압축되어 있기에 또 풀어준다.
8.계속 압축을 풀어주다보면 원본 파일의 마지막 해체 파일을 한다.
9. cat 마지막 파일.(파일형식) 해서 패스워드 확인
Bandit Level 13 → Level 14
힌트: 다음 단계의 패스워드는 /etc/bandit_pass/bandit14에 저장되어있고 bandit14 유저로 접속했을 때만 읽을 수 있다. 다음 단계로 로그인 할 때 사용할 수 있는 SSH key를 얻을 수 있다.
1. ls 입력 후 파일 존재 확인
2. SSH private key가 있을 파일 존재 확인
3. ssh -i 를 통해 유저 bandit14 로 로그인
<ssh -i>
-i : using an identity file
4. bandit14로 로그인 한 후 패스워드가 있다는 곳으로 이동
5. ls로 파일 존재 확인
6. bandit14 파일을 cat으로 열어 내용 확인
Bandit Level 14 → Level 15
힌트: 다음 단계의 패스워드는 localhost에서 포트 30000로 현재 단계의 패스워드를 보내면 받을 수 있다.
1. nc localhost를 이용해 포트 30000에 연결
2. bandit14의 패스워드 입력
Bandit Level 15 → Level 16
힌트: 다음 단계의 패스워드는 localhost에서 SSL 암호화를 사용중인 포트 300001로 현재 단계의 패스워드를 보내면 받을 수 있다.
1. bandit15와 같은 방식으로 접속하니 연결을 거부
2. openssl s_client 를 이용해 접속
<s_client>
openssl s_client -connect + host:port
ex) openssl s_client -connect localhost:4433 : localhost로 4433라는 포트에 접속
3. 현재 단계의 패스워드 입력
Bandit Level 16 → Level 17
힌트:다음 단계의 권한은 310000 ~320000 사이 local host로 접속한 포트에 현재 단계의 패스워드를 전달하면 받을 수 있다. 먼저 어떤 포트가 열려있는지 확인하고 이 중 SSL을 사용하는 포트를 알아낸다. 이 중 한 서버만이 다음 단계의 권한을 부여해준다.
1. nmap 명령어를 입력하면 열려있는 서버 5개가 잡힌다.
2. 각 포트들에 nc 명령어로 간단한 메세지를 보내는데 31790, 31581은 echo back하지 않으니, SSL을 사용하고 있다.
3. openssl s_client -connect [호스트]:[포트번호]로 31790를 입력하면 현재 단계의 패스워드를 입력해주면 RSA key를 출력해준다.
4. mkdir -p /tmp/RSA로 key를 복사해준 뒤 저장한뒤 bandit17.key로 이름을 저장해준 뒤 chmod 600 bandit17.key로 파일 권한을 변경한다
5. ssh -i bandit17.key bandit17@localhost 로 이제 bandit17에 로그인 해서 패스워드를 확인한다
<nmap>
nmap + -p + <port range> : 점검하고자 하는 포트를 지정
ex)namp -p 20-30 : 20에서 30 사이 포트에 대해 스캔하라
Bandit Level 17 → Level 18
힌트: homedirectory에는 passwords.old과 passwords.new라는 2개의 파일이 있다. 다음 단계의 패스워드는 password.new에 있고 위 두 파일 사이 변경된유일한 라인이다.
1. ls로 두 파일 존재 확인
2. diff로 두 파일 사이 차이점을 추출
Bandit Level 19 → Level 20
힌트: 다음 단계의 접근 권한을 얻으려면 homedirectory에서 setuid binary를 사용해야한다. setuid binary를 실행해서 /etc/bandit_pass/에서 다음 단계의 비밀 번호를 얻을 수 있다.
1. ls로 binary 파일 존재 확인
2. 위 binary 파일을 실행해야하기에 ./bandit20-do라는 명령어 사용
3. 다음 단계에 대한 패스워드가 /etc/bandit_pass/에 있으니깐 cat으로 bandit20에 있는 내용 확인
달고나 문서 (p.12 - p.18)
프로그램 구동 시 segment에서는 어떤 일이? - simple.c
C언어로 작성한 프로그램을 assembly code로 변환하기 위한 컴파일 코드
: gcc -S -o (이름).asm (프로그램1).c
(프로그램1).c 이 컴파일 되어 실제 메모리 상에 존재하게 되는 위치
: gdb (이름) -> disas main
앞에 붙어 있는 주소가 logical address다.
function() 함수가 아래에 자리 잡고 main()함수가 위에 자리 잡고 있다.
segment 크기는 프로그램마다 다르다.
프로그램이 시작되면 main()함수의 시작점인 0x80482fc을 가리키고 있다.
'3. Pwnable (포너블) > 2) 개념 정리' 카테고리의 다른 글
[2022.03.12] "생활코딩-Linux" 강의 듣기 (0) | 2022.03.13 |
---|---|
[2021.11.20] Over The Wire 21-27, 달고나문서 Ch4 (0) | 2021.11.21 |
[2021.11.07] OverTheWire 0-10, 달고나문서 -p.12 (0) | 2021.11.06 |
[2021.09.25] 해커스쿨 F.T.Z Level11~15 풀이 (0) | 2021.09.26 |
[2021.09.18] 해커스쿨 F.T.Z Level9, 10 풀이 및 Level11 풀이 방향 (0) | 2021.09.19 |