首页 > 编程知识 正文

python运维脚本,python自动化脚本实例

时间:2023-05-05 14:52:42 阅读:12997 作者:4847

在渗透测试中,信息收集尤为重要,在信息收集阶段,渗透测试团队可以通过多种方式获取目标网络的拓扑结构、系统配置等信息。 信息建设的有无,对之后的渗透测试的速度和深度有很大影响。

信息收集的两种方式积极收集。 通过主动发送探测分组与被测系统被动采集直接交互。 在不知道目标的情况下,通过搜索引擎、社交媒体等方式收集目标的信息,而没有直接与目标系统交互收集信息的主要内容是IP资源域名发现服务器信息收集人力资源信息收集网站关键信息识别历史漏洞被动信息收集主动信息收集ICMP协议

IMP协议在网络层运行,用于在IP主机、路由器之间传递控制信息。

无法到达ICMP消息错误报告消息的终点(3)源抑制)重定向(5)超时(11 )参数故障) 12 )查询消息响应请求/响应(8/0)时间戳请求/响应(13 )

ICMP咨询消息既有请求也有响应,可用于发现主机。 根据要求和响应实现主机发现

原理是主机a向主机b发送回显ICMP消息type=8的请求,并且在主机b接收到消息时使其type=0并返回a; 所以,如果目标响应了,就表示目标机处于激活状态。 典型的是ping命令,但是由于初始ping命令的滥用,很多主机的防火墙等安全设备直接阻断了ICMP消息的通过。 nmap

-sn仅检测目标主机的状态

-PE使用ICMP响应请求和响应发现主机

Python代码的实现

# fromscapy.all import * fromscapy.layers.inetimporticmp,IPtarget='192.168.1.1'#icmp请求数据包ans,unans=Sr

ICMP实践印章请求允许您向另一台主机查询当前时间并返回协调世界。 因此,如果想知道目标主机b是否处于活动状态,则通过主机a向b发送查询时间请求,如果有响应,则表明主机b位是活动的(此处不强调响应的内容,只看主机b的响应是否存在) namp

这里的目标机器实际上是活动的,但探测状态为什么是不活动的,正式证明了前面提到的对ICMP消息的过滤。

ICMP地址掩码请求和响应

ICMP地址掩码请求是从源主机发送的,用于在无盘系统引导时获取自己的子网掩码。 RFC规定只有地址掩码的授权代理才能发送地址掩码响应,但大多数主机在收到子网掩码获取请求时会做出响应。 可以利用此特征实现主机发现。 基于ARP协议的主机发现,ARP协议在网络层运行,实现IP地址(逻辑地址)到MAC地址)的转换。 操作过程是主机a尝试向主机b )发送消息,并且主机a通过广播发送ARP请求分组),即在局域网上谁是172.20.65.49

namp

代码实现

fromscapy.all import * fromscapy.layers.L2 importarp, ether target=' 192.168.1.1 ' PKT=ether (dst=' ff : ff : ff : ff ' (ARP ) pdst=target ) anget r用于存储收到的包print('targetisalive ' ) print (s.sprintf ) ) %ether.src%-%arp.psrc% ) ) print的TCP 也许描写了这样的故事的——主动段表示想发出SYN信号与你连接,被动端在收到请求后发出ACK确认的同时自己也发出SYN数据包,在主动端收到被动端的回复后再次发出ACK进行被动确认

如前所述,我们基于通过请求和响应实现主机发现的原则,发现在TCP协议的三次我们手中有两种情况可用。 如下所示。

TCP的同步扫描

原理在发现目标主机时,向目标主机发送建立SYN连接的请求。 如果目标主机端口允许访问,则根据三次握手规则返回源SYN/ACK数据包;如果目标主机端口未打开,则返回RST数据包。 由于此处不关心端口情况,因此只需接收数据包,目标便处于活动状态,如果不接收数据包,则表示目标处于联机状态。

注: TCP是端到端的,两个

端是套接字(ip+port)

nmapSYN扫描

代码实现Python

from scapy.all import *from scapy.layers.inet import TCP, IPtargetIP = '192.168.1.1'targetPort=80#构造数据包ans, unans = sr(IP(dst=targetIP) / TCP(dport=80, flags='S'),timeout = 1)for s,r in ans: print(r.sprintf("%IP.src% is alive"))for s in unans: print(s.sprintf("%IP.dst% is not alive"))

ACK扫描
原理:直接给目标发送ACK数据包,由于这不符合三次握手先发SYN的原则所以无法建立连接,因此目标如果是活跃的就会返回一个RST标志位的数据包表示无法建立连接。
namp:nmap -PA[port,port,…] ip

基于UDP的活跃设备发现

UDP(用户数据报协议)是一种无连接的传输层协议,正常情况下当我们给目标主机以UDP发送消息时,目标主机不回给我们任何数据包,但是目标主机时活跃的,但是端口不可达,这时会给我们发送ICMP数据包,而如果目标主机不活跃我们也收不到任何数据包。

代码实现

from scapy.all import *from scapy.layers.inet import UDP, IPtargetIP = '192.168.1.1'targetPort = 54763#构造数据包ans, unans = sr(IP(dst=targetIP) / UDP(dport=targetPort), timeout=1)for s,r in ans: print(r.sprinf("%IP.src% is alive"))for s in unans: print(s.sprintf("%IP.dst% is not alive")) 端口扫描技术 基于TCP全开的端口扫描技术

(正常的三次握手)如果目标主机的目标端口是开放的,当我们发出SYN请求后,目标会返回SYN+ACK数据包,我们再发送一个ACK数据包就成功建立连接。
如果目标端口是关闭的,我么你在发送SYN数据包后会收到RST数据包,表示不接受这次连接请求。
此外目标端口关闭还有另一种情况就是我们发出了SYN数据包后收不到任何回应,造成这种情况的原因很多,比如目标主机处于非活跃状态,或者安全一些设备屏蔽了对某些端口的SYN数据包。

代码实现

from scapy.all import *from scapy.layers.inet import TCP, IPdst_ip = '192.168.1.1'src_port = RandShort()dst_port = 80resp =sr1(IP(dst=dst_ip) / TCP(sport=src_port,dport=dst_port,flags='S'),timeout=1) #flags='S'表示SYN请求if str(type(resp)) == "<class 'NoneType'>": print("The port %s is Closed" %(dst_port))elif (resp.haslayer(TCP)): if resp.getlayer(TCP).flags == 'SA': seq1 = resp.ack ack1 = resp.seq+1 pkt = IP(dst=dst_ip) / TCP(sport=src_port,dport=dst_port,flags='A') send(pkt) #只发不收 print("The port %s is Open" %(dst_port)) elif resp.getlayer(TCP).flags == '0X14': print("The port %s is Closed" %(dst_port)) 基于TCP半开的端口扫描

正常的TCP是要三次连接的,但是我们的目的是端口扫描,只要收到SYN+ACK数据包就好了,第三次握手的ACK是不必要的。
具体的过程:我们发送SYN连接请求,收到SYN+ACK数据包后,我们不用真的和其建立连接,所以我们发送RST数据包(我们不用自己发,也可以不发),这样我们并没真的建立连接,故称为半开。

代码实现

from scapy.all import *from scapy.layers.inet import IP, TCPdst_ip = "192.168.1.1"src_port = RandShort()dst_port= 1900pkt= IP(dst=dst_ip)/TCP(sport=src_port,dport=dst_port,flags="S")resp=sr1(pkt,timeout=1)if(str(type(resp))=="<class 'NoneType'>"): print("The port %s is Closed" %( dst_port))elif (resp.haslayer(TCP)): if(resp.getlayer(TCP).flags == 0x12): print("The port %s is Open" %( dst_port)) elif (resp.getlayer(TCP).flags == 0x14): print("The port %s is Closed" %( dst_port))

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。