白帽工具箱:DVWA中的命令注入(Command Injection)解析与防护策略

ops/2024/10/20 11:41:47/

🌟🌌 欢迎来到知识与创意的殿堂 — 远见阁小民的世界!🚀
🌟🧭 在这里,我们一起探索技术的奥秘,一起在知识的海洋中遨游。
🌟🧭 在这里,每个错误都是成长的阶梯,每条建议都是前进的动力。
🌟🧭 在这里,我们一起成长,一起进步,让我们在知识的世界里畅游无阻,共同创造一个充满智慧和创新的明天。
🌟📚 点击关注,加入我们的技术探索之旅吧!❤️📖✨
✨博客主页:远见阁小民的主页
📕本文专栏: 白帽学徒笔记
📕其他专栏:后端专栏 AI专栏 Python专栏 其他专栏 Linux专栏

1 Command Injection

   命令注入(Command Injection)是一种严重的安全漏洞,攻击者通过将恶意命令注入到系统中,能够执行未经授权的操作。这种攻击通常发生在应用程序直接使用用户输入构建系统命令的情况下。

在Enter an IP address输入框中填写:127.0.0.1,点击Submit,可以看到输出内容乱码。

在这里插入图片描述

1.1 解决乱码问题

(1)去靶场文件中找到dvwaPage.inc.php文件
在这里插入图片描述
(2)修改dvwaPage.inc.php文件,将所有的utf-8编码替换为gb2312编码。
在这里插入图片描述
(3)重启phpstudy_pro 或 XAMPP (看你用的是哪个了),再尝试效果如下,乱码问题已经解决。
在这里插入图片描述

1.2 实操练习{低中安全级别—DVWA设置为Low或Medium}

1.2.1 使用 & 连接命令

(1)这会执行ping命令,同时执行whoami命令,不论ping是否成功。

127.0.0.1 & whoami

(2)只有在ping命令成功后才会执行whoami命令。

127.0.0.1 && whoami

在这里插入图片描述

1.2.2 使用 | 管道符

这会将ping命令的输出作为whoami命令的输入。

127.0.0.1 | whoami

在这里插入图片描述

1.2.3 查看源码

在这里插入图片描述

1.3 实操练习{高安全级别—DVWA设置为High}

重复1.2的命令,出现如下效果

在这里插入图片描述

1.3.1 查看源码

可以发现DVWA高安全级别的源码中已经过滤掉了绝大数的连接符号,从而导致我们无法注入。

在这里插入图片描述

2 如何防止命令注入攻击

2.1 输入验证和过滤

2.1.1 严格验证用户输入

   验证用户输入是防止命令注入的第一道防线。确保用户输入只包含预期的内容,拒绝包含特殊字符或命令连接符的输入。

示例代码:

使用正则表达式确保输入只包含数字和点,防止注入特殊字符。

<?php
$ip = $_GET['ip'];
if (preg_match('/^[0-9\.]+$/', $ip)) {system("ping -c 4 " . escapeshellarg($ip));
} else {echo "无效的IP地址";
}
?>

2.1.2 使用白名单机制

   使用白名单验证输入,确保只有合法的字符和格式可以通过。这种方法比黑名单更安全,因为黑名单很难穷尽所有可能的恶意输入。

2.2 使用安全API和库

2.2.1 避免使用不安全的函数

   避免使用诸如system()、exec()、popen()等容易导致命令注入的函数。

2.2.2 使用参数化的系统命令执行函数

  在执行系统命令时,使用参数化的方法避免直接拼接字符串。
  例如,在Python中,可以使用subprocess模块安全地执行命令,通过将命令和参数分开传递,避免了字符串拼接带来的安全风险。

import subprocessip = input("Enter IP address: ")
result = subprocess.run(['ping', '-c', '4', ip], capture_output=True, text=True)
print(result.stdout)

2.3 最小权限原则

2.3.1 限制Web服务器用户权限

  确保运行Web应用程序的用户仅具有最低权限,限制其执行系统命令的能力。
  例如,在Linux中,可以为Web服务器用户配置有限的权限

sudo usermod -a -G restricted_group www-data

2.4 日志和监控

2.4.1 日志记录

  记录所有系统命令的执行日志,帮助及时发现异常行为。

2.4.2 实时监控

  实施实时监控和告警机制,及时发现和响应潜在的命令注入攻击。
  在Linux系统中,可以使用auditd监控命令

sudo apt-get install auditd
sudo auditctl -a exit,always -F arch=b64 -S execve

2.5 定期代码审计和安全测试

2.5.1 代码审计

  定期对代码进行安全审计,识别和修复潜在的命令注入漏洞。

2.5.2 安全测试

  定期进行渗透测试和漏洞扫描,确保应用程序的安全性。

2.6 安全教育和培训

  对开发人员进行安全培训,提高他们对命令注入和其他安全威胁的认识。
  在团队中分享安全编码的最佳实践,建立安全编码标准。


http://www.ppmy.cn/ops/56049.html

相关文章

Java基础:爬虫

1.本地爬虫 Pattern:表示正则表达式 Matcher:文本匹配器&#xff0c;作用按照正则表达式的规则去读取字符串&#xff0c;从头开始读取。在大串中去找符合匹配规则的子串。 1.2.获取Pattern对象 通过Pattern p Pattern.compile("正则表达式");获得 1.3.…

如何实现一套键盘鼠标控制两台计算机(Mouse Without Borders快速上手教程)

需求背景 当我们需要同时使用一台主机和一台笔记本的时候&#xff0c;如果使用两套键盘和鼠标分别操作各自的系统&#xff0c;非常地不便捷且非常占据桌面空间。那么如何使用一套键盘鼠标控制两台电脑呢&#xff1f; 需求实现 软件说明 我们可以使用微软官方的一款软件Mous…

QT slots 函数

文章目录 概述小结 概述 在Qt中&#xff0c;slots 是一种特殊的成员函数&#xff0c;它们可以与对象发出的信号连接。当信号被触发时&#xff0c;连接的槽函数会被调用。 来个简单的示例吧&#xff0c;如下图&#xff1a; #include <QObject> #include <QDebug>…

c#中的超时终止

在C#中&#xff0c;可以使用CancellationToken和Task的超时机制来实现调用方法时的超时终止。 一 用Task.Delay(int)模拟耗时操作 static async Task Main(string[] args){using (var cts new CancellationTokenSource(1 * 1000)){await doSomething(cts.Token);}Console.Wr…

mybatis中的标签

在MyBatis中&#xff0c;除了基本的SQL映射功能外&#xff0c;还有许多用于动态SQL构建的标签。这些标签允许我们根据不同的条件和需求构建复杂的SQL语句。主要的动态SQL标签包括<if>, <choose>, <when>, <otherwise>, <trim>, <set>, <…

【matlab 路径规划】基于改进遗传粒子群算法的药店配送路径优化

一 背景介绍 本文分享的是一个基于订单合并的订单分配和路径规划联合优化&#xff0c;主要背景是骑手根据客户需求&#xff0c;从药店取药之后进行配送&#xff0c;配送的过程中考虑路径的长度、客户的服务时间窗、车辆的固定成本等要素&#xff0c;经过建模和优化得到最优的配…

lora/lycoris

Stable Diffusion 训练指南 (LyCORIS) | Coding HuskyStable Diffusion 文字生成图片的教程已经很多了。这篇文章是讲解如何用 Kohya Trainer 在 Google Colab 上训练一个 LyCORIS 模型。在读之前希望你已经至少玩过 Stable Diffusion。https://ericfu.me/stable-diffusion-fin…

IDEA 一键部署Docker

以部署示例服务&#xff08;sevnce-demo&#xff09;为例。 配置服务器 地址、账号、密码根据实际情况填写 配置镜像仓库 地址、账号、密码根据实际情况填写 编写Dockerfile 在sevnce-demo根目录下右键&#xff0c;选择创建Dockerfile。 # 基础镜像 FROM sevnce-registry.c…