🌟🌌 欢迎来到知识与创意的殿堂 — 远见阁小民的世界!🚀
🌟🧭 在这里,我们一起探索技术的奥秘,一起在知识的海洋中遨游。
🌟🧭 在这里,每个错误都是成长的阶梯,每条建议都是前进的动力。
🌟🧭 在这里,我们一起成长,一起进步,让我们在知识的世界里畅游无阻,共同创造一个充满智慧和创新的明天。
🌟📚 点击关注,加入我们的技术探索之旅吧!❤️📖✨
✨博客主页:远见阁小民的主页
📕本文专栏: 白帽学徒笔记
📕其他专栏:后端专栏 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 安全教育和培训
对开发人员进行安全培训,提高他们对命令注入和其他安全威胁的认识。
在团队中分享安全编码的最佳实践,建立安全编码标准。