0%

树莓派安装 Kali 记录

树莓派

昨天晚上鄙人在树莓派的 kali 里在安装某 IDE 的时候死机了,只能断电重启,再开机的时候更新时出现了 Structure Needs Cleaning 错误,找了很多办法没有解决,嫌麻烦,不如重新安装一下树莓派 kali 系统,顺便记录下安装过程。

鄙人使用的是树莓派 3B+,用了半年,总得来说感觉还不错,运行 kali 桌面版还是很流畅的,就是内存有点小,msf 这类的重武器有时候会因为内存不够而崩溃,配上了一个外壳,小触控屏,小键盘,可以随身携带,充电宝就能供电,某品牌 1w 毫安充电宝一格电能用一下午,用来无线渗透效果最好,当然 nmap 扫一扫也行,用来爆破的话效率很低,不过休闲的时候当个 pad 看看电影什么的也挺不错。

树莓派各版本配置如下(图片来源 树莓派实验室

SD 卡

首先需要准备一张 SD 卡,不用太大,经济版 16G,高配版 32G,按需选择即可,如果想在树莓派中存一些大字典可以考虑 64G 或 128G。使用 SDCardFormatter 格式化 SD 卡,格式化的时候选择快速格式化即可。

kali Linux

下载 kali 的树莓派版本,选择Kali Linux RaspberryPi 2 and 3,Kali Linux Rpi0w Nexmon 是为树莓派 zero 提供的,以及 Kali Linux RaspberryPi w/TFT 是为触屏提供的,这两个版本在本文中不涉及。下载完成后会得到.img.xz 后缀的文件,解压即可,听说不解压也可以直接烧录进 SD 卡,但是鄙人并没有成功,为了保险起见还是解压之后在烧录。

把 SD 卡插入电脑(使用读卡器),再使用 Win32DiskImager 将 kali 镜像烧录到 SD 卡中,会弹出一个确认框,警告会擦除 SD 卡中所有数据,直接点击确定。

烧录过程可能会有点慢,左下角可以看到烧录速度,大概需要十分钟到十五分钟,烧录速度具体取决于不同电脑,尽量不要在烧录的时候操作电脑,否则会拖慢烧录速度。

烧录完成后 Windows 会弹出一个框,要格式化这张卡,不用管直接关掉,拔出 SD 卡,理论上此时你的 SD 卡应该会很烫,建议稍微降降温等一会再插入树莓派中。

在树莓派上安装 Kali

刚才已经烧录完了 kali 系统,现在把 SD 卡插到树莓派中,启动电源,会自动安装系统,此时会看到树莓派上的绿灯在疯狂闪,这就代表树莓派正在对 SD 卡读写,注意在树莓派的绿灯有闪动的时候千万不要断电!:)

安装时最好能有个屏幕,否则安装结束后登录 kali 会很麻烦,鄙人不才,暂时没有无屏幕安装 kali 的办法,Kali 不同于 raspbian,虽然它们默认都没有启用 ssh,但是 raspbian 可以手动在 SD 卡中放入一个名为 SSH 的文件来启用 ssh,安装系统成功之后直接 ssh 登录进去就可以,不需要屏幕,但是鄙人曾经在 kali 上用这种方法测试了一下午都没成功,所以安装 kali 时最好用一个屏幕,之后在系统内配置 ssh,后文会讲。

当你看到下面这个界面的时候就代表正在进行安装,如果一直是黑屏的话检查一下绿灯有没有闪,没有的话检查下前面的步骤或者检查下 SD 卡有没有问题,再不行的话可能就是树莓派的问题了。

安装成功后默认用户名密码登录即可,默认的用户名是root,密码是toor

开启 SSH

第一次登录成功后会让你选择 xface 的配置,选择默认配置即可,否则你会发现登录后的桌面空空如也,什么也没有,登录后的界面如下图,最好先连接 Wifi,否则后面的有些配置会无法进行。

首先要打开 ssh,打开终端输入。

1
dpkg-reconfigure openssh-server

之后一定要记得修改密码。

1
passwd

这时可以用 ssh 连接尝试一下,主机和树莓派最好在同一个内网里,连接可以用有线或无线连接,任意选择一种即可。

  • 有线连接
    将网线与树莓派相连,共享无线网络,具体操作如下图所示,打开 cmd,输入 arp -a 查看 arp 记录,找到树莓派的 mac 地址,即可找到树莓派的 ip 地址,ssh 连接即可,断开连接后记得关闭共享无线网络。
  • 无线连接
    主机于树莓派同时连接到一个内网,或者主机打开热点树莓派连接。

Raspi-config

连接到树莓派以后可以先稍稍美化一下终端,修改.bushrc 文件,可以将终端的风格改为标准的 Kali 风格,鄙人的 bushrc 文件如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# System-wide .bashrc file for interactive bash(1) shells.

# To enable the settings / commands in this file for login shells as well,
# this file has to be sourced in /etc/profile.

# If not running interactively, don't do anything
[-z "$PS1" ] && return

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize

# set variable identifying the chroot you work in (used in the prompt below)
if [-z "${debian_chroot:-}" ] && [-r /etc/debian_chroot]; then
debian_chroot=$(cat /etc/debian_chroot)
fi

# set a fancy prompt (non-color, overwrite the one in /etc/profile)
# PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
# PS1='\[\e]0;\u@\h: \w\a\]\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]$ '
# PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$'
PS1='\[\033[38;5;196m\]\u@\h\[$(tput sgr0)\]\[\033[38;5;15m\]:\[$(tput sgr0)\]\[\033[38;5;33m\]\w\[$(tput sgr0)\]\[\033[38;5;15m\]\\$ \[$(tput sgr0)\]'
# PS1='\[\033[38;5;196m\]\u@\h\[$(tput sgr0)\]\[\033[38;5;15m\]:\[$(tput sgr0)\]\[\033[38;5;33m\]\w\[$(tput sgr0)\]\[\033[38;5;15m\]\\$ \[$(tput sgr0)\]'
# PS1='\[\033[38;5;196m\]\u@\h\[$(tput sgr0)\]\[\033[38;5;15m\]:[\[$(tput sgr0)\]\[\033[38;5;87m\]\w\[$(tput sgr0)\]\[\033[38;5;15m\]]\\$\[$(tput sgr0)\]'

# Commented out, don't overwrite xterm -T "title" -n "icontitle" by default.
# If this is an xterm set the title to user@host:dir
#case "$TERM" in
#xterm*|rxvt*)
# PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'
# ;;
#*)
# ;;
#esac

# enable bash completion in interactive shells
if ! shopt -oq posix; then
if [-f /usr/share/bash-completion/bash_completion]; then
. /usr/share/bash-completion/bash_completion
elif [-f /etc/bash_completion]; then
. /etc/bash_completion
fi
fi

# if the command-not-found package is installed, use it
if [-x /usr/lib/command-not-found -o -x /usr/share/command-not-found/command-not-found]; then
function command_not_found_handle {
# check because c-n-f could've been removed in the meantime
if [-x /usr/lib/command-not-found]; then
/usr/lib/command-not-found -- "$1"
return $?
elif [-x /usr/share/command-not-found/command-not-found]; then
/usr/share/command-not-found/command-not-found -- "$1"
return $?
else
printf "%s: command not found\n" "$1" >&2
return 127
fi
}
fi

效果如下

安装 raspi-config

1
2
3
4
5
6
7
8
9
apt-get update
apt-get upgrade -y
apt-get dist-upgrade -y
apt autoremove
apt-get autoclean
wget http://archive.raspberrypi.org/debian/pool/main/r/raspi-config/raspi-config_20180406+1_all.deb
apt-get install -y triggerhappy lua5.1 alsa-utils psmisc
dpkg -i raspi-config_20180406+1_all.deb
rm raspi-config_20180406+1_all.deb

之后使用 raspi-config 配置树莓派。配置里没什么特别的,懂英文的应该都明白,比较重要的一项配置就是扩展文件系统,最开始 kali 并不会占用整个 SD 卡,只有在扩展完文件系统后才能使用全部的空间

翻译如下(鄙人根据理解和注释翻译,如有错误欢迎指正):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Change User Password —— 更改用户名和密码
Network Options —— 网络选项
Hostname —— 更改主机名
Wi-fi —— 更改 SSID 的名称和密码
Network interface names —— 更改网络接口的名称
Boot Options —— 启动选项
Desktop / CLI —— 决定启动后进入终端还是进入桌面(建议不要更改)
Wait for Network at Boot —— 决定是否在启动时等待网络连接(建议不要开启,否则启动时会等好久,一直等到网络连接成功或者超时才启动)
Splash Screen —— 选择启动时是画面或文本
Localisation Options —— 地区选项
Change Locale —— 更改地区
Change Timezone —— 更改时区
Change Keyboard Layout —— 更改键盘布局
Change Wi-fi Country —— 配置所在国家的 wifi 频道(可能不同的国家使用的 channel 不一样吧)
Interfacing Options —— 接口选项
Camera —— 是否启用相机
SSH —— 是否启用 ssh(远程命令行连接)
VNC —— 是否启用 vnc(远程图像连接)
SPI —— 是否自动加载 SPI 内核模块
I2C —— 是否自动加载 I2C 内核模块
Serial —— 是否串行连接内核和 shell 的消息
1-Wire —— 是否启用 one-wire 接口
Remote GPIO —— 是否启用远程访问 GPIO 引脚
Overclock —— 是否超频
Advanced Options —— 高级选项
Expand Filesystem —— 扩展文件系统(很重要,最好第一次配置的时候先选择这个)
Overscan —— 是否启用 Overscan(就是当屏幕上有黑条闪过的时候需要启动这个)
Memory Split —— 更改用于 GPU 的内存量
Audio —— 强制音频通过 HDMI 或 3.5mm 插孔输出
Resolution —— 设置特定的屏幕分辨率
Pixel Doubling —— 是否启用像素倍增
GL Driver —— 是否启动实验桌面 GL 驱动程序
Update —— 更新 raspi-config
About raspi-config —- 关于 raspi-config

配置完成后需要重启一次,配置过分辨率之后你就会发现你的树莓派启动看起来更加漂亮了!

到这里树莓派 Kali 的安装基本就完成了,剩下的就需要按照个人喜好去个性化的设置自己的 kali 了。建议在配置好树莓派后备份一下系统,鄙人就是因为当时没有备份系统而只能重装 :)

备份系统的过程和烧录的过程是相似的,只不过在用 Win32DiskImager 选择的适合不是选择 write 而是选择 read,备份后会生成一个 img 文件,想恢复备份的话直接将 SD 卡用 SD card formatter 清空在烧录即可,过程和上文中一样。注意备份的话是将整个 SD 卡备份,也就是说鄙人 32G 的内存卡(理想情况没有内存损失),备份后的 img 文件也是 32G 的,不管里面装了多少软件。

另外树莓派 kali 默认是不安装什么工具的,所以需要自己安装,后文将会介绍鄙人在这之后对树莓派 kali 的配置,如果感兴趣可以接着往下看。

常用软件

以下是鄙人安装的一些常用软件,有日常工具,如文本编辑图,图片查看器等等,也有一些渗透工具,还有一些系统的辅助工具,比如命令行补全增强等等

1
2
3
4
5
6
7
8
apt-get update
apt -y --fix-broken install
apt-get -y upgrade
apt-get -y dist-upgrade
apt-get -y install vim tree leafpad bash-completion wine macchanger cewl crunch curl tcpdump ettercap-graphical metasploit-framework beef-xss set netcat dsniff driftnet ssldump fping polipo ngrep proxychains burpsuite nbtscan shadowsocks python-pip python3-pip whatweb sslstrip httrack wpscan gdb weevely cupp
apt autoremove
apt-get clean
apt-get autoclean

中文支持以及输入法

没有中文支持的话显示中文就会是乱码(打开浏览器会发现中文全是像麻将一样的方块),而且搜索的时候也很不方便,于是安装一下中文支持

  1. 中文显示支持

    1
    apt-get install fonts-wqy-zenhei

    重启之后就可以正常显示中文了

  2. 中文输入法

    1
    apt-get install scim-pinyin

    安装完成后命令行输入 scim 就可以打开输入法了,建议把 scim 加入开机启动命令的列表里


去外面的世界看看

shadowsocks 安装完成后开始配置番羽土啬。鄙人的 shadowsocks.json 如下:

1
2
3
4
5
6
7
8
9
10
{
"server": "xxxxxxx",
"server_port": xxxxx,
"local_address": "127.0.0.1",
"local_port": 1080,
"password": "xxxxxx",
"timeout": 600,
"method": "aes-256-cfb",
"fast_open": false
}

启动 shadowsockets

1
2
3
sslocal -c /root/shadowsocks.json -d start # 建议把这个放在开机启动的命令里
curl ip.sb
curl --socks5 127.0.0.1:1080 ip.sb

在上面鄙人安装的软件中有 polipo,用这个来将 Sock5 代理转换为 http 代理,之后实现命令行番羽土啬,修改 /etc/polipo/config

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# This file only needs to list configuration variables that deviate
# from the default values. See /usr/share/doc/polipo/examples/config.sample
# and "polipo -v" for variables you can tweak and further information.

logSyslog = true
logFile = /var/log/polipo/polipo.log

proxyAddress = "0.0.0.0"

socksParentProxy = "127.0.0.1:1080"
socksProxyType = socks5
proxyPort = 8123

chunkHighMark = 50331648
objectHighMark = 16384

serverMaxSlots = 64
serverSlots = 16
serverSlots1 = 32

启动

1
2
3
4
5
6
/etc/init.d/polipo restart
curl ip.sb
export http_proxy=http://127.0.0.1:8123 # 启动代理
curl ip.sb
unset http_proxy # 取消代理
curl ip.sb

安装 Firefox proxy,之后就可以畅游外面的世界了

安装 peda

1
2
git clone https://github.com/longld/peda.git  ~/peda
echo "source ~/peda/peda.py" >> ~/.gdbinit