
1. 기본 개념
0) 기본 명령어
open . :해당 디렉터리를 파일 관리자 창으로 바로 열리게 함. (=바로 해당 위치 폴더 열기)
ss(=socket statistic): 특정 머신에서 로컬로 어떤 포트들이 연결/리스닝 중인지 출력해줌.
> 옵션
-l : 현재 상태가 리스닝 상태인 소캣만 표시
-t: tcp 소캣만 표시
-n: 포트 번호를 서버스 이름으로 변환하지 말고 숫자 그대로 표시

>>
1: state
2: Recv-Q: 해당 포트에 대해 대기 중인 수신 패깃 수
3: Send-Q: 대기 중인 송신 패킷 수
4: 로컬 주소:포트: 수신 대기 중인 로컬 주소/포트
=> 127.0.0.1 = localhost(=머신 내부에서만 수신 대기 중이므로 nmap같은 외부 스캔으로는 안 보임),
(127.으로 시작하는 건 그냥 다 로컬인 것 같음.)
0.0.0.0, *, [::] => 모든 인터페이스에서 수신 대기 중(즉 외부로도 보임)
*리스닝 = 수신 대기 중
1) 터널링
: 캡슐화를 활용해 네트워크 상 데이터를 이동시키는 방식.
- 내부 네트워크 상에서만 접근 가능한 자원에 접근 가능하게 해줌.
- 페이로드 = 데이터 부분
ssh)
- ssh(=secure shell protocol, 털넷 암호화 버전)에서도 터널링 기능을 지원함/
클라이언트 = 연결 시작
서버 = 연결 받음
1. 클라이언트 -> 서버: 인증 필요
2. 연결 성립
3. ssh 세션 생성
4. 클라이언트 <-> 서버: shell을 통해 상호작용 함. 이때 전달되는 데이터는 다 암호화 됨.
=> 이때 데이터는 어떤 종류든 가능. 고로 ssh 세션 애부에 ssh 터널을 생성함.
터널링 종류)
1: Local port forwarding
: 기존의 ssh 세션 내부에 별도의 터널을 생성해, 클라이언트의 로컬 포트에 소캣 리스너를 생성하여, 해당 포트로 들어오는 네트워크 트래픽을 원격 서버의 특정 포트로도 전달하는 것.
2: Remote port forwarding
= 리버스 터널링
: 로컬 포트 포워딩의 반대. (즉 서버에 리스닝 생성, 서버로 들어오는 걸 클라이언트로 전달)
3: Dynamic port forwarding
: 사용자가 하나의 포트만 지정하여, 클라이언트 -> 서버로 들어오는 트래픽을 동적으로 전달함.
- SOCKS5 프로토콜에 기반함
- 내부적으로 ssh가 socks5 프록시처럼 동작함.
- 위 로컬/리모트 포워딩의 포트를 미리 지정해야한다는 단점을 해결한 방식
*프록시 = 중간에서 대신 통신을 해주는 역할
*SOCKS: 프록시 서버를 통해 클라이언트와 서버 사이 네트워크 패킷을 교환하는 프로토콜.
*SOCKS5: 선택적으로 인증 기능을 제공하여 권한이 있는 사용자만 서버에 접속 가능하게 해주는 프록시 프로토콜.
ssh에서 터널링 방법)
1: 로컬 포트 포워딩을 해보자!
-L: 로컬 포트 포워딩 사용.
ssh -L [내포트]:[목적지호스트]:[목적지포트] user@ssh서버
=> 내 pc localhost:포트 -> ssh 터널 -> 목적지 내부 서비스
=> 내 pc의 특정 포트를 열어서, 그 포트로 들어온 연결을 ssh 서버를 거쳐 다른 서버/포트로 전달함.
2: 동적 포트 포워딩을 하자!
-D: 동적 포트 포워딩 사용
ssh -D [로컬포트] user@ssh서버
=> 프로그램(브라우저) -> localhost SOCKS 프록시 -> ssh 서버 -> 목적지 서비스
=> 내 pc의 로컬 포트에 프록시 서버를 생성함. 즉 PostgreSQL의 포트가 아님. 여기다가 어디로 갈지 따로 알려줘야 하는 프록시 포트라 생각하면 됨.
=> 고로 추가 툴 필요:
proxychains)
:여러 프록시를 거쳐 연결을 터널링 해주는 도구
-> 설정 변경
- strict_chain의 주석을 해제해야 합니다. (dynamic_chain과 random_chain은 주석 처리되어 있어야 합니다.)
- 파일 맨 아래 [ProxyList] 항목에서, 우리가 만든 터널의 socks5(또는 socks4) 호스트와 포트를 지정해야 합니다.
2) PostgreSQL
: DBMS의 일종.
- 오픈소스 관계형임.
툴: psql)
-> 설치
sudo apt install postgresql-client
-> 옵션
-U: 접속할 사용자 계정 지정
-h: 접속할 호스트 주소 지정
-p: 접속할 PostgreSQL 서버의 포트 번호 지정
*localhost: 내 컴퓨터 자신
-> 명령어
\l = \list : 존재하는 db 목록 출력
\c = \connect: 특정 db 사용
\dt: 해당 db의 table 목록 출력
select: 조회(=덤프)
3) password spraying
: 비밀번호 브루투 포스. 같은 비밀번호를 여러 사용자 계정에 한 번씩 뿌린 뒤 다음 비밀번호로 넘어가는 방식.
- 로그인 실패 횟수 제한 같은 경우에 사용하면 유용~
툴: Hydra)
-> 설치
sudo apt-get install hydra
-> 옵션
- L: 사용자 이름 목록 리스트
- p: 비밀번호 목록 대신 하나의 비번만 사용하겠다.
2. 문제 풀이
nmap으로 열면 2개가 뜸. 하나는 ftp, 하나는 ssh.


일단 ftp가 익명 허용된다 나오니 바로 ㄱㄱ.




pdf파일은 더블클릭으로 열어줘야 함.
현재 파일 경로 바로 열려면 아래 명령러 쓰면 됨.


비밀번호를 하나 획득했다. 이제 앞 메일에 나온 유저들 이름을 활용해서 리스트 제작 후, hydra로 브루투 포스 해볼거임.


크리스티나가 비번을 안 바꿨단다.
이건 이제 원격 포트 ssh로 사용해볼거임. ftp는 끝.

현재 크리스티나 pc에서 리스닝 중인 포트를 살펴볼거다. 보니 내부에만 볼 수 있는 게 3개가 있는 것 같다. 그 중 5432 포트는 db임. 바로 PostgreSQL.

근데, 저건 로컬에서 접속가능한데, 문제는 저 postgreSQL에 접근하기 위해서는 툴이 필요하단 거. 바로 psql. 근데 문제는, 지금 크리스티나 pc에서 시도해보면 psql이 없다고 뜬다. 다운도 안 됨. 관리자 권한이 필요하다,,
그래서 우리가 쓸 방법은? 터널링 방법이다.
즉, 내 pc에서 따로 psql을 설치해서, 내 포트를 지정 후 그 포트에 입력을 넣어, 그 입력을 저 크리스티나 포트로 보내주는 포트 터포워딩 (터널링) 해 줄 거다!
그럼 우선, ssh로 로컬 포트 포워딩을 할 거다 해주자. 이건 크리스티나 컴터에서 하는 게 아님 주의!
이제 1234는 내 입력을 줄 포트, localhost와 5432는 내가 전달할 서버임.
크리스티나 계정으로 ssh 서버 사용할 거고 ip도 알려준다.

ssh로 터널을 생성했다면, 이제 내 pc에서 psql을 사용해 내 포트 1234로 입력 넣어주면 ㅇㅋ임. 크리스티나 계정으로 로컬 호스트상 로그인할거다 알려주고.

성공! 이제는 그냥 db를 하나하나 열어보면 된다~





+ 동적 포트 포워딩)
우선 동적 포트 포워딩은 시작하기에 앞서, 프록시체인이라는 동적 포트 포워딩을 위한 툴의 설정 파일을 변경해줘야 함.
etc 폴더에 다음 이름 파일이 존재한다.

아래 주석 처리 설정이 사진과 같은지 점검 ㄱ.


그리고 맨 밑에 저건 수정해줘야 함. 내가 어디 포트로 입력 보내는 건지 따로 적어줘야 하나보다. 이건 sudo nano로 열어서 수정해줌.
sudo nano /etc/proxychains4.conf

참고로 뭔가 이전 ssh -L 같은 기록이 남아있어도 오류 생기는 듯 하다. 다 종료해서 시도해주자.
다시 ssh 터널링 연결 생성해주고~
참고로 이때는 1234에 socks 프록시를 생성하는 거다.

프록시 체인 활용해서 상대 포트 적어주면 ㅇㅋ.
이때 따로 proxychains를 써야하는 이유는, 저기서 바로 db로 가는 구조가 아니라,
1234 -> socks 프록시 -> 5432로 가야 하기 때문에 proxychain없이 쓰면 그냥 프록시 서버에서 db를 검색하는 것과 마찬가지이기 때문이다.

이제는 똑같이 db 뒤지면 됨.




'Hack The Box > Lab' 카테고리의 다른 글
| Environment (0) | 2026.05.02 |
|---|---|
| Bike - SSTI (0) | 2026.05.02 |
| Three - awscli & reverse shell & subdomains (0) | 2026.04.30 |
| Responder - NTLM & winRM & LFI & RFI (0) | 2026.04.30 |
| Crocodile -wappalyzer (0) | 2026.04.30 |