Drupal 7.x 安全漏洞利用与渗透测试

项目标题与描述

Drupal 7.x SQL注入利用工具

本项目是一个针对已知高危漏洞“Drupalgeddon”(SA-CORE-2014-005)的安全研究项目。它提供了一个Python脚本,可利用Drupal 7.x版本中的SQL注入漏洞,从数据库提取管理员密码哈希,并集成drupalpass模块进行本地破解。该项目旨在用于受控的教育和学术环境,以帮助安全研究人员和开发者理解此类漏洞的严重性及利用原理,从而提升系统安全防护意识。

功能特性

  • 漏洞利用自动化:自动化执行针对Drupal 7.x(SA-CORE-2014-005)SQL注入漏洞的攻击流程。
  • 管理员哈希提取:通过构造特定的SQL查询,从目标Drupal站点的数据库users表中提取管理员用户的密码哈希值。
  • 集成密码破解:内置DrupalHash类,该工具不仅能提取哈希,还能使用本地字典对获取到的哈希进行暴力破解尝试。
  • 教育性渗透测试流程:项目文档详细描述了从信息收集(Nmap扫描)、漏洞识别(Drupal版本检测)到实际漏洞利用的完整黑盒渗透测试场景,具有很高的学习参考价值。

安装指南

本工具为Python脚本,依赖Python标准库,无需复杂安装步骤。

系统要求与依赖项:

  • Python 2.x 环境(脚本基于Python 2编写)。
  • Python标准库:hashlib, urllib2, optparse, random, sys。这些通常在Python标准安装中已包含。

安装步骤:

  1. 将项目代码克隆或下载到本地。
  2. 确保您的系统已安装Python 2。
  3. 可以直接运行脚本,无需额外安装依赖。

使用说明

基础使用示例

脚本通过命令行参数运行。主要功能是向存在漏洞的Drupal站点发送恶意请求以提取用户哈希。

# 基本用法示例(具体参数取决于脚本实现的完整功能)
python drupal_exploit.py -u http://target-drupal-site.com

典型使用场景

在一个隔离的渗透测试实验室中(如项目描述所述:攻击机Kali Linux 192.168.78.131,目标机Debian 192.168.78.132):

  1. 安全研究员使用Nmap等工具发现目标运行Drupal 7.x。
  2. 确认目标存在SA-CORE-2014-005漏洞。
  3. 运行本工具,指定目标URL,尝试获取管理员账户的密码哈希。
  4. 利用工具内置的DrupalHash类或配合John the Ripper等工具对获取的哈希进行离线破解,最终目标是获取管理员明文密码。

核心代码

以下是项目中用于计算Drupal 7密码哈希的核心DrupalHash类及其关键方法的完整代码。该类用于验证或破解从目标站点提取的密码哈希。

#!/usr/bin/python
# Drupal 7.x SQL Injection SA-CORE-2014-005 https://www.drupal.org/SA-CORE-2014-005
# Inspired by yukyuk's P.o.C (https://www.reddit.com/user/fyukyuk)
# Tested on Drupal 7.31 with BackBox 3.x

import hashlib, urllib2, optparse, random, sys

# 核心代码:DrupalHash类 - 用于计算和验证Drupal 7兼容的密码哈希
class DrupalHash:
    # 初始化函数,接收存储的哈希和待验证的密码
    def __init__(self, stored_hash, password):
        # Drupal自定义Base64编码字符表
        self.itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
        # 计算并存储重新哈希后的结果
        self.last_hash = self.rehash(stored_hash, password)

    # 返回最后计算的哈希值
    def get_hash(self):
        return self.last_hash

    # 从哈希设置字符串中提取迭代次数的对数(log2)
    def password_get_count_log2(self, setting):
        return self.itoa64.index(setting[3])

    # 核心密码加密函数,根据算法、密码和设置生成Drupal哈希
    def password_crypt(self, algo, password, setting):
        setting = setting[0:12]
        if setting[0] != '$' or setting[2] != '$':
            return False

        # 计算迭代次数
        count_log2 = self.password_get_count_log2(setting)
        salt = setting[4:12]
        if len(salt) < 8:
            return False
        count = 1 << count_log2

        # 根据算法选择哈希函数
        if algo == 'md5':
            hash_func = hashlib.md5
        elif algo == 'sha512':
            hash_func = hashlib.sha512
        else:
            return False

        # 执行多次哈希迭代(Drupal的密码加强机制)
        hash_str = hash_func(salt + password).digest()
        for c in range(count):
            hash_str = hash_func(hash_str + password).digest()

        # 组合最终输出:设置信息 + 自定义Base64编码的哈希结果
        output = setting + self.custom64(hash_str)
        return output

    # 自定义Base64编码函数,用于将二进制哈希字符串编码为Drupal格式
    def custom64(self, string, count=0):
        if count == 0:
            count = len(string)
        output = ''
        i = 0
        # 使用自定义字符表(itoa64)进行编码
        while True:
            value = ord(string[i])
            i += 1
            output += self.itoa64[value & 0x3f]
            if i < count:
                value |= ord(string[i]) << 8
            output += self.itoa64[(value >> 6) & 0x3f]
            if i >= count:
                break
            i += 1
            if i < count:
                value |= ord(string[i]) << 16
            output += self.itoa64[(value >> 12) & 0x3f]
            if i >= count:
                break
            i += 1
            output += self.itoa64[(value >> 18) & 0x3f]
            if i >= count:
                break
        return output

6HFtX5dABrKlqXeO5PUv/xQ6riDaA1x3NEFW7GKSlduRioNhlHXHCbJG8YqPNXUz

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容