Python打造漏洞扫描器 7

扫描器之敏感目录爆破

一、实验介绍

1.1 实验内容

通过调用字典访问url通过网页返回的状态来判断是否存在此目录。

1.2 实验知识点

  • requests
  • threading

1.3 实验环境

  • python2.7
  • Xfce终端

1.4 适合人群

本课程难度为一般,属于初级级别课程,适合具有Python基础的用户,熟悉python基础知识加深巩固。

1.5 代码获取

你可以通过下面命令将代码下载到实验楼环境中,作为参照对比进行学习。

$ wget http://labfile.oss.aliyuncs.com/courses/761/shiyanlouscan7.zip

二、开发准备

在项目目录data新建一个dir.txt,里面的内容为url目录字典。可以自己创建也可以从 shiyanlouscan7.zip中获取。

三、实验步骤

3.1 简述

敏感目录爆破,通过字典爆破网站目录结构,可能会得到敏感的目录结构

如果学习过之前的几章,这节课是非常的轻车熟路了。主要就是两个python库threading requests的使用。

3.2 装载字典文件

在 lib/core 中创建 webdir.py 文件。

首先将字典文件加入到队列中,设置一些需要初始化的值。

def __init__(self,root,threadNum):
    self.root = root
    self.threadNum = threadNum
    self.headers = {
         'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20',
         'Referer': 'http://www.shiyanlou.com',
         'Cookie': 'whoami=w8ay',
         }
    self.task = Queue.Queue()
    self.s_list = []
    filename = os.path.join(sys.path[0], "data", "dir.txt")
    for line in open(filename):  
        self.task.put(root + line.strip())

3.3 检测网页状态

为了提升检测网站的速度,我们只需要用head访问网页头来判断返回的状态码即可:

def checkdir(self,url):
    status_code = 0
    try:
        r = requests.head(url,headers=self.headers)
        status_code = r.status_code
    except:
        status_code = 0
    return status_code

3.4 线程函数

线程函数主要是从队列中取出数据,然后循环访问。

def test_url(self):
    while not self.task.empty():
        url = self.task.get()
        s_code = self.checkdir(url)
        if s_code==200:
            self.s_list.append(url)
        print "Testing: %s status:%s"%(url,s_code)

3.5 工作线程

work函数是调用的主函数,通过work函数来启动线程,开始任务。

def work(self):
    threads = []
    for i in range(self.threadNum):
        t = threading.Thread(target=self.test_url())
        threads.append(t)
        t.start()
    for t in threads:
        t.join()
    print('[*] The DirScan is complete!')

3.6 输出函数

在工作线程test_url中我们有

 if s_code==200:
    self.s_list.append(url)

这样一段代码,s_list是访问成功得到的列表,输出函数我们输出列表s_list即可:

def output():
    if len(self.s_list):
        print "[*] status = 200 dir:"
        for url in s_list:
            print url

我设定的是状态码为200的时候才会加入,当然大家也可以在工作线程test_url设置状态码不等于404的时候加入。

3.7 代码整理

总代码如下:


#!/usr/bin/env python
# __author__= 'w8ay'
import os
import sys
import Queue
import requests
import threading

class webdir:
    def __init__(self,root,threadNum):
        self.root = root
        self.threadNum = threadNum
        self.headers = {
             'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20',
             'Referer': 'http://www.shiyanlou.com',
             'Cookie': 'whoami=w8ay',
             }
        self.task = Queue.Queue()
        self.s_list = []
        filename = os.path.join(sys.path[0], "data", "dir.txt")
        for line in open(filename):  
            self.task.put(root + line.strip())

    def checkdir(self,url):
        status_code = 0
        try:
            r = requests.head(url,headers=self.headers)
            status_code = r.status_code
        except:
            status_code = 0
        return status_code

    def test_url(self):
        while not self.task.empty():
            url = self.task.get()
            s_code = self.checkdir(url)
            if s_code==200:
                self.s_list.append(url)
            print "Testing: %s status:%s"%(url,s_code)

    def work(self):
        threads = []
        for i in range(self.threadNum):
            t = threading.Thread(target=self.test_url())
            threads.append(t)
            t.start()
        for t in threads:
            t.join()
        print('[*] The DirScan is complete!')

    def output():
        if len(self.s_list):
            print "[*] status = 200 dir:"
            for url in s_list:
                print url

3.8 集成到扫描器

单个模块我们当然可以单独使用了,不过我们可以通过调用扫描器来使用。
将模块加入扫描程序主文件 w8ay.py中。

此处输入图片的描述

不要忘了 import 我们的 webdir 模块

现在。我们的扫描器运行流程是:

  1. 域名->转换ip->端口扫描
  2. 敏感目录扫描
  3. CMS识别
  4. 爬虫信息收集 ->基于爬虫的各类模块

四、实验总结

这个版本的敏感目录扫描时最为初级的扫描工具,在实际当中,如果网站有防火墙,waf之类的东西都可以轻易的防住这些扫描,该如何突破呢?方法很多,有兴趣可以自行查询资料。

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python漏洞扫描代码是一种基于Python语言开发的用于扫描计算机网络系统中存在的漏洞的工具。它通过对目标系统进行自动化的检测和分析,以发现可能存在的安全漏洞,为系统管理员提供有效的风险评估和修复建议。 Python漏洞扫描代码通常包含以下几个主要模块: 1. 目标选择模块:用于指定需要扫描的目标系统,可以通过输入IP地址、URL或域名等方式进行选择。 2. 端口扫描模块:通过扫描目标系统上开放的网络端口,确定可以进行漏洞检测的各种服务和应用。 3. 漏洞检测模块:根据已知的漏洞库和攻击特征,对目标系统进行深度检测,寻找存在的漏洞。 4. 结果输出模块:将扫描结果以易读的方式呈现给用户,例如报告生成或命令行输出。 Python漏洞扫描代码的使用方法一般为: 1. 安装Python环境并下载所需依赖库。 2. 编写扫描代码,包括目标选择、端口扫描和漏洞检测等功能。 3. 运行代码,输入目标系统信息,并等待扫描结果输出。 4. 根据输出结果,评估目标系统的安全风险,并采取相应的修复措施。 Python漏洞扫描代码的开发需要具备一定的网络安全知识和Python编程技能,同时也需要按照法律法规和道德规范使用,以免对他人的网络系统造成未授权的影响。同时,由于软件和系统的漏洞库不断变化,扫描的代码也需要持续地维护和更新,以提高扫描的准确性和全面性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值