近日做一些无线安全审计,于淘宝购得一山寨WiFiPineapple,到货后发现是联想某款便携路由器魔改版。二话不说刷上了最新的Nano 1.0.5固件,兴冲冲连上它的Wi-Fi打开管理面板(提醒一下,不要把有线网络接口直接连到现有路由器上,默认设置在那个端口有DHCP,会冲突),点击模块,然后发现死活获取不到模块列表。经过检查,发现上一代固件的模块安装是走浏览器的,即只要电脑能连接上wifipineapple.com,就能正常下载固件;而这一代的所有API请求都走设备上的PHP服务,更加不幸的是,wifipineapple.com在中国大陆不能正常访问。经过一番研究之后,我还是成功让设备的模块下载功能跑起来了。
第一步:连接网络
你可能需要在设备的USB口上再插一块无线网卡用于联网。如果PineAP daemon已开启,先关闭它。在Web管理界面->Networking->WiFi Client Mode选择设备wlan1扫描,然后连到你的可用Wi-Fi接入点。
第二步:建立可用的HTTP(s)代理
SSH连上设备。
安装代理服务器
先换上中科大源。
修改 /etc/opkg/distfeeds.conf 内容为:
1 2 3 4 |
src/gz chaos_calmer_base https://openwrt.mirrors.ustc.edu.cn/chaos_calmer/15.05/ar71xx/generic/packages/base src/gz chaos_calmer_packages https://openwrt.mirrors.ustc.edu.cn/chaos_calmer/15.05/ar71xx/generic/packages/packages src/gz chaos_calmer_management https://openwrt.mirrors.ustc.edu.cn/chaos_calmer/15.05/ar71xx/generic/packages/management src/gz chaos_calmer_routing https://openwrt.mirrors.ustc.edu.cn/chaos_calmer/15.05/ar71xx/generic/packages/routing |
修改 /etc/opkg/customfeeds.conf 内容为空(注释掉所有行)。
然后装相关包:
1 2 |
opkg update opkg install shadowsocks-client polipo |
待安装完成,修改 /etc/config/polipo :
1 2 3 4 5 6 |
config 'polipo' 'general' option 'enabled' '1' option 'proxyAddress' '0.0.0.0' list 'allowedClients' '127.0.0.1' option 'socksParentProxy' '127.0.0.1:1080' option 'socksProxyType' 'socks5' |
(其它行不需要改动,如果没有就在相应位置插入,如果有就修改该行。)
然后 /etc/init.d/polipo restart 重启Polipo服务。
启动Shadowsocks:
1 |
sslocal -s server_address -p server_port -u 127.0.0.1 -b 1080 -k password -m encryption_method & |
(经我测试, -d 参数和 /etc/init.d/sslocal 这个服务都不能正常工作,所以暂且在终端里面跑起来吧。)
修改 /etc/opkg/customfeeds.conf 为:
1 |
src/gz chaos_calmer_pineapple https://www.wifipineapple.com/nano/packages |
(就是把刚刚删掉的WiFiPineapple源加回去。)
再更新源:
1 |
http_proxy=http://localhost:8123 https_proxy=http://localhost:8123 opkg update |
这一步应当没有任何下载失败的报错。
第三步:修改下载模块相关代码使用代理
修改
/pineapple/modules/ModuleManager/api/module.php :
(注意不同版本的位置不同,但是代码是一样的,可以查找一下。如果你更新了这个模块就要重新修改一遍。)
第61行:
1 |
$context = stream_context_create(['ssl' => ['verify_peer' => true, 'cafile' => '/etc/ssl/certs/cacert.pem']]); |
改为
1 |
$context = stream_context_create(['ssl' => ['verify_peer' => true, 'cafile' => '/etc/ssl/certs/cacert.pem'], 'http' => ["proxy" => "tcp://localhost:8123"]]); |
第121行:
1 |
$this->execBackground("wget 'https://www.wifipineapple.com/nano/modules/{$this->request->moduleName}' -O {$dest}{$this->request->moduleName}.tar.gz && touch /tmp/moduleDownloaded"); |
改为:
1 |
$this->execBackground("https_proxy=http://localhost:8123 wget 'https://www.wifipineapple.com/nano/modules/{$this->request->moduleName}' -O {$dest}{$this->request->moduleName}.tar.gz && touch /tmp/moduleDownloaded"); |
还有Dashboard上的Bulletins功能:
修改
/pineapple/modules/Dashboard/api/module.php :
第103行:
1 |
$context = stream_context_create(["ssl" => ["verify_peer" => true, "cafile" => "/etc/ssl/certs/cacert.pem"]]); |
改为:
1 |
$context = stream_context_create(["ssl" => ["verify_peer" => true, "cafile" => "/etc/ssl/certs/cacert.pem"], 'http' => ["proxy" => "tcp://localhost:8123"]]); |
保存以后,在Web管理界面->Modules->Manage Modules点击Get Modules From WiFiPineapple.com就可以看到模块列表了,Dashboard上的Load Bulletins from WiFIPineapple.com按钮也可以使用了。
附录:山寨设备不识别SD卡导致模块无法安装的解决方案
首先确定SD卡的设备路径,
ls -l /dev/sd* ,可以看到设备在
/dev/sda1 。
然后编辑
/etc/config/fstab (可以通过终端或者Web管理界面->Advanced->USB)
1 2 3 4 5 6 |
config 'mount' option target '/sd' option device '/dev/sda1' option fstype 'auto' option options 'rw,sync' option enabled '1' |
再把SD卡格式化为ext4:
mkfs.ext4 /dev/sda1
最后挂载上去:
/etc/init.d/fstab restart
就能正常识别SD卡了。
THX,之前在路由器配置VPN挺麻烦的,这个不错