Python渗透测试编程技术
⼀、⽹络嗅探与欺骗
  如果想要彻底了解⼀个⽹络,那么最好的办法就是对⽹络中的流量进⾏嗅探。这些嗅探⼯具可以⽤来窃取⽹络中明⽂传输的密码,监视⽹络中的数据流向,甚⾄可以收集远程登录所使⽤的NTLM数据包(这个数据包中包含登录⽤的⽤户名和使⽤Hash加密的密码)。
  1.⽹络数据嗅探
    1.1编写⼀个⽹络嗅探⼯具
      在Scapy中提供了⼀种专门⽤来捕获数据包的函数 sniff( ),使⽤help函数来查看⼀下它的使⽤⽅法help(sniff)。
表格公式sumif是什么意思
    1.2函数sniff()中可以使⽤多个参数
     1.3.Sniff()还⽀持过滤器的使⽤
      这个过滤器使⽤了⼀种功能⾮常强⼤的过滤语法——“伯克利包过滤”语法。
     这个规则简称为BPF,利⽤它可以确定该获取和检查哪些流量,忽略哪些流量。
      BPF可以帮助我们通过⽐较各个层协议中数据字段值的⽅法对流量进⾏过滤。
      BPF的主要特点是使⽤⼀个名为“原语”的⽅法来完成对⽹络数据包的描述,例如,可以使⽤“host”来描述主机,“port”来描述端⼝,同时也⽀持“与”“或”“⾮”等逻辑运算。可以限定的内容包括地址、协议等。
    1.4.使⽤这种语法创建出来的过滤器被称为BPF表达式,每个表达式包含⼀个或多个原语。每个原语中⼜包含⼀个或多个限定词,主要有三个限定词:Type、Dir 和 Proto。
     (1)Type⽤来规定使⽤名字或数字代表的类型,例如host、net和port等。
武汉java吧     (2)Dir⽤来规定流量的⽅向,例如src、dst和src and dst等。
     (3)Proto⽤来规定匹配的协议,例如ip、tcp和arp等。
       “host 192.168.169.133”就是⼀条最为常见的过滤器,它⽤来过滤掉除了本机和192.168.169.133以外的所有流
量。如果希望再将范围限制⼩⼀些,例如,只捕获tcp类型的流量就可以使⽤“与”运算符,如“host 192.168.169.133 && tcp”。
      1.5⼀些常见的过滤器
     (1)只捕获与⽹络中某⼀个IP的主机进⾏交互的流量:host 192.168.1.1”。
     (2)只捕获与⽹络中某⼀个MAC地址的主机交互的流量:“ether host 00-1a-a0-52-e2-a0”。
     (3)只捕获来⾃⽹络中某⼀个IP的主机的流量:“src host 192.168.1.1”。
     (4)只捕获去往⽹络中某⼀个IP的主机的流量:“dst host 192.168.1.1”,host也可以省略。
     (5)只捕获23端⼝的流量:“port 23”。
     (6)捕获除了23端⼝以外的流量:“!23”。
python基础代码大全黑客     (7)只捕获⽬的端⼝为80的流量:“dst port 80”。
     (8)只捕获ICMP流量:“icmp”。
     (9)只捕获type为3,code为0的ICMP流量:“icmp[0] = 3 &&icmp[1] = 0”。
    1.6使⽤Sniff()来捕获⼀些数据包并显⽰出来
      如果希望即时显⽰捕获的数据包,就可以使⽤prn函数选项(利⽤prn就可以不断地打印输出捕获到的数据包的内容),函数的内容为prn=lambda x:x.summary()
html select事件       这个函数可以实现很多功能,例如输出其中的某⼀个选项:使⽤ x[IP].src 输出IP报⽂的⽬的地址
      在开启 sniff 的时候,访问⽬标主机的⽬标端⼝
excel median函数
       这些捕获到的数据包可以使⽤wrpcap函数保存起来,保存的格式很多,⽬前最为通⽤的格式为pcap。
          1.7调⽤WireShark来查看数据包
⼆、ARP的原理与缺陷
    1.之所以这⾥特别提到这个协议,是因为⽬前⽹络中⼤部分的监听和欺骗技术都是源于这个协议。但是这个协议存在⼀个重⼤缺陷,就是这个过程并没有任何的认证机制。
   2.也就是说如果⼀台主机收到ARP请求数据包,并不会对这个数据包进⾏真伪判断,⽆论这个数据包是否真的来⾃源主机,都会将其添加到ARP表中。因此⿊客就可能会利⽤这个漏洞来冒充⽹关等主机。sharepoint怎么上传文件
  3.现在arpspoof完成了对⽬标主机的欺骗任务,可以截获到⽬标主机发往⽹关的数据包。
   但是这⾥有两个问题:⾸先arpspoof仅仅是会截获这些数据包,并不能查看这些数据包,所以还需要使⽤专门查看数据包的⼯具打开WireShark,就可以看到受害者所发送的数据包
            第⼆点就是主机不会再将这些数据包转发到⽹关,这样将会导致⽬标主机⽆法正常上⽹,所以
需要在主机上开启转发功能
  这样就可以将截获到的数据包再转发出去,被欺骗的主机就可以正常上⽹了,从⽽⽆法察觉到受到攻击。
  4.中间⼈欺骗
   使⽤Scapy库来完成这个任务,再来看⼀遍ARP数据包的格式
   这⾥需要设置的值主要有三个:op、psrc 和 pdst。其中,op对应的是ARP类型,默认值已经是1,就是ARP请求,⽆须改变;psrc的值最关键,psrc对应前⾯的源IP地址
    5.使⽤Socket来实现中间⼈欺骗
   5.1查看ARP数据包的格式(精确到每⼀位表⽰的含义)
    5.2使⽤socket来产⽣⼀个数据包要远⽐Scapy⿇烦,这个数据包要分成如下多个部分
     (1)以太⽹⽬的地址,长度为6位。
     (2)以太⽹源地址,长度为6位。
     (3)帧类型,长度为两位。
     (4)硬件类型,长度为两位。
     (5)协议类型,长度为两位。
     (6)硬件地址长度,长度为1位。
     (7)协议地址长度,长度为1位。
     (8)op,长度为两位。
     (9)发送端以太⽹地址,长度为6位。
     (10)发送端IP地址,长度为4位。
     (11)⽬的以太⽹地址,长度为6位。
     (12)⽬的IP地址,长度为4位。
   5.3利⽤这个库实现中间⼈欺骗的原理和前⾯⼀样,也是通过向⽬标发送⼀个伪造了的ARP请求数据包来实现的      可以按照如下来填充这个数据包。
      (1)以太⽹⽬的地址:00:0c:29:2D:7F:89,这个表⽰要欺骗的主机的硬件地址,也可以是⼴播地址
ff:ff:ff:ff:ff:ff。
      (2)以太⽹源地址:00:0c:29:12:dd:23,这是本机的硬件地址。
      (3)帧类型:0x0806表⽰ARP类型,使⽤两位⼗六进制表⽰为\x08\x06。
      (4)硬件类型:1表⽰以太⽹,使⽤两位⼗六进制表⽰为\x00\x01。
      (5)协议类型:8表⽰IPv4,使⽤两位⼗六进制表⽰为\x08\x00。
      (6)硬件地址长度:\x06,表⽰6位的硬件地址。
      (7)协议地址长度:\x04,表⽰4位的IP地址。
      (8)op:1表⽰请求,2表⽰回应,使⽤两位⼗六进制表⽰为\x00\x01。
      (9)发送端以太⽹地址:00:0c:29:12:dd:23。
      (10)发送端IP地址:192.168.169.2。
      (11)⽬的以太⽹地址:00:0c:29:2D:7F:89。
      (12)⽬的IP地址:192.168.169.133。
      在构造数据包的时候需要注意⼀点,⽹络中传输IP地址等数据要使⽤⽹络字节顺序,保证数据在不同主机之间传输时能够被正确解释