实验简介:

Set-UID 是 Unix 系统中的一个重要的安全机制。当一个 Set-UID 程序运行的时候,它被假设为具有拥有者的权限。例如,如果程序的拥有者是root,那么任何人运行这个程序时都会获得程序拥有者的权限。Set-UID 允许我们做许多很有趣的事情,但不幸的是,它也是很多坏事情的罪魁祸首。

因此本次实验的目标有两点:

欣赏好的方面,理解为什么 Set-UID 是需要的,以及它是如何被执行的。

注意坏的方面,理解它潜在的安全性问题。


$ cp /usr/bin/passwd /tmp/passwd
$ ls -la /usr/bin/passwd
$ ls -la /tmp/passwd
$ /tmp/passwd #shiyanlou密码可以通过点击右侧工具栏SSH直连看到
$ /usr/bin/passwd

将passwd拷贝过去,会发现权限发生了改变,复件没有修改密码的权限

$ ls -l

-rw-rw-r-- 1 shiyanlou shiyanlou 10 Apr 23 13:33 append_text 《--VULP输入文件

-rw-rw-r-- 1 root root 0 Apr 23 13:32 root_file 《--目标文件

-rw-rw-r-- 1 shiyanlou shiyanlou 0 Apr 23 13:45 tmp_file 《--助攻

-rwsr-xr-x 1 root root 7403 Apr 23 13:27 vulp 《--漏洞文件

-rw-r--r-- 1 root root 454 Apr 23 13:27 vulp.c

sudo gcc vulp.c -o vulp
sudo chmod u+s vulp
sudo touch root_file
sudo chmod g+w root_file
vi append_text
touch tmp_file
sudo chmod u+x check.sh
gcc attacker.c -o attacker

check.sh

#!/bin/sh
#注意`不是单引号
old=`ls -l /home/shiyanlou/seed/root_file`
new=`ls -l /home/shiyanlou/seed/root_file`
while [ "$old" = "$new" ]
do
./vulp < append_text
new=`ls -l /home/shiyanlou/seed/root_file`
done
echo "STOP... The file has been changed"

$ ls -l

total 32

-rw-rw-r-- 1 shiyanlou shiyanlou 10 Apr 23 13:33 append_text

-rwxrwxr-x 1 shiyanlou shiyanlou 7164 Apr 23 14:01 attacker

-rw-rw-r-- 1 shiyanlou shiyanlou 155 Apr 23 14:00 attacker.c

-rwxrw-r-- 1 shiyanlou shiyanlou 246 Apr 23 13:58 check.sh

-rw-rw-r-- 1 root root 0 Apr 23 13:32 root_file

-rw-rw-r-- 1 shiyanlou shiyanlou 0 Apr 23 13:45 tmp_file

-rwsr-xr-x 1 root root 7403 Apr 23 13:27 vulp

-rw-r--r-- 1 root root 454 Apr 23 13:27 vulp.c

先运行attacker再运行check.sh

从上面步骤可以看出,/bin/bash有某种内在的保护机制可以阻止Set-UID机制的滥用。为了能够体验这种内在的保护机制出现之前的情形,我们打算使用另外一种shell程序——/bin/zsh。在一些linux的发行版中(比如Fedora和Ubuntu),/bin/sh实际上是/bin/bash的符号链接。为了使用zsh,我们需要把/bin/sh链接到/bin/zsh。

总结:

SET-UID程序的漏洞,主要集中在,通过利用root的权限,更改自身程序权限,能够获取相应的程序功能,SET-UID程序主要是在paswwd,chsh,su等这些重要命令当中当作一个检测的手段,能够避免一些问题。

2019-2020-1 20199325《Linux内核原理与分析》第十一周作业的更多相关文章

  1. 2019-2020-1 20199329《Linux内核原理与分析》第九周作业

    <Linux内核原理与分析>第九周作业 一.本周内容概述: 阐释linux操作系统的整体构架 理解linux系统的一般执行过程和进程调度的时机 理解linux系统的中断和进程上下文切换 二 ...

  2. 2019-2020-1 20199329《Linux内核原理与分析》第二周作业

    <Linux内核原理与分析>第二周作业 一.上周问题总结: 未能及时整理笔记 Linux还需要多用 markdown格式不熟练 发布博客时间超过规定期限 二.本周学习内容: <庖丁解 ...

  3. 20169212《Linux内核原理与分析》第二周作业

    <Linux内核原理与分析>第二周作业 这一周学习了MOOCLinux内核分析的第一讲,计算机是如何工作的?由于本科对相关知识的不熟悉,所以感觉有的知识理解起来了有一定的难度,不过多查查资 ...

  4. 20169210《Linux内核原理与分析》第二周作业

    <Linux内核原理与分析>第二周作业 本周作业分为两部分:第一部分为观看学习视频并完成实验楼实验一:第二部分为看<Linux内核设计与实现>1.2.18章并安装配置内核. 第 ...

  5. 2018-2019-1 20189221 《Linux内核原理与分析》第九周作业

    2018-2019-1 20189221 <Linux内核原理与分析>第九周作业 实验八 理理解进程调度时机跟踪分析进程调度与进程切换的过程 进程调度 进度调度时机: 1.中断处理过程(包 ...

  6. 2017-2018-1 20179215《Linux内核原理与分析》第二周作业

    20179215<Linux内核原理与分析>第二周作业 这一周主要了解了计算机是如何工作的,包括现在存储程序计算机的工作模型.X86汇编指令包括几种内存地址的寻址方式和push.pop.c ...

  7. 2019-2020-1 20209313《Linux内核原理与分析》第二周作业

    2019-2020-1 20209313<Linux内核原理与分析>第二周作业 零.总结 阐明自己对"计算机是如何工作的"理解. 一.myod 步骤 复习c文件处理内容 ...

  8. 2018-2019-1 20189221《Linux内核原理与分析》第一周作业

    Linux内核原理与分析 - 第一周作业 实验1 Linux系统简介 Linux历史 1991 年 10 月,Linus Torvalds想在自己的电脑上运行UNIX,可是 UNIX 的商业版本非常昂 ...

  9. 《Linux内核原理与分析》第一周作业 20189210

    实验一 Linux系统简介 这一节主要学习了Linux的历史,Linux有关的重要人物以及学习Linux的方法,Linux和Windows的区别.其中学到了LInux中的应用程序大都为开源自由的软件, ...

  10. 2018-2019-1 20189221《Linux内核原理与分析》第二周作业

    读书报告 <庖丁解牛Linux内核分析> 第 1 章 计算工作原理 1.1 存储程序计算机工作模型 1.2 x86-32汇编基础 1.3汇编一个简单的C语言程序并分析其汇编指令执行过程 因 ...

随机推荐

  1. [noip模拟]改造二叉树<LIS>

    1.改造二叉树 [题目描述] 小Y在学树论时看到了有关二叉树的介绍:在计算机科学中,二叉树是每个结点最多有两个子结点的有序树.通常子结点被称作“左孩子”和“右孩子”.二叉树被用作二叉搜索树和二叉堆.随 ...

  2. list容器排除重复单词的程序

    #include<iostream> #include<fstream> #include<string> #include<algorithm> #i ...

  3. python学习笔记--字符串格式化

    字符串和常量 print(r'hello\py\thon') r 代表后面字符不进行转义,原样输出; 表示常量,命名时变量名字大写代表常量.NAME = 'liulixue'; 字符串表示:' ', ...

  4. php设计模式总结

    #1 使用设计模式(如建造者.外观.原型和模板模式)更快速.更有效地创建对象 #2 使用数据访问对象和代理设计模式分离体系结构 #3 使用委托.工厂和单元素设计模式改善代码流和控制 #4 在不修改对象 ...

  5. 深度解析Java中的5个“黑魔法”

    现在的编程语言越来越复杂,尽管有大量的文档和书籍,这些学习资料仍然只能描述编程语言的冰山一角.而这些编程语言中的很多功能,可能被永远隐藏在黑暗角落.本文将为你解释其中5个Java中隐藏的秘密,可以称其 ...

  6. python--匿名函数、文件操作

    一.匿名函数 语法: sum = lambda arg1, arg2: arg1 + arg2 #调用sum函数 print "Value of total : ", sum( 1 ...

  7. flask-script的基本使用

    Flask-Script flask-script的作用是可以通过命令行的形式来操作Flask.例如通过命令跑一个开发的服务器.设置数据库等. 命令的添加方式 1 .使用manage.command: ...

  8. 【Selenium02篇】python+selenium实现Web自动化:鼠标操作和键盘操作!

    一.前言 最近问我自动化的人确实有点多,个人突发奇想:想从0开始讲解python+selenium实现Web自动化测试,请关注博客持续更新! 这是python+selenium实现Web自动化第二篇博 ...

  9. go1.13errors的用法

    go1.13errors的用法 前言 基本用法 fmt.Errorf Unwrap errors.Is As 扩展 参考 go1.13errors的用法 前言 go 1.13发布了error的一些新的 ...

  10. getline()和get()的使用区别

    一.getline和get()的使用区别: 首先这两个函数都读取下一行输入,直到到达换行符:但是getline()函数会丢弃换行符,而get()将换行符保留在输入序列中 二.getline()函数的使 ...