SET-UID程序漏洞实验

一.实验描述

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

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

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

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

 

二.实验内容

   2.1 测试passwd命令需set-uid机制。

    发现复制会导致没有了权限。

同理,测试了sudo也是如此

 

2.2 以root方式登录,拷贝/bin/zsh 到/tmp, 同时设置拷贝到tmp目录下的zsh为set-uid root权限,然后以普通用户登录,运行/tmp/zsh。

普通用户登录则权限不够

2.3 使用另外一种shell程序——/bin/zsh。在一些linux的发行版中(比如Redora和Ubuntu),/bin/sh实际上是/bin/bash的符号链接。为了使用zsh,我们需要把/bin/sh链接到/bin/zsh。

 

2.4 PATH环境变量的设置

首先是创建一个文件 test.c

修改/bin/sh使得其返回到/bin/bash,重复上面的攻击,不可以获得root权限

2.5 sytem()和execve()的不同

file文件只有root用户有读写权限,但普通用户通过运行该程序,阅读并重命名了file文件:

 

2.6 LD_PRELOAD环境变量

把myprog编译成一个普通用户下的程序在普通用户下运行

可见,它会使用LD_PRELOAD环境变量,重载sleep函数:

在这种情况下,不会重载sleep函数:

2.7 消除和清理特权

此过程创建的是一个叫zzz的文件夹,我开始的我时候将其当成文件来创建,出现了错误。

显然我的运行结果出了问题

如图所示文件被修改了,原因在于设置uid前,zzz文件就已经被打开了。

只要将语句setuid(getuid())移至调用open函数之前,就能避免这个问题。(此为实验楼的结果)

多次尝试,未果。今天上了linux后,听了老师的分析,最终实现了结果。

 

三.实验中问题的解决

           1. 在实验中出现了比如为zzz,file等文件,而实验环境中并没有提到到底是什么类型的文件,开始猜测是文件夹,所以使用了mkdir命令。后来发现是目录并不可以,所以调整为基本的文本文件,不加后缀名。并输入选号。方才可以。

    2.命令行中一定要清楚当时所在的路径,以及权限,不然会导致严重的错误。

四.实验体会

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

    通过这次实验,我熟悉了linux命令行下的命令使用,同时发现了一个工具“linux命令大全”,这款百度应用非常实用。我还了解了unix的这种Set-UID安全机制是双刃剑,只有妥善使用才会尽可能安全。

 

 

posted @ 2015-05-03 20:52  xiangguo2012  阅读(185)  评论(0编辑  收藏  举报