《Linux内核原理与设计》第十一周作业 ShellShock攻击实验
《Linux内核原理与设计》第十一周作业 ShellShock攻击实验
分组: 和20179215袁琳完成实验及博客攥写
实验内容:
Bash中发现了一个严重漏洞shellshock,该漏洞可用于许多系统,既可以远程也可以在本地触发,本实验通过重现攻击来理解改漏洞。
实验操作:
什么是ShellShock?
Shellshock,又称Bashdoor,是在Unix中广泛使用的Bash shell中的一个安全漏洞,首次于2014年9月24日公开。许多互联网守护进程,如网页服务器,使用bash来处理某些命令,从而允许攻击者在易受攻击的Bash版本上执行任意代码。这可使攻击者在未授权的情况下访问计算机系统。
首先,我们来搭建这个环境:
下载:
sudo su
$ wget http://labfile.oss.aliyuncs.com/bash-4.1.tar.gz
安装:
$ tar xf bash-4.1.tar.gz
$ cd bash-4.1
$ ./configure
$ make & make install
链接:
$ rm /bin/bash
$ ln -s /usr/local/bin/bash /bin/bash
到这里就安装完成了,接下来检测是否存在shellshock漏洞,看到输出vulnerable,说明bash有漏洞:
最后,让/bin/sh指向/bin/bash,这里的/bin/sh是/bin/bash的符号。了解bash自定义函数,只需要函数名就能够调用该函数。
此时我们来看看ShellShock漏洞的真身:
调用bash,会输出Hello World, 为什么会出现这样的情况呢?bash读取了环境变量,在定义foo之后直接调用了后面的函数。一旦调用bash,自定义的语句就直接触发。
攻击set-uid程序:
Set-UID 是Unix系统中的一个重要的安全机制。当一个Set-UID程序运行的时候,它被假设为具有拥有者的权限。如果程序的拥有者是root,那么任何人运行这个程序时都会获得程序拥有者的权限。Set-UID允许我们做许多很有趣的事情,但是不幸的是,它也是很多坏事情的罪魁祸首。
参考Set-UID程序漏洞实验,我们来熟悉一下Set-UID程序:
“passwd”,“chsh”,“su”,和“sudo”命令需要Set-UID机制,如果它们没有这些机制的话,会发生什么,如果你不熟悉这些程序,你可以通话阅读使用手册来熟悉它,如果你拷贝这些命令到自己的目录下,这些程序就不会是Set-UID程序,运行这些拷贝的程序,观察将会发生什么。
从上面的运行结果可以看出:拷贝到/home/seed下的passwd程序,没有了root权限,这样就没有了修改密码的权限。如下图:
在linux环境下运行Set-UID 程序,同时描述并且解释你的观察结果
1、以root方式登录,拷贝/bin/zsh 到/tmp, 同时设置拷贝到tmp目录下的zsh为set-uid root权限,然后以普通用户登录,运行/tmp/zsh。发现可以获得root权限:
2、代替拷贝/bin/zsh到tmp目录,这次拷贝/bin/bash到/tmp目录,同时设置/tmp目录下的bash为Set-UID root权限,然后以普通用户登录,运行/tmp/bash。发现此时无法获得root权限,这是因为/bin/bash有某种内在的保护机制可以阻止Set-UID机制的滥用:
现在我们回到本实验中,我们通过攻击Set-UID程序来获得root权限。首先,确保安装了带有漏洞的bash版本,并让/bin/sh 指向/bin/bash。hack过程如下:
在shock.c文件中编写代码,代码如下:
执行一下,结果攻击成功:
现在我们重复上述步骤,先建一个shock1.c文件,并在shock1文件中,把setuid(geteuid())去掉,shock1.c文件代码如下:
再次执行,结果发现,攻击失败:
对比两次攻击结果,思考是什么导致的攻击结果的改变呢?我们查看一下代码,就是上述那一行判断逻辑导致了两者的不同,primode即私有模式,要求real uid 与 effective uid保持一致。在shock.c文件中,代码setuid(geteuid())就是使real uid=effective uid,两者保持一致,则g;攻击成功。shock1.c中,修改代码,把setuid(geteuid())一行去掉,则不能保持real uid 与 effective uid的一致,因此攻击失败。
《Linux内核原理与设计》第十一周作业 ShellShock攻击实验的更多相关文章
- 2017-2018-1 20179205《Linux内核原理与设计》第九周作业
<Linux内核原理与设计>第九周作业 视频学习及代码分析 一.进程调度时机与进程的切换 不同类型的进程有不同的调度需求,第一种分类:I/O-bound 会频繁的进程I/O,通常会花费很多 ...
- 2017-2018-1 20179205《Linux内核原理与设计》第二周作业
<Linux内核原理与分析>第二周作业 本周视频学习情况: 通过孟老师的视频教程,大致对风诺依曼体系结构有了一个初步的认识,视频从硬件角度和程序员角度对CPU和Main Memory(内存 ...
- 20169210《Linux内核原理与分析》第二周作业
<Linux内核原理与分析>第二周作业 本周作业分为两部分:第一部分为观看学习视频并完成实验楼实验一:第二部分为看<Linux内核设计与实现>1.2.18章并安装配置内核. 第 ...
- 20169212《Linux内核原理与分析》第二周作业
<Linux内核原理与分析>第二周作业 这一周学习了MOOCLinux内核分析的第一讲,计算机是如何工作的?由于本科对相关知识的不熟悉,所以感觉有的知识理解起来了有一定的难度,不过多查查资 ...
- 2018-2019-1 20189221 《Linux内核原理与分析》第九周作业
2018-2019-1 20189221 <Linux内核原理与分析>第九周作业 实验八 理理解进程调度时机跟踪分析进程调度与进程切换的过程 进程调度 进度调度时机: 1.中断处理过程(包 ...
- 2017-2018-1 20179215《Linux内核原理与分析》第二周作业
20179215<Linux内核原理与分析>第二周作业 这一周主要了解了计算机是如何工作的,包括现在存储程序计算机的工作模型.X86汇编指令包括几种内存地址的寻址方式和push.pop.c ...
- 2019-2020-1 20199329《Linux内核原理与分析》第九周作业
<Linux内核原理与分析>第九周作业 一.本周内容概述: 阐释linux操作系统的整体构架 理解linux系统的一般执行过程和进程调度的时机 理解linux系统的中断和进程上下文切换 二 ...
- 2019-2020-1 20199329《Linux内核原理与分析》第二周作业
<Linux内核原理与分析>第二周作业 一.上周问题总结: 未能及时整理笔记 Linux还需要多用 markdown格式不熟练 发布博客时间超过规定期限 二.本周学习内容: <庖丁解 ...
- 2019-2020-1 20209313《Linux内核原理与分析》第二周作业
2019-2020-1 20209313<Linux内核原理与分析>第二周作业 零.总结 阐明自己对"计算机是如何工作的"理解. 一.myod 步骤 复习c文件处理内容 ...
随机推荐
- Qt编码设置
1.Qt Creator -> 工具 -> 选项 -> 环境 - >概要 -> 语言 Qt Creator本身界面的语言选择,与cpp文件编码无关,与可执行文件显示 ...
- Codeforces633H-Fibonacci-ish II
题目 斐波那契数列\(f\),\(f\_1=f\_2=1,\ f\_n=f\_{n-1}+f\_{n-2}\ (n>2)\). 给定长度为\(n\ (n\le 30000)\)的数列\(a\), ...
- c/c++中的关键字(static、const、inline、friend)
static:1.a.c语言中static修饰的局部变量在编译时赋初始值,只赋初始值一次,在函数运行时已有初值,每次调用函数时不用重新赋值,指示保留上次 函 数调用结束时的值. 如果定义局部变量不赋初 ...
- Codeforces Round#516 Div.1 翻车记
A:开场懵逼.然后发现有人1min过,于是就sort了一下,于是就过了.正经证明的话,考虑回文串两端点一定是相同的,所以最多有Σcnti*(cnti+1)/2个,cnti为第i种字母出现次数.而sor ...
- BZOJ4260 Codechef REBXOR(trie)
用trie求出前缀最大区间异或和.后缀最大区间异或和即可.注意空间是nlog的. #include<iostream> #include<cstdio> #include< ...
- (转)超详细单机版搭建hadoop环境图文解析
超详细单机版搭建hadoop环境图文解析 安装过程: 一.安装Linux操作系统 二.在Ubuntu下创建hadoop用户组和用户 三.在Ubuntu下安装 ...
- Android Bitmap和Drawable互转及使用BitmapFactory解析图片流
一.Bitmap转Drawable Bitmap bmp=xxx; BitmapDrawable bd=new BitmapDrawable(bmp); 因为BtimapDrawable是Drawab ...
- HUD.2544 最短路 (Dijkstra)
HUD.2544 最短路 (Dijkstra) 题意分析 1表示起点,n表示起点(或者颠倒过来也可以) 建立无向图 从n或者1跑dij即可. 代码总览 #include <bits/stdc++ ...
- Spring源码解析-JdbcTemplate
JdbcTemplate类图 从类继承关系上来看,JdbcTemplate继承了基类JdbcAccessor和接口类JdbcOperation,在基类JdbcAccessor的设计中,对DataSou ...
- [iptables]iptables 添加log到syslog
比如iptables本来有这么一条: -A PREROUTING -d 125.65.27.xxx/32 -p tcp -m tcp --dport 11060 -j DNAT --to-destin ...