之前介紹的移動式滲透測試--帶著我的 Nexus7進行 Wifi 行動探索(Wardriving/Warwalking)是帶著一台外接無線網卡的平板進行Wardriving,最近跟著同事玩 RaspBerry Pi(見RaspBerry pi 2 + 3.5" TFT + Kali Linux 移動式滲透測試平台),想說用 RaspBerry 體積可以更輕巧,這篇就來談談用RaspBerry做成的 Wardriving 裝置,這台裝置已經事先安裝 Kali Linux for RaspBerry,這一部分就不再重述,如果不知如何在RaspBerry上安裝Kali,請參考RaspBerry pi 2 + 3.5" TFT + Kali Linux 移動式滲透測試平台。為了要將裝置做得更輕巧,且不易引人注目,所以也把3.5"的TFT螢幕拆掉了。
先來看看我的成品:
Wardriving 裝置的內部,就只有主機板及GSP模組 |
閤上蓋子後,就一個名片盒大小,右邊是偵查用的WiFi網卡(TP-Link:TL-WN721N),下方還有一只16GB的USB隨身碟 |
只有這麼小? 沒有螢幕? 不接鍵盤? 那要怎麼操作? 我是利用VNC,為了一開機就能透過VNC控制RaspBerry,需要做兩項設定:
第一項是啟用RaspBerry的DHCP功能:這樣才能讓控制端的電腦(或平板)連接到RaspBerry時自動取得相同網段的IP,我是利用 dnsmasq 來實作dhcp Server,設定步驟如下:
~#
apt-get install dnsmasq
#安裝 dnsmasq
~# nano /etc/dnsmasq.conf #編輯 dnsmasq.confi,內容如下
# 可設置不同名稱的 dnsmasq.conf,啟動 dnsmasq 時,用 -C CONF-FILE 指定
~# nano /etc/network/interfaces # 編輯 /etc/network/interfaces 加入以下內容
~# nano /etc/dnsmasq.conf #編輯 dnsmasq.confi,內容如下
log-facility=/var/log/dnsmasq.log
port=
listen-address=192.168.5.1 # 這裡要對應到RaspBerry的有關網卡(eth0)
dhcp-leasefile=/tmp/dnsmasq.leases # ip 配發結果的紀錄
interface = eth0 #指定配發的介面卡
dhcp-range=eth0:1,192.168.5.151,192.168.5.200,12h
dhcp-option=1,255.255.255.0 #subnet mask
dhcp-option=3,192.168.5.254 #default gateway
dhcp-option=28,192.168.5.255 #broadcast
log-queries
log-dhcp
port=
listen-address=192.168.5.1 # 這裡要對應到RaspBerry的有關網卡(eth0)
dhcp-leasefile=/tmp/dnsmasq.leases # ip 配發結果的紀錄
interface = eth0 #指定配發的介面卡
dhcp-range=eth0:1,192.168.5.151,192.168.5.200,12h
dhcp-option=1,255.255.255.0 #subnet mask
dhcp-option=3,192.168.5.254 #default gateway
dhcp-option=28,192.168.5.255 #broadcast
log-queries
log-dhcp
# 可設置不同名稱的 dnsmasq.conf,啟動 dnsmasq 時,用 -C CONF-FILE 指定
~# nano /etc/network/interfaces # 編輯 /etc/network/interfaces 加入以下內容
auto eth0
iface eth0 inet static
address 192.168.5.1 #使用固定位址,才知道連線對像
netmask 255.255.255.0
gateway 192.168.5.1
post-up /etc/init.d/dnsmasq start
post-down /etc/init.d/dnsmasq stop
iface eth0 inet static
address 192.168.5.1 #使用固定位址,才知道連線對像
netmask 255.255.255.0
gateway 192.168.5.1
post-up /etc/init.d/dnsmasq start
post-down /etc/init.d/dnsmasq stop
完成上面設定後,將RaspBerry重開機(執行 reboot 指令),之後就可以藉由RaspBerry的Ethernet介面利用 SSH 操控RaspBerry,不過SSH開啟的是虛擬 TTY (pts/N),每次斷線後重新連線,並不一定可以回到前一組console,也就是說看不到之前執行的情形,所以才會想用 VNC。
第二項是安裝及設定VNC:步驟如下:
首先編輯 /etc/NetworkManager/NetworkManager.conf
將 managed=false 改成 managed=true
再執行 service network-manager restart #重新啟動 network-manager
接著安裝 itghtvncserver
將 managed=false 改成 managed=true
再執行 service network-manager restart #重新啟動 network-manager
接著安裝 itghtvncserver
~#
apt-get install tightvncserver
# 然後在 /etc/init.d 目錄裡建立 vncboot 檔案,內容如下:
~# chmod 755 /etc/init.d/vncboot # 將剛剛編輯的vncboot 設定為可執行檔
~# update-rc.d vncboot defaults # 將 vncboot 設定為開機時執行的服務
~# service vncboot start # 第一次先手動執行,以便設定連線密碼,密碼只能設8個字元
# 接下來要設定開機時,tty1 不執行getty,再搭配 ~/.profile 自動啟動 XWindow
~# nano /etc/inittab # 編輯 /etc/inittab
# 找到「1:2345:respawn:/sbin/getty 115200 tty1」 這一行,將它註解掉(在前頭加 # )
~# nano ~/.profile # 編緝 ~/.profile,內容如下
~# reboot # 重新啟動 RaspBerry
# 然後在 /etc/init.d 目錄裡建立 vncboot 檔案,內容如下:
### BEGIN INIT INFO
# Provides: vncboot
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start VNC Server at boot time
# Description: Start VNC Server at boot time.
### END INIT INFO
# 上面的資料表頭要小心,不可敲錯字,否則可能無法順利執行 vncboot
#! /bin/sh
# /etc/init.d/vncboot
USER="root"
HOME="/root"
export USER HOME # 將USER 及 HOME 轉為環境變數
case "$1" in # 執行vncboot 時要指定 start 或 stop
start)
echo "Starting VNC Server"
#下一行可以自行設定螢幕解析度及顏色數
su $USER -c "/usr/bin/vncserver :0 -geometry 1280x800 -depth 16 -pixelformat rgb565"
;;
stop)
echo "Stopping VNC Server"
/usr/bin/vncserver -kill :0
;;
*)
echo "Usage: /etc/init.d/vncboot {start|stop}"
exit 1
;;
esac
exit 0
# Provides: vncboot
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start VNC Server at boot time
# Description: Start VNC Server at boot time.
### END INIT INFO
# 上面的資料表頭要小心,不可敲錯字,否則可能無法順利執行 vncboot
#! /bin/sh
# /etc/init.d/vncboot
USER="root"
HOME="/root"
export USER HOME # 將USER 及 HOME 轉為環境變數
case "$1" in # 執行vncboot 時要指定 start 或 stop
start)
echo "Starting VNC Server"
#下一行可以自行設定螢幕解析度及顏色數
su $USER -c "/usr/bin/vncserver :0 -geometry 1280x800 -depth 16 -pixelformat rgb565"
;;
stop)
echo "Stopping VNC Server"
/usr/bin/vncserver -kill :0
;;
*)
echo "Usage: /etc/init.d/vncboot {start|stop}"
exit 1
;;
esac
exit 0
~# chmod 755 /etc/init.d/vncboot # 將剛剛編輯的vncboot 設定為可執行檔
~# update-rc.d vncboot defaults # 將 vncboot 設定為開機時執行的服務
~# service vncboot start # 第一次先手動執行,以便設定連線密碼,密碼只能設8個字元
# 接下來要設定開機時,tty1 不執行getty,再搭配 ~/.profile 自動啟動 XWindow
~# nano /etc/inittab # 編輯 /etc/inittab
# 找到「1:2345:respawn:/sbin/getty 115200 tty1」 這一行,將它註解掉(在前頭加 # )
~# nano ~/.profile # 編緝 ~/.profile,內容如下
if [ -z "$DISPLAY" ] && [ $(tty) == /dev/tty1 ]; then
/usr/bin/startxfce4
fi # 開機就進入 startx 模式
/usr/bin/startxfce4
fi # 開機就進入 startx 模式
~# reboot # 重新啟動 RaspBerry
好了,先用我的筆電試試看,連接兩台的Ethernet 埠,嗯! 真的有自動取得IP,然後利用 VNC 連線成功。
既然要帶出門,總不能還要再加一台筆電吧!如果可以用平板就太棒了,幸好Nexus7可以利用外接式的USB Ethernet,就將筆電改成 Nexus7 !
或許您會問「幹嘛不用WiFi?」如果用WiFi就必須在RaspBerry多加一張無線網卡,還要多帶一台WiFi AP,何況Wardriving 裝置只有在「啟動」和「結束」時需要連線,無線網卡不連線時只有平白耗電。
左上角的零件就是USB 乙太網卡,RJ45網路線接在RaspBerry,另一端是USB接頭,接到平板電腦。 |
啟動平板上的VNC viewer,跟筆電一樣成功連線 |
接下來就是Wardriving所需的功能:
~# apt-get install kismet gpsd # 安裝 Kismet 和 gpsd
~# mount /dev/mmcblk0p1 /boot # mount RaspBerry的開機區,以便修改 cmdline.txt
~# nano /boot/cmdline.txt
# 將cmdline.txt中 dwc_otg.lpm_enable=0
中有關 ttyAMA0 的部分都刪除
~# nano /etc/inittab
# 編輯 /etc/inittab,將 T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
這一行註解掉(在前頭加 # )
# 利用下列指令測試GPS是否有作用,記得要拿到室外
~# killall gpsd
~# gpsd /dev/ttyAMA0 -F /var/rungpsd.sock
~# cat /dev/ttyAMA0 # 下了這一指令後,螢幕上應該會輸出一堆訊息
編輯 /etc/kismet/kismet.conf,找到下面這兩行,將註解取消,並指定適當的值(如我的網卡是wlan0,如果您的網卡不是wlan0,就該配合修正)
ncsource=wlan0
gpstype=gpsd
gpstype=gpsd
不想每次執行時都要敲落落長的指令,就寫成一支批次檔,並存成 do_kismet ,內容如下:
#! /bin/bash
killall gpsd #先關閉所有 gpsd 服務
sleep 3
gpsd /dev/ttyAMA0 & # 重新以背景模式啟動 gpsd
sleep 1
if [ -n "$1" ]; then # 如果有指定儲存目錄
umount $1
mount /dev/sda1 $1 #就將外接隨身碟 mount 到指定的目錄
sleep 3
kismet -f /etc/kismet/kismet.conf -p $1 # 啟動 kismet時就指定輸出目錄
else
kismet -f /etc/kismet/kismet.conf
fi
sleep 3
killall do_kismet # 結束時,關閉所有 kismet 服務
echo "kismet is terminated!"
sleep 3
gpsd /dev/ttyAMA0 & # 重新以背景模式啟動 gpsd
sleep 1
if [ -n "$1" ]; then # 如果有指定儲存目錄
umount $1
mount /dev/sda1 $1 #就將外接隨身碟 mount 到指定的目錄
sleep 3
kismet -f /etc/kismet/kismet.conf -p $1 # 啟動 kismet時就指定輸出目錄
else
kismet -f /etc/kismet/kismet.conf
fi
sleep 3
killall do_kismet # 結束時,關閉所有 kismet 服務
echo "kismet is terminated!"
上面的批次檔,為了將收集到的資料寫到外接USB隨身碟,每次執行時都要指定 /mnt 參數,為了偷懶,另寫一支直接輸到隨身碟的短程式,命名為 do_kis
#! /bin/bash
./do_kismet /mnt
./do_kismet /mnt
上面兩支批次檔,第一次存檔時,只是一般文字檔,並不能執行,請再執行下面兩行,將它們改成可執行。
~# chmod 755 do_kismet
~# chmod 755 do_kis
~# chmod 755 do_kis
利用平板啟動VNC viewer 後,在 Console 裡執行 ./do_kis
啟動 kismet 確實有抓到AP 資訊 |
後記:
至於利用 Nexus 或 RaspBerry進行 Wardriving 哪一種方便?我個人覺得還是 Nexus 7 方便,只要外接無線網卡就解決了,也不用外接行動電源。只是 Nexus 7必須進行 Root,安裝 Kali 過程每繁瑣,而且 Nexus7 的價格也比 RaspBerry 高,之前若沒有準備 nexus 做為滲透工具,RaspBerry是相當不錯的選擇,特別是 RaspBerry 可以利用更換 micro SD 變換作業環境。
至於利用 Nexus 或 RaspBerry進行 Wardriving 哪一種方便?我個人覺得還是 Nexus 7 方便,只要外接無線網卡就解決了,也不用外接行動電源。只是 Nexus 7必須進行 Root,安裝 Kali 過程每繁瑣,而且 Nexus7 的價格也比 RaspBerry 高,之前若沒有準備 nexus 做為滲透工具,RaspBerry是相當不錯的選擇,特別是 RaspBerry 可以利用更換 micro SD 變換作業環境。
終於 走馬觀花 囫圇吞棗 狼吞虎咽 得把博文粗閱了一遍。
回覆刪除非常感謝您幫我衝人氣,個人所學有限,如果您發現內容有謬誤之處,也請您多多指教。畢竟不是敢寫就表示內容都是對的,而知識也因為大家分享才會愈來愈精進
刪除我只是一個 noob ,過來您的博客學習的。
刪除如果發現錯誤會指出來的,嗯,分享交流才會有進步。
我只是一個 noob ,過來您的博客學習的。
刪除如果發現錯誤會指出來的,嗯,分享交流才會有進步。
參考您的blog
回覆刪除VNC部分使用RealVNC軟體(較習慣),隨開機啟動部分設定了幾天
發現不需要修改到etc/init.d 或 rc.local 只要輸入重啟服務即可
systemctl disable vncserver-x11-core
systemctl enable vncserver-x11-core