前几天买了个树莓派3b,实现远程控制自然要有内网转发,没什么毛病,但是任何事情我遇到的问题总比别人多,下面就开始折腾了。
一开始装的是树莓派的原生系统,花生壳官网有树莓派专用的客户端也就是arm版,但是用着用着很多渗透软件装着太麻烦,于是换了kali系统,
那么问题来了,花生壳没有适用的客户端了,所以只能想用自己的软件转发,当然最简单的就是lcx转发端口( linux下内网端口转发工具:linux版lcx [实现远程内网维护]),但是这种工具从稳定性角度考虑的话只能作为临时方案。
终究还是选择了ngrok这个内网转发工具,网上教程不少,也基本上都成功了,但是我折腾了两天,当然,我的操作是没有问题的,出于不甘心的态度,别人不怎么会linux的都能搞定,我没理由搞不定,于是死撑到昨晚,终于各种google解决了一个最大的问题。
那么这个问题就是,网上所给的那些ngrok.cfg配置文件 根本不生效。
教程精简版
高度概括下ngrok的使用方法,也算是给自己的一个备忘。
客户端:
ngrok.cfg
./ngrok -config=ngrok.cfg start ssh
服务端:
./ngrokd -domain="xxx.vuln.cn" -httpAddr=":1222" -httpsAddr=":443"
出现的那些问题
第一个问题:
那么我遇到最大的一个问题就是,客户端根本不请求在ngrok.cfg里指定的域名,所以就会导致客户端一直处于reconnecting状态,
从转包数据可以看到:
请求的一直都是go源码中指定的默认域名,所以,网上给的配置文件:
server_addr:xxx.vuln.cn:4443
trust_host_root_certs: false
是有问题的,server_addr根本不生效,可能与版本有关。
使用上面提供的配置文件后,完美转发本地22端口:
第二个问题:
go语言的安装也是折腾的够了,网上的教程基本上都是下载go源码包来编译,可是正当我崩溃的不想玩的时候,发现官网有现成的arm版本
树莓派这个版本可以直接用:https://storage.googleapis.com/golang/go1.7.4.linux-armv6l.tar.gz
注意:go版本必须要1.7版本或以上,很多1.3,1.4后面编译ngrok客户端的时候会报错。
完整教程
完整的教程网上很多,在这里我也直接把网上的教程拿过来,纠正一些地方贴上来。
git clone https://github.com/inconshreveable/ngrok.git ngrok #或者: git clone https://github.com/tutumcloud/ngrok.git ngrok export GOPATH=/usr/loca/ngrok/ export NGROK_DOMAIN="xxx.vuln.cn" cd /usr/local/ngrok
生成证书,Ngrok会使用此证书加密通讯
openssl genrsa -out rootCA.key 2048 openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem openssl genrsa -out server.key 2048openssl req -new -key server.key -subj "/CN=$NGROK_DOMAIN" -out server.csr openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 5000
将证书文件复制到指定位置
cp rootCA.pem assets/client/tls/ngrokroot.crt -i
cp server.crt assets/server/tls/snakeoil.crt -i
cp server.key assets/server/tls/snakeoil.key -i
编译服务器端与客户端
服务器端为linux-x86-64
export GOOS=linux
export GOARCH=386
make release-server
编译完成过后~/ngrok/bin/ngrokd
即为服务端运行文件
运行:
./ngrokd -domain="xxx.vuln.cn" -httpAddr=":1222" -httpsAddr=":443"
客户端
树莓派为linux-arm架构,重新声明go env
里的变量
export GOOS=linux export GOARCH=arm make release-client
编译完成过后~/ngrok/bin/linux_arm/ngrok
即为树莓派客户端运行文件
客户端配置文件:
ngrok.cfg
运行
./ngrok -config=ngrok.cfg start ssh
配置域名解析
如图即可,
注意,一定要解析一个前面不带星号的,因为tcp端口转发不需要前面的三级域名,所以要解析xxx.vuln.cn,如果不单独解析一个,那么会解析不了。
配置开机启动
打开 /etc/rc.local
在exit 0这句之前加入这句话:
(sleep 3; /root/ngrok/ngrok -config=/root/ngrok/ngrok.cfg start ssh) &
路径自行修改,注意全部用绝对路径