2020年5月5日 星期二

Kali Linux 學習筆記 (一) : 樹莓派 Zero W 燒錄 Kali Linux 作業系統

4/30 在 momo 買了下面這本書 :

不會C也是資安高手:用Python和駭客大戰三百回合(第二版)


Source : 博客來


此書第二章介紹資安滲透測試最常用的作業系統 : Kali Linux, 我想能否在樹莓派上面安裝 Kali Linux 呢? 答案是可以的, Kali Linux 有推出 ARM 架構的版本, 特別是有支援 Raspberry Pi Zero W, 參考 :

在樹莓派上安裝Kali Linux並進行設置分步教程
Raspberry Pi 安裝 Kali Linux 當隨身漏洞檢測和網路工具盒

樹莓派測試筆記索引參考 :

樹莓派 Raspberry Pi 文章列表
樹莓派常用的 Linux 指令

1. 下載 Kali Linux 映像檔 :

先到下列網址, 點選 "RaspberryPi Foundation" :

https://www.offensive-security.com/kali-linux-arm-images/

再點選 "Image Name" 欄位中的 "Kali Linux Raspberry Pi Zero/Zero W " 即可下載 .xz 映像檔, 我下載的是 kali-linux-2020.1-rpi0w-nexmon.zx (大小約 721 MB) :

Kali Linux image for Raspberry Pi Zero/Zero W




將下載下來的 .xz 檔案解壓縮為 .img 映像檔 (約 7.2GB, 可用 Bandizip 軟體) :

kali-linux-2020.1-rpi0w-nexmon.img


2. 燒錄 Kali Linux 映像檔 :

準備一張 8GB 以上的 MicroSD 卡, 先用 Win 10 的格式化功能或 SDFormatter 將其格式化為 FAT16 格式, 再用 Win32 Disk Imager 將映像檔寫入, 參考 :

樹莓派重新安裝 Raspbian 作業系統





燒錄完成後取出 MicroSD 卡插入 Raspberry Pi Zero W 中, 準備做開機設定.


3. Kali Linux 開機與 SSH 設定 : 

將 Raspberry Pi Zero W 接好 Mini HDMI 與鍵鼠組之 USB Dongle :




左邊黑色接頭是 Mini-HDMI 轉 HDMI, 中間白色線接鍵鼠組 Dongle, 右邊橘色線是電源. 插電開機後, 螢幕會跑一堆開機檢測, 最後顯示 Kali Linux 的登入提示, 預設管理帳號為 root, 密碼為 toor :

login: root
password: toor

出現提示號表示登入成功, 用 uname 指令檢查版本與 CPU 架構 :

root@kali:~# uname -a 
Linux kali 4.19.93-Re4son+ #1 Wed Jan 8 14:55:22 AEDT 2020 armv6l GNU/Linux
root@kali:~# lsb_release -a 
-bash: lsb_release: command not found
root@kali:~# startx 
-bash: startx: command not found

可見 Kali Linux 版本是 4.19.93, CPU 是 armv61 架構, 沒有 lsb_release 指令, 預設是 CLI 介面, 沒有搭載 GUI 環境 (例如 Gnome), 需另行安裝. 

首先需設定 SSH 以利進行無頭存取 (headless access), 亦即利用筆電或 PC 透過 SSH 管理樹莓派, 這樣就不需要將樹莓派接上螢幕與鍵鼠組了, 可用 nano 或 vim 編輯器編輯 /etc/ssh/sshd_config 這個檔案 :

root@kali:~# nano /etc/ssh/sshd_config 

找尋 PermitRootLogin 與 PasswordAuthentication 這兩個參數, 將其前面的注釋 # 字元刪除, 變成如下設定 :  

PermitRootLogin yes
PasswordAuthentication yes

然後用下列兩指令重啟 SSH 功能以及開機自動開啟 SSH :

root@kali:~# service ssh restart   
root@kali:~# update-rc.d ssh enable   

這樣 ssh 服務就打開了, 但還缺個東西才能進行無頭存取 : 連上網路. Raspberry Pi Zero W 有內建 WiFi, 我們只要設定好無線網路 wlan0 即可連網.


4. 設定無線網路連線 :

Raspberry Pi Zero W 內建無線網路介面 (wlan0), 我們只要設定好無線網路 wlan0 即可連網. 以下是手動設定方式 :

首先停掉 network-manager 服務 :

root@kali:~# service network-manager stop 

然後產生無線網路設定檔 wpa.conf 用來連線無線基地台, 指令語法如下 :

wpa_passphrase SSID PASSWORD > wpa.conf

因為我都使用手機行動網路, 因此輸入手機的 SSID 與網路連線密碼 :

root@kali:~# wpa_passphrase TonyNote8 123456 > wpa.conf

這樣就可以用下列指令來連線基地台了 :

root@kali:~#  wpa_supplicant -i wlan0 -B -c wpa.cong

最後用 dhclient 要求為 wlan0 分配 IP :

root@kali:~#  dhclient wlan0

用 ifconfig 指令檢查 IP :

root@kali:~# ifconfig




可見 inet 欄位值已經變成 IP, 這樣就可以從位於同一網段的 PC 或筆電用 Putty 以 SSH 連線樹莓派進行遠端無頭存取了 :

login as: root 
root@192.168.43.10's password: toor
Linux kali 4.19.93-Re4son+ #1 Wed Jan 8 14:55:22 AEDT 2020 armv6l

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

Kali GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Fri Nov 29 16:49:55 2019
root@kali:~#

不過上面都是手動連線基地台的方法, 每次重開機都要來一次很不方便, 可以編輯 /etc/network/interfaces 網路介面檔設定每次開機後固定連線某個基地台 (例如手機行動網路分享), 參考下列文章做法 :

樹莓派的 Wifi 設定 : 使用迅捷 FW150US

用 cat 指令檢視 Kali Linux 的 /etc/network/interfaces 原始內容只有 loopback 而已 :

root@kali:~# cat /etc/network/interfaces   
auto lo
iface lo inet loopback

用 nano 或 vim 編輯 /etc/network/interfaces, 加入如下連線 WiFi 網路部分 :

allow-hotplug wlan0
auto wlan0
iface wlan0 inet dhcp
wpa-ssid "無線基地台 SSID"
wpa-psk "無線基地台連線密碼"

完成後檢視如下 :

root@kali:~# nano /etc/network/interfaces
root@kali:~# cat /etc/network/interfaces   
auto lo
iface lo inet loopback

allow-hotplug wlan0
auto wlan0
iface wlan0 inet dhcp
wpa-ssid "TonyNote8"
wpa-psk "123456"

然後重開機 :

root@kali:~# reboot

用 ifconfig 檢查果然已自動連線 WiFi 基地台 :

root@kali:~# ifconfig
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 282  bytes 87248 (85.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 282  bytes 87248 (85.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.43.222  netmask 255.255.255.0  broadcast 192.168.43.255
        inet6 2001:b400:e705:97e7:ba27:ebff:fe18:6a95  prefixlen 64  scopeid 0x0<global>
        inet6 fe80::ba27:ebff:fe18:6a95  prefixlen 64  scopeid 0x20<link>
        ether b8:27:eb:18:6a:95  txqueuelen 1000  (Ethernet)
        RX packets 216850  bytes 316088403 (301.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 59544  bytes 6528293 (6.2 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

可見已獲得基地台 DHCP 伺服器指派 192.168.43.222 這個 IP 了.

不過每次連線可能會被指配不同 IP, 在無頭存取情況下 (手邊無螢幕) 無法得知 IP, 應該要求 DHCP 指派一個固定 IP, 這樣就不需要先檢查 IP 了. 作法是編輯 DHCP 設定檔 /etc/dhcpcd.conf, 加入固定 IP 即可, 參考 :

樹莓派 Wifi 固定 IP 的新作法

檢視此檔案發現 Kali Linux 並無此檔案 :

root@kali:~# cat /etc/dhcpcd.conf 
cat: /etc/dhcpcd.conf: No such file or directory

用 nano 或 vim 編輯此檔, 加入如下設定 :

interface wlan0
static ip_address=192.168.43.192
static routers=192.168.43.1
static domain_name_servers=192.168.43.1

其中 192.168.43.192 是我想要 DHCP 指派的固定 IP (我手機內網為 192.168.43.xxx 網段), 存檔後檢視內容如下 :

root@kali:~# nano /etc/dhcpcd.conf 
root@kali:~# cat /etc/dhcpcd.conf 
interface wlan0
static ip_address=192.168.43.192
static routers=192.168.43.1
static domain_name_servers=192.168.43.1

但是重開機後無效, 還是被指派 192.168.43.222 的 IP. 這是我前一次安裝 Rasbian 後找到有效的新作法, 顯然在 Kali Linux 不是用這方式 (或許 dhcpcd.conf 作法在最新版 Rasbian 說不定也過時了, 最近來更新看看).

我又參考了下面這篇文章做法, 直接在 /etc/network/interfaces 指定固定 IP, 這是比 dhcpcd.conf 更早的做法 :

Kali Linux 設定IP
Raspberry Pi:固定私有IP與dhcpcd - 葉難

root@kali:~# nano /etc/network/interfaces 
root@kali:~# cat /etc/network/interfaces   
auto lo
iface lo inet loopback

allow-hotplug wlan0
auto wlan0

iface wlan0 inet static
address 192.168.43.192
netmask 255.255.255.0
gateway 192.168.43.1
wpa-ssid "TonyNote8"
wpa-psk "123456"
root@kali:~# reboot 

同樣也是沒有用, 甚至更慘, 完全沒連線 (192.168.43.222 也沒了), Why? 難道手機基地台本身就不理會固定 IP 的要求? 這有空再研究. 反正要用 SSH 連線時查一下手機就知道 IP 了.


5. 測試 Python :

這本書使用 Python 語言, Kali Linux 同時搭載了 Python 2 與 Python 3, 直接輸入 python 進入 Python 2 Shell, 輸入 python3 則進入 Python 3 Shell :

root@kali:~# python 
Python 2.7.17 (default, Oct 19 2019, 23:36:22)
[GCC 9.2.1 20191008] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print 'ok' 
ok
>>> exit() 
root@kali:~# python3 
Python 3.8.2 (default, Apr  1 2020, 15:39:53)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print('ok') 
ok

可見此版 Kali Linux 都是搭載最新的 Python 版本.

用 pip 檢查已安裝的 Python 套件 :

root@kali:~# pip3 list 
Package          Version
---------------- --------------
aiodns           2.0.0
asn1crypto       0.24.0
beautifulsoup4   4.8.2
blinker          1.4
certifi          2019.11.28
chardet          3.0.4
Click            7.0
click-plugins    1.1.1
colorama         0.4.3
configobj        5.0.6
cryptography     2.6.1
dbus-python      1.2.16
decorator        4.3.0
dicttoxml        1.7.4
dnspython        1.16.0
entrypoints      0.3
Flask            1.1.1
gevent           1.4.0
gpg              1.13.1-unknown
greenlet         0.4.15
grequests        0.4.0
html5lib         1.0.1
idna             2.6
ipython-genutils 0.2.0
itsdangerous     0.24
Jinja2           2.10.1
jsonschema       2.6.0
jupyter-core     4.6.1
keyring          18.0.1
keyrings.alt     3.2.0
lxml             4.4.2
MarkupSafe       1.1.0
mechanize        0.4.5
nbformat         5.0.3
netaddr          0.7.19
pip              18.1
plotly           4.4.1
pycares          3.1.1
pycrypto         2.6.1
PyGObject        3.34.0
pyinotify        0.9.6
pyOpenSSL        19.0.0
python-magic     0.4.16
pytz             2019.3
pyxdg            0.26
PyYAML           5.3
requests         2.22.0
retrying         1.3.3
RPi.GPIO         0.6.5
SecretStorage    2.3.1
setuptools       44.0.0
shodan           1.21.2
simplejson       3.16.0
six              1.13.0
soupsieve        1.9.5
texttable        1.6.2
theHarvester     3.1.0
traitlets        4.3.3
unicodecsv       0.14.1
urllib3          1.25.6
webencodings     0.5.1
Werkzeug         0.16.0
wheel            0.33.6
XlsxWriter       1.1.2


6. 關於桌面系統 :

Raspberry Pi Zero 版的 Kali Linux 預設沒有桌面系統, 開機就只有 CLI 介面而已, 執行 startx 回應 command not found 訊息, 應該是沒有搭載桌面系統. 我參考下面文章安裝 gnome 後發現開機不久一定會進入 gnome 畫面, 而且用預設帳密 root 與 toor 無法登入, 所以還是重新格式化 SD 卡重新回到 CLI 介面.

Kali linux desktop not loading
Kali Linux won't boot to GUI

root@kali:~# sudo apt-get install gnome    (安裝很久)

其實資安用途的 Kali Linux 主要是 CLI 操作, 桌面系統其實不重要.

總結以上測試, 燒錄完映像檔開機後, 只要編輯 /etc/ssh/sshd_config 與 /etc/network/interfaces 這兩個檔案就可以開始使用 Kali Linux 了 :

$ nano /etc/ssh/sshd_config

PermitRootLogin yes
PasswordAuthentication yes

$ service ssh restart
$ update-rc.d ssh enable

$ nano /etc/network/interfaces

auto lo
iface lo inet loopback

allow-hotplug wlan0
auto wlan0
iface wlan0 inet dhcp
wpa-ssid "TonyNote8"
wpa-psk "123456"


7. 查詢 IP 以便進行無頭存取 :

經過上面的 WiFi 連線設定後, 只要打開手機基地台分享, 則 Pi Zero W 開機後便會自動透過手機 WiFi 連接網路, 只要筆電也一樣連接手機基地台, 就可以利用筆電對 Pi Zero W 進行無頭存取, 完全不需要接螢幕與鍵鼠組.

首先必須從手機查詢 Pi Zero W 所獲得的 IP, 進入手機的 "設定/連接" :




點 "行動無線基地台與網路共享" :




點 "行動無線基地台" :




拉到最底下 "以連接的設備" 會找到 "kali" :




點 "kali" 即可查知 Pi Zero W 的 IP 位址了 :




這樣就可以用 Putty 來進行無頭存取了 :




參考 :

# Kali Linux won't boot to GUI
How to boot Kali Linux in GUI mode


2020-05-06 補充 :

關於固定 IP 設定, 或許可參考下面這篇做法試試看 :

將樹莓派 (Raspberry Pi) 的 eth0 / wlan0 網路介面設定固定 IP

2020-05-08 補充 :

我照上面那篇測試, 發現卡在啟動 dhcpcd 服務上, 作者原文 :

"前提是 dhcpcd 和 networking 要開機時就預設啟動,指令如下:
systemctl enable dhcpcd
systemctl enable networking"

啟動 networking 沒問題, 但啟動 dhcpcd 卻有問題, 說這個服務不存在 :

root@kali:~# systemctl enable dhcpcd 
Failed to enable unit: Unit file dhcpcd.service does not exist.

我參考下列文章去安裝 dhcpcd5 卻失敗 :

How to manually install dhcpcd?
http://manpages.ubuntu.com/manpages/trusty/man8/dhcpcd5.8.html
Setup DHCP or static IP address from command line in Linux
Kali Linux常用服務配置教程安裝及配置DHCP服務
設定 Kali Linux 取得 DHCP IP

root@kali:~# sudo apt-get install dhcpcd5
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package dhcpcd5

沒時間去研究問題在哪, 所以就這樣吧, 反正連線 WiFi 時就可從手機輕易查到 IP.

沒有留言 :