2020-2021-1 20209324《Linux内核原理与分析》第十二周作业
《linux内核原理与分析》第十二周作业
这个作业属于哪个课程 | 2020-2021-1 Linux内核原理与分析 |
这个作业要求在哪里 | 2020-2021-1Linux内核原理与分析第十二周作业 |
这个作业的目标 | 完成安全实验 |
作业正文 | 本博客链接 |
1.没有Set-UID机制的情况
把某些命令拷贝到自己的目录下,发现它们不是Set-UID程序
2.运行Set-UID程序
以 root 方式登录,拷贝 /usr/bin/zsh 到 /tmp, 同时设置拷贝到 tmp 目录下的 zsh 为 set-uid root 权限,然后以普通用户登录,运行 /tmp/zsh
再拷贝 /bin/bash 到 /tmp 目录,同时设置 /tmp 目录下的 bash 为 Set-UID root 权限,然后以普通用户登录,运行 /tmp/bash
3.Bash的内在保护机制
4.PATH环境变量的设置
可以具有 root 权限,把 /bin/sh 拷贝到 /tmp 目录下面重命名为 ls(先要确保 /bin/ 目录下的 sh 符号链接到 zsh,而不是 bash),将环境变量 PATH 设置为当前目录 /tmp,运行编译的程序 test
先恢复环境变量 PATH ,然后修改 /bin/sh 使得其返回到 /bin/bash,重复上面的攻击
5.system() 和 execve() 的不同
'''
include <string.h>
include <stdio.h>
include <stdlib.h>
int main(int argc, char *argv[])
{
char *v[3];
if(argc < 2)
{
printf("Please type a file name.\n");
return 1;
}
v[0] = "/bin/cat"; v[1] = argv[1]; v[2] = 0;
//Set q = 0 for Question a, and q = 1 for Question b
int q = 0;
if (q == 0)
{
char *command = malloc(strlen(v[0]) + strlen(v[1]) + 2);
sprintf(command, "%s %s", v[0], v[1]);
system(command);
}
else execve(v[0], v, 0);
return 0 ;
}
'''
分别令函数中的q=0和q=1来编译运行程序