그누보드 사이트 해킹 점검용 쉘스크립트
글쓴이: nonots / 작성시간: 목, 2008/06/12 - 3:28오후
그누보드 혹은 영카드 사용하는 사이트가 많은 가상호스팅서버에서
해킹당한 여부를 점검하는 쉘스크립트입니다.
서버에 한두개 사이트 뿐이라면 별 도움 안될겁니다.
사용하는 bash 버전이 3 이상에서 테스트한 겁니다. centOS 4 이상.
그 이하에서 오류 날지도 모르겠군요..
..
아래 내용을 복사해서 check.sh 등으로 저장후 쉘에서
check.sh | more 등으로 실행하면 됩니다.
만약 웹사이트의 소스 상위 위치가 /home 이 아니라면
상단 HDIR 변수를 적당하게 수정하면 됩니다.
#!/bin/sh # # 작성처 : 바다웹호스팅 <a href="http://www.bada.cc" rel="nofollow">http://www.bada.cc</a> # 작성자 : 권기성 # 작성일 : 2008-06-12 오후 # # 이스크립트는 리눅스 가상웹호스팅이 많은 사이트에서 # 그누보드 웜 취약점 점검을 위해 작성되었습니다. # 참조 : <a href="http://sir.co.kr/bbs/board.php?bo_table=co_notice&wr_id=1029 #" rel="nofollow">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
Forums:
댓글 달기