2009/08/06

단상 #2



"견디지 않아도 괜찮아"

익숙해지는 것 vs 힘들지 않은 것

물론 분명 다르다.



2009/07/30

Let's Groove!





2007 HipHop World Championship, Bremen.
Small group category 1st place
Choreography by Gabor Hartmann


음악, 안무 모두 좋다.
모처럼 정말 춤추고 싶은 날이다.

이따금씩 술기운에 다음날 수업따윈 신경쓰지 않고
동방에 모여 서로 추는 춤을 비웃으며 놀던 때가 있었다.

그 때가 그립다.

2009/07/25

WinSock > setsockopt()


setsockopt(IN SOCKET socket, IN int name, IN int optlevel, IN const char* optvalue, IN int optlen);

[1] 입출력 버퍼크기의 변경

 SOCKET sock = socket(PF_INET, SOCK_STREAM, 0);
 int send_buf = 500;
 int rcv_buf = 1000;
 int state = setsockopt(sock, SOL_SOCKET, SO_RCVBUF, (char*)&rcv_buf, sizeof(rcv_buf));
 if(state) errorhandling("setsockopt() error");
 state = setsockopt(sock, SOL_SOCKET, SO_SNDBUF, (char*)&send_buf, sizeof(send_buf));
 if(state) errorhandling("setsockopt() error");

[2] Nagle 알고리즘의 적용 - 한번에 모아서 전송

TCP 소켓은 기본적으로 Nagle 알고림을 사용하여 한번에 모아서 전송함. 지연 발생(100~200ms).
이 옵션 사용시 리턴과 동시에 데이터 전송이 이루어지나 회선 부하가 많아짐.

 int sock;
 int flag = 1;  // 네이글 알고리즘 off
 sock = open(...);
 if ( setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(int)) < 0)
 {
    printf("setsockopt error\n");
    ....
 }

[3] 송/수신 TIMEOUT 설정 - 블러킹 소켓일 경우

 SCOKET hSocket;
 int nErrorCode;
 hSocket = socket(AF_INET,SOCK_STREAM,0);
 ~~~~
 nErrorCode = connect(~~~~~~);
 ~~~
 // RECEIVE & SEND TIMEOUT 설정법
 // hSocket이 블럭킹상태(Blocking) 일경우 해당된다. 논 블럭킹 상태(None-Blocking) 이면 recv에서 SOCKET_ERROR를 반환하고
 //WSAGetLastError()로 확인 하면 WSAEWOULDBLOCK를 반환 한다. 
 //WSAEWOULDBLOCK이 에러가 아니고, 다른 에러 이면 에러 코드를 참조 하여 에러 처리를 한다. 

 // Receive Time Out Value : 3000 (약 3초)
 int nTimeOutValue = 3000;
 nErrorCode = setsockopt(hSocket, SOL_SOCKET, SO_RCVTIMEO,(const char*)&nTimeOutValue,sizeof(nTimeOutValue));
 if(SOCKET_ERROR == nErrorCode)// 에러 처리
 }
 nErrorCode = setsockopt(hSocket, SOL_SOCKET, SO_SNDTIMEO,(const char*)&nTimeOutValue,sizeof(nTimeOutValue));
 if(SOCKET_ERROR == nErrorCode) // 에러 처리
 }

 nErrorCode = send(hSocket,버퍼,전송할 버퍼크기, 0);
 ~~~
 nErrorCode = recv(hSocket,버퍼, 버퍼크기, 0);
 ~~~

[4] 소켓 종료시 종료방식 설정

LINGER 구조체의 _onoff _linger 두개의 값에 플래그를 지정하고 setsockopt 에 설정
l_onoff = 0, l_linger = 0(또는 1) : 버퍼에 있는 내용을 모두 전송후 연결 종료한다.

l_onoff = 1, l_linger = 0 : 즉시 연결을 종료한다. 상대방에게는 FIN이나 RTS 시그널이 전달된다.
                l_linger = 1 : 버퍼에 있는 내용을 모두 전송후에 연결을 종료한다. 이 동안 closesocket 은 block 된다.

 LINGER opt = {onoff, linger}; // 값을 설정
 setsockopt(socket, SOL_SOCKET, SO_LINGER, (char *)&opt, sizeof(opt)); 

[5] 소켓 비정상 종료시 재 bind 를 허용하도록 함

bind 되었던 소켓이 서버의 비정상 종료로  커널이 아직 그 정보를 갖고 있을 경우, 다시금 bind 할 수 없는 경우가 있는데,
이때 선점된 주소로 인해 bind에 실패할 수 있다. 이 옵션은 재 bind 할 수 있도록 한다.

 bool reuseflag = true;
 setsockop(listen_sock, SOL_SOCKET, SO_REUSEADDR, (char *)&reuseflag, sizeof(reuseflag));

[6] UDP 소켓을 브로드캐스트 가능하도록 설정

디폴트로 생성되는 UDP소켓은 브로드캐스트가 불가능하도록 설정되어있다. 이 소켓을 브로트캐스트가 가능하도록 한다.

 // serverside
 memset(&serverAddr, 0, sizeof(serverAddr));
 serverAddr.sin_family = AF_INET;
 serverAddr.sin_addr.s_addr = inet_addr(szServerAddress);
 serverAddr.sin_port = htons(nPort); // 포트는 serverside 와 clientside 모두 통일
 state = setsockopt(hSock, SOL_SOCKET, SO_BROADCAST, (char *)&serverAddr, sizeof(serverAddr));

2009/07/23

연극은 언젠가 끝나기 마련입니다.





라디오에서 유희열이 이런 애기를 했다.

"그 사람과 같이 있을 때 가장 나다워지는 사람과 결혼하십시요,
괜히 꾸미거나 가식적이지 않는 그냥 편안한 그대로의
나의 모습을 있는 그대로 보여줄 수 있는 상대를 만나십시요"

"연극은 언젠가 끝나기 마련입니다."



언젠간 정말 같은 꿈을 꿀 수 있을까...?


UNICODE 컴파일시 콘솔에 한글 출력하기


  1. _tprintf()

  2. 여기서 setlocale을 지정하지 않으면 프로젝트 속성 항목의
    [문자집합:설정 안함]에서는 정상적으로 한글이 나오지만
    [문자집합:유니코드 사용]에서는 한글을 볼 수 없게 된다.


  3. cout

  4. imbue함수를 통해 locale을 지정해 주면 된다.
    _Loc: A local string.
    Return Value: The Previous locale.

    예제: 이 함수는 locale객체를 인자로 받게끔 되 있는데,
    이 locale객체의 첫번째 인자는 구현하려는 locale 문자열을, 두번째 인자(생략가능)는 적용할 범위를 설정한다.
    locale::ctype으로 지정하면 문자열만, locale::all 을 지정하면 통화, 숫자등 모든 출력 값들이 시스템 국가별 설정에 영향을 받게된다.


한줄요약:
콘솔프로그램 만들때 다음 코드를 아무생각 없이(?) main함수 첫째줄에 때려박으면 다 해결된다.

2009/07/08

JYP Hammer Danc


역시 대단하다
흑인과 함께있어도,
눈길을 사로잡게 만든다.

이렇게 춤으로 사람의 시선을 잡는다는건 참 어려운데,
멋있다 :D

괜히 JYP가 아니지.



2009/07/03

화려하지 않은 고백





화려하지 않은 고백
by 이승환

언젠가 그대에게 준 눈부신 꽃다발
그 빛도 향기도 머잖아 슬프게 시들고

꽃보다 예쁜 지금 그대도 힘없이 지겠지만
그때엔 꽃과 다른 우리만의 정이 숨을 쉴 거야

사랑하는 나의 사람아 말없이 약속할 게
그대 눈물이 마를때 까지 내가 지켜준다고

멀고 먼 훗날 지금을 회상 하며
작은 입맞춤을 할 수 있다면

이 넓은 세상위에 그 길고 긴 시간 속에
그 수많은 사람들 중에 오직 그대만을 사랑해

---

화려하지 않음
나에겐 꽤나 중요할 것 같다


2009/06/26

단상 #1



  
以靜待譁 이정대화
고요함으로 소란함을 응대한다.


2009/06/24

@하악하악





"때로 인간은 완장을 차면 눈이 멀기도 한다.
특히 정치가들 중에는 뒷걸음질을 반복하면서
자신이 진보하고 있다는 신념을 버리지 않는 사람들이 있다."

- 이외수, "하악하악" 중에서


2009/06/05

KISA HDCON6 Level3 풀이



악성프로그램을 다운받아 분석하여 공격하려는 Domain 이름과 공격방법을 찾아서 패스워드를 획득하라
패스워드는 "도메인_공격기법"으로 구성된다
프로그램 : Moon3_q1.exe

PEiD로 열어보니 따로 패킹되지 않아서, Olly로 바로 실행
일단, text 와 intermodular calls 를 찾아본다


좀 둘러보니 'CreateRemoteThread'가 보인다. 냄새가 난다.
느낌 좀 받고, 다음으로 넘어가서


'CreateFileA', 'WriteFile', 'CreateToolhelp32snapshot', 등등
오호, 일단 다 BreakPoint 걸고 실행하면 몇개 지나서 바로 프로그램이 실행!

 

숫자는 별 의미 없는것 같고, '음력으로 변환' 버튼 누르면 뭔가 잡히기 시작한다
 


천천히 넘어가다보면, 아까 위에서 잡아논 브포를 지나면서 파일을 남기는구나


그 뒤로는 explorer.exe 프로세스를 찾아서 뭘 하는거 같은데, 뭐하는지는 잘 모르겠다 ㅎ
그렇담, 이제 advapi32_2.dll 파일을 찾아서 분석 ㄱㄱ
뭐 이것도 그냥 일단 text, call 훑어보자 ~

 

브라보. 정답으로 가고 있구만 :p
'DnsQuery_A'로 쿼리를 날려주는데, 보기 쉽게 패킷으로 잡아보자.

 

첫번째 패킷은 DNS로 Address를 날린다. 설마 답일까 하고 체크해봤지만 역시 이렇게 쉽게 풀릴리가...
Response는 192.168.123.118... 일단 넘어가고..


그다음으로 잡히는 패킷을 보면, 이번에도 역시 DNS로 날린다.
쿼리를 보면 MX(Mail Exchange)인데, response를 봐도 무슨 소리인지 모르겠다.
넘어가려고 한줄 한줄 디버깅하는데, 콜스택에 왠 아스키값이 들어온다. 아쉽게도 덤프떠논 파일이 없어서 스샷을 찍을수가 없군...
아무튼, 값을 보면 "Dn5_72rNN21.900D.57uff"
럭키, 거의 다 온것 같군 :)

 

음. 다음 패킷에 같은 도메인으로 텍스트 쿼리를 보낸다. Response로 받은 텍스트를 보면,

 

"admin.php?id=%27+or1=1--&paswd="
SQL Injection 구문을 뽑아준다. 혹시 몰라서 http로 접속해보니,

 

서버는 열려있지만, 권한이 없다. 어쩌지,
난 여기서 dll 계속 진행시키면서 뒤에 나오는 InternetConnect나 HttpRequest에 집중하면서 오류잡고 있었는데,
결국 풀리지 않는 안드로메다로... 제길, 이놈의 Access Violation은 언제쯤 해결할 수 있을지...

아무튼, 그리하여 결국 데드라인을 놓쳤지만,
위에서 나온 정보를 토대로 패스워드를 끌어내보면,
답은 Dn5_72rNN21.900D.57uff_SQLINJECTION

음, 문제를 해결함에 있어 지식과 능력도 굉장히 중요하지만, 때론 번쩍이는 감각이 절실히 필요할 때가 있다 ㅠㅠ
결론은... 삽질하다보니 좀 재밌기도하고, 이런저런 감을 많이 잡을 수 있었던 것 같다 ㅎ
비록 답은 놓쳤지만, 계속 열심히하면 더 많이 재밌어질것 같다 :D

입맛 :D



확실히 아무리 인터페이스가 좋아도,
입맛대로 수정할수있는 설치형 블로그가 좋구나!
얼른 서버를 만들어야겠다 :D

근데, 돈이 없다 :p

2009/06/04

ClickJacking이란?



click jacking이란 낚시페이지와 진짜 목적인 페이지를 안보이는 페이지 위에 놓고 클릭을 유도하는 방법입니다.
http://www.planb-security.net/notclickjacking/iframetrick.html
여기서 잘 보여주고 있습니다.
좀더 풀어쓰자면 이런겁니다.

원하는 페이지를 안보이게 설정합니다. opacity를 이용하면 되죠.
예를 들면 사진첩의 공개설정 페이지를 안보이게 띄워놓고
이 위에 보이는 페이지를 겹쳐놓습니다.
그리고 게임이라든지, 링크라던지, 사용자의 클릭을 유도하면서
'전체공개' 로 바꾸는 버튼의 위치에 가짜 버튼을 놓으면
사용자는 자기도 모르게 사진첩을 전체공개하게 되죠.
뭐 그런 방식입니다.
물론 브라우저가 원하는 페이지의 인증된 세션을 갖고 있어야겠죠
그건 어렵지 않겠죠?

위 링크에 보면 스샷이 있습니다.
(http://www.planb-security.net/notclickjacking/clickjack-ie6.png)


보면 설정을 바꾸는 위치에 클릭을 유도하죠.
저 반투명한 부분은 일부러 보이게 한거고, 안보입니다.
이걸 취약점이라 해야할까요 사회공학이라 해야할까요? 하하

아이디어 좋네요.