# 漏洞加固报告

## 1. 漏洞点名称
SQL 注入漏洞
此漏洞属于**SQL 注入类型漏洞**,关键特征包括:
- 用户输入直接拼接到 SQL 查询语句中,缺乏参数化处理。
- 攻击者可通过构造恶意输入绕过认证逻辑或执行恶意查询。

---

## 2. 漏洞代码

if (isset($_POST['login'])) {
    $uname = str_replace('\'', '', urldecode($_POST['un']));
    $pass = str_replace('\'', '', urldecode($_POST['ps']));
    $run = 'select * from auth where pass=\'' . $pass . '\' and uname=\'' . $uname . '\'';
    $result = mysqli_query($conn, $run);
    if (mysqli_num_rows($result) > 0) {
        $row = mysqli_fetch_assoc($result);
        echo "You are allowed<br>";
        $_SESSION['logged'] = true;
        $_SESSION['admin'] = $row['username'];
        header('Location:panel.php', true, 302);
    } else {
        echo "<script>alert('Try again');</script>";
    }
}


---

## 3. 漏洞产生的危害
1. SQL 注入的威胁**:
- 攻击者可通过构造恶意输入绕过认证机制,例如使用 `' OR '1'='1`。
- 攻击者可能读取、修改或删除数据库中的敏感数据。

2. **潜在风险**:
- 数据库被完全控制,可能导致数据泄露或篡改。
- 攻击者可能通过数据库权限进一步攻击服务器或网络。

3. **业务影响**:
- 用户账户信息泄露或被篡改。
- 整体系统的可用性和完整性受到威胁。

---

## 4. 漏洞产生的原因以及修复思路

### 漏洞产生的原因
1. 用户输入未经过安全处理,直接拼接到 SQL 查询语句中。
2. 缺乏参数化查询或预处理机制来防止注入。

### 修复思路
1. **使用参数化查询**:
- 通过 `mysqli` 或 `PDO` 的预处理语句绑定用户输入,避免拼接查询语句。

2. **输入过滤与输出编码**:
- 使用过滤函数清理输入,例如 `filter_var`。
- 对输出使用适当的转义,防止其他漏洞(如 XSS)。

3. **强化用户认证逻辑**:
- 添加密码哈希存储机制(例如 `password_hash` 和 `password_verify`)。
- 限制失败登录尝试,防止暴力破解。

---

## 5. 漏洞修复后代码截图

### 修复后的代码
```php
if (isset($_POST['login'])) {
$uname = trim($_POST['un']);
$pass = trim($_POST['ps']);

// 使用参数化查询防止 SQL 注入
$stmt = $conn->prepare('SELECT * FROM auth WHERE uname = ? AND pass = ?');
$stmt->bind_param('ss', $uname, $pass);
$stmt->execute();
$result = $stmt->get_result();

if ($result->num_rows > 0) {
$row = $result->fetch_assoc();
echo "You are allowed<br>";
$_SESSION['logged'] = true;
$_SESSION['admin'] = $row['username'];
header('Location: panel.php', true, 302);
exit();
} else {
echo "<script>alert('Try again');</script>";
}
}
```

### 修复后的增强措施
1. **使用密码哈希存储和校验

// 注册用户时
$hashed_pass = password_hash($pass, PASSWORD_BCRYPT);

// 登录验证时
if (password_verify($pass, $row['pass'])) {
    // 验证通过
}


2. 限制登录尝试次数
通过记录用户登录尝试次数,防止暴力破解攻击。

---

## 关键词
#SQL注入 #参数化查询 #安全编码 #认证漏洞 #漏洞修复
### 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
# AWD攻防赛参考思路

## 本次比赛环境
- **Windows+Linux组合模式**:
- Windows Server 2003 + Centos6.x/Ubuntu14/16.04/Ubuntu17.01
- Window7 + Centos6.x/Ubuntu14/16.04/Ubuntu17.01
- Windows Server 2008 + Centos6.x/Ubuntu14/16.04/Ubuntu17.01

## Windows加固
- **先备份**:Web源码、数据库
1. 445端口加固,开启防火墙或IP高级安全策略
2. 开启系统日志审计功能
3. 禁用guest账户、关闭文件共享
4. 确保启动项内容是可控的
5. 限制3389远程访问控制的连接数
在本地组策略编辑器中,依次展开:计算机配置 → 管理模板 → Windows组件 → 远程桌面服务 → 远程桌面会话主机 → 连接 → 限制连接的数量。
6. 使用工具监控关键目录文件:`文件操作监控.exe` / 御剑文件监控.exe
7. 恶意代码文件查找,通过PCHunter, Monitor
8. Web目录环境查找相关可疑文件:jpg/png/rar,属性、解压
9. NTFS扫描磁盘查找隐藏的交换流数据
10. 查找系统所有账户信息,禁止非administrator账户
11. 修改Web站点管理员访问路径、默认口令、数据库口令
12. 安装WAF脚本,防护web站点,禁止其他漏洞

## Linux加固
- **先备份**:Web源码、数据库
1. 系统口令修改,团队统一口令
2. 通过`.bash_history`查找历史命令操作,发现痕迹
3. 查看计划任务:`crontab -l`;编辑计划任务:`crontab -e`
4. 查看`/etc/init.d/rc.local`中启动服务有无异常
5. 使用脚本开启进程监控、目录监控、流量监控
6. Web站点口令、站点管理员路径修改
7. 系统加固:`iptables`
- 进程线程:`netstat / ps -aux/netstat -apt`
- SSH:`w/fuser`
- 杀掉进程:`kill -9 pid`

## Mysql加固
1. 不使用默认口令,修改成复杂的,并确保和web环境连接
2. 设置只允许本地127.0.0.1账户登录
修改`bind-address=127.0.0.1`,在配置文件中加入`secure_file_priv=NULL`
3. 开启日志审计功能:`general_log_file=路径`

## Mssql加固
1. 删除不必要的账号
2. SQLServer用户口令安全
3. 根据用户分配帐号避免帐号共享
4. 分配数据库用户所需的最小权限
5. 网络访问限制
6. SQLServer登录审计
7. SQLServer安全事件审计
8. 配置日志功能

## 攻击准备
1. 各类CMS软件包最新版准备
2. 扫描工具:`nmap`、`nessus`、`metasploit`更新
3. 漏洞利用脚本:`poc`、`exp`

## Kali更新,解决签名问题:
wget -q -O - https://archive.kali.org/archive-key.asc  | apt-key add
uname -a
cat /proc/version


## Windows提权
- ms17-017
- ms17-010

## Linux提权
- CVE-2017-6074 (DCCP双重释放漏洞 > 2.6.18)
- CVE-2016-5195(脏牛,kernel 2.6.22 < 3.9 (x86/x64))
- CVE-2016-8655(Ubuntu 12.04、14.04,Debian 7、8)
- CVE-2017-1000367(sudo本地提权漏洞)
- CVE-2016-1247(Nginx权限提升漏洞)
- CVE-2017-16995(Ubuntu16.04 kernel:4.14-4.4)

## 中间件服务器
- IIS
- Apache
- JBoss
- MySQL
- Nginx
- Tomcat
- WebLogic

## 集成服务环境
- WAMPServer
- XAMPPServer

## CMS列表参考
- 下载最新版本+每个CMS对应的漏洞poc、exp工具脚本文章,之后汇总:
- Apache
- ASPCMS
- Dedecms
- Dicuz
- Drupal
- EmpireCMS
- Eshop
- FineCMS
- Joomla
- LAMP
- Metainfo
- Nginx
- Phpcms
- Phpwind
- Qibocms
- Seacms
- Semcms
- Tomcat
- Wolfcms
- Wordpress
- Zabbix

## 参考链接
- [FreeBuf](http://freebuf.com/)
- [Huseck GitHub](https://github.com/Huseck)
- [Seebug](https://www.seebug.org/)
- [安全客](https://www.anquanke.com/)
- [Exploit-DB](https://www.exploit-db.com/)
- [Bugscan](http://www.bugscan.net/source/template/vulns/)

#AWD攻防赛 #加固策略 #Windows #Linux #MySQL #MSSQL #提权 #CMS #漏洞扫描 #安全工具
 
 
Back to Top