Python安全攻防-从入门到入狱

Posted {Yasso}

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python安全攻防-从入门到入狱相关的知识,希望对你有一定的参考价值。

居家隔离闲着无聊
思来想去决定写篇关于 【 P y t h o n 攻 防 】 \\colorblue【Python攻防】 Python专栏
没办法-越🥦越想学


网上有《Python安全攻防》📕
想深入学习的👦可以买
我没买–毕竟我喜欢白嫖🤪

⛰前言⛰

  • 随着近几年互联网的发展,Python在各行各业发挥着举足轻重的作用。除应用在科学计算、大数据处理等人们熟知的领域外,在信息安全领域中使用也异常广泛。这是因为对于渗透测试工程师来说Python语言不仅上手容易,而且还有大量丰富的开源库。通过Python可以帮助他们又好又快的完成一项任务,以少量的代码便可实现所需功能。从而借助Python打造更安全的💻。

国家网络安全法

敲重点👉中华人民共和国网络安全法👈建议倒背如流

🌋正文🌋

一、Socket网络编程

网络调试助手https://pan.baidu.com/s/1Do-v8XMDaIYJsXRQok5RhQ 提取码:ya4g (便于测试)

  套接字(Socket)是计算机之间进行通信的一种约定。通过Socket,一台计算机可以接受其他计算机的数据,也可以向其他计算机发送数据。远程管理软件和黑客软件大多依赖于Socket来实现特定功能的,其包括两个部分:运行于服务器端称之为ServerSocket,运行于客户机端称之ClientSocket。

TCP

TCP是因特网中的传输层协议,使用三次握手协议建立连接。

TCP_Client.py

import socket


def main():
	# 创建TCP套接字
	tcp_client_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

	# 服务器地址
	sever_ip = input("请输入服务器ip:")
	sever_port = input("请输入服务器端口:")

	# 连接服务器(元组)
	tcp_client_socket.connect((sever_ip,int(sever_port)))

	# 输入发送的数据
	data = input("请输入要发送的数据:")

	# 发送数据
	tcp_client_socket.send(data.encode("utf-8"))

	#接收数据
	recv_data = tcp_client_socket.recv(1024)
	print("对方的回复:"recv_data.decode("utf-8"))

if __name__ == '__main__':
	main()

nc -lvp 8888 监听8888端口
(一次完整对话)

TCP_Sever.py

import socket

def main():
    # 创建套接字
    tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

    # 绑定本地IP和端口
    tcp_server_socket.bind(("192.168.12.1",8888))

    # 被动 listen
    tcp_server_socket.listen(128)

    while True:
        # 等待客户端信息
        print("等待客户端连接")
        client_socket,client_addr = tcp_server_socket.accept()
        print("客户端为:",client_addr)

        #接收对方发送数据
        recv_data = client_socket.recv(1024)
        print("接收到信息为:",recv_data.decode("utf-8"))

        #发送数据到客户端
        client_socket.send("Yasso".encode("utf-8"))
        client_socket.close()

if __name__ == "__main__":
    main()

UDP

UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。

UDP_Client_send.py

import socket
#创建udp套接字
udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# 目标ip和端口
target_addr = ('192.168.12.128',8888)

#获取数据
data = input("请输入要发送的数据:")

#发送数据
udp_socket.sendto(data.encode('utf-8'),target_addr)

udp_socket.close()

UDP_Client_receive.py

import socket
#创建udp套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

local_addr=('192.168.12.128',8888) 
#绑定ip(必须本地)和端口
udp_socket.bind(local_addr)

#等待接受对方发送的数据
recv_data = udp_socket.recvfrom(1024) #表示本次接受的最大字节数1024

# 显示接受的数据
print(recv_data[0].decode('utf-8'))
udp_socket.close()

liunx等待接受数据->win10发送数据->liunx成功接收数据

nc -ulp 8888 监听udp模式下的8888端口

私密聊天室

# UDP应用-私密聊天室(极简)
import socket


def send(chat_ip,chat_port):
	udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
	"""发送消息"""
	address = (chat_ip,int(chat_port))
	print(address)
	data = input("请输入发送的消息:")
	udp_socket.sendto(data.encode("utf-8"),address)


def receive():
	"""接收消息"""
	udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
	# 绑定本地IP和端口
	udp_socket.bind(("192.168.12.1",8888))
	recv_data = udp_socket.recvfrom(1024)
	print(recv_data[0].decode('utf-8'))


def main():
	chat_ip = input("请输入您聊天对方IP地址:")
	chat_port = input("请输入您聊天对方端口:")

	# 循环调用
	while True:
		print("++++++欢迎进入私密聊天室++++++")
		print("0:发送消息")
		print("1:接收消息")
		print("2:退出聊天")
		function = input("请输入您要用的模块")

		if function == "0":
			send(chat_ip,chat_port)
		elif function == "1":
			receive()
		elif function == "2":
			break
		else:
			print("输入有误,请重新输入")



if __name__ == '__main__':
	main()

二、Scapy网络嗅探

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

pip install scapy 安装scapy
pip install ipython安装交互式shell

  Scapy是一个强大的交互式包操作程序。它能够伪造或解码大量协议的数据包,在网络上发送它们,捕获它们,匹配请求和响应,等等。Scapy可以轻松地处理大多数经典任务,如扫描、跟踪、探测、单元测试、攻击或网络发现。它可以代替hping、arpsoof、arp-sk、arping、p0f甚至Nmap、tcpdump和tshark的某些部分

TCP发送数据

TCPsend.py

# -- coding: utf-8 --
import time
import threading
import sys
from scapy.all import *
 
 
# 数据包应用层数据部分
data = 'flagflag_is_not_here'

# src:源地址 、sport:源端口、dst:目标地址、dport:目标端口
pkt = IP(src='192.168.12.128', dst='192.168.12.166') / TCP(sport=4444, dport=6666) / data

# 间隔一秒发送一次   总共发送5次   发送网卡口(iface):eth0
send(pkt, inter=1, count=5, iface="eth0")

基于ICMP协议的存活主机探测

  ICMP协议是一种面向无连接的协议,用于传输出错报告控制信息。它是一个非常重要的协议,它对于网络安全具有极其重要的意义。 属于网络层协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。

判断是否为活跃主机,只需要向其发送一个ICMP请求,如果这台主机处于活跃状态,那么它在收到这个请求之后就会给出一个回应。

# -- coding: utf-8 --
from scapy.all import *
# 构造IP包头构造ICMP包头加载发送数据包函数

for i in range(1,254):      # 整个个网段
     ip="192.168.12."+str(i)    # 设置IP地址
     pkt=IP(dst=ip,src="192.168.12.128")/ICMP(type="Echo-request") #ICMP包的类型为Echo request——回显请求(Ping请求)
     rep=sr1(pkt,timeout=1,verbose=False) # 发送和接受数据包,超时时间为1秒,设置无过程回显。
     # 如果该数据包有回应则输出
     if rep:
        print("The  " + rep[IP].src + "  is live")

基于TCP/UDP的主机发现

基于TCP、UDP的主机发现属于四层主机发现是一个位于传输层的协议。可以用来探测远程主机存活、端口开放、服务类型以及系统类型等信息,相比于三层主机发现更为可靠用途更广.

TCP
工作原理主要依据目标主机响应数据包中flags字段,如果flags字段有值,则表示主机存活,该字段通常包括SYN、FIN、ACK、PSH、RST、URG六种类型。SYN表示建立连接,FIN表示关闭连接,ACK表示应答,PSH表示包含DATA数据传输,RST表示连接重置,URG表示紧急指针。

# -- coding: utf-8 --
from scapy.all import *

for i in range(1,254):      # 整个个网段
     ip="192.168.12."+str(i)    # 设置IP地址
     pkt=IP(dst=ip)/TCP(flags="A",dport=4444) #响应数据包中flags值判断主机是否存活
     rep=sr1(pkt,timeout=1,verbose=False) # 发送和接受数据包,超时时间为1秒,设置无过程回显。
     if rep:
# 如果该数据包有相应则输出
        print("The  " + rep[IP].src + "  is live")

UDP
UDP是向目标主机一个没有开放的端口发送数据,目标主机会返回一个目的端口不可达的ICMP报文,以此来判断主机是否在线。如果主机不在线,或者目标端口开放,UDP探测是不会收到响应包的。

# -- coding: utf-8 --
from scapy.all import *

for i in range(1,254):      # 整个个网段
     ip="192.168.12."+str(i)    # 设置IP地址
     pkt=IP(dst=ip)/UDP(dport=6666) 
     rep=sr1(pkt,timeout=1,verbose=False) # 发送和接受数据包,超时时间为1秒,设置无过程回显。
     if rep:
# 如果该数据包有相应则输出
        print("The  " + rep[IP].src + "  is live")

wireshark拦截

基于ARP协议的主机发现

地址解析协议,即ARP,是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。

ARP
对以太网内的每个主机都进行ARP请求。若主机存活,则会响应我们的ARP请求,否则不会响应.因为ARP涉及网络层和数据链路层所以需要使用Scapy中的Ether和ARP。

# -- coding: utf-8 --
from scapy.all import *

for i in range(1,254):      # 整个个网段
     ip_list=[]
     ip="192.168.12."+str(i)    # 设置IP地址
     # 发送ARP包
     # 二层发包,需要添加以太网头部,所以要写成Ether/ARP
     # 因为最底层用到了二层,所以要用srp()发包
     ans=srp(Ether(dst='FF:FF:FF:FF:FF:FF')/ARP(op=1,pdst=ip,hwdst='00:00:00:00:00:00'),timeout=1,verbose=False)
     if ans[0].res:
        print("The  "+ip+"  is live")

三、信息搜集

IP查询

IP查询是通过当前所获取到的URL去查询对应IP地址的过程。可以应用Socket库函数中的gethostbyname()获取域名所对应的IP值°

import socket
domain = input("请输入要查询的域名:")
ip = socket.gethostbyname(domain)
print("IP地址为:",ip)

Whois查询

whois模块查询域名www.baidu.com的注册信息

pip install python-whois 安装模块

from whois import whois
data = whois('www.baidu.com')
print(data)

子域名挖掘

域名可以分为顶级域名、—级域名、二级域名等。子域名(subdomam)是顶级域名(一级域名或父域名)的下—级。例如mail.example.com和calendar.example.com是example.com的两个子域,而example.com则是顶级域.com的子域。在测试过程中测试目标主站时如果未发现任何相关漏洞,此时通常会考虑⛏︎目标系统的子域名。子域名⛏︎方法有很多种,例如,搜索引擎、子域名破解、字典查询等。

import requests                      
from bs4 import BeautifulSoup  
from urllib.parse import urlparse   
import sys 

def bing_search(site,pages):
    Subdomain = []
    headers =          #HTTP Headers是HTTP请求和相应的核心,它承载了关于客户端浏览器,请求页面,服务器等相关的信息
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/99.0.7113.93 Safari/537.36',   #是HTTP协议中的一部分,属于头域的组成部分,是一种向访问网站提供你所使用的浏览器类型、操作系统及版本、CPU 类型、浏览器渲染引擎、浏览器语言、浏览器插件等信息的标识
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',#属于请求报头,代表发送端(客户端)希望接受的数据类型
        'Referer': "https://cn.bing.com",  #表示一个来源
    
    for i in range(1,int(pages)+1):
        url = "https://cn.bing.com/search?q=site%3a"+site+"&go=Search&qs=ds&first="+ str((int(i)-1)*10) +"&FORM=PERE"
        html = requests.get(url,headers=headers)     #获取HTML网页,对应HTTP的GET
        soup = BeautifulSoup(html.content,'html.parser')
        job_bt = soup.findAll('h2')     #返回一个包含HTML文档标题标签h2的列表
        for i in job_bt:
            link = i.a.get('href')
            domain = str(urlparse(link).scheme + "://" +urlparse(link).netloc)  #储存子域名
            if domain in Subdomain:
                pass
            else:
                Subdomain.append(domain)
                print(domain)
if __name__ == '__main__':
    if len(sys.argv) == 3:
        site = sys.argv[1]
        page = sys.argv[2]
    else:
        print("usage: %s baidu.com 10" % sys.argv[0])         #输出帮助信息
        sys.exit(-1)
    Subdomain = bing_search(site,page)

python Subdomain.py baidu.com 20 数字20表示获取Ping引擎页数

力推👉️在线子域名查询👈️

邮件爬取

  在针对目标系统进行渗透的过程中,如果目标服务器安全性很高,通过服务器很难获取目标权限时,通常会采用社工的方式对目标服务进行进一步攻击🤺。针对搜索界面的相关📩信息进行爬取、处理等操作之后。利用获得的📫账号批量发送🎣📩,诱骗、欺诈目标用户或管理员进行账号登录或点击执行,进而获取目标系统的其权限。

import sys
import getopt
import requests
from bs4 import BeautifulSoup
import re

#主函数,传入用户输入的参数
def start(argv):
    url = ""
    pages = ""
    if len(sys.argv) < 2:
        print("-h 帮助信息;\\n")
        sys.exit()
    #定义异常处理
    try:
        banner()
        opts,args = getopt.getopt(argv,"-u:-p:-h")
    except getopt.GetoptError:
        print('Error an argument!')
        sys.exit()
    for opt,arg in opts:
        if opt == "-u":
            url = arg
        elif opt == "-p":
            pages = arg
        elif opt == "-h":
            print(usage())

    launcher(url,pages)

#banner信息
def banner():
    print('\\033[0;31;42m 爬虫不控频,亲人两行泪 \\033[0m')

#使用规则
def usage():
    print('-h: --help 帮助;')
    print('-u: --url 域名;')
    print('-p: --pages 页数;')
    print('eg: python -u "www.baidu.com" -p 100' + '\\n')
    sys.exit()

#漏洞回调函数
def launcher(url,pages):   #调用bing_search()和baidu_search()函数并且将bing爬到的和baidu爬到的合并去重
    email_num = []
    key_words = ['email','mail','mailbox','邮件','邮箱','postbox']
    for page in range(1,int(pages)+1):
        for key_word in key_words:
            bing_emails = bing_search(url,page,key_word)
            baidu_emails = baidu_search(url,page,key_word)
            sum_emails = bing_emails + baidu_emails
            for email in sum_emails:
                if email in email_num:
       

以上是关于Python安全攻防-从入门到入狱的主要内容,如果未能解决你的问题,请参考以下文章

11招玩转黑客攻防——用Python,更安全

爬虫requests模块 入门到入狱 :基础知识+实战分析

爬虫-从入门到入狱

攻防世界XCTF-WEB入门全通关

解码2022中国网安强星丨注重攻防实战化验证,长亭以安全原子能力打造体系化安全

从工具到平台|默安科技研发安全一体化管理平台正式发布