网站新闻不收录,怎么做网站推广和宣传,做微商建自己的网站有用吗,成都设计公司尹超简历POC#xff1a;概念证明#xff0c;即概念验证#xff08;英语#xff1a;Proof of concept#xff0c;简称POC#xff09;是对某些想法的一个较短而不完整的实现#xff0c;以证明其可行性#xff0c;示范其原理#xff0c;其目的是为了验证一些概念或理论。 声明概念证明即概念验证英语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, headersheaders)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, contextcontext)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, headersheaders)try:urllib.request.urlopen(req, contextcontext)print(成功访问 url)except Exception as e:print(e)第5步文件目录和参数信息可控
在利用漏洞进行测试时我们需要根据不同的漏洞自行输入不同的 文件目录 和 参数信息所以我们需要可控的函数进行传参parsed_url[2]和parsed_url[4]分别为文件目录和参数信息传参位置 urlparse() 函数是Python标准库中 urllib.parse 模块提供的一个函数用于解析URL字符串并返回一个包含URL各个部分的命名元组。 URLUniform 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, headersheaders)try:urllib.request.urlopen(req, contextcontext)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] httpparsed_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, headersheaders)try:urllib.request.urlopen(req, contextcontext)print(成功访问 final_url)except Exception as e:print(e) 此时一个网络设备漏洞利用的简易POC就编写完成了parsed_url[2]和parsed_url[4]分别为文件目录和参数信息传参位置