ETC

[펌 자료]그누보드 사이트 해킹 점검용 쉘스크립트

jjblaid 2009. 9. 21. 15:04

[펌 자료]그누보드 사이트 해킹 점검용 쉘스크립트

nonots의 이미지

그누보드 혹은 영카드 사용하는 사이트가 많은 가상호스팅서버에서
해킹당한 여부를 점검하는 쉘스크립트입니다.
서버에 한두개 사이트 뿐이라면 별 도움 안될겁니다.
사용하는 bash 버전이 3 이상에서 테스트한 겁니다. centOS 4 이상.
그 이하에서 오류 날지도 모르겠군요..
..
아래 내용을 복사해서 check.sh 등으로 저장후 쉘에서
check.sh | more 등으로 실행하면 됩니다.
만약 웹사이트의 소스 상위 위치가 /home 이 아니라면
상단 HDIR 변수를 적당하게 수정하면 됩니다.

#!/bin/sh
#
# 작성처 : 바다웹호스팅 <a href="http://www.bada.cc" title="http://www.bada.cc">http://www.bada.cc</a>
# 작성자 : 권기성
# 작성일 : 2008-06-12 오후
#
# 이스크립트는 리눅스 가상웹호스팅이 많은 사이트에서
# 그누보드 웜 취약점 점검을 위해 작성되었습니다.
# 참조 : <a href="http://sir.co.kr/bbs/board.php?bo_table=co_notice&wr_id=1029" title="http://sir.co.kr/bbs/board.php?bo_table=co_notice&wr_id=1029">http://sir.co.kr/bbs/board.php?bo_table=co_notice&wr_id=1029</a>

# 점검할 사용자 홈디렉토리 : 적절한 서버의 경로로 수정하세요
HDIR="/home";

# 임시 파일
TEM_FILE="/tmp/__gnu_check_file"
TEM_FILE_YES="/tmp/__gnu_check_file_patched"
TEM_FILE_NOT="/tmp/__gnu_check_file_not_patched"
TEM_FILE_WORM="/tmp/__gnu_check_file_worm"

if [ "$1" == "-c" ] ; then
 /bin/rm -f $TEM_FILE
fi

# CH STR
CK_STR1="board_skin_path=''";
CK_STR2="board_skin_path = ''";
CK_STR3='board_skin_path=""';
CK_STR4='board_skin_path = ""';

# 루트로 이동
cd /
if [ ! -f $TEM_FILE ] ; then
 echo "
>> 그누보드가 설치된 사용자 디렉토리를 찾아서 임시파일 $TEM_FILE 에 저장중입니다.
>> 몇분 정도 시간이 소요됩니다. 기다리세요..";
 echo "";
 find $HDIR | grep "admin.menu100.php" | xargs -i  dirname {} | xargs -i dirname {} > $TEM_FILE
else
 echo "
>> 이미 생성된 그누보드 위치 임시파일을 사용합니다.
>> 재검색 하려면 임시파일 $TEM_FILE 을 삭제후
>> $0 -c 명령어로 다시 실행 하시기 바랍니다."
 echo "";
fi

for i in `cat $TEM_FILE`
do
 cd $i
 COMMON_FILE="$i/common.php";
 DATA_FILE="$i/data";
 if [ -f $COMMON_FILE ] ;then
  echo "O:  $COMMON_FILE 있습니다.";
  #echo "egrep  \"$CK_STR1|$CK_STR2|$CK_STR3|$CK_STR4\" $COMMON_FILE ";

  if  `grep "$CK_STR1" $COMMON_FILE > /dev/null 2>&1 ` || `grep "$CK_STR2" $COMMON_FILE > /dev/null 2>&1 ` || `grep "$CK_STR3" $COMMON_FILE > /dev/null 2>&1 ` || `grep "$CK_STR4" $COMMON_FILE > /dev/null 2>&1 ` 
  then
   echo "   OK ----- YES  이미 패치된 듯 !!";
   echo $COMMON_FILE >> $TEM_FILE_YES
  else
   echo "   NOT PATCHED !! -----  NO 패치가 필요한듯 다시 확인하세요";
   echo $COMMON_FILE >> $TEM_FILE_NOT
   
  fi
  
  ## 웜 점검1
  if [ -e $DATA_FILE ] ;then
   echo "       $DATA_FILE 폴더에서 크기 0 이상인 의심되는 php 파일 ";
   NOTZE=`find  $DATA_FILE -size +0 | grep ".php" |  xargs -i ls -1 {}`
   for k in $NOTZE
   do
    echo "        !!! 웜 경고1 : $k"
    echo $k >> $TEM_FILE_WORM
   done
  fi

  ## 웜 점검2
  if `grep -rs 'eval($_REQUEST' *.php`
  then
   echo "        !!! 웜 경고2 : $k"
   echo $COMMON_FILE >> $TEM_FILE_WORM
  fi

  ## 웜 점검3
  if `grep -rs 'eval(gzinflate(base64_decode(' *.php `
  then
   echo "        !!! 웜 경고3 : $k"
   echo $COMMON_FILE >> $TEM_FILE_WORM
  fi

 else
  echo "X:  !!! 그런 파일 없음 ::  $COMMON_FILE ";
 fi
 echo "";
done


echo "
=======================================
=== 이미 패치된 파일"
cat $TEM_FILE_YES | sort | uniq

echo "
=======================================
=== 패치안된 파일"
NOTPT=`cat $TEM_FILE_NOT | sort | uniq`
for z in $NOTPT
do
 echo $z
done

echo "
=======================================
=== 이미 웜에 감염된 듯한 사이트"
cat $TEM_FILE_WORM | sort | uniq


if [ -f $TEM_FILE_NOT ]  ; then
 echo ""
 echo -n "패치안된 파일을 패치하시겠습니까? y/n "
 read kk
 if [ "x$kk" != "x" ] ; then
  if [ $kk == "y" ] ; then
   for i in $NOTPT
   do
    vim $i
   done
  fi
 fi
fi

 

/bin/rm -f $TEM_FILE_YES
/bin/rm -f $TEM_FILE_NOT
/bin/rm -f $TEM_FILE_WORM

http://kldp.org/node/95123