当前位置:网站首页>Environment_Variable_and_SetUID
Environment_Variable_and_SetUID
2022-07-31 06:26:00 【专注web0年】
准备
User ID: seed, Password: dees
User ID: root, Password: seedubuntu
下载实验文件
实验任务
任务1
控制环境变量
env

按顺序执行下面命令
env | grep PWD
unset PWD
env | grep PWD
export PWD=sdajf
env | grep PWD
export MY_ENV=myenv
env | grep MY_ENV

任务2
编译程序
gcc myprintenv.c
运行程序,并将结果输出到file里面
a.out > file1
注释case 0里面的printenv(),取消注释下面的printenv()
编译程序
gcc myprintenv.c
运行程序,并将结果输出到file里面
a.out > file2
用命令diff比较
diff file1 file2

无输出,说明父进程和子进程环境变量一样
任务3
编译myenv.c,查看输出,发现没有
将execve()更改为下面内容
execve("/usr/bin/env", argv, environ);
输出了环境变量
新程序通过传参,得到环境变量并输出
任务4
创建verify.c文件
#include <stdio.h>
#include <stdlib.h>
int main()
{
system("/usr/bin/env");
return 0 ;
}
编译并输出
任务5
创建task5.c文件
touch task5.c
写入内容如下
#include <stdio.h>
#include <stdlib.h>
extern char **environ;
int main()
{
int i = 0;
while (environ[i] != NULL) {
printf("%s\n", environ[i]);
i++;
}
}
编译并设置权限
gcc -o foo task5.c
sudo chown root foo
sudo chmod 4755 foo
修改环境变量
查看程序的环境变量是否被修改
发现LD_LIBRARY_PATH没有被修改,这个是因为动态链接器的保护
有效ID和真实ID不一样时,动态链接器会忽略LD_LIBRARY_PATH的值
任务6
注意使用pwd获得当前路径
再把当前路径加到PATH环境变量中
链接到zsh后,获得root权限
任务7
完成准备工作
用seed用户执行,执行了我们写的sleep()
将其设置为Set-UID root程序,执行原本的sleep()
用root执行,执行了我们写的sleep()
root的密码应该是seedubuntu,但是不对,所以我用sudo su root获得root
将其设置为Set-UID user1程序,用seed用户执行,执行原本的sleep()

第一,euid和uid都为seed,LD_PRELOAD 环境变量没有被忽略,所以链接的是 libmylib.so.1.0.1,执行我们写的sleep()
第二个,euid为root,uid为seed,不相同,受动态链接器保护,执行正常的sleep()
第三个,euid 等于uid,均为 root
第四个,euid为uer1,uid为seed,不相同
任务8
第一步
利用漏洞删除没有权限删除的文件
创建没权限删除的文件
进行攻击,成功删除文件

第二步
按要求更改源代码
重复上一步
攻击失败,因为把system()换成了execve(),前者会把数据当成命令执行,后者不会。execve()接收的数据就是参数,不会当成代码执行
任务9
创建漏洞程序需要打开的文件
执行漏洞程序
因为漏洞程序打开文件后没有关闭,并且泄露了文件描述符。我们可以控制这个文件
边栏推荐
- 熟悉而陌生的新朋友——IAsyncDisposable
- 【面试:并发篇38:多线程:线程池】ThreadPoolExecutor类的基本概念
- 360 push-360 push tool-360 batch push tool
- bcos简介及自序
- 【解决】npm ERR A complete log of this run can be found in npm ERR
- Install the gstreamer development dependency library to the project sysroot directory
- 庐山谣寄卢侍御虚舟
- Bulk free text translation
- Log4net 思维导图
- 文件 - 04 下载文件: 根据文件下载链接下载文件
猜你喜欢

电脑开机密码怎么设置?如何给你的电脑加上“安全锁”

双倍数据速率同步动态随机存储器(Double Data Rate Synchronous Dynamic Random Access Memory, DDR SDRAM)- 逻辑描述部分

超级详细的mysql数据库安装指南

Redux state management

熟悉而陌生的新朋友——IAsyncDisposable

【 TA - frost Wolf _may - "one hundred plan" 】 art 2.3 hard surface

【解决】npm ERR A complete log of this run can be found in npm ERR

Conditional statements of shell (test, if, case)

【Go语言入门教程】Go语言简介

基于交替迭代法的交直流混合系统潮流计算matlab程序iEEE9节点系统算例
随机推荐
嵌入式系统驱动初级【2】——内核模块下_参数和依赖
2022.07.14_Daily Question
postgresql源码学习(33)—— 事务日志⑨ - 从insert记录看日志写入整体流程
How to set the computer password?How to add "safety lock" to your computer
2022.07.24_每日一题
毫米波技术基础
基金投顾业务
【网络攻防】常见的网络攻防技术——黑客攻防(通俗易懂版)
2022.07.20_每日一题
LeetCode brush # 376 # Medium - swing sequence
2022.07.13_Daily Question
项目 - 如何根据最近30天、最近14天、最近7天、最近24小时、自定义时间范围查询MySQL中的数据?
Run the NPM will pop up to ask "how are you going to open this file?"
2022.07.29_Daily Question
【科普向】5G核心网架构和关键技术
【 TA - frost Wolf _may - "one hundred plan" 】 art 2.3 hard surface
剑指offer(一)
【C语言项目合集】这十个入门必备练手项目,让C语言对你来说不再难学!
Leetcode952. Calculate maximum component size by common factor
科普 | “大姨太”ETH 和 “小姨太”ETC的爱恨情仇