初めに
こんにちは、新卒2年目のセキュリティエンジニアです。
現在は脆弱性診断業務に従事しています。
今回は、Hack The Boxの「Wifinetic」に挑戦し、その攻略手順をまとめていきます。名前からしてWifiに関係のありそうなマシンです。
初心者の方にも(私も初心者ですが)わかりやすいように、できるだけ丁寧な解説を心がけています。
内容に細かな誤りが含まれている可能性もありますが、どうぞ温かい目でご覧いただければ幸いです。
偵察
まずはnmapで対象マシンで空いているポートを調査していきます。FTP,SSH,DNSのみという変わった構成です。
FTP
FTPはanonymousログインができるので一式ダウンロードしておきます。
employees_wellness.pdf
の中身はこんな感じです。
これは/etc/hosts
に記載しておきます。
入手したファイルの中ではbackup-OpenWrt-2023-07-26.tar
が一番怪しいです。展開してみましょう。
怪しいファイルがわんさか見えますね。
/etc/passwd
はこんな感じ
見えているユーザを一通りuserlist
に記載しておきます。
また、/etc/config
配下にwireless
という名前のファイルがあります。
本マシンのタイトル的にこちらも怪しいので中身を見ておきます。
config wifi-device 'radio0'
option type 'mac80211'
option path 'virtual/mac80211_hwsim/hwsim0'
option cell_density '0'
option channel 'auto'
option band '2g'
option txpower '20'
config wifi-device 'radio1'
option type 'mac80211'
option path 'virtual/mac80211_hwsim/hwsim1'
option channel '36'
option band '5g'
option htmode 'HE80'
option cell_density '0'
config wifi-iface 'wifinet0'
option device 'radio0'
option mode 'ap'
option ssid 'OpenWrt'
option encryption 'psk'
option key 'VeRyUniUqWiFIPasswrd1!'
option wps_pushbutton '1'
config wifi-iface 'wifinet1'
option device 'radio1'
option mode 'sta'
option network 'wwan'
option ssid 'OpenWrt'
option encryption 'psk'
option key 'VeRyUniUqWiFIPasswrd1!'
Wi-Fiの各インターフェースの設定が書かれているファイルのようです。
下二つのwifinet0
.wifinet1
に関してはWi-FiのSSIDとパスキーが見えていますね。
このパスキーがマシンのパスワードにも利用されていると推測し、SSHによるログインを試行してみることにします。
DNS
特に面白い情報は手に入りませんでしたが、せっかくDNSが空いているので。
Initial Access
先ほど作ったユーザリストと見えているパスワードを利用し、hydra
でBF(Brute Force)攻撃します。
hydraではSSHをはじめとした認証システムにおけるBF攻撃を自動で実行するためのツールになります。
ユーザとパスワードをそれぞれl
,p
で指定しますが、リスト指定の場合は大文字です。
無事ヒットした組み合わせがありますね。こちらでSSHログインしてみます。
ログインに成功し、user.txt
が見えていることが分かります。
Privilege Escalation
ここからは権限昇格を目指します。
linpeas
も回しておきましょう。
linpeas
はLinuxマシンで 特権昇格(Privilege Escalation) につながる情報を探索してくれるツールです。こちらから環境に合わせたものをダウンロードしてくるだけで利用できます。
目ぼしいものはパッとは見つかりませんでした。
今回はWiFiに関係ありそうなテーマなので、インターフェースを確認していきます。
netadmin@wifinetic:~$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.10.11.247 netmask 255.255.254.0 broadcast 10.10.11.255
inet6 fe80::250:56ff:feb0:7e25 prefixlen 64 scopeid 0x20<link>
inet6 dead:beef::250:56ff:feb0:7e25 prefixlen 64 scopeid 0x0<global>
ether 00:50:56:b0:7e:25 txqueuelen 1000 (Ethernet)
RX packets 167906 bytes 12372097 (12.3 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 141735 bytes 10675068 (10.6 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 223590 bytes 15021047 (15.0 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 223590 bytes 15021047 (15.0 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
mon0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
unspec 02-00-00-00-02-00-30-3A-00-00-00-00-00-00-00-00 txqueuelen 1000 (UNSPEC)
RX packets 867642 bytes 153945754 (153.9 MB)
RX errors 0 dropped 867642 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.1 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::ff:fe00:0 prefixlen 64 scopeid 0x20<link>
ether 02:00:00:00:00:00 txqueuelen 1000 (Ethernet)
RX packets 16591 bytes 1868534 (1.8 MB)
RX errors 0 dropped 4101 overruns 0 frame 0
TX packets 21156 bytes 2809012 (2.8 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlan1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.23 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::ff:fe00:100 prefixlen 64 scopeid 0x20<link>
ether 02:00:00:00:01:00 txqueuelen 1000 (Ethernet)
RX packets 8651 bytes 1206462 (1.2 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 16591 bytes 2167172 (2.1 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlan2: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether 02:00:00:00:02:00 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
このうちmon0
のような名前の付いているインターフェースは、通常監視モードインターフェースとして利用されます。
iw dev
でさらにインターフェースの詳細を調査していきます。
wlan0
はtype AP
となっており、アクセスポイントとなっていることが分かります。つまり、他のデバイスから接続しに行くことが可能な状態です。
また、mon0
はやはりモニターモードになっているみたいです。
これらの情報から、今回はWPS攻撃を狙っていきます。
WPS
WPSは、Wi-Fiルーターとクライアント(スマートフォンやPCなど)の接続を簡略化するために開発された仕組みで、以下のような方法で利用されます。
-
PIN方式
ルーターに8桁のPINコードが設定されており、クライアントがこのPINを入力することで接続します。
このPINは多くの場合、ルーター本体に印字されています。 -
プッシュボタン方式(PBC)
ルーターとクライアントの双方のボタンを押すことで、一定時間だけ自動的に接続可能になります。 -
NFC方式 / USB方式(現在ではあまり使われていない)
WPSは通常SSIDとパスワードを入力して接続するプロセスを省いた、簡易的な接続方法なのですが、その分脆弱性も存在します。
代表的なものがPIN方式に対する総当たり攻撃です。今回はこれを実施します。
reaver
コマンドを利用して実施可能です。
あとがき
今回はHackTheBoxのWifineticを攻略していきました。普段業務でIoT関連の診断は実施していないので、個人的に学びの多いマシンでした。
理解が甘い箇所が多く、説明が不十分なパートもあるかもしれませんが少しでも参考になれば幸いです。