### cmsmap 工具使用说明

cmsmap 是一个简单的内容管理系统(CMS)扫描工具,支持扫描 WordPress、Joomla 和 Drupal 网站。下面是该工具的命令行用法及选项说明:

#### 基本命令结构:
usage: cmsmap [-f W/J/D] [-F] [-t] [-a] [-H] [-i] [-o] [-E] [-d] [-u] [-p]
              [-x] [-k] [-w] [-v] [-h] [-D] [-U W/J/D]
              [target]


#### 参数说明:

##### **扫描选项**:
- `target`:目标 URL(例如 `https://example.com:8080/`)
- `-f W/J/D, --force W/J/D`:强制扫描指定的 CMS(W = WordPress,J = Joomla,D = Drupal)
- `-F, --fullscan`:进行完整扫描,使用大量插件列表。会有误报且速度较慢!
- `-t , --threads`:设置线程数(默认为 5)
- `-a , --agent`:设置自定义用户代理
- `-H , --header`:添加自定义请求头(例如 `Authorization: Basic ABCD...`)
- `-i , --input`:扫描文件中列出的多个目标
- `-o , --output`:将输出结果保存到文件
- `-E, --noedb`:列举插件但不搜索漏洞
- `-c, --nocleanurls`:仅适用于 Drupal,禁用清洁 URL
- `-s, --nosslcheck`:不验证服务器证书
- `-d, --dictattack`:在扫描过程中运行低强度字典攻击(每个用户尝试 5 次)

##### **暴力破解选项**:
- `-u , --usr`:指定用户名或用户名文件
- `-p , --psw`:指定密码或密码文件
- `-x, --noxmlrpc`:在 WordPress 中不使用 XML-RPC 进行暴力破解

##### **后期利用选项**:
- `-k , --crack`:密码哈希文件(需要安装 hashcat,仅适用于 WordPress 和 Joomla)
- `-w , --wordlist`:密码字典文件

##### **其他选项**:
- `-v, --verbose`:启用详细模式(默认值为 false)
- `-h, --help`:显示帮助信息并退出
- -D, --default`:使用默认选项运行 `CMSmap
- `-U, --update`:更新 CMSmap 使用的 CMS(C = CMS,P = 插件,PC = 都更新)

#### 示例用法:
1. **扫描单个目标**:

   cmsmap.py https://example.com
   

2. **强制扫描 WordPress,进行完整扫描,禁用插件漏洞枚举**:

   cmsmap.py https://example.com -f W -F --noedb -d
   

3. **从文件扫描多个目标,并将输出保存到文件**:

   cmsmap.py https://example.com -i targets.txt -o output.txt
   

4. **使用字典文件进行暴力破解**:

   cmsmap.py https://example.com -u admin -p passwords.txt
   

5. **使用哈希文件进行密码破解(需要安装 hashcat)**:

   cmsmap.py -k hashes.txt -w passwords.txt
   


### 关键字:
#CMSmap #CMS扫描 #WordPress #Joomla #Drupal #暴力破解 #字典攻击 #后期利用 #扫描工具
在多次失败后
,引入验证码机制,避免机器暴力破解:

<?php
session_start();
if (isset($_POST['username']) && isset($_POST['password']) && isset($_POST['captcha'])) {
    $username = $_POST['username'];
    $password = $_POST['password'];
    $captcha = $_POST['captcha'];

    // 验证验证码是否正确
    if ($captcha != $_SESSION['captcha']) {
        die('Incorrect CAPTCHA!');
    }

    // 进行用户身份验证
    $query = "SELECT * FROM users WHERE username = '$username' AND password = '$passwor
d'";
$result = mysqli_query($conn, $query);
if (mysqli_num_rows($result) > 0) {
echo "Lo
gin successful!";
} else {
ech
o "Invalid credentials!";
    }
}
?>

解释**:

- 在多次登录失败后,要求用户输入验证码,防止机器破解密码。
- 验证码可以使用图形验证码或其他形式的验证码,以增加破解难度。

##### 3. **避免频繁请求

通过设置访问限制,防止频繁的业务操作(如发表评论、发起
订单等):

<?php
session_start();
$redis = new Redis();
$redis->connect('localhost', 6379);

$u
ser_id = $_SESSION['user_id'];
$last_order_time = $redis-
>get('last_order_time_' . $user_id);

// 限制每个用户每5分钟内只能发起一次订单
if ($last_order_time && time() - $last_order_time < 300) {
    die('You can only place an order once every 5 minutes.');
}

// 处理订单
$redis->set('last_order_time_' . $user_id, time());
echo "Order placed successfully!";
?>

**
解释**:

- 通过缓存系统存储用户操作时间,限制频繁操作。
- 例如在每个用户下单后,强制设置最短时间间隔,避免恶意刷单。

#### 总结

1. **最小化修改**:修复频率限制时,避免大规模的代码重构,只需添加频率限制和验证
码等必要安全功能。
2. **缓存机制**:通过Redis或Memcached存储用户尝试次数、操作时间,灵活控制请求频率。
3. **引入验证码**:在多次失败后,强制要求用户输入验证码,防止暴力破解。
4. **合理的操作间隔**:对关键操作(如登录、下单等)设置最小操作间隔,避免滥用和系统性能受损。

通过这些方法,可以有效防止频繁请求导致的安全问题,提高系统稳定性与安全性。  
#频率限制 #Web安全 #暴力破解 #验证码 #缓存机制


### 路径长度截断 / 超出文件
系统长度限制

#### 漏洞点

路径长度截断漏洞指的是应用未对用户输入的文件路径进行适当的限制和验证,导致用户能够输入过长的路径,突破文件系统的限制并可能造成信息泄露、文件访问等问题。

#### 漏洞代码

存在路径长度截断问题的代码可能类似于以下示例:

// 示例:路径输入未做限制
$file = $_GET['file'];
include($file);

此代码未对传入的路径进行限制,用户可以通过`../../`等方式跳出当前目录,访问敏感文件或导致路径过长,超出文件系统限制。

#### 漏洞产生的危害

- **信息泄露**:攻击者通过路径遍历访问敏感文件(如`/etc/passwd`等),可能泄露系统信息。
- **文件访问**:攻击者通过构造路径,可能访问本不应被公开的文件。
- **拒绝服务**:通过输入过长的路径,可能导致文件系统错误或应用崩溃。

#### 漏洞产生的原因

- **路径未做长度检查**:在应用处理文件路径时,未对用户输入进行长度限制,导致路径过长。
- **缺乏对路径的验证和规范化**:应用未对用户输入进行规范化,允许用户构造复杂路径。
- **文件系统限制被忽视**:不同操作系统和PHP版本对路径长度有不同的限制,未充分考虑这些限制。

#### 修复思路

1. **限制路径长度**:通过设置最大路径长度,防止超出文件系统的限制。
2. **路径规范化**:在处理路径时,使用PHP内置函数对路径进行规范化,避免路径遍历和长度问题。
3. **验证文件路径**:确保用户输入的路径是合法的、允许的,并且在路径长度范围内。

#### 漏洞修复

以下是几种可能的修复措施:

1. **限制路径长度**:在处理文件路径时,限制最大路径长度,确保其不会超过文件系统的限制。

// 限制路径长度
define('MAX_PATH_LENGTH', 4096); // 根据操作系统设置的合理最大路径长度
$file = $_GET['file'];

if (strlen($file) > MAX_PATH_LENGTH) {
die('Path exceeds the maximum allowed length');
}

include($file);

2. **路径规范化**:使用`realpath()`来确保路径规范化,避免路径遍历。

// 规范化路径
$file = $_GET['file'];
$real_path = realpath($file);

if ($real_path === false || strlen($real_path) > MAX_PATH_LENGTH) {
die('Invalid path or path too long');
}

include($real_path);

3. **防止路径遍历**:确保用户只能访问特定目录中的文件,避免路径穿越。

// 仅允许访问特定目录
$file = $_GET['file'];
$base_dir = '/var/www/files/';
$real_path = realpath($base_dir . $file);

if ($real_path === false || strpos($real_path, $base_dir) !== 0) {
die('Access denied');
}

include($real_path);

#### 其他建议

- **操作系统和PHP版本考虑**:在修复过程中,注意不同操作系统和PHP版本对路径长度的限制。Linux通常限制路径长度为4096字节,Windows可能限制为256字节。需要根据实际情况设置合理的最大路径长度。
- **审查所有文件路径处理**:确保整个应用中涉及
文件路径的处理都做了必要的限制和验证,防止其他潜在的路径相关漏洞。

### 总结

路径长度截断漏洞是由于应用没有对用户输入的文件路径进行适当的长度限制,导致超出文件系统的限制,可能导致信息泄露、文件访问或拒绝服务等问题。通过对路径长度进行限制、路径规范化和验证,可以有效地防止该类漏洞的发生。
#路径长度截断 #文件系统限制 #路径遍历 #PHP安全
 
 
Back to Top