Unquoted Service Path
Windows 서비스의 실행 경로에 공백이 포함된 경우, 경로를 큰따옴표(" ")로 감싸지 않으면
OS는 실행해야 할 서비스의 경로 및 파일을 잘못 해석할 수 있습니다.
예를 들어 service.exe 라는 파일을 서비스로 등록하여 실행한다고 가정할 때
이 실행파일의 경로를 C:\Program Files\My Service\System Service\service.exe 라고 할 때
Windows는 곧바로 C:\Program Files\My Service\System Service\ 경로 하위에 존재하는
service.exe 실행파일을 실행하는 것이 아닌 다음의 순서를 거칩니다.
C:\Program.exe 실행
C:\Program Files\My.exe 실행
C:\Program Files\My Service\System.exe 실행
C:\Program Files\My Service\System Service\service.exe 실행
위와 같이 전체 경로에 공백이 존재하지만 따옴표로 감싸져 있지 않은 경우 Windows에서는 경로에 공백이
발생할 때마다 공백을 기준으로 앞의 단어에 .exe를 붙여서 실행을 시도합니다.
MS에서는 다양한 서드파티 애플리케이션, 서비스와의 호환성 문제와 운영체제 경로 해석 방식 변경의 수정에
어려움이 있기 때문에 이러한 해석 방식을 변경하고 있지 않습니다.
결정적으로 MS에서는 이것을 설계상 취약점보다는 보안 관리 문제라고 판단하고 있습니다.
우리가 Unquoted Service Path를 발견하게 되었을 때
그 서비스 경로를 악용하여 곧바로 악성파일을 실행하여 권한상승을 할 수 있지는 않습니다.
이 취약점을 이용하기 위해서는 몇가지 조건이 필요합니다.
공백이 존재하지만 쿼터로 감싸져 있지 않은 서비스가 존재해야 한다.
서비스 경로 중 공백이 존재하는 디렉토리에 쓰기 권한이 존재해야 한다.
해당 서비스를 재실행 할 수 있는 권한이 존재해야 한다.
먼저 취약한 서비스를 찾기 위해서는 3가지 방안을 사용할 수 있습니다.
3번의 방법은 PowerUp.ps1 자체가 악성코드라고 판단되어서
Windows 디펜더와 같은 보안 프로그램 혹은 솔루션이 존재할 시에는 사용할 수 없습니다.
따라서 CTF가 아닌 실무에서는 파워쉘 명령을 입력하여 수동으로 찾아줍니다.
공백이 존재하는 경로 내에서 쓰기 권한이 있는지 확인하기 위해서는
파워쉘에서 기본으로 제공하는 icacls를 사용해줍니다.
리버스 쉘 실행파일은 msfvenom을 통해 생성합니다.
마지막으로 서비스를 재실행 합니다.
Practice
파워쉘 명령을 통해서 unqsvc에 대한 상세 정보를 출력하니
C:\Windows\Temp\Unquoted Path 경로에 서비스가 존재했습니다.
현재상황에서Unquoted Service Path 취약점을 악용하려면
Unquoted.exe 라는 파일을 Temp 디렉토리 하위에 생성해야 합니다.
해당 취약점 악용 시 가장 중요하다고 할 수 있는 것은
서비스 경로를 악용할 수 있는 위치에 파일을 생성할 권한이 있는지 여부입니다.
현재 악용 가능한 디렉토리는 C:\Windows\Temp로 쓰기 권한이 존재하는 것을 확인했습니다.
Unquoted.exe 파일을 msfvenom으로 생성해줍니다.
생성한 리버스쉘 실행파일을 Temp 디렉토리 하위에 저장한 뒤 포트를 열고 서비스를 재실행 합니다.
References
Last updated
Was this helpful?