黑客是如何伪装成公共wifi的--家用路由器实现Web认证

转载需注明,本文地址:http://blog.csdn.net/btyh17mxy/article/details/17281781

简介和原理

        上个月跟某神秘部门一小哥吃饭时听说有人将wifi热点伪装成公共wifi(也叫Wlan,例如移动联通电信的CMCC、China-Unicom、China-Net等)来盗取用户数据,很好奇其实现方式。Google一番后发现,Wlan是基于Web认证实现的。简单说就是通过在路由器上一番设置,让未登录用户无论访问什么网址都显示登录页面,只有登录成功后才能正常上网。然而家庭用的路由器通常不具有那些复杂的功能,似乎只有上千块的路由器才有这些功能。但本文给出了一种使用家用路由器实现web认证的简单方法。

        原理的话还比较简单,无线路由器A(下简称路由器A)连接互联网,笔记本(下简称PC)通过wifi连接路由器A,无线路由器B(下简称路由器B)通过网线连接PC(如图1-1)。将路由器B的工作模式设成“无线AP”(如图1-2)。由PC合路由器B组成一个内网,在该内网中PC充当Router,路由器B只是一个无线交换机,因此PC便可完全控制该子网。

黑客是如何伪装成公共wifi的--家用路由器实现Web认证_第1张图片

图1-1                                                                                                                                                         黑客是如何伪装成公共wifi的--家用路由器实现Web认证_第2张图片

  图1-2

准备工作

        本文介绍的方法是在Ubuntu12.04下实现的,需要用到以下设备和工具:
        0、一台笔记本(或台式)电脑,要求电脑有一个无线网卡和一个有线网卡。
        1、两个普通无线路由器,网线两三根。
        2、iptables
        3、dhcp3-server
        4、Apache
        5、python2.7
        6、webpy(一个python库,django也可以)
        7、一只闲的蛋疼的程序猿


        其中电脑用于充当路由器,一个无线路由器用于提供互联网接入,另一个用于伪装热点,iptables用于实现转发功能,dhcp3-server是DHCP服务器,Apache用于充当web服务器,python2.7和webpy用于实现一些简单的登录网页,一只闲的蛋疼的程序猿用于完成这些工作。各位看官自行准备这些东西。


配置DHCP服务器

        就是将你的笔记本配置成DHCP服务器,在网络中充当Router。

        1、固定有线端口IP地址

在PC上运行

sudo gedit /etc/network/interfaces

插入以下内容

auto eth0
    iface eth0 inet static
    address 192.168.4.5
    netmask 255.255.255.0
    network 192.168.4.0
    broadcast 192.168.1.255
    gateway 192.168.4.1

这里应注意我的有线端口叫“eth0”,各位应根据自己情况自行修改。

        2、配置DHCP服务

编辑isc-dhcp-server

sudo gedit /etc/default/isc-dhcp-server
增加如下内容

INTERFACES="eth0"


编辑dhcpd.conf
sudo gedit /etc/dhcp/dhcpd.conf
增加如下内容

ddns-update-style interim;
ignore client-updates;
allow bootp;
allow booting;

subnet 192.168.4.0 netmask 255.255.255.0 {

    option routers 192.168.4.5;
    option subnet-mask 255.255.255.0;
    next-server 192.168.4.5;
    filename="pxelinux.0";
    option time-offset -18000; # Eastern Standard Time

    range 192.168.4.10 192.168.4.100;#子网ip从192.168.4.10到192.168.4.100
    default-lease-time 21600;
    max-lease-time 43200;
}

启动DHCP服务,运行:
sudo service isc-dhcp-server start
如果终端中显示如下形式消息则成功,否则启动失败。
isc-dhcp-server start/running, process XXXX
如果启动失败,可以运行以下命令察看Log分析原因
sudo tail -f /var/log/syslog | grep dhcpd


配置路由器B

开始这一步前应确保上一步已经配置成功了。
然后打开路由器B的设置页面,将“工作模式”改为“无线AP”(如图1-2),等待路由器重启完成后再将“LAN口设置”中的“类型”改为“动态IP(DHCP)”,如图3-3-1。
黑客是如何伪装成公共wifi的--家用路由器实现Web认证_第3张图片
                                                图3-3-1

修改完成后,在PC上打开浏览器访问“192.168.4.10”,如果能打开路由器B的配置页面则设置成功。

如果设置成功,你可以尝试使用手机通过wifi链接路由器B,此时在手机上只能打开路由器B的设置页面,而不能访问互联网,要想能够访问互联网还需设置转发规则。

设置转发规则(一)

        开启ip转发

sudo gedit /etc/sysctl.conf

找到net.ipv4.ip_forward= 1,取消这一行的注释,保存后再运行

sysctl -p

        设置规则

运行:

sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE


这时再回到手机上,打开浏览器应该就可以正常访问互联网了,但是我们离要实现web验证的目标还差那么一丢丢。


设置转发规则(二)

        要想实现web验证功能,我们就要让未经验证的终端不能上网,同样我们也使用iptables的转发功能,运行:

        iptables -t nat -A PREROUTING -s 192.168.4.11/32 -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8886

        这行命令实现的是将ip地址为192.168.4.11的终端80端口的通讯转发到PC的8086端口,这样该终端就不能正常上网了,由于子网ip范围是从192.168.4.10到192.168.4.100,其中192.168.4.10是路由器B,那么我们就应该对192.168.4.11到192.168.4.100的所有ip都进行转发,这样他们就都不能上网了。


使用webpy完成web验证功能

        创建一个叫”j.py“的Python脚本,写入以下内容:

import web

urls = ("/.*", "hello")
app = web.application(urls, globals())

class hello:
    def GET(self):
        return """
        
        
        
        
        
        
        
        
        
        
        """

if __name__ == "__main__":
    app.run()

        再创建一个叫"s.py"的Python脚本,写入以下内容:


import web
import os
urls = ("/.*", "hello")
app = web.application(urls, globals())

class hello:
    def GET(self):
        #f = open("login.html")
        return  """
        
        
        
        
        
        
        
            

username

password

""" if __name__ == "__main__": app.run()

        执行

python ./j.py 8886

python ./s.py 8888


        这回在链接路由器B的其他终端上无论打开一个什么网址都会显示如图7-1-1的网页。

        黑客是如何伪装成公共wifi的--家用路由器实现Web认证_第4张图片

                      图7-1-1
        如果你感觉太麻烦的话,完全可以不用理会“j.py”,只需要执行“python ./s.py 8886”也行(注意是8886)。

        还是简单解释一下吧,iptables将80端口的所有通讯全部转发到了8886端口上,也就是说无论链接路由器B的终端通过80端口访问什么网址,都会指向PC的8886端口。我们在PC上开一个Python的web应用监听8886端口,无论其访问什么url都打开同样的一个登陆页面,这样就实现了简单的web验证功能。至于为什么要用j.py跳转一下,是因为如果不跳转的话即使浏览器中打开了我们设定的登陆页面,但是地址栏里还是会显示用户打开的原始网址,感觉不爽(说的不清楚,诸位自己体验下吧)。

        当然如果要伪装成CMCC的话,你可以将路由器B的SSID修改成“CMCC“,再将登陆页面写成跟CMCC的登陆页面一样的样式。这样一般用户是无法识别的,造成的后果就是轻则wifi帐号被盗,重则被钓鱼各种帐号外泄。


一些后续工作

前面的操作只实现了显示web认证页面的功能,我们还可以在"s.py"的hello类里实现POST方法,获取终端提交的表单,验证其账户合法性,并通过web.ctx.ip获取终端ip,再通过subprocess执行语句删除针对该IP的转发规则(就像下面那样)。
iptables -t nat -D PREROUTING -s 192.168.4.11/32 -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8886

还需要说明的是本文中使用的只是一个测试的方法,实际操作中应将所有端口都转发,而不是仅仅转发80端口。而且还可以将PC配置为DNS服务器,这样就可以完全控制网络了。我觉得现实中的黑客有可能就是在PC上配置了DNS服务,那样子他们就能把用户访问的网站替换成黑客的钓鱼网站。


PS:不知道我们计算机网络老师看了这个能不能期末给我算个过啊!
















你可能感兴趣的:(闲话)