
Drupal 7.x SQL注入利用工具
本项目是一个针对已知高危漏洞“Drupalgeddon”(SA-CORE-2014-005)的安全研究项目。它提供了一个Python脚本,可利用Drupal 7.x版本中的SQL注入漏洞,从数据库提取管理员密码哈希,并集成drupalpass模块进行本地破解。该项目旨在用于受控的教育和学术环境,以帮助安全研究人员和开发者理解此类漏洞的严重性及利用原理,从而提升系统安全防护意识。
users表中提取管理员用户的密码哈希值。DrupalHash类,该工具不仅能提取哈希,还能使用本地字典对获取到的哈希进行暴力破解尝试。本工具为Python脚本,依赖Python标准库,无需复杂安装步骤。
系统要求与依赖项:
hashlib, urllib2, optparse, random, sys。这些通常在Python标准安装中已包含。安装步骤:
基础使用示例
脚本通过命令行参数运行。主要功能是向存在漏洞的Drupal站点发送恶意请求以提取用户哈希。
# 基本用法示例(具体参数取决于脚本实现的完整功能)
python drupal_exploit.py -u http://target-drupal-site.com典型使用场景
在一个隔离的渗透测试实验室中(如项目描述所述:攻击机Kali Linux 192.168.78.131,目标机Debian 192.168.78.132):
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 output6HFtX5dABrKlqXeO5PUv/xQ6riDaA1x3NEFW7GKSlduRioNhlHXHCbJG8YqPNXUz
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。