python 大作业 对石家庄铁道大学网站安全性的检测

今天我编写了python的大作业的一部分内容,我学习了通过python对网站的一个安全性的检测:例如网站的安全证书的一个信息的爬取,还有就是sql注入等存在漏洞可能的一个监测。

import requests
import ssl
import socket
import time
import tkinter as tk

class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.pack()
self.create_widgets()

def create_widgets(self):
# 创建标签和文本框
self.host_label = tk.Label(self, text="主机名:")
self.host_label.pack(side="left")
self.host_entry = tk.Entry(self, width=30)
self.host_entry.pack(side="left", padx=5)
self.host_entry.insert(0, "www.stdu.edu.cn")
self.port_label = tk.Label(self, text="端口号:")
self.port_label.pack(side="left")
self.port_entry = tk.Entry(self, width=10)
self.port_entry.pack(side="left", padx=5)
self.port_entry.insert(0, "443")
self.result_text = tk.Text(self, height=10, width=50)
self.result_text.pack(side="top")

# 创建按钮
self.ssl_button = tk.Button(self, text="检查SSL证书", command=self.check_ssl)
self.ssl_button.pack(side="top", pady=2)
self.sql_button = tk.Button(self, text="检查SQL注入漏洞", command=self.check_sql)
self.sql_button.pack(side="top", pady=2)

def check_ssl(self):
# 获取主机名和端口号
host = self.host_entry.get()
port = int(self.port_entry.get())

# 创建 SSLContext 对象,并使用默认的 SSL 配置
context = ssl.create_default_context()

try:
with socket.create_connection((host, port)) as sock:
# 在套接字上使用 SSL
with context.wrap_socket(sock, server_hostname=host) as ssock:
# 获取证书信息
cert = ssock.getpeercert()

# 显示证书信息
self.result_text.delete(1.0, tk.END)
self.result_text.insert(tk.END, '证书版本:{}\n'.format(cert['version']))
self.result_text.insert(tk.END, '证书序列号:{}\n'.format(cert['serialNumber']))
self.result_text.insert(tk.END, '颁发者:{}\n'.format(cert['issuer']))
self.result_text.insert(tk.END, '有效期起始时间:{}\n'.format(cert['notBefore']))
self.result_text.insert(tk.END, '有效期截止时间:{}\n'.format(cert['notAfter']))

# 检查证书是否过期
if ssl.cert_time_to_seconds(cert['notAfter']) < time.time():
self.result_text.insert(tk.END, '证书已经过期\n')
else:
self.result_text.insert(tk.END, '证书是有效的\n')
except Exception as e:
self.result_text.delete(1.0, tk.END)
self.result_text.insert(tk.END, '发生 SSL 错误:{}\n'.format(str(e)))

def check_sql(self):
# 获取 URL 和 payload
url = 'http://' + self.host_entry.get() + '/'
payload = "';alert('Vulnerable!');//"
data = {"search": payload}
vulnerable = False

# 发送 POST 请求
try:
res = requests.post(url, data=data)
if "Exception" in str(res.content) or payload in str(res.content):
vulnerable = True
except Exception as e:
self.result_text.delete(1.0, tk.END)
self.result_text.insert(tk.END, '发生 SQL 错误:{}\n'.format(str(e)))

# 判断是否存在漏洞
self.result_text.delete(1.0, tk.END)
if vulnerable:
self.result_text.insert(tk.END, f"{url}存在 SQL 注入漏洞\n")
else:
self.result_text.insert(tk.END, f"{url}未发现 SQL 注入漏洞\n")


root = tk.Tk()
app = Application(master=root)
app.mainloop()

 

 

posted @ 2023-05-17 19:25  搜一码赛  阅读(55)  评论(0)    收藏  举报