利用python编写简易POC脚本

POC:概念证明,即概念验证(英语:Proof of concept,简称POC)是对某些想法的一个较短而不完整的实现,以证明其可行性,示范其原理,其目的是为了验证一些概念或理论。 

声明:请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本博客无关。

        今天本来在手刷漏洞(太菜了,0day挖不出来,只能捡漏一下大佬挖过的),用Fofa API调用的脚本搜集一下最近刚了解到的网络设备漏洞的网站信息,导出后发现大概600多条。太多了,手刷有点慢,到网上找了一下也没有发现此类POC利用的脚本,想了想不如自己写一个简易的方便以后操作,编写完成后想着与大家分享一下编写思路。(Fofa API调用脚本网上有很多大佬写好的,大家可以自行找一下)

编写思路

第1步:找爬虫代码

随便找了一个爬虫代码

import urllib.request
url = ""                               #请求的URL地址
user_agent = "Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0"
headers = {"User-Agent":user_agent}    #定义了一个名为"user_agent"的变量,其中存储了一个用户代理(User-Agent)字符串,用来伪装成Mozilla Firefox浏览器
req = urllib.request.Request(url,headers = headers) #创建一个Request对象
response = urllib.request.urlopen(req)              #发送请求并获得响应
html = response.read()                              #读取响应内容复制给html
print(html)                                         #打印html

第2步:更改输出信息

改一下输出,当成功访问时,输出网站地址;如果发生异常,则会打印异常信息

import urllib.requesturl = ""                       #请求的URL地址
user_agent = "Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0"
headers = {"User-Agent": user_agent}
req = urllib.request.Request(url, headers=headers)try:urllib.request.urlopen(req)print("成功访问:"+url)    #访问成功则打印 请求的URL
except Exception as e:print(e)                  #访问失败则打印 异常信息

第3步:SSL证书验证报错

 当访问 https 协议网页是发生了报错:

<urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate (_ssl.c:1002)>

这个错误是由于SSL证书验证失败引起的。在使用 urllib.request.urlopen() 函数发送HTTPS请求时,会对服务器的SSL证书进行验证,以确保连接的安全性。

更改代码直接忽略SSL证书验证(这样做会降低连接的安全性,需要谨慎使用)

import urllib.request
import ssl
url = ""                    #请求的URL地址
user_agent = "Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0"
headers = {"User-Agent":user_agent}
req = urllib.request.Request(url,headers = headers)
context = ssl._create_unverified_context()
try:urllib.request.urlopen(req, context=context)print("成功访问:"+ url)
except Exception as e:print(e)

第4步:读取文件中的URL

因为此时还是需要手动向代码内添加请求URL,所以我们利用循环语句读取文件内的URL来进行判断(代码中文件名为 urls.txt ,可以根据需要自己更改)

import urllib.request
import ssluser_agent = "Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0"
headers = {"User-Agent": user_agent}
context = ssl._create_unverified_context()# 从txt文件中读取url列表
with open("urls.txt", "r") as file:urls = file.readlines()# 使用for循环遍历url列表
for url in urls:url = url.strip()  # 去除每行url中的换行符和空白字符req = urllib.request.Request(url, headers=headers)try:urllib.request.urlopen(req, context=context)print("成功访问:" + url)except Exception as e:print(e)

第5步:文件目录和参数信息可控

在利用漏洞进行测试时,我们需要根据不同的漏洞自行输入不同的 文件目录 和 参数信息,所以我们需要可控的函数进行传参(parsed_url[2]和parsed_url[4]分别为文件目录和参数信息传参位置

urlparse() 函数是Python标准库中 urllib.parse 模块提供的一个函数,用于解析URL字符串并返回一个包含URL各个部分的命名元组。

        URL(Uniform Resource Locator)是用于标识互联网上资源位置的字符串。例如,https://example.com/index.html 就是一个URL。它由多个部分组成,包括协议(scheme)、网络位置(netloc)、路径(path)、查询参数(query)、片段(fragment)等。

quote() 函数是Python标准库中 urllib.parse 模块提供的一个函数,用于将字符串进行URL编码。该函数将字符串中的特殊字符转换为它们的十六进制表示,以便它们可以安全地在URL中传输。

import urllib.request
import ssl
from urllib.parse import urlparse, quoteuser_agent = "Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0"
headers = {"User-Agent": user_agent}
context = ssl._create_unverified_context()# 从txt文件中读取url列表
with open("1.txt", "r") as file:urls = file.readlines()# 使用for循环遍历url列表
for url in urls:url = url.strip()  # 去除每行url中的换行符和空白字符parsed_url = list(urlparse(url))  # 将元组对象转换成列表parsed_url[2] += ""  # 将字符串添加到path属性上parsed_url[4] = ""  # 修改查询参数部分的值encoded_path = quote(parsed_url[2])  # 对路径部分进行编码encoded_query = quote(parsed_url[4])  # 对查询参数部分进行编码final_url = f"{parsed_url[0]}://{parsed_url[1]}{encoded_path}?{encoded_query}"  # 拼接编码后的URLreq = urllib.request.Request(final_url, headers=headers)try:urllib.request.urlopen(req, context=context)print("成功访问:" + final_url)except Exception as e:print(e)

第6步:自动添加协议头

        在运行过程中产生了报错(因为报错涉及隐私信息就不做展示了),此错误是因为在创建 urllib.request.Request 对象时,报告了一个位置的URL类型。通过对错误信息查看发现缺少了协议部分,这是由于URL字符串格式不正确导致的,查看后发现导出到 txt 文件中的网站信息存在部分没有协议。

对url进行判断,如果有用协议部分,自动添加http协议头

import urllib.request
import ssl
from urllib.parse import urlparse, quoteuser_agent = "Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0"
headers = {"User-Agent": user_agent}
context = ssl._create_unverified_context()# 从txt文件中读取url列表
with open("1.txt", "r") as file:urls = file.readlines()# 使用for循环遍历url列表
for url in urls:url = url.strip()  # 去除每行url中的换行符和空白字符parsed_url = list(urlparse(url))  # 将元组对象转换成列表if not parsed_url[0]:  # 如果协议部分为空字符串,则手动添加默认协议parsed_url[0] = "http"parsed_url[2] += ""  # 将字符串添加到path属性上parsed_url[4] = ""  # 修改查询参数部分的值encoded_path = quote(parsed_url[2])  # 对路径部分进行编码encoded_query = quote(parsed_url[4])  # 对查询参数部分进行编码final_url = f"{parsed_url[0]}://{parsed_url[1]}{encoded_path}?{encoded_query}"  # 拼接编码后的URLreq = urllib.request.Request(final_url, headers=headers)try:urllib.request.urlopen(req, context=context)print("成功访问:" + final_url)except Exception as e:print(e)

        此时一个网络设备漏洞利用的简易POC就编写完成了,parsed_url[2]和parsed_url[4]分别为文件目录和参数信息传参位置

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

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

相关文章

三哥的黑科技,印度发布无线加热服装专利,冬季神器要来了

众所周知风和自由在冬天是不存在的&#xff0c;冬天只剩下冰冷的像刀子一样的风刮在你的脸上&#xff0c;哪怕穿的很厚&#xff0c;戴上全盔&#xff0c;也无法阻挡冰冷的风带走你身体温度&#xff0c;如果穿的特别多&#xff0c;骑车时候的舒适感和穿脱衣物的繁琐也是一大头疼…

【MySQL系列】Centos安装MySQL

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

vim常用键位总结

1、移动光标 按键作用h或←光标向左移动一个字符j或↓光标向下移动一个字符k或↑光标向上移动一个字符l或→光标向右移动一个字符Ctrl f或Page Down屏幕向下移动一页&#xff08;常用&#xff09;Ctrl b或Page Up屏幕向上移动一页&#xff08;常用&#xff09;Ctrl d屏幕向…

Kafka使用总结

1、Kafka是何如做到高性能的&#xff1f; a、消息批处理减少网络通信开销&#xff0c;提升系统吞吐能力&#xff08;先攒一波&#xff0c;消息以“批”为单位进行处理&#xff09; 生产端&#xff1a;无论是同步发送还是异步发送&#xff0c;Kafka都不会立即就把这条消息发送出…

【C++】算法库(复制操作、交换操作、变换操作)

C算法库 文章目录 C算法库复制操作copy , copy_ifcopy_ncopy_backward 交换操作swapswap_rangesiter_swap 变换操作transformreplacereplace_copy replace_copy_if 算法库提供大量用途的函数&#xff08;例如查找、排序、计数、操作&#xff09;&#xff0c;它们在元素范围上操…

java--StringBuilder、StringBuffer、StringJoiner

1.StringBuilder ①StringBuilder代表可变字符串对象&#xff0c;相当于是一个容器&#xff0c;它里面装的字符串是可以改变的&#xff0c;就是用来操作字符串的。 ②好处&#xff1a;StringBuilder比String更适合做字符串的修改操作&#xff0c;效率会比更高&#xff0c;代码…

Java入门:EditPlus的安装与配置讲解

1. 前言 Java是一种面向对象的编程语言&#xff0c;广泛应用于各种平台和设备。在Java开发过程中&#xff0c;一个好的集成开发环境&#xff08;IDE&#xff09;是非常重要的。EditPlus是一款简单易用的文本编辑器&#xff0c;它提供了一些方便的功能来支持Java开发。本文将介…

【开源】基于JAVA的木马文件检测系统

项目编号&#xff1a; S 041 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S041&#xff0c;文末获取源码。} 项目编号&#xff1a;S041&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 木马分类模块2.3 木…

Leo赠书活动-13期 【以企业架构为中心的SABOE数字化转型五环法】文末送书

Leo赠书活动-13期 【以企业架构为中心的SABOE数字化转型五环法】文末送书 ✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客…

记录 | xshell输出错乱解决

输出错乱问题&#xff1a; 解决方法&#xff1a;

VS Code使用 CMake 或 Makefile管理C++多文件编译

VS Code使用 CMake 或 Makefile管理C多文件编译 一、Cmake方式1、文件结构2、构建项目 二、Makefile方式1、文件结构2、Makefile3、构建项目 三、附件示例中使用到的文件及代码 使用 CMake 或 Makefile 是更加标准和灵活的方法来管理多文件编译。以下是一个简单的示例&#xff…

80个常用shell命令及简单用法

Shell命令是Linux和Unix系统中的基础&#xff0c;用于完成各种操作&#xff0c;如文件管理、程序执行、文本处理等。下面列举一些常用的Shell命令&#xff0c;并详细解释它们的功能及应用场景&#xff1a; ls - 列出目录内容 功能&#xff1a;列出指定目录中的文件和目录。应用…

智能优化算法应用:基于郊狼算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于郊狼算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于郊狼算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.郊狼算法4.实验参数设定5.算法结果6.参考文献7.MA…

Mybatis增删改查基础

MyBatis可根据查询的结果类型、查询条件的不同进行统一处理。 1 查询数据 1.1 根据查询数据条数来分析不同的情况 1.1.1 查询单条数据 可以通过实体类、list集合、map等处理查询结果。 通过实体类查询单条数据 User queryUserById(Param("id") Integer id);<…

C、C++、C#的区别概述

C、C、C#的区别概述 https://link.zhihu.com/?targethttps%3A//csharp-station.com/understanding-the-differences-between-c-c-and-c/文章翻译源于此链接 01、C语言 ​ Dennis Ritchie在1972年创造了C语言并在1978年公布。Ritchie设计C的初衷是用于开发新版本的Unix。在那之…

express框架使用

一、express介绍 express 是一个基于 Node.js 平台的极简、灵活的 WEB 应用开发框架&#xff0c;简单来说&#xff0c;express 是一个封装好的工具包&#xff0c;封装了很多功能&#xff0c;便于我们开发 WEB 应用&#xff08;HTTP 服务&#xff09; 二、express 使用 2.1 e…

【组合数学】递推关系

目录 1. 递推关系建立2. 常系数齐次递推关系的求解3. 常系数非齐次递推关系的求解4. 迭代法 1. 递推关系建立 给定一个数的序列 f ( 0 ) , f ( 1 ) , . . . , f ( n ) , . . . , f (0), f(1), ..., f(n ),... , f(0),f(1),...,f(n),..., 若存在整数 n 0 n_0 n0​ &#xff…

datav-实现轮播表,使用updateRows方法-无缝衔接加载数据

前言 最近在做大屏需求的时候&#xff0c;遇到一个轮播数据的需求&#xff0c;查看datav文档发现确实有这个组件 但这个组件只提供了一次加载轮播的例子&#xff0c;虽然提供了轮播加载数据updateRows方法 但是文档并没有触发事件&#xff0c;比如轮播完数据触发事件&#xf…

ESL电子标签的真相:电子墨水屏没墨水?

一说到电子墨水屏 你大概率会想到Kindle 如果你问是不是墨水做的 那这篇文章你就得好好看看了 在我们日常与客户的沟通中 为数不多却出乎意料地有好几个以下对话↓ 在此辟谣 电子墨水屏里确实 没 有 墨 水 那它是什么样的原理&#xff1f;为什么越来越多显示设备采用&…