写在前面:
在5月份的时候。看到Freebuf 上有一篇文章《WiFi Pineapple Mark IV 无线安全审计的利器》 觉得看起来还挺不错的,但是看到那价钱99美元我就感觉有点贵..(学生党非土豪折腾的时候不爱找家里拿钱…)所以就打消念头了。但是这想法是挺好的,因为之前没接触嘛。后面想到我有一台树莓派,就一直惦记着什么时候来自己打造一套设备。不过挺长一段时间都只是想。
直到前阵子的Freebuf上的5篇文章才有了我现在的这篇。最起初的一篇是《FreeBuf线上活动:9月黑客晒书会(第一期)》看到获奖的瞬间非常非常开心,因为终于要拥有第一本属于自己的计算机安全这方面的书。那时候就一直惦记着要给Freebuf多点贡献;接着让我想法更强烈的是优质文章奖励计划(一直在YY写一篇能拿到200个金币的文章是什么样子的);第三篇是《让你的安卓设备跑起kali——kali for android》 让我的平板成功的跑起了Kali Linux 第四篇是《WiFi Pineapple Mark IV 无线安全审计的利器》 里面对这个设备功能的介绍,想着也要打造一个。第五篇是《图集:俺在国外当会棍——Sector 2013 会场篇、WIFI篇、CTF篇》 里面 @Kevin_2600 手上拿的外接了无线网卡的 Nexus 7。自己也就眼馋的想要搞一个(虽然大神没回答网卡型号,后面还是推测到类似是TP-Link WN722n这样的设备)
Wifi Pineapple这个是我在折腾完树莓派之前了解到的唯一一个无线安全审计设备400Mhz CPU 软件业不少,看起来是不错,但对我来说很大的一个缺点就是太贵了99美元,要支持3G网络还要另购设备。网上好像说系统不开源。
(下面还有几个是折腾完在码字时才了解到的设备)
Mini Pwner 基于TP-LINK TL-WR703N或TL-MR3020 3G便携路由器。基于OpenWRT 而且开源,那么能实现的功能应该不少,不过玩的人好像不多。
Pwnie Express 公司下面有卖几个设备。基本上都是通过以有的设备进行定制Power Pwn 和Pwn Plug Elite 都是基于SheevaPlug 反正我是觉得好酷炫,他们实现的一些比如WEB UI ,SMS Text-to-Bash (基于3G 通过短信发送命令并回复。这思路太酷炫了)这公司现在还可以预定2013版的Nexus 7 版的Pwn Pad 以前应该就是Nexus 7 然后外接一个芯片是AR9271的TP-link WL-WN722n 进行无线安全审计。(Nexus 7 2013的Pwn Pad配置下面会有完整的过程)最后最重要的一点,价钱无比的坑爹。基于Nexus 7 2013 的Pwn Pad要995美元,而且还要预定。
我手头上的设备:
网卡:zd1211b芯片的萨基姆760n(小故事:由来上高三时候家里宽带断网了以后又想看电影,然后发现学校教室能收到无线网络遂买网卡破还原卡破密码下片~)如果有人要赞助个TP-link 的722n 研究研究拿更好啦~
USB 3G上网设备&热点:高三买的一把华为C8500(小故事:那时急于想体验安卓,穷学生没收入还找姐姐借了一部分钱狠下心去买的,陪伴了我看了无数的数码新闻,安卓硬件发展太快,后面回想起来只怪当初太年轻….不过后面手机被一个公交司机恶意给摔破屏幕了基本上值回不少钱了,哈哈。除了屏幕碎了,其他功能依旧正常)
树莓派:运行 Kali Linux for Raspberry Pi (小故事:大二上学期期末的时候,发现的设备,临近期末了,咬咬牙找从伙食费里省出了150然后找家里拿了150买的。当初买过来是打算搞个远程控制带摄像头的小车什么的,甚至YY个基于树莓派的飞行器哈哈。后面不了了之放着当Linux 服务器用了挺久的。感觉是个学习Linux的神器)
Android 平板 : Nexus7 2代 我很少买电子产品但身边朋友的电子产品几乎都是让我推荐或者代买的…(主要是因为没钱)那时候最初的打算是用来看书(计算机的书都好贵)。支持支持WIFI,GPS(Wifi War-walking时必备)蓝牙4.0[连接蓝牙无线键盘必备] 高分辨率的屏幕(看片啊啥的太方便了)。支持OTG(有了这点有了太多可能外接各种设备)还有非常非常重要的一点,谷歌的亲儿子,开源!!以前知道android 系统开源,但是没有现在理解的这么深刻…特别是在经历了为了配置一个内核而走了太多弯路了以后.. (小故事:大二暑假的时候去工厂流水线打工一小时8块钱,第一个月拿了1699。犹豫了好多次好久,终于在8月2号痛下决心花了1600买了它,虽然曾经被朋友说过,“你这样的人这么会去工厂流水线打工” 但是我觉得那段时间是一个非常好的思考人生的时光。每个大学生都应该去经历一次非常想学习但是因为不想找家里拿钱买自己的东西而去做自己不喜欢的事。这样真的会成长的很快。晚上8点半下班到家然后帮别人改网站赚外快…还借了不少书回来看)
配置环境(Windows 7 64位 + Ubuntu 13.04虚拟机 32位 + Putty + Pscp)
1、系统镜像安装
系统方面应该是没啥疑问的选择了Kali linux for raspberry pi 里面集成了太多的软件,而平时也比较习惯Kali果断就它了,现在最新版的是1.0.5。但是这个版本网卡会有问题,会显示 no wireless extensions 现在回想起来应该是内核的问题,少了几个选项。官方论坛里面也有人遇到这样的问题(点击这里)后面也有解决的方法就是安装1.0.0版本 Kali Linux for RaspberryPi 1.0.0 (种子点击这里)
1)Windows 下用Win32 disk imager 把镜像写入SD卡。操作太简单了就不介绍了。(软件下载地址点击这里)
2)Linux 下
dd if=kali-pi.img of=/dev/sdb bs=512k
(这边要注意sdb要确定是你SD卡,具体的话插入SD卡以后运行dmesg查看具体是什么名字…)
3)写入完用Gparted 这个分区软件把SD卡上镜像所没利用到的空间给扩满
先unmount and resize . (等补充)
2、内核编译
如果你的网卡能在RaspberryPi下正常工作支持注入的话。那么装一下Firmware就好了。Kali Linux for RaspberryPi 上zd1211b芯片的默认网卡驱动是不支持注入的(详情与解决方法点击Aircrack-ng > zd1211rw)(查看网卡支不支持aircrack-ng,以及驱动之类有没有要打补丁的情况。请猛点击Aircrack-ng官网)
下面的操作都以zd1211b为例。
1)获取源码与固件
在Github上能下载到RaspberryPi 的内核源码 地址: https://github.com/raspberrypi/linux
现在已经有3.12内核的源码了。不过鉴于比较保守的原则。我选择了3.10.y这个分支
我这边连Github有时候有点蛋疼。所以我就选择了Download Zip
网速快的同学可以自行选择使用git clone的方法。
2)解压
解压这东西之所以也拿出来讲…是因为我在解压的时候也遇到了问题。zip文件我用unzip解压内核的时候出现”symlink error: File name too long ” 然后用jar解压就没问题了。解压就没问题了。
jar –xf linux-rpi-3.10.y.zip
但是用jar解压交叉编译器时权限设置又会丢失。所以除了内核源码以外的都还是用unzip
3)开始重新编译内核让无线网卡支持注入
#在RaspberryPi上运行
root@kali:~#cp /proc/config.gz /root/ #获取当前kernel的.config文件 #千万要记得不要再当前目录运行zcat config.gz > .config 不然你的Xwindow会打不开VNC也是...那时候不懂,搜了非常久才发现。那时候蛋碎了好久 #关闭 RaspberryPi 拔出SD卡
#在Ubuntu虚拟机上运行
root@ubuntu:# pwd #当前目录的名字是RPi /root/RPi root@ubuntu:# ls firmware-master.zip linux-rpi-3.10.y.zip tools-master firmware-master linux-rpi-3.10.y tools-master.zip root@ubuntu:# mv linux-rpi-3.10.y linux #将内核源码的目录名字改成linux方便等下打驱动补丁
#插入SD卡
root@ubuntu:# mkdir /media/ SD root@ubuntu:# mount /dev/sdb2/ /media/SD #这边的sdb表示的是你SD卡的设备文件名 2是第二个分区。第二个分区是根目录。第一个分区是 /boot root@ubuntu:# cp /media/SD/root/config.gz .config root@ubuntu:# mv .config /linux/ #将配置文件放在内核的文件夹 root@ubuntu:# cd /root/RPi/tools-master/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/ root@ubuntu:# export PATH="$PATH:$PWD" #将交叉编译器的目录添加到PATH中 root@ubuntu:# export ARCH=arm root@ubuntu:# export CROSS_COMPILE= arm-bcm2708hardfp-linux-gnueabi- #设置好交叉编译环境 root@ubuntu:# cd /root/RPi/ root@ubuntu:# wget http://trac.aircrack-ng.org/raw-attachment/ticket/894/zd1211rw-inject%2Bdbi-fix-3.7.4.patch #下载网卡的补丁 root@ubuntu:# patch -Np0 –i zd1211rw-inject+dbi-fix-3.7.4.patch #打补丁,如果怕补丁没打上,可以参照着补丁文件里的具体语句用vim 确认一下作用文件 /linux/drivers/net/wireless/zd1211rw/zd_mac.c root@ubuntu:# cd linux #进入内核源码目录 root@ubuntu:# make oldconfig root@ubuntu:# apt-get install ncurses-dev #安装menuconfig 图形配置内核所需要的库 root@ubuntu:# make menuconfig #图形化配置内核
配置内核可以参考下面Nexus7 的配置
#要支持有线网卡的话也是同理,直接勾选网卡芯片所对应的驱动模块,手头上有一个二手usb网卡(dm9601芯片)因为很早的东西了,所以很便宜。
root@ubuntu:# make #就开始编译了
接下来通过下面参考资料的步骤更新vc以及安装模块和替换内核。
通过上面的配置Raspberrypi 已经能成功支持zd1211b芯片的注入模式,Airodump-ng 已经能正常显示当前信号范围下无线网络的客户端与AP的连接情况
参考资料:《[Raspberry Pi] 树莓派 Kernel 编译笔记》
3、 配置3G上网设备
如果一个物理渗透设备不支持3G那就没办法在一开始远程破解无线网络了,所以接下来要开始折腾3G网络。我下面以我的耐摔神器c8500(现在淘宝上功能完整的只要100左右)为例子进行配置。
通过android手机让设备上网有2种方式,一种是usb tether ,还有另外一种是把手机当成和3G上网卡一样的USB modem 通过pppoe 拨号。第一种方式比较简单 只要RaspberryPi 支持rdnis 就可以了。kali linux 1.0.0默认是支持的。将手机通过USB与RaspberryPi 连接,手机上选择USB 绑定然后RaspberryPi上的网络设备就会多出了一个usb0
#简单的途径
dhclient usb0 #搞定(默认的内核配置会自动加载rdnis_host模块) #这之前只要手机能联网并且打开USB绑定(USB Tethering)此时Raspberry Pi就能够上网了
#麻烦的途径
还有一种比较麻烦的就是通过USB Modem拨号(常见的设备比如USB 3G上网卡,以及支持USB modem的手机。当然了我是用我酷炫的C8500)我手机已经开启了调试模式,但在Linux下调试模式现在还无法正常工作。因为Android手机的usb有很多子系统。比如默认挂载的是usb-storage,但是adb和usb modem还不能正常工作。接下来我们就要掏出usb_modeswitch usb_modeswitch 介绍(http://www.cnblogs.com/jasonliu/archive/2011/11/09/2242070.html)简单点来说usb_modeswitch 就是要让我们平时在windows下装了驱动能正常工作的adb,usb_modem这种设备正常工作
首先,确定你设备的ID,插入了设备以后在终端运行dmesg,应该就会看到一行
New USB device found,idVendor=12d1 idPorduct=1031 #记下备用 运行 lsusb同样可以获得 id:12d1 1031
接下来安装usb_modeswitch (官网#需要翻墙)
usb-modeswitch-2.0.1 (http://www.draisberghof.de/usb_modeswitch/usb-modeswitch-2.0.1.tar.bz2)
usb-modeswitch-data (http://www.draisberghof.de/usb_modeswitch/usb-modeswitch-data-20131113.tar.bz2)
还需要安装libusb 1.x 在终端直接运行
apt-get install libusb-1.0.0
将上面两个压缩包下载到 raspberry pi 并解压(没有VPN的话 开goagent 下载完scp到树莓派上)
#在压缩包的目录运行
tar -xvf usb-modeswitch-2.0.1.tar.bz2 cd usb-modeswitch-2.0.1 make install tar -xvf usb-modeswitch-data-20131113.tar.bz2 cd ../usb-modeswitch-data-20131113 make install
接下来就能开始配置了
cd /usr/share/usb_modeswitch/ #在这个目录下找到你手机对应的设备ID的配置文件,我的手机是12d1:1031对应的文件名就是12d1:1031 vim 12d1:1031
# Huawei U8110 / Joy, Vodafone 845 (Android smartphone) TargetVendor= 0x12d1 TargetProduct= 0x1035 MessageContent="55534243123456780600000080010a11060000000000000000000000000000" # for Android SDK NoDriverLoading=1
注意那个TargetVendor和TargetProduct这两个参数顾名思义就是目标的设备ID,那我们怎么知道我们的设备能正常工作的ID是多少呢?我想到一个比较便捷的方法。因为在Windows下这类操作都比较简单,在Windows下安装好驱动,然后在设备管理器里看能正常工作的设备的ID。下面是图解(驱动不好找的话自备各类手机助手)
然后看看获取的ID与USB_modeswitch的配置文件里有没有对应(如果你设备ID存在的话!)如果不存在,那就要自己建立。
保存后重新把手机缓缓的插入树莓派。此时手机界面上应该能够跳出一个非常激动人心的“调试模式”了。那时候折腾这个折腾到蛋快碎了。然后dmesg里面也终于出现了
[ 12.406805] usbcore: registered new interface driver usbserial [ 12.468079] usbcore: registered new interface driver usbserial_generic [ 12.526598] usbserial: USB Serial support registered for generic [ 12.586989] usbcore: registered new interface driver option [ 12.612650] usbserial: USB Serial support registered for GSM modem (1-port) [ 12.634668] option 1-1.3:1.4: GSM modem (1-port) converter detected [ 12.666828] usb 1-1.3: GSM modem (1-port) converter now attached to ttyUSB0
本来本来以为这样就好了。。。。。怀着非常激动的心情把拨号上网给配置了。后面才发现无法拨号无法拨号无法拨号。瞬间心又凉了。因为这是第一次折腾关于Linux下3g拨号,关键词不够犀利。找了好久最后才在xda-developers找到了一个回复 大概就是说要让option 模块知道新设备的ID
echo "12d1 1035" > /sys/bus/usb-serial/drivers/option1/new_id
[ 485.833608] option 1-1.3:1.0: GSM modem (1-port) converter detected [ 485.851587] usb 1-1.3: GSM modem (1-port) converter now attached to ttyUSB1 [ 485.884724] option 1-1.3:1.1: GSM modem (1-port) converter detected [ 485.904363] usb 1-1.3: GSM modem (1-port) converter now attached to ttyUSB2 [ 485.934414] option 1-1.3:1.3: GSM modem (1-port) converter detected [ 485.955435] usb 1-1.3: GSM modem (1-port) converter now attached to ttyUSB3
这时候就可以开始配置ppp拨号了(因为我的手机是Evdo制式3G,其他制式的配置文件看下面链接)
apt-get install ppp
vim /etc/ppp/peers/evdo
debug nodetach lock /dev/ttyUSB0 115200 user "ctnet@mycdma.cn" password "vnet.mobi" crtscts show-password usepeerdns noauth noipdefault novj novjccomp noccp defaultroute ipcp-accept-local ipcp-accept-remote connect '/usr/sbin/chat -s -v -f /etc/ppp/peers/chat-evdo-connect' disconnect '/usr/sbin/chat -s -v -f /etc/ppp/peers/chat-evdo-disconnect’
vim /etc/ppp/peers/chat-evdo-connect
TIMEOUT 60 ABORT 'NO CARRIER' ABORT 'ERROR' ABORT 'NO DIALTONE' ABORT 'BUSY' ABORT 'NO ANSWER' '' /rATZ OK-AT-OK ATD#777 CONNECT /d/c
vim /etc/ppp/peers/chat-evdo-disconnect
ABORT 'NO CARRIER' ABORT 'ERROR' ABORT 'NO DIALTONE' ABORT 'BUSY' ABORT 'NO ANSWER' SAY "/nSending break to the modem/n" '' "/K" '' "+++ATH" SAY “/nGoodbay/n"
建立了上述的几个文件以后,插入手机。然后
echo "12d1 1035" > /sys/bus/usb-serial/drivers/option1/new_id #就能够开始拨号了
pppd call evdo #就会看到获取到IP了 此时就能上网了
(实测C8500在设备插入树梅派以后,将ID写入了new_id需要关闭手机上的usb调试再重新打开方可拨号,而C8650不在插入了以后直接将ID写入new_id就可以拨号了。[拨号的时候要断开手机上的网络连接])
参考这两篇文章
《3G卡片在开发板上的详细解决方法(适用于大多数3G卡片) 》(内有td-scdma 和cdma 1x的配置文件)
4、连接思路
身为一个物理渗透设备,而且还支持3g,又有有线网卡和无线网卡,如果我们不能连接到设备那就失去了好多选择以及乐趣。之前单纯的以为可以通过手机开启 usb tethering 通过RNDIS让树莓派上网然后手机通过iptables端口转发加上树莓派上的花生壳之类的动态域名软件获取IP,然后正向连接到物理渗透设备的端口。(后面知道了这个想法不行。)
物理渗透设备,在大部分情况下都会是在内网,而内网的话正向连接这么直接的东西一般是没有机会用的。那么只有反向连接了。
比较好用的就是SSH 远程转发 (ssh remote forwarding) 也就是ssh -R选项,它可以在执行-R命令的机子上通过SSH隧道 绑定到隧道另一边服务器的端口。更多介绍点击 IBM的《实战SSH 端口转发》
它的命令格式是:
ssh -R <local port>:<remote host>:<remote port> <SSH hostname>
#这里我们假设你本机想要连接RaspberryPi且你安装了SSH client 和SSH server 。这边的Local port 是指你本机的哪个端口想和在远程服务器上的[remote port]端口绑定。remote host就是Raspberry Pi 而SSH hostname 就是你本机的SSH服务器 地址如果端口不是默认的22 的话 记得加上 -p xx
接着我们在RaspberryPi下执行
ssh -f -N -R 7001:localhost:22 YourSSHIP
#-f 选项:后台认证用户/密码
#-N 选项: 不执行远程命令,适合只做转发的时候用。
此时,我们就可以在本机执行 ssh username@localhost -p 7001 连接到树梅派的22端口。这里的username是你登录树梅派的服务器使用的用户名,接着输入密码就可以了。命令执行完如果成功的话不会有什么输出。(tip如果中途树莓派重启的话ssh隧道关闭了,短时间本机的7001端口还是会被占用,要到一定时间本机的服务器才会关闭这次连接的会话。此时你只要在本级找到占用7001端口的sshd的pid然后结束掉就可以了。)
netstat -npl | grep 7001 kill “进程的pid”
然后重新执行
ssh -f -N -R 7001:localhost:22 YourSSHIP
就OK啦。
但是只有上面那些是不够的,那只是反弹连接的思路
下来有几个连接思路,我把它分成两部分来说
第一部分:获取目标网络使用权前
1、3g网卡拨号上网,成功联网,通过SSH 远程转发 连接到服务器。(也就是插入手机,然后使用pppd拨号,接着使用ssh 远程转发 建立隧道)
2、手机启动usb tether(USB绑定),成功联网,通过ssh远程转发 连接到服务器。
3-0、无线网卡,在获取了目的网络周围的无线网络密码后,配置好无线网络的连接信息自动连接到跳板网络后连接到远程服务器。
3-1* 如果目标网络周围有没加密的热点,但是有paywall (要登录验证)且没有封DNS的端口 可以通过DNS隧道穿之。DNS 隧道配置的方法 详情见《》 (DNS 协议的局限,每次发的数据包都不大,所以速度可能会不怎么理想,但是多一种思路总是好的,还省上网流量主要…..)
————上述几个方法可以根据目标网络的接入方式选用第二个网络设备为无线网卡或者有线网卡————
第二部分:获取了目标网络的使用权。
1、可以接入目的网络以后,要看看有没有DHCP 服务器,如果没有的话要用软件抓包嗅探,MAC 地址绑定的话,也要改MAC地址 当能够正常通过目的网络联到外网的话。当然是断开3G网络,(开VPN,)开搞。
2、接入了目的网络,但那网络只能上内网,也还是按照上面接入前的思路,一个网络设备进行本机远程控制RaspberryPi,第二个网络设备与目的网络进行通信。
5、自动化脚本
配置好了设备的网络以及连接方式,但你物理入侵的时候总不能一直是手动输入指令连接服务器吧。接下来就要按照个人的入侵需求来编写脚本。(至少要能够自动远程端口转发吧)
下面是一段基于USB tether(USB绑定)通过手机3g上网然后连接服务器的脚本。首先手机要安装自动打开USB tether 的软件。下面是我看了一个多礼拜的《Linux Shell 从初学到精通》写出来的自动连接并检测远程端口转发是否成功的脚本。主要是利用的ssh可以不登录执行命令的机制。检测间隔时间是600秒,如果时间太快的话SSH连接会阻塞。600秒的话基本没事。(因为是第一次写,脚本是在有限认知里写出来的,只能说能用但不精致高效。如果有大神可以写个更酷炫的主动远程端口转发的思路就更好啦 )(注下面脚本为了实现方便,本机和Raspberry Pi两端都是拥root用户,对安全要求比较高的同学,可以在这方面另作修改加强。eg:防暴力破解之类的)
#!/bin/bash #Auto Remote Forwarding and check rndis connection for RaspberryPi #By FallenSec #My blog http://www.fallensec.com #Edit some option below to configure your Own script c_remoteserver=www.xxx.com #Your remote server. c_serveruser=root #Your remote server’s user . c_serverport=9999 #The port on your server you want to connection to RaspberryPi c_serversshport=22 #Your remote ssh server's port . c_localport=32 #Your RaspberryPi's ssh server port. Default it’s 22. c_localuser=root c_myusb=usb0 #On my RaspberryPi it always be "usb0" when I enble USB tether on my android phone. c_pingserver=www.baidu.com #The server use to check online . c_sleeptime=600 #Check ssh connection per 10 mins. echo -e "33[32m ---------------------------------------------33[0m" echo -e "33[32m|33[0m ____ 33[32m|" echo -e "|33[0m Auto Remote Forwarding Script | __ ) _ _ 33[32m|" echo -e "|33[0m | _ | | | | 33[32m|" echo -e "|33[0m For RaspberryPi PwnBox | |_) | |_| | 33[32m|" echo -e "|33[0m |____/ __, | 33[32m|" echo -e "|33[0m |___/ 33[32m|" echo -e "33[32m|33[34m _____ _ _ ____ 33[32m|" echo -e "33[32m|33[34m | ___|_ _| | | ___ _ __ / ___| ___ ___ 33[32m |" echo -ne "33[32m|33[34m" echo -n " | |_ / _` | | |/ _ '_ ___ / _ / __| " echo -e "33[32m|" echo -e "|33[34m | _| (_| | | | __/ | | |___) | __/ (__ 33[32m|" echo -e "|33[34m |_| __,_|_|_|___|_| |_|____/ ___|___| 33[32m|" echo -e " --------------------------------------------33[0m" WARN="[33[33mwarn33[0m] " FAIL="[33[31mfail33[0m] " OK="[ 33[32mok 33[0m] " f_check() { if [ `echo $?` -eq 0 ] then echo -ne "$OK" else echo -ne "$FAIL" fi } loop=1 while (loop=0) do ping -c 1 $c_pingserver >/dev/null 2>&1 checknet=`echo $?` if [ $checknet -eq 0 ] then echo -ne "$OK" echo "Network is working." echo "[....] Staring the kill the old connection." ssh $c_serveruser@$c_remoteserver -p $c_serversshport "/root/kill.sh" >/dev/null 2>&1 checkprogress=`echo $?` if [ $checkprogress -eq 255 ] then echo -ne "$WARN" echo "Remote server seems down or Network is not working." continue else ssh -f -N -R $c_serverport:localhost:$c_localport $c_serveruser@$c_remoteserver -p $c_serversshport f_check echo "Create remote forwarding." fi while (loop=0) do echo "[....] Checking remote forwarding connection." ssh $c_serveruser@$c_remoteserver -p $c_serversshport "ssh $c_localuser@localhost -p $c_serverport "uname" " >/dev/null 2>&1 checkrf=`echo $?` if [ $checkrf -eq 2 ] then echo -e "[....] 33[31;1mNetwork connection down!!!" break #In the loop of checking find a timeout .Break to Warning fi if [ $checkrf -eq 255 ] then echo -e "[....] 33[31;1mSSH session Closed ,restarting now.33[0m" ssh $c_serveruser@$c_remoteserver -p $c_serversshport "/root/kill.sh" >/dev/null 2>&1 checkprogress2=`echo $?` if [ $checkprogress2 -eq 255 ] then echo -ne "$WARN" echo "Remote server seems down or Network is not working ." break else ssh -f -N -R $c_serverport:localhost:$c_localport $c_serveruser@$c_remoteserver -p $c_serversshport f_check echo "Create remote forwarding." fi else echo -ne "$OK" echo "Remote forwarding is working." fi sleep $c_sleeptime done else echo -ne "$WARN" echo "Connection Failed.Restarting Now." ifconfig $c_myusb down 2>/dev/null if [ `echo $?` -eq 255 ] then PHONE=0 while( PHONE=1 ) do echo -e "33[31mPlease Plugin Your Phone And Enble USB Tethering!!!!33[0m" ifconfig $c_myusb down 2>/dev/null if [ `echo $?` -eq 0 ] then break fi sleep 5 done fi echo -ne "$OK" echo "Stop usb network adapter." ifconfig $c_myusb up f_check echo "Start usb network adapter." dhclient $c_myusb >/dev/null 2>&1 f_check echo "Obtian a IP address ." fi sleep 3 done
使用的时候,保存成sh文件。然后在树莓派上设置开机自动运行。
但是仅仅一个脚本还不够。
1、要在本机配置一个脚本,因为树梅派那端如果网络中断,SSH 远程端口转发已经断了,而你此时本机要是刚好连接上去,会一直卡住。所以本机上面还要有一个脚本是用来结束本机端SSH forwarding 的进程。细心的同学会发现脚本里面有一个 /root/kill.sh(因为经验还不够那本Shell 的书还没完全吸收掌握,还没有去研究把2个脚本合成1个。)
在本机的/root/目录下建立kill.sh 然后添加执行权限,kill.sh内容
kill `netstat -npl | grep 9999 | grep "tcp " | awk '{print $7}' | awk -F "/" '{print $1}’` #上面命令的9999和前面c_serverport的值要一样。
2、所有自动化脚本基本上配置好了,但是因为实现是基于SSH ,那么生成空口令的公钥用来登录这就必不可少了。
ssh-keygen -t rsa
#还有 dsa ,ecdsa另外这两种方式,你如果不想指定 identityfile 的话,你先试着在树梅派上通过SSH 连接到本机,然后就会显示加密方式如:
The authenticity of host ‘x.x.x.x (x.x.x.x)' can't be established. RSA key fingerprint is
#然后看到服务器自动给提示的是“RSA key” 然后你生成的时候就生成RSA算法的密钥,此时如果你生成的是dsa加密的公钥那可能还是要输入密码的,因为服务器那端自动给你是rsa。指定了 identityfile 就没有关系了。
下面是个小例子。本机执行
root@FallenSec:~# ssh-keygen -t ecdsa Generating public/private ecdsa key pair. Enter file in which to save the key (/root/.ssh/id_ecdsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_ecdsa. Your public key has been saved in /root/.ssh/id_ecdsa.pub. The key fingerprint is: xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx root@FallenSec The key is randomart image is: +--[ECDSA 256]---+ | o.. | | . + | | . . . | |.. . . . | |+ .S+ | |oo .o | |=.+ . = . | |Eo . * .. | |o o. | +-----------------+ root@FallenSec:~#
接着把$HOME 目录下 .ssh/id_ecdsa.pub传到树梅派对应$HOME目录下的.ssh文件夹
scp /root/.ssh/id_ecdsa.pub root@192.168.1.88:/root/.ssh/rpi_ecdsa_pub #192.168.1.88是RaspberryPi的IP ssh root@192.168.1.88 "cat /root/.ssh/rpi_ecdsa_pub >> /root/.ssh/authorized_keys"
(在写这篇文章的时候发现了也回想起了《SSH权威指南》有提到ssh-copy-id这东西。)
ssh-copy-id -i .ssh/id_rsa.pub user@server
说明:
该命令会提示输入用户 user 在 server 上的SSH登录口令。 当此命令执行成功后,再以 user 用户登录 server 远程主机时,不必输入口令直接登录。 该命令实际上将 .ssh/id_rsa.pub 公钥文件追加到远程主机 server 的 user 主目录下的 .ssh/authorized_keys 文件中
然后现在连接就不用密码了 记住两端都要分别创建公钥然后传到对方服务器因为脚本的检测机制很重要的一个就是连接对方的服务器再再对方服务器连接回来测试SSH连接是否正常….(我承认这不是一个高明的办法但它挺有效的,求大神给建议改进)
还有2个Tip
我在Raspberry Pi上填写控制端的地址是拥域名的形式,如果域名的IP变了。(花生壳动态IP之类)就会跳出一个让你确认要不要继续连接的提示,此时你要输入 yes or no 。这种提示不便与我们所编写脚本的自动化。如:
The authenticity of host 'x.x.x.x (x.x.x.x)' can not be established. RSA key fingerprint is Are you sure you want to continue connecting (yes/no)? yes
此时将 StrictHostKeyChecking no 加到/etc/ssh/sshconfig 可以让ssh客户端
自动接受新主机的host key,不用每次都自己输入yes
还有一个,就是在我做稳定性测试(也就是半夜树梅派开着然后服务器通过本地的端口连接SSH)发现长时间没有数据传输的话,连接会话会超时。
设置服务器向SSH客户端连接会话发送频率和时间(在树梅派上设置)
vi /etc/ssh/sshd_config #添加如下两行
ClientAliveInterval 60
ClientAliveCountMax 86400
注:ClientAliveInterval选项定义了每隔多少秒给SSH客户端发送一次信号;ClientAliveCountMax选项定义了超过多少秒后断开与ssh客户端连接
参考资料
《Simplify Your Life With an SSH Config File》
《SSH 权威指南》
《SSH-KeyGen Man Page》
此时,树莓派最基本的通过3g手机共享上网自动远程端口转发的配置就完成了。如果是不同的网络情况可以自行修改脚本(如已知周围有热点,或者已经获得过周围加密无线网络密码(有线网络使用权)等情况)
下面是一个小小的演示视频(演示上述脚本以及无线网卡、有线网卡、Android Phone USB tethering 共享上网(RNDIS)、USB Modem 3G拨号上网(3G上网卡同支持USB modem的手机)的功能测试)
树莓派部分终于写完了,一直拖着,在编写与调试脚本的时候遇到了不少问题,幸亏之前找人很便宜的买了一台Motorola Laptop dock 用来当成树梅派的显示屏。有时候代码写错了,树梅派开机一直死循环….不断插拔储存卡挂载改代码,大概花了2个天的时间才写完,后面还参考Linux启动的感觉添加了一些提示文字,颜色,ASCII字(当然是我的网名哈哈)
Pwn Pad 的话,前面有说了我为什么使用nexus 7。这里就不累述了。直接进入主题
一台Pwn Pad 在我心目中的功能(目前我已经实现的功能):
1、要能够外接U盘,硬盘(只要有OTG功能都能有吧)
2、要方便无线war-walking(这个需要GPS,Nexus 7 2013 有这个功能),
3、要能够支持有线网卡(有的地方不能使用无线网络,动静太大,有些地方只有有线网络)
4、要支持3G设备(手机发射热点是一种解决方法,但它的缺点就是太耗电以及无线网络动静太大。外接3G上网卡之类的USB modem或者支持USB共享的手机是个不错的方法)
5、还有很酷炫的一个功能,那就是支持USB串行通信设备比如PL2303,CH341(因为楼主是个工科生,所以和控制器通信这反面的还是有一定的兴趣…可以给单片机下载程序,为便携入侵单片机提供了可能;直接和树莓派的终端通信,可以随时对树莓派进行配置操作,使渗透测试更加灵活。)
6、要能够破解无线网络,对无线网络进行监听注入。(RT8187,ar9170,zd1211b,ar9271,GW3887,rt3070等等有关注过无线安全的同学们看到这边应该很兴奋了,可以在一台平板上就能破解无线了耶)
7、要同时支持上述一个或多个功能(挂个HUB)
8、要满足第七点,还能够边给平板充电边给上述设备供电,不要为电源而烦恼。
(看到这边有同学兴奋了吗)
下面围绕上面几点展开来介绍,如何一步一步实现这些功能
要让Android 平板能够支持有线网卡,外接无线网卡,3G上网卡,RNDIS Host(USB tether的Host-side所需要的一个模块),串行通信设备。这些设备的驱动、模块都是要在内核上面开启的,而官方内核几乎是都没有开启上面功能。如果我们想要使用,那就需要开始配置内核了。而资料触手可及的谷歌亲儿子系列,让我们开展这项工作变得容易了不少。(如果你好好去实践,那么就能离很多订制内核的大神们近了不少。)
谷歌官方的内核编译教程。http://source.android.com/source/building-kernels.html
(当初什么都不懂的时候,有看到了这个教程,一步一步跟着做,也有遇到不少问题。而过了一个月的现在,我已经能够熟练配置出默认的内核了)
首先稍微介绍一下我自己的理解:
编译安卓的内核,一般是在PC机上通过交叉编译工具链(Cross Compile Toolchain)进行交叉编译,然后再写入到Android机子启动
(我交叉编译的环境是Kali linux 1.0.5 amd64)有的系统不能运行官方提供arm-eabi-gcc,比如32位debian 7 ,至少是不能直接运行。下个系统来编译要不要了多久(有兴趣的同学可以去解决那些不同构架运行程序的问题,然后写个文章发出来:P )
1、获取源码以及交叉编译工具链
cd ~ mkdir android #在HOME目录建立android目录用来放置编译内核所需要的工具 cd android git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6 #下载交叉编译器,要想知道自己当前的系统版本能不能支持交叉编译器 #先下载下来,然后进到 arm-eabi-4.6/bin/目录 #执行 ./arm-eabi-gcc 看看是现实不能执行二进制文件,还是提示没有输入文件 #如果是不能执行二进制文件那最简单的解决方法就是下个支持的系统,比如上述我所用的 #之前稍微试着去解决了,不过都没啥突破性的进展,最后在google code上有人回复了一个好像是要64位系统才能够使用 #如果显示的是没有输入文件,那就可以回到android目录接着继续下面的步骤了 git clone https://android.googlesource.com/kernel/msm.git #下载源码
完成后执行
cd msm git branch -a #查看所有分支 master remotes/origin/HEAD -> origin/master remotes/origin/android-msm-2.6.35 remotes/origin/android-msm-3.9-usb-and-mmc-hacks remotes/origin/android-msm-flo-3.4-jb-mr2 remotes/origin/android-msm-flo-3.4-kitkat-mr0 remotes/origin/android-msm-flo-3.4-kitkat-mr1 remotes/origin/android-msm-hammerhead-3.4-kitkat-mr1 remotes/origin/android-msm-hammerhead-3.4-kk-fr1 remotes/origin/android-msm-hammerhead-3.4-kk-fr2 remotes/origin/android-msm-hammerhead-3.4-kk-r1 remotes/origin/android-msm-mako-3.4-jb-mr1 remotes/origin/android-msm-mako-3.4-jb-mr1-fr remotes/origin/android-msm-mako-3.4-jb-mr1-kgsl remotes/origin/android-msm-mako-3.4-jb-mr1.1 remotes/origin/android-msm-mako-3.4-jb-mr2 remotes/origin/android-msm-mako-3.4-kitkat-mr0 remotes/origin/android-msm-mako-3.4-kitkat-mr1 remotes/origin/android-msm-sony-cm-jb-3.0 remotes/origin/master git checkout android-msm-flo-3.4-kitkat-mr1 #目前Nexus 7最新版的是3.4-kitkat-mr1 (2013-12-16)
2、接下来就是给驱动打补丁和Hack Kernel环节了
1) 给zd1211b芯片的驱动打补丁,让它支持注入以及修正dbi的显示
wget #打之前记得修改补丁的路径我们当前的目录是msm,那就要把补丁的前两行"linux/drivers/"改成 drivers patch -Np0 –i zd1211rw-inject+dbi-fix-3.3.2.patch
2) Hack the msm_otg.c 让设备在通过OTG的时候可以边充电,且外接设备也能够有电,且能有足够的电源拖USB hub等
而推出ElementalX和bulletproof系列内核的flar2大神已经有写好代码
Github地址 See Change https://github.com/flar2/flo-ElementalX/commit/1937beb50e69f597e31c3ad0dc0cbd569584364e
Raw file 地址 点我 https://raw.github.com/flar2/flo-ElementalX/1937beb50e69f597e31c3ad0dc0cbd569584364e/drivers/usb/otg/msm_otg.c
下载后自行替换 drivers/usb/otg/msm.otg.c #记得备份防坑爹
3) 要使用USB modem 就要给内核添加USB drivers for GSM & CDMA Modems 默认是官方内核默认是编译不过去的要修正参数 (同样是flar2大神的ElementalX内核里拿来的)
Github地址 See Change https://github.com/flar2/flo-ElementalX/commit/49a12ca0c4e008c56cede9d26ac3ef0e222acbd2
Raw file 地址 usb-wwan.h https://raw.github.com/flar2/flo-ElementalX/master/drivers/usb/serial/usb-wwan.h
下载后自行替换 drivers/usb/serial/usb-wwan.h #同样是记得备份防坑爹
3、开始配置内核
#打完补丁以及做完修改以后回到 msm #设置交叉编译的环境变量 export ARCH=arm export SUBARCH=arm export CROSS_COMPILE=arm-eabi- cd ../arm-eabi-4.6/bin/ export PATH="$PWD:$PATH" cd ../../msm #回到内核源码根目录 cp arch/arm/configs/flo_defconfig .config #将Nexus 7 2013 (flo) 默认的内核配置文件拷出来 make menuconfig 开始配置内核
内核主界面
1)若要想留名的话,在General setop —>里的“Local version – append to kernel release”里可以设置,记得把 Automatically append version information to the version string 取消掉
2)要开启无线网卡驱动的话,首先进入"Networking support —> Wireless —>" 启用 "[*] Generic IEEE 802.11 Networking Stack (mac80211)",接着配置"Wireless"下的其余部分
接着从配置主页进到 "Device Drivers —> Network device support —> Wireless LAN —> " 目录下勾选你所用的网卡的驱动," ZyDAS ZD1211/ZD1211B USB-wireless support"就是我zd1211b 的驱动。常见的驱动都在这儿
3)开启有线网卡支持
进入“Device Drivers —> Network device support —> USB Network Adapters —>”勾选你拥有的USB网卡对应的芯片,比如我的网卡是DM9601芯片,那我就勾选 "Davicom DM9601 based USB 1.1 10/100 ethernet devices"
4)开启rndis_host支持
进入“Device Drivers —> Network device support —> USB Network Adapters —>”勾选“Host for RNDIS and ActiveSync devices (EXPERIMENTAL)”
5)开启USB modem等3G拨号上网设备的支持
进入“Device Drivers —> USB support —> USB Serial Converter support —> ”勾选 “ USB driver for GSM and CDMA modems 和 USB Opticon Barcode driver (serial mode) ”
6)开启USB 串口通信设备支持,我所使用的是目前很常见的CH340以及PL2303芯片的USB-TTL
进入“Device Drivers —> USB support —> USB Serial Converter support —> ”勾选 “ USB Winchiphead CH341 Single Port Serial Driver 和 USB Prolific 2303 Single Port Serial Driver”
7)如果你手机是Iphone 的话,要用手机共享给平板上网 内核里有一个选项 "Apple iPhone USB Ethernet driver" 在 进入“Device Drivers —> Network device support —> USB Network Adapters —>”里,勾选它应该就行了(没手机测试)
现在就配置好内核了。
4、编译内核
make -j4 #-j4的4一般是你CPU核数的2倍 开启多线程
执行了上述命令以后,不出意外如果都按照我上面说的做的话,就能够成功编译出内核了
生成文件在 arch/arm/boot/zImage 这里的zImage 就是我们要的内核
5、生成boot.img
上面我们编译好内核,没办法直接刷入手机里的,要生成boot.img。
(我折腾这些的时候中途放弃过一次,因为是从零开始接触,遇到太多太多问题了…后面好不容易内核编译成功了…boot.img 一直没办法正常工作。休息了一个礼拜以后继续在xda-developers上搜寻着)
后面直到我看到一个大神谢的unmkbootimg ,后面发现之前用的perl版的boot.img解包工具得到的参数太少了,结果重新打包的时候一直不能正常工作。而今才知道还有C语言版的unpackbootimg,但还没测试)
拓展阅读《boot.img的解包与打包》
生成boot.img 参考 《compiling and running our own modified kernel on the Nexus 7 2013》
1) 编译打包工具
# cd android # git clone https://android.googlesource.com/platform/system/core bootimg-tools Cloning into 'bootimg-tools'... remote: Counting objects: 92, done remote: Finding sources: 100% (92/92) remote: Total 19302 (delta 11674), reused 19302 (delta 11674) Receiving objects: 100% (19302/19302), 5.87 MiB | 655 KiB/s, done. Resolving deltas: 100% (11674/11674), done. # cd bootimg-tools/libmincrypt/ # gcc -c *.c -I../include # ar rcs libmincrypt.a *.o # cd ../mkbootimg# gcc mkbootimg.c -o mkbootimg -I../include ../libmincrypt/libmincrypt.a mkbootimg.c: In function 'main':mkbootimg.c:245:9: warning: assignment discards 'const' qualifier from pointer target type [enabled by default] # cp mkbootimg /usr/local/bin/ # cd ../cpio# gcc mkbootfs.c -o mkbootfs -I../include # cp mkbootfs /usr/local/bin/
2) 编译解包工具
# cd ~/android/bootimg-tools/mkbootimg/ # wget https://raw.github.com/pbatard/bootimg-tools/master/mkbootimg/unmkbootimg.c # gcc -o unmkbootimg unmkbootimg.c # cp unmkbootimg /usr/local/bin/
3) 获取出厂boot.img
最直接的方法就是去 谷歌官方的 “Factory Images for Nexus Devices” https://developers.google.com/android/nexus/images 里下载。现在官方已经放出了最新的android 4.4.2 KOT49H 的出厂镜像。下载后解压,然后将boot.img放到android目录下
4) 解包
#unmkbootimg -i boot.img kernel written to 'kernel' (6640200 bytes) ramdisk written to 'ramdisk.cpio.gz' (399979 bytes) To rebuild this boot image, you can use the command:
mkbootimg --base 0 --pagesize 2048 --kernel_offset 0x80208000 --ramdisk_offset 0x82200000 --second_offset 0x81100000 --tags_offset 0x80200100 --cmdline 'console=ttyHSL0,115200,n8 androidboot.hardware=flo user_debug=31 msm_rtb.filter=0x3F ehci-hcd.park=3' --kernel kernel --ramdisk ramdisk.cpio.gz -o boot.img
此时我们的文件夹下面就会有 boot.img kernel ramdisk.cpio.gz 这三个文件了
记下上面很长的那一串参数,重新打包的时候就是需要它,可以把记录成一个脚本。要打包的时候就能用了
此时将zImage 拷出来
cp ~/android/msm/arch/arm/boot/zImage kernel
然后官方内核就被覆盖了。
常理来说现在就能通过mkbootimg来生成boot.img 但是由于nexus 7 默认USB有线网卡(eth0)无法获取IP 需要修改init.flo.rc
而init.flo.rc是在ramdisk.cpio.gz里面
此时就要对ramdisk.cpio.gz进行解包。
cd anroid mkdir tmp gzip -d ramdisk.cpio.gz cd tmp cpio -i -F ../ramdisk.cpio vim init.flo.rc
在ini.flo.rc添加
service dhcpcd_eth0 /system/bin/dhcpcd -ABDKL class main disabled oneshot service iprenew_eth0 /system/bin/dhcpcd -n class main disabled oneshot
添加完保存退出在tmp目录运行
find . | cpio -o -H newc | gzip -c > ../ramdisk.cpio.gz
cd android mkbootimg --base 0 --pagesize 2048 --kernel_offset 0x80208000 --ramdisk_offset 0x82200000 --second_offset 0x81100000 --tags_offset 0x80200100 --cmdline 'console=ttyHSL0,115200,n8 androidboot.hardware=flo user_debug=31 msm_rtb.filter=0x3F ehci-hcd.park=3' --kernel kernel --ramdisk ramdisk.cpio.gz -o boot_new.img
就会生成boot_new.img
然后通过scp拷出来。移动到adb工具目录下(xda下载的adb工具包 百度网盘 地址 提取码fq44 )
在电脑上装好adb驱动 (各类xx助手or 官方USB驱动)
在adb目录下按住shift 右键 在此处打开命令窗口
adb reboot bootloader #重启到bootloader fastboot flash boot boot_new.img
刷完启动系统,准备工作几乎全部完成了。现在我们就可以通过OTG使用有线网卡,无线网卡,rndis_hos ,3g modem了
OTG charge mode 的开启
echo "Y" > /sys/module/msm_otg/parameters/usbhost_charge_mode
OTG charge mode 的关闭
echo "N" > /sys/module/msm_otg/parameters/usbhost_charge_mode
开启以后,要边充电边使用OTG要先把 带供电的OTG线的电源接头(USB公头)插入充电器,后把micro USB 公头插入平板
福利资源:
Freebuf版 Nexus 7 2013 wifi android 4.4.2 KOT49H PwnPad 内核 下载地址 (点我 提取码 vocb)
特性:
支持市面上几乎所有常见支持无线破解的网卡(rtl8187,ar9170,zd1211b,ar9271,GW3887,rt3070等等但固件需要自己安装)
支持DM9601 USB有线网卡
支持OTG charge mode
支持RNDIS_hos
支持3G网卡、USB_modem
支持pl2303 ch340 USB-TTL
截图:
zd1211、ar9271固件以及开启与关闭OTG charge mode 脚本 下载地址( 点我 提取码vmce )
用法: zd1211文件夹与htc_9271.fw 复制到/etc/firmware/ (其他网卡固件一样,可以直接从Kali linux里面拷)
otgchargestart.sh和otgchargestop.sh 复制到/system/bin 下面设置好执行权限。就可以直接在终端里面使用了
下面是演示视频
官方原版 Nexus 7 2013 wifi android 4.4.2 KOT49H 内核 下载地址 (点我 提取码 wypa )
结束语:
通过一个多月的构思以及折腾码字。经历了失而复得 刻有我LOGO的U盘,利用舍友空闲的时候码字(一个多礼拜前笔记本进水主板烧了……)。在一个舍友电脑上装虚拟机配置内核,搭服务器录视频,在另外一个舍友电脑上下视频软件写字幕渲染,一个多月从从来没有接触到内核,到现在渐渐会自己配置内核,拓展自己想要的功能。从从来没有写过shell脚本到写了个快200行的程序。再次感谢Google 与 xda-developers 能让人学到非常多关于android的东西以及英语…这应该算是国内第一篇比较完整的PWN Pi 以及PwnPad的打造教程(第N篇内核编译教程…),写完的感觉真的挺好的…第一次码了这么多字(码完字开始备考….期末考….)
希望Freebuf越办越好。
Hacking For Fun .
设备书籍全家福
11月 上海
CIS 2019首席信息安全官闭门高峰论坛11月
CIS 2019议题抢先看10月
公开课双十一活动9月 上海
CIS 2019官网上线,早鸟票同步开售
已有 54 条评论
这个树莓派卖的好贵啊
好厉害。
赞一个!生命不息,折腾不止!
生活就在于不停的折腾,哈哈,赞一个
膜拜大神。
完全看不懂呵呵
你视频做的那么牛逼,你家里人知道吗?
@FB小编 这两天出去见习….隔壁班的同学一直在说….你家里人知道吗…看到这个笑尿了…
我就是会跳街舞的电工,不过我今年去搬砖了,因为我没有梦想。
@思绪 我想成为一个很特别的人,并一直努力着
其实吧,这玩意不拿来玩移动hacking,真掉价。
配置:米2 & 树莓派(已经装好某系统[fb有],连接好设备(无线网卡+移动电源+内存卡)),然后设置自动连接某wifi热点,米2开启某wifi热点让树莓派自动连接,然后vnc登录~或者直接ssh也OK,接下来只要把手机放口袋,把树莓派放帽子后面,就可以。。去路边捡肥皂了
@mstoor 移动hacking的话,其实大部分操作平板也都能实现。Linux deploy + kali linux armhf 连接localhost vnc或者ssh 挂个无线网卡基本上功能都差不多了,思路这种东西嘛,越多越好。哈哈
求桌面高清大图
@Mystery。 http://www.gamersky.com/showimage/id_gamersky_01.shtml?http://img1.gamersky.com/image2013/12/20131211tqy_6/gamersky_01origin_01_20131211183320A.jpg不用谢
@FallenSec 雷锋你好!
赞一个,下了不少功夫!
@fubeerf 谢谢,折腾和写了一阵子,写完的感觉真不错哈哈
赞
赞一个 比水文精彩多了
@Freedom 谢谢~
下了不少功夫。写的很不错
略屌!!!
不明觉历啊!
我用的是 PcDunino V2 性能远比树莓派 高多了,而且自带2G flash 和 WIFI模块,省事省时省力.
@Moriarty 目前树莓派的性能是还不会觉得很差,虽然有时候开个东西慢了一点 比如metasploit 不过我开始关注的时候树莓派挺流行的,资料也挺多的,资金有限只能买一个,这些里面大部分的东西都是之前买的,现在重复利用,等以后树莓派玩烂了再买一些更酷炫的装备 哈哈
霸气 霸气
好霸气 这么长啊
@FallenSec 你是怎么把 kali 装到nexus7的 呢 ?
@jnxg http://www.freebuf.com/articles/terminal/13209.html 这篇文章~
厉害啊
超怀念折腾。。。。。。。加油加油!
@xixuedafa 谢谢~
文章太长 我都不知道作者写的什么, 求一句话点评
@kor_1989 如何打造一个功能强大可以走到哪黑到哪的设备
饺子醋 看起来不错 山西的吧?
@fakes 哇,真的是山西的醋….这你都知道 哈哈哈
虽然了解作者码字的辛苦,但是好多词不达意,标点符号使用不当,好多句子需要读好几遍才能明白啥意思.增加了不少阅读的困难啊.
@Moriarty 这….我会加油的…
还有那么多包纸巾啊,哎哟
买个开发板不就得了~
狂拽酷炫屌炸天
我来迟了,为何看不到桌面高清壁纸了??
太棒了! 谢谢!!!
路过,因为昨天和朋友聊天说起这个就来看看!
朋友,恕我直言了
1、你的文章实际上是不是针对树莓派的配置和针对Nexus7的网卡驱动配置而已?和Pwn Devices有什么关系?
2、如果按照你的文章内容来看,那样子我写一篇关于如何装机的文章也可以叫用PC电脑配置桌面式物理渗透设备呢?
3、FB的评分也太"给力"了吧!写装机文章岂不是应该要300?怎么说体积都很大,系统变化也很大啊~~
虽说PwnDevices只是把一堆软件砸进去,但是同使用的配置和集成来说那才是你的文章重点吧~就配个网卡什么的就叫物理渗透设备,那样子很坑爹才对吧?如果从语文的角度,是不是文不对题啊?当然我大学还没毕业~
@radiowar 我大学也还没毕业,如果你认真把我文章,以及我文章提到的网址看一遍你就会觉得你应该是没认真了解完就评论吧。如果你点击进去我文章第二段里,也是你发得《WiFi Pineapple Mark IV 无线安全审计的利器》,你应该可以在评论里看到你之前吐槽过树莓派的一句话“性能,散热,还有万恶的无线网卡,整合度,一切的一切!我是不会采用树莓派的”
其实我也想直言,我不知道你的“恕我直言”下面写了那么长一段话的根据是什么….
首先、我不知道你所谓的物理渗透设备的定义是什么,我整篇文章配置出来的设备哪一点不能满足你说的物理渗透设备的要求
其次、我文章的标题是配置,我文章中用了挺大的篇幅来教向我这种曾经没有任何编译内核的人来如何定制内核,从而拓展了树莓派与平板的网络通信的途径,也用了一大段来描述提到Kali Linux for android & for RaspberryPi 。配置和集成?Kali linux的集成度还不够吗?配置的话,你应该没有看到我后半段写的自动反弹连接的脚本,以及再前面一点点的获取目标网络前的几个小思路吗。难道你的物理渗透设备都完全自动不需要通信?
我所认为物理渗透设备其中有两个很重要的就是所携带的工具(你所说的集成)以及网络通信。或许你不明白在RaspberryPi上以及Pwn Pad上 对于初学者,“集成”这东西远没有如何实现网络通信来得难。我觉得在“集成”上“Kali linux for Raspberry Pi”,“Kali linux for android via Linux deploy” 已经做的足够牛逼了,大家随便都能在树莓派以及平板上安装,别说能满足全部,至少物理渗透设备最基本要实现的功能都有了吧?如果你觉得哪一点没有,请说出来大家努力加上去,Make it Better .
(至少我觉得这样的设备能满足我的基本要求了)
文章是用了不少篇幅来写网络通信的方式,难道在有了能够满足功能的软件以后,网络通信的问题不是物理渗透设备要关注的吗?在我完成这篇文章之前,网络通信的问题一直是我所纠结的,“集成”方面多少东西触手可得 metasploit aircrack-ng sqlmap arpspoof 等等等等软件都有,别人都集成好了,就差一个网络通信。我不知道其他人是什么情况,但当时的我要解决网卡的驱动问题遇到了不少困难,走了不少弯路。“虽说PwnDevices只是把一堆软件砸进去”软件已经砸进去了,但是我的网卡用不了注入模式 Fern Mdk3 aircrack-ng 等软件都没办法用,树莓派在远程的时候上不了网,VPN 服务器,SSH 隧道远程管理,基本该有的都有了双网卡的情况下搭建Wifi蜜罐啥的都提供了硬件支持,很多很多都有了。集成?诶
Nexus 7网卡驱动的配置?诶 你这种行为是对作者挺不负责任的。至少我写了这么多,添加了一些有点实用的功能一些有用的小思路,茫茫英文里过滤整理出来的。
"重复造轮子"这词不知道你是不是第一次听。不然我就是觉得你没把文章完整看一遍。难道要我把Kali linux arm版本的实现一步一步写出来?还有android上chroot以及如何部署kali linux 以及如何创造kali linux arm 版本?不好意思,目前我做不到,我也没有去做的想法,都有人实现了。我把我的时间用在比较少人实现的地方,并把它记录,整理,发出来
其实我是不介意别人喷我或者指出我啥不好的,我经常和朋友对喷如果对方讲得很好很有道理,我虽然只能哑口无言的认输,但我会挺开心的。至少对方是有理有据说赢我的
这点我到是很欣赏 @anlfi 之前很长一段时间我每天看Freebuf,看到他的回复都表示膜拜,有理有据,如果是我的话我肯定会接受,然后对他机智的回复表示赞(虽然目前还没有能力和他对话上)
再次恕我直言….其实吧,我觉得你的回复还不够高端,如果要建议的话,最好把别人说的话都记得,然后加以分析,不明事理就回复,会让人感觉有点不成熟。我这是一篇装机文章吗?求你不要这样说,关注Freebuf也挺久了,我一直认为你是个挺酷炫的人,虽然之前说过一些要发得文章到现在一直还没发,你说这样的话只会让原本觉得你酷炫的人觉得你变肤浅了。
我回复完了
还是那句话!和Pwn Devices有什么关系?
酷炫不酷炫是你给予别人的评价与我们没有关系,肤浅与不肤浅一样也是你的看法。
从来没有要你接受的想法存在,或者你自己以写文章的角度去总结你的文章的大纲看看,如果你觉得放个Kali进去就是代表是Pwn Devices,那我就借用我们wiki的一句话
物理渗透设备:其实就是一个便携的能跑linux系统的设备,然后安装一堆linux下的安全工具而已,但是老外却能夸夸其谈搞得很神秘的样子。
这是我们团队成员一开始的认为,当我去真正接触Pwn Devices开始,我就不觉得有所谓安装一大堆安全工具这么简单,所以我才会留言跟你说,难道就这么简单嘛?
静心去看去想,而不是浮躁去表现,什么高端大气上档次是外壳而已,我看你在微博说你第一次发文章到FB,我个人感觉文章是用心去写了,内容详细而又准确,却文不对题!各位看官的认可给你的鼓舞有点晕头转向了吧~我以一个很清晰的角度去看文章,到头来就发现除了基础配置,我实在想不到有什么分别~或者说我用dsploit可以做到Pwn的东西,难道我就写一句文嘛?或者说你这篇文章,从标题而言只是大前奏,而不是主文。如果你觉得就这个样~那我也不多说,人成熟不成熟、好不好轮不到你去评价,我喝水的时间都比你多,认识我的人都知道我现在对于这些技术性的内容是如何的。我说过的话就不会改,我是依然不会采用树莓派的,包括F-BOMB的作者,本身在v2使用树莓派也打消了念头。
如果文章是以N部曲作为基础,这篇文章只是大前奏,我绝对不会留下上面的留言,最近刚刚好朋友是看了你的文章然后去折腾了他所认为的Pwn Device告诉了我,我来看我发现前奏做好了,后面是啥呢?如果我是喝醉酒说话不清醒,我还特地问了那位朋友,你仔细看看这文章的内容骨干,从而变成相关的提纲框架,哪里有关于Pwn Device的东西出现?把底层配置弄好了,基础功能完成了,作者好心给我们弄了固件了,是不是代表你刷了上去就是Pwn Device呢?基于攻击场景的运用配置、程序之间的交互处理呢?最起码Pwnexpress也会搞每个功能的UI Shell做一个前期配置啊,这个呢?我所谓的高度集成是基于这些,这些才是你文章的主要内容,可惜我没有看到,而且暂时我觉得你就根本没有考虑到。把设备控制以web控制?还是B/S?还是C/S这些都是每个设计者会考虑到的,好像F-BOMB一开始就以可抛弃型进行设计,所以设备是以远端web控制操作,pineapple是以独立设备进行web网页控制操作,Pwn Power是以WEB、SMS、SSH等途径远程操作。作为一台物理渗透设备,要考虑自身远程访问控制,你做到了,但是没有整合到Pwn上面,也没有基于功能性上面进行考虑。到最后我朋友就一句话说出了文章的致命缺点,既然这样子配置,那样子我直接安装dsploit还来的好,试问上面给你赞的看官,有没有考虑到他们按照你的结果做出来后和一个app后的效果有啥区别?
所以我才会建议小朋友,你静心去看不要浮躁,第一次写长文兴奋而走题,我在读书时代经常会有,但是以语文写作角度,我真的是没有发现题目的中心何在,小时候语文老师说的画龙点睛你做了,而首尾呼应鉴于现在网络文章的存在,结尾基本上也就不存在的了,围绕中心论点写作,紧紧环扣题目意义,这就是你的问题所在!
我说的就这么多了~你觉得你酷炫你就继续吧~
@radiowar 哈哈哈,我觉得你这段说得挺好的,我之所以觉得别人酷炫,就是因为自己还不够酷炫。每一个看过的,我觉得酷炫的功能我都记得,我都会想着要去实现。你说配置是像你上面所说的高度集成的话,这个我承认,我只实现了SSH远程反弹连接。但打从一开始我就有考虑到WEB UI ,我也一直有记得SMS
我没实现的功能,我觉得别人酷炫的地方,我都会记着并想要自己实现,而不是看过就忘了。你说的WEB UI 我之前就有打算过两天期末考以后就要先学好PHP然后把自己的博客改版,然后开始研究如何用PHP进行远程交互。脚本的话,我也会在期末考试以后着手去学。还有SMS to Bash 这样的功能。还有昨晚上看你们成员以及Radiowar微博上那个很酷炫的东西。哈哈
谢谢你码那么多字
控制命令行。我也一直有想到可抛弃型以及前期自动化的一些东西,比如当失去某一种上网方式的时候,如何自动通过其他途径上网,无线的话比如wifite脚本之类的自动抓包跑包,然后自动Pin。还有插入网线后的脚本自动连接。我这篇文章不是高度集成。我只是实现与集成了一种我所认为最容易实现的控制方式(3G网络为前提的自动SSH隧道连接)。说真的,如果按照上面说的几个设备的要求,我这篇文章的内容离题目是有一大段距离,但不代表我没有考虑过前期水平不够只能先实现这个,可能我一开始写文章的配置和你说的配置不太一样吧。我那时候想的是最基本的配置。主题改成渗透测试设备可能我写的内容会近一点吧
其实我昨晚就一直在想,不知道要加入你们团队要啥要求的,给个群号么~
看到这篇文章不得不赞,和我经历很相似。楼主很刻苦,也很牛X。
我擦,你买树莓派你他妈的知道吗?
我觉得值得鼓励! 学生能潜心研究课题值得表扬以及鼓励。存在的问题可以改进。一点点来吧。
linux deploy装kali出现错误
ERROR: ld.so: object ‘/system/lib/libsuc.so’ from LD_PRELOAD cannot be preloaded: ignored.
怎么破?
为什么寝室桌子和我们的一模一样,我都怀疑是不是每个学校都是这种书桌啊
信息量不小!值得细观,用心之作。给你点个赞吧