admin 管理员组文章数量: 887021
转载需注明,本文地址:http://blog.csdn/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便可完全控制该子网。
图1-1
图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
如果启动失败,可以运行以下命令察看Log分析原因isc-dhcp-server start/running, process XXXX
sudo tail -f /var/log/syslog | grep dhcpd
配置路由器B
开始这一步前应确保上一步已经配置成功了。 然后打开路由器B的设置页面,将“工作模式”改为“无线AP”(如图1-2),等待路由器重启完成后再将“LAN口设置”中的“类型”改为“动态IP(DHCP)”,如图3-3-1。
图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脚本,写入以下内容:
再创建一个叫"s.py"的Python脚本,写入以下内容:import web urls = ("/.*", "hello") app = web.application(urls, globals()) class hello: def GET(self): return """ <html> <head> <meta http-equiv="Content-Language" content="zh-CN"> <meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312"> <meta http-equiv="refresh" content="0.1;url=http://192.168.6.28:8888/login/hahaha/heheh"> <title></title> </head> <body> </body> </html> """ if __name__ == "__main__": app.run()
执行import web import os urls = ("/.*", "hello") app = web.application(urls, globals()) class hello: def GET(self): #f = open("login.html") return """ <html> <head> <meta http-equiv="Content-Language" content="zh-CN"> <meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312"> <title></title> </head> <body> <form action="" method="post"> <p>username<input type="text" name="name" /></p> <p>password<input type="text" name="pwd" /></p> <input type="submit" value="Login" /> </form> </body> </html> """ if __name__ == "__main__": app.run()
这回在链接路由器B的其他终端上无论打开一个什么网址都会显示如图7-1-1的网页。python ./j.py 8886
和python ./s.py 8888
图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:不知道我们计算机网络老师看了这个能不能期末给我算个过啊!
版权声明:本文标题:黑客是如何伪装成公共wifi的--家用路由器实现Web认证 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1725917876h892485.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论