SeedLabs Set-UID Programs Problems

. List item

Problems

Problems问答


文章目录


问题记录

P-1 Alice运行由Bob拥有的Set-UID程序。程序试图读取从/tmp/x,这对Alice是可读的,但对其他人不是。这个程序可以成功读取文件?

答:可以,Set-UID让Bob以root身份访问/tmp/x,而root拥有最高权限,所有用户的文件均可被它读写

P-2 进程试图打开一个文件进行读取。进程的有效用户ID是1000,实际用户ID为2000。该文件对用户ID 2000是可读的,但对用户ID 1000不是。可以这进程成功打开文件?

答:实际用户ID为2000,且文件对用户ID2000可读,那么即可成功打开文件,无需关心是不是对ID1000可读

P-3 root拥有的Set UID程序允许普通用户在执行程序。是什么阻止用户使用特权做坏事?

答:最小权限原则,允许普通用户执行的程序,仍然是存在限制的,不是所有程序都可执行,如同手机的定位权限,存储权限,照相权限等,细粒度管理

P-4 1.4. 我们正在尝试将seed用户拥有的程序prog转换为Set UID程序属于root的。运行以下命令可以达到目标吗?

$ sudo chmod 4755 prog
$ sudo chown root prog
答:不可以,因为chown会自动清空设置的Set-UID比特,应该先chown,后chmod设置比特
$ sudo chown root prog
$ sudo chmod 4755 prog

P-5 chown命令自动禁用Set-UID位,当它改变Set-UID程序的所有者,请解释一下为什么会这样?

答:chown命令有时会清除set-user-ID或set-group-ID权限位。这种行为取决于底层系统调用' chown'的
	策略和功能,它可能会在' chown'命令控制之外进行依赖于系统的文件模式修改。
	例如,当具有适当特权的用户调用' chown'命令时,或者当这些位表示一些功能而不是可执行权限(强制锁
	定)时,可能不会影响这些位。当有疑问时,检查底层系统行为。

P-6 当我们调试一个程序时,我们可以在执行过程中改变程序的局部变量。这可以改变程序的行为。我们可以使用这种技术来调试Set-UID程序并改变它的行为吗?例如,如果程序应该打开/tmp/xyz文件,我们可以修改文件名字符串,因此Set-UID程序最终会打开/etc/passwd.

答:如果程序直接拼接了普通用户传入的参数(如:路径)拼接命令未做任何过滤并直接执行,上述方式是可行的
cin<<getParam;
exec("vi " + getParam);

P-7 system()和execve()都可以用来执行外部程序。为什么系统()不安全,而execve()是安全的?

答:system()在使用过程中,如果不对传入参数进行过滤,很容易导致拼接传入的命令,继而执行用户自定义命令。
而execve()是参数化的,传入的命令参数只会被当作一个命令来处理
如:
传入恶意指令getParam=aaa;/bin/bash:
cin<<getParam;
system("vi" +getParam)
最终执行的是两个语句,vi aaa和 /bin/bash
而
cin<<getParam;
execve("vi" +getParam,arg1,0)
最终执行的是一个语句,vi 'aaa;/bin/bash'

P-8 当程序从用户那里接受输入时,我们可以重定向输入设备,这样程序就可以从文件中接受输入。例如,我们可以使用prog < myfile来提供myfile中的数据作为prog程序的输入。现在,如果prog是root用户拥有的Set-UID程序,我们是否可以使用以下方法来获取这个特权程序,以便从/etc/shadow文件中读取?

$ prog < /etc/shadow
答:如果拥有Set-UID的prog程序没有对参数进行校验,直接输出用户传入的文件路径,输出/etc/shadow

P-9 当父Set-UID进程(有效用户ID为root,真实用户ID为bob)使用fork()创建子进程时,父进程的标准输入、输出和错误设备将被子进程继承。如果子进程放弃了它的root权限,它仍然保留对这些设备的访问权限。这似乎是一个功能泄漏,类似于本章所述的功能泄漏案例。这有什么危险吗?

答:会造成权限泄漏。当特权程序打开文件后忘记关闭,此时回到普通身份,文件描述符是仍然有效的,因此这个非特权程序仍然可以修改打开的文件

P-10 超级用户想给Alice使用more命令查看系统中所有文件的权限。他做了以下工作:

$ cp /bin/more /tmp/mymore
$ sudo chown root /tmp/mymore
$ sudo chmod 4700 /tmp/mymore

基本上,上面的命令将/tmp/mymore转换为Set-UID程序。现在,因为权限被设置为4700,其他用户不能执行该程序。超级用户使用另一个命令(现在显示)只将执行权限授予Alice。我们并不是假设Alice是完全被信任的。如果Alice只能读取其他4人的文件,这是可以的,但如果Alice可以获得任何特权,如写入其他人的文件,这是不可以的。请阅读更多程序的手册,找出爱丽丝可以做什么来获得更多的特权。

答:more指令是可以调用vi的,如果more具有set-uid权限,那么调用vi同样具有set-uid权限,vi又可以执行系统命令,所以Alice可直接利用此方式以set-uid权限执行任意系统命令
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值