--- 디지털 인쇄로 책을...

     ---리룩스서버컴퓨터 백업

  공개 자료실 

 文學위의 文學 출판사입니다. PDF로 전환하여 복사기로 책을 만듭니다. 자세한 내용은, '디지털 인쇄'에서 확인해 보세요!

리눅스(Linux) 서버

현재 제로보드의 일부 보안버그가 발표되었습니다.
문제는 include() 사용시에 선언된 변수를 GET 방식으로 전달이 가능하게 되었기 때문입니다.

이미 nzeo.com 공지에 뜬 이상 수 많은 사람들이 이 문제점을 발견했을 것이고,
마음만 먹는다면 제로보드가 설치된 홈페이지에 다음과 같은 일들을 할 수 있습니다.

1. 제로보드 자료실 첨부파일 모두 삭제가능(호스팅서버일 경우 타계정 사용자의 자료까지 삭제가능)
2. 제로보드가 설치된 디비내용 모두 삭제가능.
3. 디비계정 정보 유출(대부분 디비계정과 텔넷계정을 동일하게 사용하시죠?)

이제 남은 방법은 빠른 시간안에 패치하는 방법밖엔 없습니다.

패치방법)
        login.php

        68 line)
                include $file;
        =>
                if($id) include $file;

이 패치는 간단하므로 호스팅서버처럼 여러 사용자가 사용할때 다음 명령을 통해 한번에 모두 패치할 수 있습니다.

먼저 제로보드가 설치된 디렉토리로 이동하거나 호스팅서버라면 root 권한을 얻은뒤 /home (사용자 홈디렉토리)로 이동합니다.
        cd /home

다음은 문제가 되는 소스를 찾아서 출력하는 것으로 제로보드 이외의 소스가 있는지 패치하기전에 확인해야 합니다.
        grep -r "include \$file;" `find ./ -name login.php`

        문제의 소스) ./XXXXX1/public_html/zboard/login.php:    include $file;
        패치된 소스) ./XXXXX1/public_html/zboard/login.php:    if($id) include $file;

만약, 검색결과중 제로보드 이외의 다른 소스가 있다면 다음 처럼 파일하나씩 수작업으로 패치해야 합니다.
        perl -pi -e 's,\tinclude \$file;,\tif\(\$id) include \$file\;,g' ./XXXXX1/public_html/zboard/login.php

검색결과가 모두 제로보드 소스라면 다음 명령을 통해 현재 디렉토리 하위에 설치된 모든 소스를 자동패치하면 됩니다.
이때, 이미 패치된 소스와는 include 구문앞에 탭의 유무로 구분하기때문에 두번 패치되는 일은 없습니다.
하지만 사용자가 임의로 수정해서 탭이 없어진 경우라면 수정이 안될겁니다.
        grep -rl "include \$file;" `find ./ -name login.php`|xargs -n1 perl -pi -e 's,\tinclude \$file;,\tif\(\$id) include \$file\;,g'

마지막으로 처음 실행했던 검색명령을 통해 패치된 내역을 확인하면 됩니다.
        grep -r "include \$file;" `find ./ -name login.php`

        패치된 소스) ./XXXXX1/public_html/zboard/login.php:  if($id) include $file;
        패치된 소스) ./XXXXX2/public_html/bbs/login.php:   if($id) include $file;

추신) 위 스크립트를 통해 변환했을 경우 만약 잘못되더라도 되돌릴 방법이 없습니다.
따라서 미리 패치할 파일을 백업받아놓으시거나 하나의 파일만 테스트해본뒤 사용하시기 바랍니다.
추신2) 서버에 perl 이 설치되어 있어야 하며 RedHat Linux 7.1, 8.0 에서 테스트되었습니다.