当前位置: 首页 > news >正文

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安全机制是双刃剑,只有妥善使用才会尽可能安全。

 

 

转载于:https://www.cnblogs.com/fxxg1079120772/p/4474670.html

相关文章:

  • Asp与Asp.Net的区别
  • android host usb
  • Fighting
  • 基于Cocos2d-x学习OpenGL ES 2.0系列——OpenGL ES渲染之Shader准备(7)
  • Swing基础
  • php post
  • poj--1517
  • Midas Civil的钢束生成器
  • 练习写一个工资结算系统
  • linux的各个子系统
  • 域名注冊以及域名解析设置
  • 约瑟夫环实现之非递归
  • 微信公众号-开发者-自定义菜单-CLICK事件处理
  • “我爱淘”冲刺阶段Scrum站立会议6
  • 我们还需要兼容IE样式问题吗?
  • [deviceone开发]-do_Webview的基本示例
  • Android单元测试 - 几个重要问题
  • Angular 4.x 动态创建组件
  • ECMAScript6(0):ES6简明参考手册
  • golang中接口赋值与方法集
  • IOS评论框不贴底(ios12新bug)
  • Java 最常见的 200+ 面试题:面试必备
  • Promise面试题,控制异步流程
  • spring + angular 实现导出excel
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • 创建一个Struts2项目maven 方式
  • 第十八天-企业应用架构模式-基本模式
  • 回顾2016
  • 坑!为什么View.startAnimation不起作用?
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 微信开放平台全网发布【失败】的几点排查方法
  • 一个项目push到多个远程Git仓库
  • 云大使推广中的常见热门问题
  • k8s使用glusterfs实现动态持久化存储
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • %@ page import=%的用法
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (7)STL算法之交换赋值
  • (八十八)VFL语言初步 - 实现布局
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (十)c52学习之旅-定时器实验
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (四)汇编语言——简单程序
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (转)树状数组
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • .form文件_SSM框架文件上传篇
  • .form文件_一篇文章学会文件上传
  • .NET 命令行参数包含应用程序路径吗?
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .net 托管代码与非托管代码
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)