

nmap으로 localhost에서 열려있는 포트가 무엇인지 확인해봤다.
9999는 평소에 잘 사용되지 않는 포트번호여서, 이 포트가 굉장히 수상해 보인다.

9999 포트로 연결을 시도했더니 어떤 문장이 출력됐다.
글자가 깨져 보여서 아무거나 입력해봤는데 wrong password가 뜨느 것을 봐선 비밀번호를 입력해야 하는 것 같다.

현재 비밀번호를 입력하니 다음 레벨의 비밀번호가 나왔다.


cat으로 출력시켜봤는데 진짜 길다.

로드맵을 보니 이번 레벨은 쉘 스크립트를 만들어야 하나보다.

우선 파일을 만들 수 있는 권한이 있는 경로(tmp)로 이동하고, flag 파일을 해당 경로에 복붙했다.

자동화 스크립트를 만들고, 실행시켜주면 비밀번호가 뿅 하고 나온다.

스크립트는 직접 작성하려했는데 생각보다 어려워서 gpt한테 시켰다.

암호화된 flag 파일과 nmap 결과 파일을 출력해봤다.
rcity9@7940d54b4c07:~$ cat flag.txt
U2FsdGVkX1+vTO71KedCDkPj0K1GsAS4TKllmpOWXNMcC42y6p5oRCCRCYfLH09h
rcity9@7940d54b4c07:~$ cat nmap-result.txt
21/tcp open FTP Microsoft ftpd v.1.3
22/tcp open ssh OpenSSH 7.9 (protocol 2.0)
23/tcp open telnet Linux telnetd
25/tcp open smtp Postfix smtpd
53/tcp open domain ISC BIND 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.2
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))
110/tcp open pop3 Dovecot pop3d
111/tcp open rpcbind 2 (RPC #100000)
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
143/tcp open imap Dovecot imapd
179/tcp open bgp Cisco IOS 12.4 (Cisco 3825)
199/tcp open smux SNMP Unix Multiplexer
389/tcp open ldap OpenLDAP 2.2.X - 2.3.X
443/tcp open ssl/http Apache httpd
445/tcp open microsoft-ds Microsoft Windows 7 - 10 microsoft-ds (workgroup: WORKGROUP)
465/tcp open ssl/smtp Postfix smtpd
512/tcp open exec Linux rexecd
513/tcp open login
514/tcp open shell Linux rshd
515/tcp open printer LPD Printer Service
587/tcp open submission Postfix smtpd
631/tcp open ipp CUPS 1.2
646/tcp open ldp Cisco IOS LDP
873/tcp open rsync (protocol version 31)
902/tcp open ssl/vmware-auth VMware Authentication Daemon 1.10
989/tcp open ftps-data
990/tcp open ftps
993/tcp open ssl/imap Dovecot imapd
995/tcp open ssl/pop3 Dovecot pop3d
1080/tcp open socks 5 (FreeCap v3.18)
1194/tcp open openvpn OpenVPN 2.4.7 x86_64-pc-linux-gnu
1241/tcp open nessus Nessus Security Scanner
1433/tcp open ms-sql-s Microsoft SQL Server 2017 14.00.1000.00; RTM
1521/tcp open oracle Oracle 11g 11.1.0.7.0 (Windows IA32)
2049/tcp open nfs_acl 2-3 (RPC #100227)
2082/tcp open infowave
2083/tcp open radsec
2086/tcp open gnunet
2087/tcp open eli
.
.
.
대충 이런식으로 되어있다.
nmap 파일을 확인해보니 모두 open으로 되어있어서
그냥 모든 포트번호만 출력하고 ,를 추가하면 될 것 같다.
rcity9@7940d54b4c07:~$ awk '/open/ {split($1, a, "/"); print a[1]}' nmap-result.txt | paste -sd,
21,22,23,25,53,80,110,111,135,139,143,179,199,389,443,445,465,512,513,514,515,587,631,646,873,902,989,990,993,995,1080,1194,1241,1433,1521,2049,2082,2083,2086,2087,3306,3389,3690,3784,3899,4000,4369,4433,4444,4445,4446,5432,5500,5631,5666,5900,5901,5985,6000,6001,6002,6003,6112,6379,6666,6667,6679,6697,7000,7001,7070,8000,8008,8009,8080,8081,8082,8085,8086,8087,8090,8443,8888,9001,9090,9091,9100,9200,10000,10001,10002,10003,10004,10009,10010,10100,11211,27017,27018,27019
awk '/open/ {split($1, a, "/"); print a[1]}' nmap-result.txt | paste -sd, 포트번호
awk: 텍스트 데이터를 행 단위로 처리한다.
awk '조건 {동작}' 파일이름
$1: 한 줄에서 첫 번째 필드 (공백/탭을 기준으로 필드를 나눈다)
예를 들어
[ 8085/tcp open unknown ] 여기선
$1 = 8085/tcp
$2 = open
$3 = unknown
이 된다.
split(): 문자열을 구분자로 나눠서 배열에 저장시킴
[ split($1, a, "/") ] 여기선
$1인 8085/tcp를 / 기준으로 나눈다.
그러면 배열 a에
a[1] = 8085
a[2] = tcp 이런식으로 저장된다.
print a[1]
a의 첫번째 값을 출력시킨다. = 포트번호
paste -sd<구분자>
-sd, = 줄마다 읽어서 ,로 이어 붙인다.
(-s는 여러 줄을 한 줄로 합치고, -d(delimiter)는 사용할 구분자를 지정한다)
포트 번호만 출력시킨 뒤 복사해서
문제에 나와있는 암호화 키에 대입시켰다.
rcity9@7940d54b4c07:~$ cat flag.txt | openssl enc -d -aes-256-cbc -base64 -k 21,22,23,25,53,80,110,111,135,139,143,179,199,389,443,445,465,512,513,514,515,587,631,646,873,902,989,990,993,995,1080,1194,1241,1433,1521,2049,2082,2083,2086,2087,3306,3389,3690,3784,3899,4000,4369,4433,4444,4445,4446,5432,5500,5631,5666,5900,5901,5985,6000,6001,6002,6003,6112,6379,6666,6667,6679,6697,7000,7001,7070,8000,8008,8009,8080,8081,8082,8085,8086,8087,8090,8443,8888,9001,9090,9091,9100,9200,10000,10001,10002,10003,10004,10009,10010,10100,11211,27017,27018,27019
*** WARNING : deprecated key derivation used.
Using -iter or -pbkdf2 would be better.
flag: <비밀번호> rcity9@7940d54b4c07:~$
비밀번호가 정상적으로 출력되었다.
개인적으로 상당히 어려웠던 문제였다.
특히 포트 번호만 추출하는 부분에서 많은 시간을 썼다.
GPT가 없었다면 못풀었을 것 같다..