OSCP/OSCP 공부일지

TFTP 관련 문제 + mssql hash 추출

takudaddy 2021. 6. 10. 17:48

 

 

 

 

 

스캐닝 작업에서 나는 기본적으로

TCP 포트만 검색하곤 했는데

오늘 문제를 기점으로 포트 스캐닝 방법과

문제에 접근하는 방식이 조금 달라졌다.

 

 

 

그도 그럴 것이 해당 문제가

오직 UDP 69번 포트인 TFTP로만

공략이 가능했던 문제였는데

이 점을 발견하기 전까지 몇 시간을

TCP 스캔에서 열거된 서비스들을

파헤치느라 허비했기 때문이다.

 

 

 

해당 서버는

OSCP LAB에서 가장 어려운 박스

4대 중 한대 였으며 TFTP를 다루는 법이나

윈도우 시스템에 친숙하지 않으면

풀기가 쉽지 않은 문제였다.

 

 

 

우선 TFTP로 Administrator 폴더의

proof.txt 파일을 받아올 수 있었는데

그 말인즉슨, 현재 권한이 최소 admin

이상이라는 뜻이며 기타 다른 모든 파일들

또한 받아올 수 있다는 뜻.

 

 

 

그렇다면 간단히

타깃 서버의 민감 파일 저장 경로와

파일명을 알 수만 있다면 이를 통해

권한 상승에 필요한 정보를 얻을 수 있을 것인데

 

 

 

문제는 TFTP 특성상

파일 전송 기능 외 다른 기능,

파일을 리스트업 하는 등의 기능 은 없기 때문에

가지고 오려는 파일명 및 경로를

다른 방법으로 알아내야 한다는 것이다.

 

 

 

일단 타킷 서버는 ms-sql을 운영 중인데

민감한 정보가 있을 가능성이 제일 크기 때문에

해당 DB 서버의 버전 정보를 확인했고

다음으로는 파일의 정확한 경로를 알아보기 위해

직접 윈도우 가상 머신에 Microsoft SQL 서버를

설치했다. 그렇게 찾은 것이 아래의 경로.

 

 

 

C:\Program Files\Microsoft SQL Server \MSSQL14.SQLEXPRESS\MSSQL\DATA\master.mdf

C:\Program Files\Microsoft SQL Server\MSSQL14.SQLEXPRESS\MSSQL\Backup

 

 

 

파일의 경로는 설치되는 프로그램 및

프로그램의 버전에 따라 모두 다르기 때문에

반드시 확인이 필요하다.

 

 

 

이제 파일을 가져오기만 하면 되는데

또 다른 문제가 있다. 그것은 파일 경로중

특정 경로의 단어에 공백이 들어가 있다는 것.

 

 

 

위 경로를 그대로 입력해 파일을 가져오는 경우

TFTP에서는 공백을 기준으로 나뉜 단어들을

각각 하나의 구별된 파일로 인식해

그런 파일은 없다는 오류가 발생한다.

 

 

 

이를 해결하기 위해

single quote로 공백 문자를 묶어주면

따옴표 자체를 단어의 일부로 인식하게 되어 실패

 

 

Double Quote는 connection fail을 일으키고

Escape 기능을 하는 \ / ^ 들 역시 안먹는다.

 

 

 

이를 극복하기 위해서는

windows 8.3 SFN(Short File Name)이란 것을

알아야 하는데 이것이 바로 TFTP에서

경로 중에 공백이 있는 파일을 가지고 오는 방법이다.

 

 

 

8.3 SFN은 오래된 도스 버전에서 사용하는

파일 이름 규칙 중 하나인데 이름이 최대

8 글자를 넘어가지 않으며 (확장자 제외)

해당 체제를 사용한다면 아무 문제없이

파일을 가지고 올 수 있을 것이다.

 

 

 

확인 방법은 CMD 창에서 dir 명령어 뒤에

'/x'를 붙여주면 되는데

 

 

출력 결과를 보면

공백이 있는 디렉터리들 앞에 붙은

8글자로 되어 있는 'PROGRA~1'

등의 이름이 8.3 이름 규칙으로 변환된

표기법이고

 

 

 

동일한 방법으로 원하는 파일이 있는 곳까지

들어가 보면 다음과 같이 공백 없는 경로를

확인할 수 있다.

 

 

 

 

\PROGRA~1\MICROS~1\MSSQL1~1.SQL\MSSQL\DATA\master.mdf

\PROGRA~1\MICROS~1\MSSQL1~1.SQL\MSSQL\Backup\master.mdf

 

 

 

FTP TFTP 모두 특정 파일을 받을 때

전송 모드를 binary로 변경 후 전송해야

손상 없이 파일을 받을 수 있다.

아래는 파일 다운 커맨드

 

 

$ tftp -m binary <IP> -c get '\PROGRA~1\MICROS~1\MSSQL1~1.SQL\MSSQL\Backup\master.mdf 
$ tftp -g -r "PATH_TO_FILE" <target_IP> > 이 명령어는 tftp 타입에 따라 안되기도 함

 

 

 

DB 해쉬 추출 관련 참조 + 파워쉘 모듈 :

https://blog.xpnsec.com/extracting-master-mdf-hashes/

 

 

 

받은 파일에서 해시를 추출해

JTR로 크랙 한 뒤 권한을 탈취해

나가면 되는 문제였다.

728x90