分类 wifidog源码 下的文章

wifidog 实现无线热点认证

<Wifi有一种web方式认证方案,当连接到某些不加密的热点之后,会跳转到一个网页来认证登陆,大家熟悉的CMCC就采用了这种web的验证方式。>
它的原理是在得到正确的认证之前,会把所有的流量重定向到认证服务器上,通过认证后,便可以正常使用。
如果说仅仅想获取web验证时其他用户的用户名和密码,arp欺骗然后嗅探足够了。因为此时攻击者已经分配到了ip,且同一网关下产生的流量是不会重定向的。
但是目前的情况是,认证服务器用的https加密传输,无法嗅探到明文密码。
于是萌生了伪造热点及web认证服务器,然后记录密码的想法。

客户端在接受WiFi信号的时候有一个特点,在ssid相同的时候,会只保留信号强的那一个无线路由的ssid。
这样,只要伪造热点的ssid与原热点的相同,会有部分人搜到伪造的热点,从而登陆,记录密码。

本无线路由用的ddwrt的系统,装了wifidog来进行辅助web认证。

至于如何搭建web认证系统,百度一大把,但主要是用了wiwiz和wifiap这两个成熟的网站提供的方案。
但是,利用第三方的网站无法拦截到用户名和密码,而且无法控制认证的过程。
最好的解决方法是自己搭建一个简单的系统。

Wifidog的认证流程如下:
1、客户端发出一个http请求(http://www.xxx.com)
2、网关将该请求信息以及网关本身的一些信息作为参数,将原始的请求重定向到web认证服务器(http://auth_server/login/)
3、Web认证服务器通过客户端的认证之后,返回一个一次性的token,客户端带着这个token去网关上的wifidog开放的端口去做验证(http://GatewayIP:GatewayPort/wifidog/auth?token=[auth token])
4、Wifidog拿到token后,到web认证服务器检测token是否有效,如果有效则通过客户端的验证,开放访问权限,并将客户端重定向到web认证服务器的欢迎界面(http://auth_server/portal/);如果token无效,则需要继续验证

Wifidog官方推荐的web认证服务软件为authpuppy (http://www.authpuppy.org),不过其代码比较复杂,可以参考wifidog之前的web认证服务软件。获取方式为:

svn checkout https://dev.wifidog.org/svn/trunk/wifidog-auth

web认证服务软件用php写成,重点文件为wifidog-auth\wifidog\login\index.php(客户端web认证、产生token以及重定向到wifidog的开放端口)、wifidog-auth\wifidog\auth\index.php(wifidog验证token)、wifidog-auth\wifidog\portal\index.php(认证成功后页面重定向)。宏定义在wifidog-auth\wifidog\include\common.php文件中。

了解了基本流程就可以DIY出一个简单的web认证服务器了。在认证的过程中可以顺便记录下客户端的密码。
路由器上Wifidog配置如下图。重点配置的地方为端口号(port),认证服务器(AuthServer Hostname), 认证服务器web端口(AuthServer HTTP Port),路径(AuthServer Path)。

web认证服务器端代码大家自己发挥吧。我个人只是实现了记录用户名密码这样一个简单的功能,如果要做的好的话可以用用户提交的密码到真正的认证服务器做一次认证来返回合适的结果,以及自己搭建dns服务器伪装的更加逼真,但是对于那些比较敏感的用户,还是不容易进行欺骗的,比如用回会发现ssl加密不见了。

考虑到功耗和实用问题,我的web认证服务器是搭建在树莓派上的。配置好无线路由的WLAN确保能联网之后,设置路由器的ip为10.1.1.1,手工配置树莓派静态ip为10.1.1.2。树莓派上安装nginx和php,配置好webserver的环境,上传自己的代码。开启无线路由的wifidog就可以守株待兔了。

当用户连接到自己搭建的无线路由器之后,可以说所有的网络流量都在控制之中了。不过怎么拿到这些流量成了一个问题。在此有三种拿到流量的方法。

1、ARP欺骗
这个不多说,大家都懂。不过有种偏离正题的感觉。
2、网线嗅探
当所处的环境通过网线来连到互联网时可用这个方法。将网线接入自制的硬件并将另一端插到无线路由的WLAN口,做好相应的配置。所需硬件参见我之前的一个帖子。原理类似于Throwing star lan tap,直接监听网线上的数据(无线路由的WLAN口)。
3、通过笔记本做中介
当所处的环境只有无线网连到Internet时,可用笔记本来搭建一个中介。
其连接关系为:
AP—无线网卡—有线网卡—自己的无线路由—受害者
这时用笔记本就可以直接嗅探到所有的数据。

这里以windows环境为例,演示如何搭建这个数据流链条。
在无线网卡连接到无线网之后,在属性中选择Internet连接共享,共享给以太网卡(有线网卡)。

此时有线网卡的ip会被设置为192.168.137.1

用网线连接有线网卡的网口和无线路由的WLAN。在无线路由的配置页面,将WLAN口配置静态ip为192.168.137.2,子网掩码255.255.255.0,网关为192.168.137.1。
这时整个数据流链条便搭建成功。

至于在linux下的搭建,注意打开ip_forward功能,并配置好iptables。因为没有linux环境,不在此详细演示。

对于流经网卡的数据包,可以收集的信息主要有两种:密码和session。
windows下的cain用来嗅探并提取得到的用户名密码,改下规则也能得到特定的cookie。
linux下的ettercap设置好规则能获取到几乎所有想要的信息,还能用来更改返回的web页面、挂马、添加cookie等等,可谓神器。

至于开启了ssl加密的服务器,可以用ssltrip来得到明文传送的数据。
如果不怕麻烦的话,还可以自己搭设dns服务器来钓鱼,不过这样就有些杀鸡用牛刀了。

PS:最近出了个叫极路由的东西,号称自动翻墙。目测是内置了一个vpn。大家有兴趣可以去了解下~
PPS:利用web认证方式的热点是挂马利器哦

本文章由 http://www.wifidog.pro/2015/03/12/wifidog-%E8%AE%A4%E8%AF%81-2.html 整理编辑,转载请注明出处

wifidog认证服务器内容管理器参考手册

内容管理器参考手册

简介
Wifidog允许热点所有者和管理员创建并关联内容到热点登录页面,门户页面或者界面上的任何位置。系统可以通过认证服务器的管理页面访问。最基本的添加/编辑内容的方法是使用Reusable content library。
你可以使用“Add new content”按钮来创建内容。“Show all content”按钮将显示保存在系统中的所有内容。重点要注意的是标准视图将只显示“persistent read-only”内容。在你可以关联内容到热点,网络或者用户预置文件时,内容必须设置成“persistent read-only”。这防止过于容易的删除内容。

内容类型的公共属性
所有内容类型都有几个共通的属性,但是Simple内容类型,例如TrivialLangstring和SimplePicture,可能就没有显示出这一特点来使他们足够简单。

  1. Metadata
    不同的Metadata属性包含将要显示给人们的内容的一些信息。这些都有可选性。
    如果使用这些属性,可以构成任何Simple内容类型。因此标题可以是TrivialLangstring,SimplePicture或其它任何可用内容类型。
    需要注意的是如果所有Metadata属性和作者为空的话,内容将以完全不同的形式显示。
    1)标题
    显示内容的标题。注:不存在于Simple类型中,除非他们具有持久性。注:如果检测“是否显示标题?”,则只在显示时出现。检测“是否显示标题?”的原因是是允许给Persistend 内容类型加标题,所以可以在可再用内容库中找到他们,而不用实际显示标题。
    标准显示:将显示在内容区域的最上面
    2)描述
    内容的简短描述。*标准显示:右侧,作者下方
    3)详细描述
    内容的详细描述。将以连接的形式显示真实详细描述的页面。
    4)项目信息
    *标准显示:右侧,描述下方

  2. 内容访问控制
    1)是可再用内容库的一部分吗?
    内容是可再用的。可再用的内容将要:显示在可再用内容库,节点和网络内容分配接口。如果不从节点或contentgroup移除将无法删除。No-reusable内容如果从节点,网络或contentgroup移除将完全删除。
    2)内容所有者列表
    当你第一个创建内容时,你就是内容所有者。你可以做为所有者任意添加其它用户,并且用户可以被允许修改内容。
    3)是内容作者吗?
    当你添加一个用户时,你可以检测“Is content author?”来表明用户确实创建了显示的内容。*标准显示:将显示在右上角,在描述上方

不同内容类型
1)需要注意的是以下内容类型都有“Simple”版本,没有metadata属性,没有持久性。从历史原因上讲,SimpleLangtring实际上叫做TrivialLangstring。完全内容类层次。这是内容类型继承层次。内容将完全继承它根源的管理接口,并且可能添加它自己的属性。

ContentGroup
ContentGroup不是真正的内容。它是容纳许多不同内容块的“集装箱”。

ContentGroup配置
它的元素通过以下属性显示:
1)内容显示顺序

  • 随机选取内容元素
  • 随机选取内容元素,但是要进行两次才显示所有元素
  • 按先后顺序选取元素
    2)内容循环
  • 内容持续循环
  • 内容一天循环一次
  • 内容每会话一次循环一次
  • 内容每更改节点一次循环一次
    3)内容显示给同一个用户次数
  • 内容显示不只一次
  • 内容只显示一次
  • 内容显示不只一次,但不在一个节点

ContentGroup元素
你可以为每个内容元素新建内容或者选择Reusable Content Library中已存在的内容。请记住:已存在的内容必须在可再用之前设置成持久性。你也可以将内容组分配为彼此的元素,互相嵌套。
每个元素会根据显示环境来显示:

  • Display order:元素将以什么顺序显示
  • Only display from (date) until (date):内容将只在这个日期范围内显示。注意的是,一旦过期,元素将默认的不会在管理界面出现。
  • Only display at node(s):元素被允许显示的节点。注意的是一个元素可以在任何节点显示,除非选择特定的一个或几个节点。

EmbeddedContent
此内容类型允许你在门户页面嵌入多媒体内容。它支持大量的可靠内容,它会在用户的浏览器不支持多媒体内容的时候显示。

File
此内容类型允许你上传内容,并保存在数据库,或者指定一个可以下载此文件的远程URL,此内容将有一个下载按钮。

Picture
扩展文件,允许显示图片。

FlickrPhotostream
Flickr是数码图片分享页面。这一服务作为图片资源库被广泛应用在博客。Flickr的优点是你可以通过API访问所有图片和metadata。使用API我们可以在WIFIDOG的门户页面上通过Flickr照相排版将图片显示出来。你需要有Flickr API key来激活此内容类型。API key是非商用性的免费使用。我们支持三种图片选择模式:

  • 标签
  • 用户

每种选择模式都有许多不同的属性

IFrame
允许在门户的可配置部分显示另外一个网页。

IFrameREST
使用SmartyTemplate更强大

Langstring和TrivialLangstring
人们大多时候都会使用TrivialLangstring。它WIFIDOG指定的所有语方环境的翻译。
注意的是Langstring允许简单的HTML标记。

HTMLeditor
用来创建HTML标记的使用Langstring的WYSIWYG编辑器。

SmartyTemplate
使用Smarty template engine创建源于认证服务器变量的内容。这确实是与其它网络系统整合的最好方法。在管理界面可以获得帮助。

Stylesheet
允许向节点,内容等添加自定义CSS Sylesheets。

RssAggregator
强大的RssAggregator是基于Feedpressreview。在管理界面可以获得帮助。

ShoutBox
注意的是与其它内容类型不同,此内容类型与用户积极互动。它执行Shoutbox的使用案例。它目前拥有最小的特征集:

  1. 允许用户直接在门户发送短消息
  2. 其它用户可以在门户上看到最后五条信息
  3. 它将在允许发送信息之前检测是否与热点连接
  4. 允许在按钮鼠标单击添加自定义Javascript,例如将信息复制到远程页面。

本文章由 http://www.wifidog.pro/2015/03/12/wifidog%E8%AE%A4%E8%AF%81%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AE%A1%E7%90%86%E5%99%A8%E6%89%8B%E5%86%8C.html 整理编辑,转载请注明出处

在Red Hat Enterprise Linux安装wifidog 认证服务器

简介
这是在Red Hat Enterprise Linux4安装认证服务器的详细指南

具体指南
安装的先决条件

up2date postgresql-client postgresql-server
up2date gcc flex libxml2-devel postgresql-devel httpd-devel libtool libpng-devel subversion

注:在Centos5,“postgresql-client”被postgresql所代替,这点也符合于RHEL5。

从source安装PHP5
RHEL4没有最新的PHP来运行wifidog认证服务器,所以我们需要从source编译一个。
PHP5 source下载地址:http://www.php.net/get/php-5.1.6.tar.bz2/from/a/mirror:

cd folder_where_you_downloaded
tar -jxvf php-5.1.6.tar.bz2

按照所需编译PHP:

cd php-5.1.6
./configure --with-pgsql --with-apxs2 --with-gettext --with-zlib --with-gd --enable-mbstring --with-config-file-path=/etc 
make
sudo make install
sudo cp php.ini-dist /etc/php.ini

安装认证服务器

svn checkout https://dev.wifidog.org/svn/trunk/wifidog-auth
sudo mv wifidog-auth/ /var/www/

安装认证服务器的外部依赖
安装PEAR模块:

sudo pear install --alldeps Image_Graph-alpha

FCKE编辑器

wget http://umn.dl.sourceforge.net/sourceforge/fckeditor/FCKeditor_2.3.1.tar.gz 
tar -zxvf FCKeditor_2.3.1.tar.gz
cd FCKeditor
sudo mv * /var/www/wifidog-auth/wifidog/lib/FCKeditor/

注:尝试使用特定的Sourceforge服务器,例如http://umn.dl.sourceforge.net/有可能超时或失败。那么使用“generic”下载地址:

wget http://dl.sourceforge.net/sourceforge/fckeditor/FCKeditor_2.3.1.tar.gz

配置apache
在/etc/httpd/conf/httpd.conf文件:
将PHP添加到DirectoryIndex指令:

DirectoryIndex index.html index.html.var index.php

添加以下新指令:

AddType application/x-httpd-php .php

将DocumentRoot更改为:

DocumentRoot "/var/www/wifidog-auth/wifidog/"

确保你还没有适当的key

cd /etc/httpd/conf/
rm ssl.key/server.key
rm ssl.crt/server.crt
make genkey
cd /usr/share/ssl/certs
make testcert
cd /etc/httpd/conf/ssl.key
cp server.key server.key.encrypted
openssl rsa -in server.key.encrypted -out server.key
chmod 400 server.key

配置postgresql
当Postgres8+在现在的机器中运行的更快时,RHEL4中的7.4版本已不足以运行wifidog了。
注:对于全新安装来说,只有首次运行了PostgreSQL才会产生下列文件。你必须在做完变更之后关闭或重新启动服务器。
将以下内容添加到/var/lib/pgsql/data/postgresql.cnf:

tcpip_socket = true

注:8.0已经用listen_addresses setting代替了tcpip_socket flag.PostgreSQL8.0及以上在配置中不会用“tcpip_socket”启动。如果你使用.PostgreSQL8.0及以上,用以下内容代替:

'listen_addresses = 'localhost'

这些都是默认的,没有必要改成postgresql.conf。
你也许还想将

log_destination = 'syslog' 

添加到postgresql.conf 的“Reporting and Logging”部分,或者确保服务器错误提示信息被放置在你可以找到的地方。
将以下内容添加到/var/lib/pgsql/data/pg_hba.conf:

host wifidog wifidog 127.0.0.1/32            md5
local wifidog wifidog           md5

设置cron jobs
将以下内容添加到to /etc/crontab:

##Wifidog
#Send status emails every two minutes
*/2 * * * * apache /usr/local/bin/php
/var/www/wifidog-auth/wifidog/cron/page.php
#Vacuum the database every hour
01 * * * * apache /usr/local/bin/php
/var/www/wifidog-auth/wifidog/cron/vacuum.php

如果/var/www/wifidog-auth/wifidog/cron/cleanup.php文件存在,将以下内容添加到/etc/crontab:

*/5 * * * * apache /usr/local/bin/php
/var/www/wifidog-auth/wifidog/cron/cleanup.php

移除安装文件
当然,唯一能访问install.php文件的只有你。你将需要将install.php文件移出公众视线。
1)进入到wifidog目录(/var/www/wifidog-auth/wifidog)

cd /var/www/wifidog-auth/wifidog

2)将install.php文件移到根目录,他人无法访问:

mv install.php ../install.php

注:你可以将它移到你选的任何位置,只要不是公用。

本文章由 http://www.wifidog.pro/2015/03/09/Red-linux-%E5%AE%89%E8%A3%85wifidog%E8%AE%A4%E8%AF%81%E6%9C%8D%E5%8A%A1%E5%99%A8.html 整理编辑,转载请注明出处

wifidog一般常见问题(2)

问:它是如何运作的?
答:客户端守护进程通过防火墙规则来控制路由器的流量。当一个新用户试图打开一个网页,客户端将透明地将他们重定向至认证服务器以便登录或注册新用户。客户端和认证服务器将协商如何处理该上网用户和是否允许其访问网络。客户端每X分钟就向认证服务器发起请求,以便对其进行动态统计及资料更新,内容包括:正常运行时间,负载,上网用户的流量监测以及在/离线状态。

问:它是如何运行的?
答:客户端可在任何Linux机器中运行,但机器中需安装netfilter 以及iptables 。认证服务器运行于任何支持PHP的web服务器。

问:我可以在同一个Linux box中安装并运行Wifidog认证服务器和Wifidog网关吗?
答:可以。

问题:如果要使用Wifidog,我的系统必须要有无线网卡吗?还是只要有个无线路由器就可以?
回答:在网关运行的机器不需要无线网卡,但是对于每个无线客户端,Wifidog被设置在入口,网关必须被链接在第二层到以太网关接口处。实际上,无线路由器必须被用作是纯粹的接入点,只有将LAN端口(不是WAN端口)和在网关运行的机器的接口相联接才能实现。

问:我需要使用无线接入点吗?如果不使用无线接入点,我可以使用Wifidog无线路由器吗?
答:一些无线路由器做nat,这种情况会使从无线路由器中获取的MAC地址将客户端的MAC地址进行替换。如果产生这种问题,Wifidog的身份验证将失效,因为它依赖MAC地址去允许/不允许进入。

问题:我可以写自己的客户端吗?
回答:当然可以,但是为什么呢?我们已经完成了所有的工作。客户端已经用C语言写好,并且足够轻量级,这使得它在像Linksys WRT54G这样的嵌入式环境中都可以平稳运行。这个客户端是久经测试的,并且相当的稳定。它已被广泛用于ile Sans Fil部属的热点中。

问题:我可以写自己的认证服务器吗?
回答:重申一次,我们已经完成了所有的工作。但是如果你觉得我们所提供的不适合你的需求,并且你希望从头开始写你自己的服务器,整个系统中的客户端必须使用同一种协议。

问:Wifidog是什么样界面的?
答:客户端是在后台运行的守护进程。没有终端用户所关注的立即可视的用户界面,但它可以为管理员提供一个简单的命令行和基于网络的界面来查询状态。

问:我可以从哪里获取帮助?
答:如果你需要获取关于Wifidog安装的技术支持,你的信息需包括:
1)你的Wifidog客户端的版本(ipk 或者你自己编辑的版本)
2)配置安装(请删除默认配置)
3)Wifidog除错输出信息(命令:Wifidog-f-d 7)

问题:我可以使用Wifidog在运行无身份验证的热点运行吗?
回答:可以,只要将每个无身份验证的热点在网络设置页面中激活便可。

问题:我可以只运行Wifidog网关吗(没有认证服务器)?
回答:不可以,这不是Wifidog设计的初衷。你可以试试NoCatSplash,它是为此而设计的。

问题:Wifidog支持RADIUS,WISP或者WPA吗?
回答:目前Wifidog支持RADIUS用户认证和流量统计。

本文章由 http://www.wifidog.pro/2015/03/05/wifidog%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98-2.html 整理编辑,转载请注明出处