WiFiPineapple通过代理服务器下载模块

近日做一些无线安全审计,于淘宝购得一山寨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 内容为:

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 内容为空(注释掉所有行)。

然后装相关包:

opkg update
opkg install shadowsocks-client polipo

待安装完成,修改/etc/config/polipo :

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:

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 为:

src/gz chaos_calmer_pineapple https://www.wifipineapple.com/nano/packages

(就是把刚刚删掉的WiFiPineapple源加回去。)

再更新源:

http_proxy=http://localhost:8123 https_proxy=http://localhost:8123 opkg update

这一步应当没有任何下载失败的报错。

第三步:修改下载模块相关代码使用代理

修改/pineapple/modules/ModuleManager/api/module.php :
(注意不同版本的位置不同,但是代码是一样的,可以查找一下。如果你更新了这个模块就要重新修改一遍。)
第61行:

$context = stream_context_create(['ssl' => ['verify_peer' => true, 'cafile' => '/etc/ssl/certs/cacert.pem']]);

改为

$context = stream_context_create(['ssl' => ['verify_peer' => true, 'cafile' => '/etc/ssl/certs/cacert.pem'], 'http' => ["proxy" => "tcp://localhost:8123"]]);

第121行:

$this->execBackground("wget 'https://www.wifipineapple.com/nano/modules/{$this->request->moduleName}' -O {$dest}{$this->request->moduleName}.tar.gz && touch /tmp/moduleDownloaded");

改为:

$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行:

$context = stream_context_create(["ssl" => ["verify_peer" => true, "cafile" => "/etc/ssl/certs/cacert.pem"]]);

改为:

$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)

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卡了。

1 thought on “WiFiPineapple通过代理服务器下载模块

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据