InfoSec Log/Kali Linux

[Linux] 포트 스캔 셸 스크립트

GuanJoer 2023. 10. 8. 16:02

‘echo’와 ‘read’ 명령어와 열려있는 포트를 찾는데 도움을 주는 칼리리눅스 자체에 내장되어 있는 Tool 인 ‘nmap’을 이용해 포트 스캔 셸 스크립트 작성이 가능하다. 

 

Fig 1. 포트 스캔 셸 스크립트 코드

 

 [Fig 1]을 보면, 스크립트에 사용할 인터프리터를 운영체제에 알리기 위해, shebang(#!)을 입력하고, z shell 인터프리터를 운영체제에서 사용하도록 지정하였다.

 

 그 후, 두번째 행 echo 명령어에 쓰인 내용을 셸 스크립트 실행시 처음으로 터미널에 표시하도록 되어 있고, 그에 맞는 답변, 즉 시작 하고자 하는 IP 주소를 적으면, read 명령어를 통해, 이 입력값을 받아, ‘firstIP’라는 변수에 저장하도록 되어 있다. 그 후, 4번째 행의 echo 명령어의 메시지가 터미널에 표시되고, 해당 메시지에 맞게끔, 즉 만약 IP가 192. 168. 0. 1 로 구성되어 있을 때, ‘1’이 마지막 옥텟이 됨으로, 즉 IP 주소의 세 번째 마침표 뒤의 마지막 숫자그룹이 ‘LastOctet’이 된다. 보통 시작 IP를 0, 마지막 옥텟 IP를 255로 넣어, 192. 168. 0. 0 ~ 255까지의 IP 주소에서의 포트를 스캔한다.

 

 마지막 옥텟 IP를 우리가 입력하면, 이 값은 ‘lastoctetIP’의 변수값으로 저장되어지고, 그 후, 다음 행의 echo 메시지를 표시하여, 그에 맞는, 즉 우리가 스캔하고자 하는 포트를 입력한다. 그러면 그 값이, ‘port’라는 변수에 저장되어 진다.

 

 그 후, nmap을 실행하는데, nmap은 ‘nmap [스캔 종류] [대상 IP] [대상포트(선택)]’ 형태로 명령어 입력을 받는다. ‘-sT’ 옵션의 경우, TCP 연결 스캔이며, 그 후, 우리가 입력한 시작 IP와 lastoctetIP 값이 $[변수 이름]을 통해 출력이  되고, 포트 번호 또한 마찬가지 이다. 그리고 이 명령의 출력을 /dev/null로 보내고, 그 다음 grep 가능 형식으로 portscan_test 파일에 출력을 보낸다.

 

 그 후, cat 명령어를 통해, porstscan_test 파일을 읽지만, 파이프를 통해, ‘open’이라는 값만 포함된, 즉 열린 포트만을 나타내도록 하여, 그 값들을 portscan_test2로 리다이렉션하여 보낸다. 그 후, 결과적으로 portscan_test2의 파일의 내용이 터미널에 표시되어, 우리가 지정한 범위의 IP 중에 특정 포트가 열린 곳이 있는지를 스캔하게 되어, 그결과가 터미널에 표시되게 된다. 

 

 참고로 칼리의 파일 기본 권한 설정이 644이므로, 즉 실행 권한이 없는 상태이므로, 셸 스크립트를 실행하기 위해서는, chmod 명령어를 이용해, 해당 셸 스크립트 파일의 권한을 755로 바꾸어 준다. 즉 아래와 같이 말이다. 

 그러고 나면, 위에서 보듯이, 즉 권한을 755로 변경하고 나면, 사용자와 그룹, 기타 사용자에 실행권한이 생긴 것을 볼 수 있다.

 

 

  포트스캐너를 실행하여, 우리가 탐색하고자 하는 IP 주소의 범위를 적고, 또한 스캔하고자 하는 포트 번호를 입력하면, 그 중, 우리가 스캔하고자 하는 포트 중 열린 포트의 IP주소 값을 터미널 디스플레이에 반환하게 된다. 

 

 위와 같은 경우는 10. 0. 2. 0 ~ 255의 IP 주소 범위 중, 80 포트가 열린 곳이 있는 지 포트 스캔을 하였다. 그결과 10. 0. 2. 2의 IP의 80 포트가 열려있는 것을 확인할 수 있다.