nmap

Nmap リファレンスガイド (Man Page) |

Metasploitable2

f:id:hirose-test:20190901041630j:plain

Kali

root@kali:~# nmap 192.168.56.105
Starting Nmap 7.80 ( https://nmap.org ) at 2019-09-01 04:17 JST
Nmap scan report for 192.168.56.105
Host is up (0.0045s latency).
Not shown: 977 filtered ports
PORT     STATE SERVICE
21/tcp   open  ftp
22/tcp   open  ssh
23/tcp   open  telnet
25/tcp   open  smtp
53/tcp   open  domain
80/tcp   open  http
111/tcp  open  rpcbind
139/tcp  open  netbios-ssn
445/tcp  open  microsoft-ds
512/tcp  open  exec
513/tcp  open  login
514/tcp  open  shell
1099/tcp open  rmiregistry
1524/tcp open  ingreslock
2049/tcp open  nfs
2121/tcp open  ccproxy-ftp
3306/tcp open  mysql
5432/tcp open  postgresql
5900/tcp open  vnc
6000/tcp open  X11
6667/tcp open  irc
8009/tcp open  ajp13
8180/tcp open  unknown

Nmap done: 1 IP address (1 host up) scanned in 4.56 seconds

オプション概要 |
SERVICE/VERSION DETECTION: -sV: Probe open ports to determine service/version info
--version-light: Limit to most likely probes for faster identification
--version-all: Try every single probe for version detection
--version-trace: Show detailed version scan activity (for debugging)

root@kali:~# nmap -sV 192.168.56.105
Starting Nmap 7.80 ( https://nmap.org ) at 2019-09-01 04:19 JST
Nmap scan report for 192.168.56.105
Host is up (0.010s latency).
Not shown: 977 filtered ports
PORT     STATE SERVICE     VERSION
21/tcp   open  ftp         vsftpd 2.3.4
22/tcp   open  ssh         OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0)
23/tcp   open  telnet      Linux telnetd
25/tcp   open  smtp        Postfix smtpd
53/tcp   open  domain      ISC BIND 9.4.2
80/tcp   open  http        Apache httpd 2.2.8 ((Ubuntu) DAV/2)
111/tcp  open  rpcbind     2 (RPC #100000)
139/tcp  open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp  open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
512/tcp  open  exec        netkit-rsh rexecd
513/tcp  open  login?
514/tcp  open  shell       Netkit rshd
1099/tcp open  java-rmi    GNU Classpath grmiregistry
1524/tcp open  bindshell   Metasploitable root shell
2049/tcp open  nfs         2-4 (RPC #100003)
2121/tcp open  ftp         ProFTPD 1.3.1
3306/tcp open  mysql       MySQL 5.0.51a-3ubuntu5
5432/tcp open  postgresql  PostgreSQL DB 8.3.0 - 8.3.7
5900/tcp open  vnc         VNC (protocol 3.3)
6000/tcp open  X11         (access denied)
6667/tcp open  irc         UnrealIRCd
8009/tcp open  ajp13       Apache Jserv (Protocol v1.3)
8180/tcp open  http        Apache Tomcat/Coyote JSP engine 1.1
Service Info: Hosts:  metasploitable.localdomain, irc.Metasploitable.LAN; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 16.74 seconds

nmap の GUI版 zenmap の起動

# zenmap

f:id:hirose-test:20190901042617j:plain

f:id:hirose-test:20190901042627j:plain

ステルススキャンとTCPコネクトスキャンの違い

Kali から Metasploitable2 へ接続

root@kali:~# ssh msfadmin@192.168.56.105
The authenticity of host '192.168.56.105 (192.168.56.105)' can't be established.
RSA key fingerprint is SHA256:BQHm5EoHX9GCiOLuVscegPXLQOsuPs+E9d/rrJB84rk.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.56.105' (RSA) to the list of known hosts.
msfadmin@192.168.56.105's password: 
Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

To access official Ubuntu documentation, please visit:
http://help.ubuntu.com/
No mail.
Last login: Sat Aug 31 14:57:05 2019
msfadmin@metasploitable:~$ 

Metasploitable2 の管理者権限を取得

msfadmin@metasploitable:~$ sudo su -
[sudo] password for msfadmin: 
root@metasploitable:~# 

tail コマンドで syslog のリアルタイム監視を行う

root@metasploitable:~# tail -f /var/log/syslog 
Aug 31 15:25:31 metasploitable postfix/smtpd[4972]: disconnect from unknown[192.168.56.102]
Aug 31 15:25:33 metasploitable in.rshd[4976]: connect from 192.168.56.102 (192.168.56.102)
Aug 31 15:25:33 metasploitable in.rlogind[4979]: connect from 192.168.56.102 (192.168.56.102)
Aug 31 15:28:51 metasploitable postfix/anvil[4975]: statistics: max connection rate 1/60s for (smtp:192.168.56.102) at Aug 31 15:25:31
Aug 31 15:28:51 metasploitable postfix/anvil[4975]: statistics: max connection count 1 for (smtp:192.168.56.102) at Aug 31 15:25:31
Aug 31 15:28:51 metasploitable postfix/anvil[4975]: statistics: max cache size 1 at Aug 31 15:25:31
Aug 31 15:32:18 metasploitable dhclient: DHCPREQUEST of  on eth0 to 192.168.56.100 port 67
Aug 31 15:32:18 metasploitable dhclient: DHCPACK of 192.168.56.105 from 192.168.56.100
Aug 31 15:32:18 metasploitable dhclient: can't create /var/lib/dhcp3/dhclient.eth0.leases: Permission denied
Aug 31 15:32:18 metasploitable dhclient: bound to 192.168.56.105 -- renewal in 476 seconds.

この状態で Kali から Metasploitable2 に nmap ステルススキャンを行う

ポートスキャンのテクニック |
-sS (TCP SYN スキャン)
SYNスキャンはデフォルトであり、正当な理由で最もよく使用されるスキャンオプションである。強制的なファイアウォールによる妨害のない、高速なネットワーク上では、数千ポート毎秒という高速なスキャンを実行できる。SYNスキャンは、TCPコネクションを確立しないため、比較的秘匿性が高い。また、NmapのFin/Null/Xmas、Maimon、Idleスキャンのように特定のプラットフォームの特質に左右されることはなく、規格準拠のTCPスタックなら何に対しても機能する。さらには、open、closed、およびfilteredというポートの状態を明確かつ確実に区別することができる。

この技法は、完全なTCPコネクションを開くわけではないので、 ハーフオープン(half-open)スキャンと呼ばれることも多い。あたかも実際にコネクションを開くつもりがあるかのように、SYNパケットを送信し、応答を待つ。SYN/ACKの応答は、ポートが待ち受け状態(open)であることを示し、またRST(reset)は、待ち受け状態にないことを示している。数回再送信しても何の応答もない場合、ポートはfilteredと見なされる。また、ICMP到達不能エラー(タイプ 3、コード 1、2、3、9、10、13)が送り返された場合も、ポートはfilteredと見なされる。

よって nmap を実行しても syslog には何も書き込まれない

root@kali:~# nmap -sS 192.168.56.105
Starting Nmap 7.80 ( https://nmap.org ) at 2019-09-01 05:09 JST
Nmap scan report for 192.168.56.105
Host is up (0.013s latency).
Not shown: 977 filtered ports
PORT     STATE SERVICE
21/tcp   open  ftp
22/tcp   open  ssh
23/tcp   open  telnet
25/tcp   open  smtp
53/tcp   open  domain
80/tcp   open  http
111/tcp  open  rpcbind
139/tcp  open  netbios-ssn
445/tcp  open  microsoft-ds
512/tcp  open  exec
513/tcp  open  login
514/tcp  open  shell
1099/tcp open  rmiregistry
1524/tcp open  ingreslock
2049/tcp open  nfs
2121/tcp open  ccproxy-ftp
3306/tcp open  mysql
5432/tcp open  postgresql
5900/tcp open  vnc
6000/tcp open  X11
6667/tcp open  irc
8009/tcp open  ajp13
8180/tcp open  unknown

Nmap done: 1 IP address (1 host up) scanned in 5.98 seconds
~(前略)~
Aug 31 15:32:18 metasploitable dhclient: DHCPACK of 192.168.56.105 from 192.168.56.100
Aug 31 15:32:18 metasploitable dhclient: can't create /var/lib/dhcp3/dhclient.eth0.leases: Permission denied  
 ↑ なんか関係のないエラーが出てるが……
Aug 31 15:32:18 metasploitable dhclient: bound to 192.168.56.105 -- renewal in 476 seconds.

次はコネクトスキャンを実行してみる

ポートスキャンのテクニック |
-sT (TCP connect() スキャン)
 TCP Connect()スキャンは、SYNスキャンを選択できない場合のデフォルトのTCPスキャンタイプである。ユーザが生パケットの権限を持たないか、IPv6ネットワークをスキャンする場合がこれにあてはまる。Nmapは、他のほとんどのスキャンタイプのように生パケットに書き込むのではなく、connect()システムコールを発行して、ターゲットのマシンやポートにとのコネクションを確立するよう下位OSに要求する。これは、WebブラウザP2Pクライアント、その他ほとんどのネットワーク対応アプリケーションがコネクションを確立するために使用するのと同じ高レベルのシステムコールである。これは、「BerkeleyソケットAPI」というプログラミングインターフェースの一部である。Nmapは、生パケットの応答を回線から読み込むのではなく、このAPIを使って、接続を試みるたびにステータス情報を入手する。

SYNスキャンが利用できる場合は通常、そちらを使用した方がよい。Nmapは生パケットよりも、高レベルのシステムコールであるconnect()に対するほうが制御の自由度が低いので、処理効率も悪くなるからだ。connect()システムコールは、SYNスキャンが行うようにハーフオープン接続をリセットするのではなく、ターゲットのopenポートとのコネクションを確立する。この処理は、同じ情報を得るのにさらに多くの時間とパケットを必要とするだけでなく、ターゲットマシンのログに接続が記録される可能性も高くなる。まともなIDSならどちらも検知するはずだが、たいがいのマシンにはそのような警告システムは備わっていない。平均的なUNIXシステムで実行されているサービスの多くは、Nmapが接続を確立し、その後データ送信を行わずに接続を閉じた場合、syslogに簡単な記録や時には不可解なエラーメッセージを追加する。真にお粗末なサービスは、これが起きた場合に停止してしまうが、まずめったにないことだ。管理者は、特定のシステムからの接続試行がかなりの回数にわたってログに記録されているのを発見したら、このconnect()スキャンのターゲットになっていると見なすべきである。

root@kali:~# nmap -sT 192.168.56.105
Starting Nmap 7.80 ( https://nmap.org ) at 2019-09-01 05:11 JST
Nmap scan report for 192.168.56.105
Host is up (0.016s latency).
Not shown: 977 filtered ports
PORT     STATE SERVICE
21/tcp   open  ftp
22/tcp   open  ssh
23/tcp   open  telnet
25/tcp   open  smtp
53/tcp   open  domain
80/tcp   open  http
111/tcp  open  rpcbind
139/tcp  open  netbios-ssn
445/tcp  open  microsoft-ds
512/tcp  open  exec
513/tcp  open  login
514/tcp  open  shell
1099/tcp open  rmiregistry
1524/tcp open  ingreslock
2049/tcp open  nfs
2121/tcp open  ccproxy-ftp
3306/tcp open  mysql
5432/tcp open  postgresql
5900/tcp open  vnc
6000/tcp open  X11
6667/tcp open  irc
8009/tcp open  ajp13
8180/tcp open  unknown

Nmap done: 1 IP address (1 host up) scanned in 4.87 seconds

syslog に nmap 実行のログが記録される。

# tail -f /var/log/syslog 
Aug 31 16:12:55 metasploitable postfix/smtpd[5172]: connect from unknown[192.168.56.102]
Aug 31 16:12:55 metasploitable postfix/smtpd[5172]: lost connection after CONNECT from unknown[192.168.56.102]
Aug 31 16:12:55 metasploitable postfix/smtpd[5172]: disconnect from unknown[192.168.56.102]
Aug 31 16:12:55 metasploitable in.telnetd[5228]: connect from 192.168.56.102 (192.168.56.102)
Aug 31 16:12:55 metasploitable telnetd[5228]: doit: getnameinfo: Success
Aug 31 16:12:55 metasploitable telnetd[5228]: ttloop: peer died: EOF 
Aug 31 16:12:57 metasploitable in.rexecd[5230]: connect from 192.168.56.102 (192.168.56.102)
Aug 31 16:12:57 metasploitable in.rshd[5231]: connect from 192.168.56.102 (192.168.56.102)
Aug 31 16:12:57 metasploitable in.rlogind[5232]: connect from 192.168.56.102 (192.168.56.102)

最初のステルススキャンはTCPセッションを確立せず、SYN に対する返答で判断するので対象となるサーバーにログが残りにくい。
後半のコネクトスキャンはスリーウェイハンドシェイクが完了することでポートが開いていることを認識する。

/* -----codeの行番号----- */