安全开发

您所在的位置:网站首页 扫描网站目录 安全开发

安全开发

2023-09-15 11:19| 来源: 网络整理| 查看: 265

本博客地址:https://security.blog.csdn.net/article/details/127351847

一、前言

扫描网站的目录在实际的渗透测试中非常有价值,它可以用来扫描网站上所有可访问的文件。当一个系统没有遵守所有的安全守则或者安装规范时,就会产生一些潜在的安全风险,例如有残留的安装文件、本地应被.htaccess文件保护的目录,或者其他有助于攻击者突破系统的有用信息等。

本文的示例不会出现条件竞争问题,因为我们使用的是队列而不是列表,它是线程安全的。

二、代码实例

代码中已有明确注释,因此不再做单独的逻辑解释。

#!/usr/bin/python #-*- coding:utf8 -*- import contextlib import queue import requests import sys import threading import os import time # 不想扫描的文件类型列表 FILTERED = [".jpg", ".gif", ".png", ".css"] # 扫描目标 TARGET = "http://www.baidu.com" # 线程数 THREADS = 10 # 队列对象,用来存储实际扫描到的路径 answers = queue.Queue() # 队列对象,用来存储准备扫描的路径 web_paths = queue.Queue() def gather_paths(): # 使用os.walk函数遍历web应用安装目录里的所有文件和目录 for root,_,files in os.walk("."): for fname in files: # 以下,创建目标文件的完整路径 if os.path.splitext(fname)[1] in FILTERED: continue path = os.path.join(root,fname) if path.startswith('.'): path = path[1:] print(path) # 找到有效文件后,就将其添加到web_paths队列中 web_paths.put(path) # chdir-上下文管理器,主要用于“打开后需要关闭”、“锁上后需要释放”等场景 # 这里的chdir函数可以实现在另一个目录下执行代码,并在退出时回到原本目录 # @contextlib.contextmanager将生成器函数转换为上下文管理器 @contextlib.contextmanager def chdir(path): this_dir = os.getcwd() os.chdir(path) try: yield # 不管目录切换是否成功,上下文都能还原到原本的目录 # gather_paths函数执行完,退出上下文管理器,开始执行finally代码 finally: os.chdir(this_dir) # 扫描远程目标 def test_remote(): # 循环执行代码,直到web_paths队列中的路径被全部取完 while not web_paths.empty(): # 每次循环时,从队列中取出一条路径 path = web_paths.get() # 将其附在主路径后面 url = f'{TARGET}{path}' time.sleep(2) # 尝试访问合并后的全路径 r = requests.get(url) # 如果路径存在,则将这个url添加到answers队列中 if r.status_code == 200: answers.put(url) sys.stdout.write('+') else: sys.stdout.write('x') sys.stdout.flush() # 扫描器入口,编排扫描过程,调用所写函数 def run(): mythreads = list() # 开启10个线程 for i in range(THREADS): print(f'Spawning thread {i}') # 让每个线程都执行test_remote函数 t = threading.Thread(target = test_remote) mythreads.append(t) t.start() # 等到10个线程都结束,再退出函数 for thread in mythreads: thread.join() if __name__ == '__main__': # 调用chdir上下文管理器,传递我们想要执行的代码目录路径 with chdir('/home/kali/E'): # 当前目录保存,工作目录切换到参数指定的路径上 gather_paths() # 设置暂停点,以便在扫描之前核对屏幕上的输出 input('Press return to continue') # 对远程目标执行主扫描任务 run() # 将结果输出到文件中 with open('myanswer.txt','w') as f: while not answers.empty(): f.write(f'{answer.get()}\n') print('done') 三、运行测试

直接执行命令即可(Python3):

python xxxx.py

由于本文仅作为演示,因此这里没有结果,读者可以自行调整TARGET参数来进行测试。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3