# 漏洞加固报告

## 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注入 #参数化查询 #安全编码 #认证漏洞 #漏洞修复
# 漏洞加固报告

## 1. 漏洞点名称
文件上传功能的安全漏洞
该漏洞属于**文件上传类型漏洞**,可能导致攻击者上传恶意文件。关键特征包括:
- 缺乏对上传文件的严格校验(文件类型校验逻辑存在缺陷)。
- 未对服务器端文件路径和文件类型进行有效验证,可能被绕过。

---

## 2. 漏洞代码

### 前端代码
function checkFile() {
    var file = document.getElementsByName('upload file')[0].value;
    if (file == null || file == "") {
        alert("请选择要上传的文件!");
        return false;
    }
    // 定义允许上传的文件类型
    var allow_ext = ".jpgl. pngl .gif";
    // 提取上传文件的类型
    var ext_name = file.substring(file.lastIndexOf("."));
    // 判断上传文件类型是否允许上传
    if (allow_ext.indexof(ext_name) == -1) {
        var errMsg = "该文件不允许上传,请上传" + allow_ext + "类型的文件,当前文件类型为:" + ext_name;
        alert(errMsg);
        return false;
    }
}


### 后端代码
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        $temp_file = $_FILES['upload_file']['tmp_name'];
        $img_path = UPLOAD_PATH . '/' . $_FILES['upload_file']['name'];
        if (move_uploaded_file($temp_file, $img_path)) {
            $is_upload = true;
        } else {
            $msg = '上传出错!';
        }
    } else {
        $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
    }
}


---

## 3. 漏洞产生的危害
1. **文件类型校验缺陷**:
- 前端的文件校验机制仅通过字符串匹配检查文件扩展名,极易被篡改或绕过。
- 后端未对文件类型进行进一步验证,允许上传非图片类型的文件,如恶意脚本文件(`.php`、`.jsp` 等)。

2. **潜在风险**:
- 攻击者可能上传恶意脚本,通过访问恶意脚本获取对服务器的控制权。
- 可能泄露敏感信息或导致数据被篡改,甚至让服务器沦为攻击平台。

3. **业务影响**:
- 数据完整性和机密性受损。
- 攻击者可能实施勒索攻击,导致严重经济损失。

---

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

### 漏洞产生的原因
1. **客户端校验缺陷**:客户端文件类型校验缺乏可靠性,容易被篡改。
2. **后端安全措施不足**:未严格验证上传文件的 MIME 类型、扩展名及文件内容一致性。

### 修复思路
1. **后端严格校验**:
- 使用 mime_content_type() 或类似函数验证文件真实的 MIME 类型。
- 限制允许的文件扩展名。
- 对文件内容进行校验,防止伪装攻击。

2. **前端增强校验**:
- 使用更加健壮的文件校验逻辑,但前端校验仅作为用户体验的辅助措施,不能替代后端校验。

3. **其他防御措施**:
- 上传目录设置不可执行权限,防止上传的文件被执行。
- 对上传文件进行重命名,防止路径预测攻击。

---

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

### 修复后的前端代码
function checkFile() {
    var file = document.getElementsByName('upload_file')[0].value;
    if (!file) {
        alert("请选择要上传的文件!");
        return false;
    }
    var allow_ext = [".jpg", ".png", ".gif"];
    var ext_name = file.substring(file.lastIndexOf(".")).toLowerCase();
    if (!allow_ext.includes(ext_name)) {
        alert(`该文件不允许上传,请上传以下类型的文件:${allow_ext.join(", ")}`);
        return false;
    }
    return true;
}


### 修复后的后端代码
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        $temp_file = $_FILES['upload_file']['tmp_name'];
        $file_info = finfo_open(FILEINFO_MIME_TYPE);
        $mime_type = finfo_file($file_info, $temp_file);
        finfo_close($file_info);

        // 允许的 MIME 类型和扩展名
        $allowed_types = ['image/jpeg', 'image/png', 'image/gif'];
        $allowed_ext = ['jpg', 'png', 'gif'];

        $file_ext = pathinfo($_FILES['upload_file']['name'], PATHINFO_EXTENSION);

        if (in_array($mime_type, $allowed_types) && in_array($file_ext, $allowed_ext)) {
            $new_file_name = uniqid() . '.' . $file_ext;
            $img_path = UPLOAD_PATH . '/' . $new_file_name;
            if (move_uploaded_file($temp_file, $img_path)) {
                $is_upload = true;
                $msg = '文件上传成功!';
            } else {
                $msg = '上传出错!';
            }
        } else {
            $msg = '文件类型不合法!';
        }
    } else {
        $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
    }
}


---

## 关键词
#文件上传漏洞 #安全校验 #MIME类型验证 #恶意文件上传 #安全加固
# 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