python : 对批量URL检测指定路径脚本是否存在
使用场景
众所周知在地市HVV中最容易出现的问题是弱口令和shiro等框架漏洞,且很多站是由一家公司建站的,就可以批量探测URL是否存在指定路径。
实际编写背景
知悉某建站公司通用路径和默认口令,且HVV目标中存在大量此公司建站。
实现原理
实际上也是目录扫描,但我们日常用的目录扫描是对某一URL进行大量路径拼接,此脚本是对大量URL进行指定一个路径拼接。
判断依据是返回码200,在第一版的代码中仅仅做了返回码的判断,没有判断页面内容,在实际测试中发现许多不存在的站和跳转回主界面的站。
后更改为检查返回页面中是否存在来判断页面是否真实有效,尽管跳转后回主界面的站无法排除,也排除了大部分没有意义的站,实际测试中更改前输出目标数为80多条,更改后为40多条,由此可见提升还是很大的。
程序结束会输出返回码为200的URL保存在txt文件中。
代码
import requests
import concurrent.futures
# URL 文件的路径
url_file_path = "urls.txt"
# 输出文件的路径
output_file_path = "testss_urls.txt"
# 从文件中读取 URL
with open(url_file_path, "r") as file:
urls = [line.strip() for line in file]
def is_valid_page(content):
# 在这里,我们检查页面内容是否包含某些特定的字符串
# 这些字符串应该是表示一个页面是有效的标志
# 例如,如果我们知道所有有效的页面都会包含字符串"<!DOCTYPE html>"
# 我们可以如下检查:
return "<!DOCTYPE html>" in content
def check_url(url, session):
# 如果 URL 不以 http:// 或 https:// 开头,我们假设它是 http 的
if not url.startswith(("http://", "https://")):
url = "http://" + url
try:
#拼接URL 从此处更改需要探测的路径
full_url = url + "/management/webmaster/maindefault"
response = session.get(full_url, timeout=5) # 设置一个合理的超时时间
if response.status_code == 200 and is_valid_page(response.text):
return full_url
except (requests.exceptions.RequestException, Exception) as e:
print(f"URL: {full_url}, Error: {str(e)}")
return None
# 创建一个 requests 的 Session 对象
session = requests.Session()
# 使用多线程并行检查 URL
with concurrent.futures.ThreadPoolExecutor() as executor:
# 使用 session 对象作为 check_url 函数的额外参数
valid_urls = list(filter(None, executor.map(check_url, urls, [session]*len(urls))))
# 将返回状态码为200的URL写入输出文件
with open(output_file_path, "w") as file:
for url in valid_urls:
file.write(url + "\n")
使用方法
在python文件的同文件夹下创建urls.txt文件,存入需要检测的URL
python 文件名.py
本人菜鸟一个,希望对大家有所帮助,欢迎批评指正。