Homepage 사랑비 BGM 보안 취약점

황제낙엽 2008.08.02 09:49 조회 수 : 673 추천:109

sitelink1 http://heuristing.net/index.php?pl=1337&...4%EC%95%88 
sitelink2  
sitelink3  
sitelink4  
sitelink5  
extra_vars6  

홈페이지 제작에 관심이 있거나 나모 웹에디터나 메모장 등으로 개인 홈페이지를 만들어 본 경험이 있는 사람이면 사랑비 BGM 플레이어라는 프로그램에 대해 한 번쯤은 들어봤을 것이다. 이 프로그램은 2002년도에 개발되어 http://sarangbi.net 을 통해 배포되던 프로그램인데, 2003년 당시 공식 배포 사이트의 해킹 사고 이후 개발이 중단된 상태이다. 하지만, MySQL을 이용한 뛰어난 배경음악 관리기능과 사용법이 매우 쉽고, 스킨 개발이 용이하다는 장점 때문에 지금도 꾸준히 사용되고 있다.


하지만 이 프로그램은 업데이트가 중단된지 매우 오래된 프로그램이기 때문에 심각한 보안 버그가 존재하고 있다. 사랑비 BGM 플레이어는 관리자 모드 페이지를 보려면 인증을 거쳐야 하는데, 인증 방식이 Session 방식이 아닌 Cookie 방식을 사용하고 있기 때문에 누구나 쿠키값 조작을 통해 관리자 모드로 로그인이 가능하다는 문제가 있다.

사랑비 BGM 플레이어는 현재 공식 배포 사이트가 폐쇄된 상태이기 때문에 해당 프로그램을 구하기 위해서는 검색을 통해 다른 사용자들이 올려놓은 파일을 찾아서 받아야 한다.

※ 다운로드 링크 : http://www.hiramid.co.kr/bbs/board.php?bo_table=503&wr_id=8

다음은 관리자 인증을 담당하는 파일의 소스코드 일부이다.
 
  1. <?
  2. if( $HTTP_COOKIE_VARS['sarangbi_bgm_chk_'.$table] != "ok"){
  3.         echo "<br><br><br><br><br><br><br><br><br><br><br>";
  4.         include "admin/login.php";
  5.         include "admin/tail.php";
  6.         exit;
  7. }
  8. ?>

코드에서 보는 바와 같이 srangbi_bgm_chk_default 라는 쿠키값 만 존재하면 로그인이 이루어질 수 있다는 것을 알 수 있다. $table 변수값은 보통 기본적으로 default 값을 가지는데, 이 값은 사랑비 BGM 플레이어를 처음 설치할 때 수정이 가능하다. 하지만, 거의 대부분의 경우 이 값을 default라는 값 그대로 놓고 설치하는 경우가 많다. 따라서 사랑비 BGM 플레이어를 사용하고 있는 웹 사이트라면 대부분이 공격 대상이 될 수 있다.

이 취약점은 근본적으로 사랑비 BGM 플레이어의 관리자 인증 방식이 Session 방식이 아닌 Cookie 방식을 사용하고 있고, .htaccess 파일의 업로드가 가능하다는데 있다. 따라서 관리자 인증방식을 Cookie로 변경하고, 파일 업로드 기능에서 .htaccess 파일을 업로드하지 못하도록 패치를 하여야 한다.

물론 Cookie 방식을 사용하더라도 로그인 인증 시 부여되는 쿠키값을 자신만이 아는 값으로 만들어주면 어느 정도 보안이 되겠지만 좀 더 나은 보안을 위해 가능하면 Session 인증방식을 사용하는 것이 좋다.(쿠키는 사용자의 PC에 남기 때문에 문제가 될 수 있다)

사랑비 BGM 플레이어의 소스 파일을 다음과 같이 수정한다.

[사랑비 BGM 디렉토리]/sarangbi_bgm_admin.php 파일의 20라인 부근:
  1. if( $mode=='') $mode='main';
  2.  
  3. // DB가 설정이 되었는지를 검사
  4. if(!file_exists("db_conn.php")){
  5.  echo"<meta http-equiv="refresh" content="0; url=install.php">";
  6.  exit;
  7. }

[사랑비 BGM 디렉토리]/sarangbi_bgm_admin.php 파일의 46라인 부근:
  1.         if( $pw[0] == $db_pw[pw] && $pw != ''){
  2.                 session_unregister("user_pw");
  3.                 $user_pw = $db_pw;
  4.                 session_register("user_pw");
  5.                 if (!$_SESSION["user_pw"]) $_SESSION["user_pw"] = $user_pw;
  6.                 movepage($PHP_SELF."?mode=main");
  7.         }else{
  8.                 include "admin/top.php";
  9.                 echo "<br><br><br><br><br><br><br><br><br><font color=red>암호가 틀렸습니다. 다시 입력하세요.";
  10.                 include "admin/login.php";
  11.                 include "admin/tail.php";
  12.                 exit;
  13.         }


[사랑비 BGM 디렉토리]/sarangbi_bgm_admin.php 파일의 61라인 부근:
  1. // 로그 아웃 처리
  2. if( $mode == 'logout'){
  3.         session_destroy();
  4.         echo "
  5.                 <script language=javascript>
  6.                 window.close();
  7.                 </script>";
  8. }


[사랑비 BGM 디렉토리]/admin/login_check.php 파일의 1라인 부근:
  1. <?
  2. if($_SESSION["user_pw"] == $pw){
  3.         echo "<br><br><br><br><br><br><br><br><br><br><br>";
  4.         include "admin/login.php";
  5.         include "admin/tail.php";
  6.         exit;
  7. }


[사랑비 BGM 디렉토리]/admin/upload_write.php 파일의 84라인 부근:
  1.                 if($file1_size[$i]>0){
  2.                         $s_file_name1[$i]=$file1_name[$i];
  3.                         if( $use_caption[$i] == 1){
  4.                                 $caption_s_file_name1[$i] = $caption_file1_name[$i];
  5.                
  6.                                 if(eregi(".htaccess",$caption_s_file_name1[$i])||eregi(".htpasswd",$caption_s_file_name1[$i])||eregi(".inc",$caption_s_file_name1[$i])||eregi(".phtm",$caption_s_file_name1[$i])||eregi(".htm",$caption_s_file_name1[$i])||eregi(".shtm",$caption_s_file_name1[$i])||eregi(".ztx",$caption_s_file_name1[$i])||eregi(".php",$caption_s_file_name1[$i])||eregi(".dot",$caption_s_file_name1[$i])||eregi(".asp",$caption_s_file_name1[$i])||eregi(".cgi",$caption_s_file_name1[$i])||eregi(".pl",$caption_s_file_name1[$i])){
  7.                                 echo "Html, PHP 관련파일은 업로드할수 없습니다<br>
  8.                                         파일 : $caption_s_file_name1[$i]<br>";
  9.  
  10.                                 $use_caption[$i] = 0;
  11.                                 }
  12.                         }
  13.                         if(eregi(".htaccess",$s_file_name1[$i])||eregi(".htpasswd",$s_file_name1[$i])||eregi(".inc",$s_file_name1[$i])||eregi(".phtm",$s_file_name1[$i])||eregi(".htm",$s_file_name1[$i])||eregi(".shtm",$s_file_name1[$i])||eregi(".ztx",$s_file_name1[$i])||eregi(".php",$s_file_name1[$i])||eregi(".dot",$s_file_name1[$i])||eregi(".asp",$s_file_name1[$i])||eregi(".cgi",$s_file_name1[$i])||eregi(".pl",$s_file_name1[$i])){
  14.                                 echo "Html, PHP 관련파일은 업로드할수 없습니다<br>
  15.                                         파일 : $s_file_name1[$i]<br>";
  16.  
  17.                                 $i++;
  18.                                 continue;
 
 

 

번호 제목 글쓴이 날짜 조회 수
공지 Software Development Trend (with Java) 황제낙엽 2024.01.19 619
151 REST, REST API, RESTful [2] 황제낙엽 2021.01.11 96103
150 Character Entity Set(s) 황제낙엽 2013.06.24 57674
149 설치형 블로그, 위키, 게시판 모음 황제낙엽 2006.09.20 49649
148 엑셀(excel)에서 16진수 -> 10진수 변환 file 황제낙엽 2017.08.29 4447
147 효과적인 모바일 애니메이션 응용예 file 황제낙엽 2018.03.30 2154
146 notepad2 에서 문서내의 일부 문자열의 byte 크기 알아내기 file 황제낙엽 2018.03.29 1969
145 반올림하는 두 가지 방법 (Round-off(사사오입), Round-to-nearest-even(오사 오입)) file 황제낙엽 2019.08.27 1706
144 결재 연동 서비스 업체 (아임포트) 황제낙엽 2020.06.09 1492
143 부동소수점 연산에 관한 정리 황제낙엽 2018.03.26 1170
142 컴퓨터는 음수를 2의 보수법으로 표현한다 file 황제낙엽 2016.10.24 845
141 2020 클라우드 정리 - cloud, aws, azure, gcp, iaas, paas, saas 황제낙엽 2020.04.05 774
» 사랑비 BGM 보안 취약점 황제낙엽 2008.08.02 673
139 XQL 황제낙엽 2003.07.10 644
138 쿠키 제어 (Javascript, PHP, JSP) 황제낙엽 2009.06.11 632
137 음성인식서비스 개발을 위한 음성 API 모음(STT API) 황제낙엽 2019.04.28 626
136 아웃룩(Outlook 2010) 메일 보관 경로(.pst) 변경과 백업/복구 file 황제낙엽 2009.12.28 584
135 SSO(Single Sign On) vs SLO(Sing LogOn) 차이점 황제낙엽 2007.08.17 551
134 2019년 웹 프레임워크 인기 순위 file 황제낙엽 2020.04.06 536
133 자료구조 Part1. "동적배열"의 모든 것. 황제낙엽 2007.11.24 503