kali渗透测试日记 - scapy定制数据包


Scapy概述

Scapy 是一个可以让用户发送、侦听和解析并伪装网络报文的 Python 程序。这些功能可以用于制作侦测、扫描和攻击网络的工具。

预配置

如果在kali的终端使用scapy命令出现INFO提示找不到PyX,则需要安装:

apt install python3-pyx

定制ARP包

ARP包的格式

>>> ARP().display()
###[ ARP ]### 
  hwtype= 0x1    #硬件类型
  ptype= IPv4    #协议类型
  hwlen= None    #硬件地址长度 MAC长度
  plen= None     #协议地址长度
  op= who-has    #who-has查询
  hwsrc= 00:0c:29:f6:26:6a     # 源MAC
  psrc= 192.168.3.53           # 源IP地址
  hwdst= 00:00:00:00:00:00     # 目的MAC
  pdst= 0.0.0.0                # 目的IP地址

>>> 

sr1 函数作用:sr1 函数包含了发送数据包和接收数据包的功能。

>>> sr1(ARP(pdst="192.168.3.1"))
Begin emission:
Finished sending 1 packets.
*
Received 1 packets, got 1 answers, remaining 0 packets
<ARP  hwtype=0x1 ptype=IPv4 hwlen=6 plen=4 op=is-at hwsrc=c4:2b:44:48:a3:99 psrc=192.168.3.1 hwdst=00:0c:29:f6:26:6a pdst=192.168.3.53 |<Padding  load='\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' |>>  
>>> exit

可见ARP包发送成功并收到来自src=192.168.3.1的应答包。(大家根据自己本地存在的主机IP灵活改变pdst哈)

定制PING包

首先启动scapy,获取IP包和ICMP包的格式。

IP().display()
###[ IP ]### 
 version= 4        版本:4,即 IPv4
 ihl= None         首部长度
 tos= 0x0          服务
 len= None         总长度
 id= 1             标识
 flags= 
 frag= 0           标志
 ttl= 64           生存时间
 proto= hopopt     传输控制协议 IPv6 逐跳选项
 chksum= None      首部校验和
 src= 127.0.0.1    源地址
 dst= 127.0.0.1    目的地址
ICMP().display()
###[ ICMP ]### 
 type= echo-request   类型,标识 ICMP 报文的类型
 code= 0              代码
 chksum= None         校验和
 id= 0x0              标识
 seq= 0x0

通过PING()来指定源IP和目的IP
通过ICMP()来指定为PING包的类型。
思路:
1、修改 IP 包头的 dst,也就是我们的目的地址
2、拼接上 ICMP 的数据包类型
3、使用 sr1()进行发送数据包并接收数据包

>>> sr1(IP(dst="192.168.3.1")/ICMP(),timeout=1)
Begin emission:
Finished sending 1 packets.
.*
Received 2 packets, got 1 answers, remaining 0 packets
<IP  version=4 ihl=5 tos=0x0 len=28 id=8377 flags= frag=0 ttl=64 proto=icmp chksum=0xd2a1 src=192.168.3.1 dst=192.168.3.53 |<ICMP  type=echo-reply code=0 chksum=0xffff id=0x0 seq=0x0 |<Padding  load='\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' |>>>                              
>>> 

定制TCP-SYN请求

首先查看TCP包格式。

>>> TCP().display() 
###[ TCP ]### 
 sport= ftp_data   TCP 源端口
 dport= http       TCP 目的端口
 seq= 0            32 位序号
 ack= 0            32 位确认序号
 dataofs= None     4 位首部长度 
 reserved= 0       保留 6 位
 flags= S          标志域,紧急标志、有意义的应答标志、推、重置连接标志、同步序列号标志、完成发送数据标志。
# 按照顺序排列是:URG、ACK、PSH、RST、SYN、FIN
 window= 8192      窗口大小
 chksum= None      16 位校验和
 urgptr= 0         优先指针
 options= []       选项
>>> sr1(IP(dst="192.168.3.1")/TCP(flags="S",dport=80),timeout=1)
Begin emission:
Finished sending 1 packets.
.*
Received 2 packets, got 1 answers, remaining 0 packets
<IP  version=4 ihl=5 tos=0x0 len=44 id=0 flags=DF frag=0 ttl=64 proto=tcp chksum=0xb345 src=192.168.3.1 dst=192.168.3.53 |<TCP  sport=http dport=ftp_data seq=601526135 ack=1 dataofs=6 reserved=0 flags=SA window=29200 chksum=0xeac8 urgptr=0 options=[('MSS', 1460)] |<Padding  load='\x00\x00' |>>>             
>>> 

flags=”S”表示 SYN 数据包
dport=80 表示目标端口 80

我们的到一个 flags=SA 的数据包。SA 标志即 SYN+ACK。我们收到服务器 tcp 三次握手中的第二个包,能收到回应,表示端口开放。
注:这种基于 tcp 的半链接扫描,更隐密,更不容易被发现。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM