#### 漏洞修复

##### 1. **过滤用户输入

修复方法:在构建LDAP查询时,对用户输入进行过滤,确保不包含特殊字符,防止LDAP注入。

<?php
// 用户输入的用户名
$username = $_POST['username'];

// 过滤用户输入的特殊字符
$username = ldap_escape($username, "", LDAP_ESCAPE_FILTER);

// 构建安全的LDAP查询
$ldap_search_filter = "(uid=$username)";
$ldap_search = ldap_search($ldap_connection, "dc=example,dc=com", $ldap_search_filter);
?>

解释**:

- 使用 `ldap_escape()` 函数对用户输入进行转义,防止恶意字符破坏LDAP查询结构。

##### 2. **使用参数化查询

修复方法:避免直接拼接用户输入,改用LDAP的参数化查询或绑定方法,确保查询的安全性。

<?php
// 用户输入的用户名和密码
$username = $_POST['username'];
$password = $_POST['password'];

// 使用LDAP绑定验证
$bind_dn = "uid=$username,dc=example,dc=com";
$ldap_connection = ldap_connect($ldap_host);
if (ldap_bind($ldap_connection, $bind_dn, $password)) {
// 用户验证成功
}
?>

解释**:

- 使用 `ldap_bind()` 进行LDAP身份验证,而不是直接使用拼接的查询字符串。这样能够避免用户输入对查询结构
的干扰。

##### 3. **正则表达式和输入验证

修复方法:对输入进行正则表达式验证,只允许
合法字符输入。

<?php
// 用户输入的用户名
$username = $_POST['username'];

// 验证用户名是否只包含字母和数字
if (preg_match("/^[a-zA-Z0-9]*$/", $username)) {
    // 构建LDAP查询
    $ldap_search_filter = "(uid=$username)";
    $ldap_search = ldap_search($ldap_connection, "dc=example,dc=com", $ldap_search_filter);
} else {
    die("无效的用户名");
}
?>

解释**:

- 通过正则表达式限制用户输入,只允
许字母和数字,防止恶意字符被注入到LDAP查询中。

#### 总结

1. **最小化修改**:针对LDAP查询部分进行修复,避免大规模重构,确保兼容性。
2. **输入过滤与验证*
*:对所有用户输入进行严格的过滤,移除潜在的恶意字符或使用安全API进行查询。
3. **使用安全A
PI**:避免手动拼接查询字符串,改用参数化查询或绑定操作,提高系统的安全性。
4. **定期审计和测试**:定期审计LDAP查询代码和输入验证机制,防止漏洞复发。

通过这些修复措施,能够有效防止LDAP注入漏洞的发生,提升系统的安全性。  
#LDAP注入 #Web安全 #安全修复 #SQL注入

## 其他漏洞
### 越权漏洞

#### 漏洞点

越权漏洞通常指用户通过某些手段,绕过应用的权限控制机制,访问或操作本不该访问或操作的数据和资源。这种漏洞通常出现在没有进行充分的访问控制检查时,攻击者可以通过直接访问URL、修改请求参数或篡改其他输入数据来提升自己的权限。

#### 漏洞代码

在以下的示例中,用户可以通过修改 `user_id` 参数来访问不属于自己的数据,从而发生越权
漏洞

```php
<?php
// 用户ID和查询
$user_id = $_GET['user_id']; // 直接从URL获取用户
ID
$query = "SELECT * FROM users WHERE id = $user_id";
$
result = mysqli_query($conn, $query);

// 显示用户信息
$row = mysqli_fetch_assoc($result);
echo "Hello, ".$row['name']."!";
?>
```

#### 漏洞产生的危害

- **信息泄露**:攻击者可以访问不应查看的敏感信息,如其他用户的个人数据、历史记录等。
- **数据篡改**:攻击者可能通过越权操作修改、删除其他用户的敏感数据。
- **权限提升**:如果攻击者能够访问本不应有权限访问的功能或资源,可能进一步获得更高的权限,造成系统的严重安全隐患。
- **服务拒绝**:攻击者可能通过越权操作使其他用户的资源不可用或导致系统崩溃。

#### 漏洞产生的原因
### wfuzz 使用说明

wfuzz 是一个用于 Web 应用程序模糊测试(fuzzing)的工具,主要用于发现 Web 应用中的漏洞,特别是在处理 HTTP 请求和响应时。以下是 wfuzz 的使用说明翻译。

---

#### 基本信息

********************************************************
* Wfuzz 3.1.0 - Web Fuzzer                              *
*                                                      *
* 版本 1.4c 之前由:                                   *
* Christian Martorella (cmartorella@edge-security.com) *
* Carlos del ojo (deepbit@gmail.com)                   *
*                                                      *
* 版本 1.4d 到 3.1.0 由:                              *
* Xavier Mendez (xmendez@edge-security.com)            *
********************************************************


---

#### 用法

Usage: wfuzz [options] -z payload,params <url>

        FUZZ, ..., FUZnZ:这些关键字在使用时,`wfuzz` 会将它们替换为指定的 payload 中的值。
        FUZZ{baseline_value}:将 FUZZ 替换为 baseline_value。它将是执行的第一个请求,并可以用作过滤的基础。


---

#### 选项

- `-h/--help`
显示帮助信息

- `--help`
显示高级帮助

- `--filter-help`
显示过滤语言的说明

- `--version`
显示 wfuzz 版本信息

- `-e <type>`
列出可用的编码器、payloads、迭代器、打印器和脚本

- `--recipe <filename>`
从指定的配方文件中读取选项。可以重复使用该选项来读取多个配方。

- `--dump-recipe <filename>`
将当前选项打印为配方文件

- `--oF <filename>`
将模糊测试结果保存到文件,稍后可以使用该文件中的 payload 进行处理。

- `-c`
使用颜色输出

- `-v`
输出详细信息

- `-f filename,printer`
使用指定的打印器(默认为 raw 打印器)将结果保存到输出文件中。

- `-o printer`
使用指定的打印器显示结果。

- `--interact`
(测试版)启用后,所有按键都会被捕获,允许与程序进行交互。

- `--dry-run`
打印请求的结果,但不实际发送 HTTP 请求。

- `--prev`
打印上一个 HTTP 请求(仅在使用生成 fuzz 结果的 payload 时可用)。

- `--efield <expr>`
显示指定的语言表达式和当前的 payload。可以重复使用该选项来显示多个字段。

- `--field <expr>`
只显示指定的语言表达式,而不显示 payload。可以重复使用该选项来显示多个字段。

- `-p addr`
使用代理,格式为 `ip:port:type`。可以重复该选项使用多个代理。类型可以是 SOCKS4、SOCKS5 或 HTTP,如果省略,默认为 HTTP。

- `-t N`
指定并发连接数(默认是 10)

- `-s N`
指定请求之间的延迟时间(默认是 0)

- `-R depth`
指定递归路径发现的最大递归深度。

- `-D depth`
最大链接深度级别。

- `-L,--follow`
跟踪 HTTP 重定向

- `--ip host:port`
指定连接到的 IP 地址和端口,而不是 URL 中的主机。

- `-Z`
扫描模式(忽略连接错误)

- `--req-delay N`
设置请求的最大允许时间(单位:秒),默认是 90。

- `--conn-delay N`
设置连接到服务器的最大时间(单位:秒),默认是 90。

- `-A, --AA, --AAA`
等同于 -v -c 和 `--script=default,verbose,discover`。

- `--no-cache`
禁用插件缓存。每个请求都会被扫描。

- `--script=`
等同于 `--script=default`。

- `--script=<plugins>`
运行脚本扫描,`<plugins>` 是逗号分隔的插件文件或插件类别列表。

- `--script-help=<plugins>`
显示关于脚本的帮助信息。

- `--script-args n1=v1,...`
为脚本提供参数,例如:`--script-args grep.regex="<A href=\"(.*?)\">"`

- `-u url`
指定要请求的 URL。

- `-m iterator`
指定用于组合 payloads 的迭代器(默认为 product)。

- `-z payload`
为每个 FUZZ 关键字指定一个 payload。格式为 `name[,parameter][,encoder]`。可以使用编码器列表,如 `md5-sha1`,也可以链式使用编码器,如 `md5@sha1`。还可以使用编码器类别,如 `url`。

- `--zP <params>`
为指定的 payload 提供参数(必须以 -z-w 前缀)。

- `--zD <default>`
为指定的 payload 提供默认参数(必须以 -z-w 前缀)。

- `--zE <encoder>`
为指定的 payload 提供编码器(必须以 -z-w 前缀)。

- `--slice <filter>`
使用指定的表达式过滤 payload 元素。必须与 -z 一起使用。

- `-w wordlist`
指定一个字典文件(等同于 `-z file,wordlist`)。

- `-V alltype`
对所有参数进行暴力破解(allvars 和 allpost)。不需要使用 FUZZ 关键字。

- `-X method`
指定请求的 HTTP 方法,例如 HEAD 或 `FUZZ`。

- `-b cookie`
指定请求的 cookie。可以重复使用该选项来使用多个 cookies。

- `-d postdata`
使用 POST 数据(例如:"id=FUZZ&catalogue=1")。

- `-H header`
使用请求头(例如:"Cookie:id=1312321&user=FUZZ")。可以重复使用该选项来使用多个请求头。

- `--basic/ntlm/digest auth`
使用 "user:pass" 或 "FUZZ:FUZZ" 或 "domain\FUZ2Z:FUZZ" 格式的身份验证。

- `--hc/hl/hw/hh N[,N]+`
隐藏响应中指定代码、行、单词或字符(使用 BBB 表示基准值)。

- `--sc/sl/sw/sh N[,N]+`
显示响应中指定代码、行、单词或字符(使用 BBB 表示基准值)。

- `--ss/hs regex`
显示或隐藏响应中匹配指定正则表达式的内容。

- `--filter <filter>`
使用指定的过滤表达式显示或隐藏响应(使用 BBB 表示基准值)。

- `--prefilter <filter>`
在 fuzzing 之前使用指定的表达式过滤项。可以重复该选项来连接多个过滤器。

---
https://github.com/xmendez/wfuzz
### 关键词
#wfuzz #WebFuzzing #fuzz #payload #fuzzing工具 #安全测试 GitHub - xmendez/wfuzz: Web application fuzzer
dirsearch -u http://192.168.153.130/ --exclude-status 403,401
这次使用 dirsearch 的目录扫描结果如下:

### 扫描概况:
- **目标**:`http://192.168.153.130/`
- **排除了 403 和 401 状态码**(即忽略没有权限访问的目录)。
- **扩展名**:扫描了 .php, .aspx, .jsp, .html, .js 文件。
- **线程数**:25
- **字典大小**:11460个条目

### 结果概述:
- **成功返回的目录**:
- `/add`(200 OK)
- `/add.php`(200 OK)
- `/c`(200 OK)
- `/head`(200 OK)
- `/head.php`(200 OK)
- `/images/`(200 OK,重定向到 `http://192.168.153.130/images/`)
- `/in`(200 OK)
- `/show`(200 OK)
- `/test`(200 OK)
- `/test.php`(200 OK)
- `/phpmy/`(200 OK)

- **重定向**:
- /images`(301 Moved Permanently,重定向到 /images/`)
- /panel 和 `/panel.php`(302 Found,重定向到 `index.php`)

### 总结:
- 目标主机上多个目录和文件存在,包括 PHP 文件(如 /add.php, /test.php`)和其他常见目录(如 /images/, /phpmy/`)。
- 一些目录如 /panel/images 会进行重定向。
- 没有返回 403 或 401 错误,符合排除条件。

此扫描揭示了目标网站上开放的多个目录和文件路径,有助于进一步的安全分析。
#dirsearch #目录扫描 #安全测试 #结果分析
这个 gobuster 扫描结果显示了对目标主机 http://192.168.153.130/ 进行目录扫描的结果。以下是简要分析:

- **扫描概况**:
- 使用了字典 /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt 进行扫描。
- 扫描的 HTTP 方法是 `GET`,线程数为 10,超时设置为 10 秒。
- 排除了返回 `404` 状态码的目录(即未找到的目录)。

- **发现的目录**:
- /index (200 OK):存在并返回了页面。
- /images (301 Moved Permanently):存在并重定向到 `http://192.168.153.130/images/`。
- /c, /in, /add, /show, /test, /head, /head2 (200 OK):这些目录存在,返回 200 状态码。
- /uploaded_images (301 Moved Permanently):存在并重定向到 `http://192.168.153.130/uploaded_images/`。
- /panel (302 Found):存在并重定向到 `index.php`。
- /server-status (403 Forbidden):存在但访问被拒绝(权限不足)。

- **总结**:
- 目标网站包含多个有效的目录和页面,部分目录如 /images/uploaded_images 可能包含上传的内容。
- /server-status 页面返回了 403 状态码,表示访问受限。
- 大多数发现的目录都返回了 200 或 301 状态码,意味着它们存在并且有效。

此扫描结果有助于进一步探索目标网站的潜在入口和敏感目录。
#gobuster #目录扫描 #网站枚举 #安全测试
 
 
Back to Top