정찰과 정보 수집¶
한 문장 요약
열린 포트를 전부 찾고, 서비스와 버전을 하나하나 이름 붙이고, 인증 없이(또는 낮은 권한으로) 읽을 수 있는 건 다 가져옵니다. OSCP 발판의 대부분은 이 출력 안에 — 눈에 안 띈 채로 — 이미 있어요.
실전 실행 참고
명령 선택·출력 해석·실패 진단은 실전 종합 가이드, Windows·AD 프로토콜별 상세 사용법은 Impacket 집중 가이드를 참고하세요.
1. 개념¶
정보 수집은 두 단계입니다.
- 발견 — 어떤 포트가 열려 있나(TCP 65,535개 전부 + 흔한 UDP).
- 심문 — 포트마다: 무슨 소프트웨어, 무슨 버전, 크리덴셜 없이 뭘 볼 수 있나, 지금 가진 크리덴셜로는 뭘 볼 수 있나?
2단계의 출력은 세 가지 질문으로 이어집니다. 이 버전에 공개 익스플로잇이 있나? · 기본값이나 찾은 크리덴셜을 넣어 볼 로그인이 있나? · 크리덴셜이 새는 데이터(파일, 사용자, 설정)가 있나?
flowchart LR
A[nmap -p-] --> B[nmap -sC -sV<br/>on open ports]
B --> C{per service}
C --> D[Version → searchsploit]
C --> E[Login → defaults / found creds]
C --> F[Data → files, users, configs]
D & E & F --> G[Foothold candidate list]
2. 주요 도구¶
| 도구 | 용도 | 시험 허용 여부 |
|---|---|---|
| nmap (+ NSE) | 포트 발견, 버전, 기본 스크립트 | 허용 (NSE는 명시적으로 허용) |
NetExec (nxc) |
SMB / WinRM / LDAP / MSSQL / RDP 확인, null·guest 세션, 공유, 사용자 | 허용 |
| smbclient | SMB 공유 탐색과 다운로드 | 허용 |
| enum4linux-ng | SMB/RPC/LDAP 한 번에 수집(사용자, 그룹, 정책, 공유) | 허용 |
| snmpwalk / snmp-check | SNMP로 사용자, 프로세스, 설치 소프트웨어 | 허용 |
| showmount / mount | NFS export | 허용 |
| ftp / nc / curl | 배너 확인, 익명 FTP, 프로토콜 직접 두드리기 | 허용 |
시험 규칙 — 대량 취약점 스캐너 금지
Nessus, OpenVAS, NeXpose, Qualys 같은 도구 는 금지이고, 같은 일을 하는 도구(예: 템플릿 기반 취약점 스캐너를 모든 호스트에 돌리기)도 금지입니다. nmap -sV 버전 확인, NSE 스크립트, searchsploit 는 괜찮아요 — "이 버전이 취약한가?"는 직접 판단하세요.
3. 시나리오¶
3.1 nmap — 새 대상, 아는 게 없음¶
상황: 컨트롤 패널에 새 IP가 하나.
# 1) TCP 전 포트, 빠르게
sudo nmap -p- --min-rate 2000 -Pn -oN nmap/all.txt $IP
# 2) 열린 포트에 스크립트 + 버전
ports=$(grep -oP '^\d+(?=/tcp\s+open)' nmap/all.txt | paste -sd,)
sudo nmap -sC -sV -Pn -p$ports -oN nmap/svc.txt $IP
# 3) UDP 상위 포트 (SNMP, TFTP, IKE가 여기 숨음)
sudo nmap -sU --top-ports 25 -Pn -oN nmap/udp.txt $IP
출력에서 볼 것:
Service Info/OS줄,ssl-cert의commonName,smb-os-discovery→ 호스트 이름과 도메인 →/etc/hosts에 추가.http-title,http-generator,http-robots.txt→ 앱 이름과 숨은 경로.ftp-anon: Anonymous FTP login allowed→ 지금 바로 로그인.- 낯선 높은 포트(8000, 8080, 8443, 9090, 5000 등) → 두 번째 웹 앱, 관리 패널, 자작 서비스.
- 버전 문자열 →
searchsploit <제품> <버전>.
다음: UDP 스캔이 끝나기 전에 흥미로운 첫 포트부터 시작. -sV 가 tcpwrapped 나 ? 를 주면 손으로 두드려 보기: nc -nv $IP <port>, curl -i http://$IP:<port>/.
상황이 바뀌면 다시 스캔
셸이나 피벗을 얻은 뒤에는 새 위치에서 다시 스캔하세요. Kali에서 filtered로 보이던 포트가 안쪽에서는 열려 있는 일이 흔합니다(터널 너머로 nmap -sT -Pn → 피벗팅).
nmap 더 보기: Nmap 스캔 · 서비스와 NSE · 출력과 성능.
3.2 NetExec — SMB(445)가 열린 Windows 호스트¶
상황: 445가 열려 있음. OS, 도메인, 서명 여부, 익명 접근이 되는지 알고 싶음.
nxc smb $IP # 배너: 이름, 도메인, OS 빌드, signing
nxc smb $IP -u '' -p '' --shares # null 세션
nxc smb $IP -u 'guest' -p '' --shares # guest
nxc smb $IP -u '' -p '' --users --pass-pol # 사용자 + lockout 정책 (허용되면)
nxc smb $IP -u 'guest' -p '' --rid-brute # RID cycling으로 사용자 이름
볼 것: (name:FILES01) (domain:corp.local) → /etc/hosts; READ 나 WRITE 가 붙은 공유; 사용자 이름(users.txt 로 저장); Account Lockout Threshold.
다음: 읽을 수 있는 공유 → smbclient(아래). 사용자 이름 → AS-REP roast / spray → Active Directory. 쓸 수 있는 공유 → 사용자가 나에게 접속하게 만드는 파일 심기를 고려(coercion).
3.3 smbclient — 읽을 수 있는 공유¶
smbclient -L //$IP -N # 익명으로 공유 목록
smbclient //$IP/Shared -N # 접속
smb: \> recurse ON
smb: \> prompt OFF
smb: \> mget * # 전부 가져오기
크리덴셜이 있으면: smbclient //$IP/Shared -U 'corp.local/user%Password1'.
파일에서 찾을 것: *.config, web.config, *.ps1, *.bat, *.vbs(하드코딩된 크리덴셜), *.kdbx(KeePass → 크랙), 그룹 정책의 *.xml(cpassword → gpp-decrypt), 백업(*.bak, *.zip), 그리고 쓰기 가능한 디렉터리.
3.4 enum4linux-ng — SMB/RPC 한 번에 요약¶
상황: SMB/RPC 전체 그림을 한 번에 보고 싶음(Samba 리눅스 박스에도 좋음).
볼 것: Domain/Workgroup, Users(설명 필드 — 비밀번호가 남아 있는 경우가 많음), Groups, Password policy, Mapping: OK 인 Shares.
다음: 설명에 비밀번호 → 어디서나 시도. Samba 버전 → searchsploit.
3.5 SNMP (161/UDP)¶
상황: UDP 스캔에 161/udp open snmp.
onesixtyone -c /usr/share/seclists/Discovery/SNMP/common-snmp-community-strings.txt $IP
snmpwalk -v2c -c public $IP | tee loot/snmp.txt
snmpwalk -v2c -c public $IP 1.3.6.1.2.1.25.4.2.1.2 # 실행 중 프로세스
snmpwalk -v2c -c public $IP 1.3.6.1.4.1.77.1.2.25 # Windows 사용자
snmpwalk -v2c -c public $IP NET-SNMP-EXTEND-MIB::nsExtendObjects # extend 스크립트 (크리덴셜이 보일 수 있음)
볼 것: 비밀번호가 들어간 프로세스 명령줄, 설치된 소프트웨어 버전, 사용자 이름. 다음: 사용자 → 로그인 시도; 소프트웨어 → searchsploit.
3.6 NFS (2049)¶
showmount -e $IP
sudo mkdir -p /mnt/nfs && sudo mount -t nfs -o vers=3,nolock $IP:/home /mnt/nfs
ls -la /mnt/nfs
볼 것: SSH 키, 설정 파일, 그리고 export 옵션. 쓸 수 있는 export에 no_root_squash 가 있으면 고전적인 리눅스 권한 상승입니다 → Linux 권한 상승 › NFS.
3.7 FTP, SSH, 데이터베이스와 그 밖의 서비스¶
ftp $IP # anonymous / anonymous 시도
nc -nv $IP 25 # SMTP: VRFY / EXPN 사용자 확인
smtp-user-enum -M VRFY -U users.txt -t $IP
mysql -h $IP -u root -p # 빈 값 / root / 찾은 크리덴셜
impacket-mssqlclient sa:'sa'@$IP # MSSQL 기본값
ssh -v user@$IP # 제공되는 인증 방식, 버전
포트 참고: 잘 알려진 포트.
4. 자주 하는 실수¶
- 상위 1000 포트만 스캔. 8443의 웹 앱이나 50000의 서비스가 입구인 경우가 생각보다 많습니다. 항상
-p-. - UDP 건너뛰기. SNMP로 비밀번호나 프로세스 명령줄이 새는 건 OSCP 단골 패턴이에요.
- 호스트 이름 안 넣기. vhost 기반 사이트는 IP로 보면 기본 페이지, 이름으로 봐야 진짜 앱이 나옵니다.
- 스캔 기다리기. 전체 스캔이 도는 동안 80번부터 시작.
- "지루한" 결과 무시. 비어 보이는 익명 FTP가 쓰기 가능하고 — 웹 서버가 그 폴더를 서빙하고 있을 수 있어요.
- 크리덴셜을 얻고 다시 안 훑기. 새 크리덴셜마다
nxc,smbclient,enum4linux-ng를 다시 — 보이는 게 달라집니다.
5. 시험 팁¶
- 대상마다
nmap/all.txt와nmap/svc.txt를 남겨 두세요 — 리포트에 바로 들어갑니다. - 첫 1분부터 환경별로
users.txt와creds.txt를 만들어 계속 채우세요. - 취약해 보이는 버전은 시도하기 전에 CVE와 익스플로잇 경로를 노트에 적어 두세요 — revert 후 다시 찾는 시간을 아낍니다.
- NetExec 출력의
[+]는 유효한 크리덴셜,(Pwn3d!)는 그 호스트의 로컬 관리자 라는 뜻입니다.