伪造FTP服务

时间:2011-12-26 20:32:13

标签: ftp nmap

我正在编写一个软件,可以让Nmap相信GuildFTPd FTP服务器在端口21上运行。到目前为止,我的python代码如下所示:

import socket

s = socket.socket( )
s.bind(('', 21))
s.listen(1)
conn, addr = s.accept()
conn.send("220-GuildFTPd FTP Server (c) 1997-2002\r\n220-Version 0.999.14")
conn.close()

用于匹配此特定服务的Nmap正则表达式是:

match ftp m|^220-GuildFTPd FTP Server \(c\) \d\d\d\d(-\d\d\d\d)?\r\n220-Version (\d[-.\w]+)\r\n| p/Guild ftpd/ v/$2/ o/Windows/

但是,当我使用Nmap扫描运行脚本的主机时,结果为:

21/tcp open ftp?

这怎么可能?当我使用Nmap扫描真实服务时,它可以正确识别服务。

1 个答案:

答案 0 :(得分:1)

首先,您在错误回复结束时错过了匹配线所需的\r\n

另一个主要问题是您的程序只处理一个连接,然后关闭。 Nmap将首先进行端口扫描,然后发送服务指纹探针。如果您以root身份运行nmap(或Windows上的Administrator),它将使用半开TCP SYN扫描,您的应用程序将不会将portscan视为连接,但是否则它将接受portscan,关闭连接,以及无法进行服务扫描阶段。

这是一个非常基本的脚本修改,可以处理顺序连接(但不是并行),这足以欺骗Nmap:

import socket

s = socket.socket( )
s.bind(('', 21))
s.listen(1)
while True:
    conn, addr = s.accept()
    conn.send("220-GuildFTPd FTP Server (c) 1997-2002\r\n220-Version 0.999.14\r\n")
    conn.close()