大家好,首先来个声明本文目的不在于分析vsFTPd后门漏洞,我最近喜欢用漏洞编写exploit的形式来练习编程语言,在本文中,我们将重新用Python来一步步的编写这个漏洞的利用程序,主要是触发后门然后连接shell。
首先我们来了解一下这个漏洞是如何触发的。
剖析vsFTPd后门漏洞
这个漏洞比较老了,但是要当成一个例子来练习技术,非常的经典,洞如其名,不知道这个是不是程序员故意留下的,还是被黑客植入的。首先我们下载源码下来看看。
在str.c源码中,我们发现多了一行很可疑的代码:
0x3a和0×29是16进制编码,我们转换成10进制再转换成字符就是:和)。从上面的代码中很容易看出,只要我们输入的用户名字符串中有一位字符是:,下一位字符是)就可以执行函数vsf_sysutil_extra()。
在sysdeputil.c的源码中,我们找到了vsf_sysutil_extra()函数:
可以发现这就是一段shell,绑定的端口是6200.
重构vsFTPd后门漏洞exploit
在前面我们已经了解到了如何来触发vsFTPd后门漏洞,现在就正式开始编写漏洞exploit了。首先我们先引入我们需要的模块:
sys模块我们是用来接收命令行参数,socket模块用来触发漏洞,threading模块用来处理shell,time模块用来延迟shell交互。
现在我们已经引入模块了,接下来我们就来处理一下命令行参数。
从命令行接收两个参数,目标IP和目标端口。首先判断一下使用者是否正确的输入了参数,成功就打印目标IP和端口号。
现在我们已经接收了需要的参数了,接下来就要来需要去触发漏洞了,这里我们将触发函数命名为exploit:
这里我们主要先来获取一下banner,来确定服务器的FTP服务是不是vsFTPd 2.3.4。
确定服务器的FTP服务是vsFTPd 2.3.4后,我们来触发漏洞:
触发完漏洞,我们还需要连接到它才能操作。首先我们先创建一个函数处理线程运行。
最后我们将编写一个综合的函数,来调用exploit函数,在触发漏洞后操作shell。
很简单,首先我们调用了exploit()函数来触发漏洞,然后我们创建了一个名为shell_socket的套接字来连接shell。shell_status表示状态,主要是防止冲突。然后就是利用线程来处理与shell的交互了,最后用了一个循环来发送命令并当命令为exit时退出。
脚本演示
我们的exploit的编写到此就已经完成了,现在我们实际操作一下,测试一下我们的exploit是否可用。我们首先使用nmap探测一下服务器的FTP服务的版本。
nmap -sV -p21 192.168.242.129
结果:
可以发现在目标服务器上的FTP服务是vsFTPd 2.3.4,我们来使用我们的exploit脚本:
成功利用
总结
在编写exploit的过程中,我犯了一个小错误,使用了TAB制表符,就不能再使用四个空格来代表制表符对齐,新的Python语法,是不支持在代码对齐中,混用TAB和空格的。文中的靶机我是直接使用了metasploitable2。大家有兴趣的可以自己尝试重新编写一下。
参考资料
1、https://www.exploit-db.com/exploits/17491/
2、https://0x00sec.org/t/re-building-a-vsftpd-backdoor-exploit-in-python/159
3、https://pastebin.com/AetT9sS5
4、https://scarybeastsecurity.blogspot.com/2011/07/alert-vsftpd-download-backdoored.html
(*本文作者:zusheng,来自FreeBuf)
炼石信息安全培训春季班开招
QQ:495066536
372806985
敬请持续关注……