当前位置: 首页 > news >正文

利用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]分别为文件目录和参数信息传参位置

相关文章:

  • KMP算法数组下标从0和数组下标从1开始
  • Windows 批量删除文件简单方法
  • k8s 安装 Longhorn
  • Java设计模式-单例(Singleton)设计模式的概述及实现
  • 〖大前端 - 基础入门三大核心之JS篇(51)〗- 面向对象之认识上下文与上下文规则
  • 【JVM】第一章:内存结构
  • ES6之Symbol
  • FFmpegd的AVBSF
  • 学习Node.js与Webpack总结
  • C++之函数指针
  • java对二维数组进行排序
  • web服务器之——www服务器的基本配置
  • 学习JVM
  • 网络游戏APP备案|游戏
  • Android 消息分发机制解读
  • [Vue CLI 3] 配置解析之 css.extract
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • ECS应用管理最佳实践
  • Facebook AccountKit 接入的坑点
  • Gradle 5.0 正式版发布
  • idea + plantuml 画流程图
  • Netty源码解析1-Buffer
  • Rancher如何对接Ceph-RBD块存储
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • Vultr 教程目录
  • 给新手的新浪微博 SDK 集成教程【一】
  • 你真的知道 == 和 equals 的区别吗?
  • 悄悄地说一个bug
  • 找一份好的前端工作,起点很重要
  • 正则学习笔记
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​你们这样子,耽误我的工作进度怎么办?
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • (1)(1.11) SiK Radio v2(一)
  • (2024,Vision-LSTM,ViL,xLSTM,ViT,ViM,双向扫描)xLSTM 作为通用视觉骨干
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (附源码)计算机毕业设计高校学生选课系统
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (一)项目实践-利用Appdesigner制作目标跟踪仿真软件
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (转载)利用webkit抓取动态网页和链接
  • ***监测系统的构建(chkrootkit )
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .net framework profiles /.net framework 配置
  • .Net中ListT 泛型转成DataTable、DataSet
  • [ vulhub漏洞复现篇 ] GhostScript 沙箱绕过(任意命令执行)漏洞CVE-2019-6116
  • [20170713] 无法访问SQL Server
  • [20190401]关于semtimedop函数调用.txt
  • [AIGC codze] Kafka 的 rebalance 机制
  • [C#]DataTable常用操作总结【转】