Nebula challenge 01

题目:下列代码存在任意程序执行漏洞,用户level01需要提权到flag01

#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <stdio.h>

int main(int argc, char **argv, char **envp)
{
  gid_t gid;
  uid_t uid;
  gid = getegid();
  uid = geteuid();

  setresgid(gid, gid, gid);
  setresuid(uid, uid, uid);

  system("/usr/bin/env echo and now what?");

 首先看一下flag01这个程序的权限:find / --name flag01 2>dev/null

拥有者是flag01,并且设置了suid位,也就是说level01在执行时可以具有flag01的权限,但这个是暂时的,程序结束之后还会返回level01

程序使用了system函数执行指定的shell命令,system执行的/usr/bin/env命令,但是system的参数是固定的,也就是我们无法控制system的参数。但这里它执行了env,通过env找到echo程序,”and now what”是传递给echo的参数,所以只要控制echo函数的位置的内容和位置便可以永久获取一个shell,达到提权的目的。
 
/tmp目录对任何用户都是有完整的权限,即所有的用户都是rwx权限,查看:ls -al /tmp
 
所以,利用思路是:先把 /tmp 路径加入 $PATH 环境变量中,然后在 /tmp 目录下写入包含 system("/bin/bash"); 指令的文件,进行编译并将可执行文件命名为 echo,最后再执行 flag01 程序,该程序会先在 /tmp 目录下查找可用的 echo ,并且执行,即可得到flag01权限。
 
修改 $PATH :

getshell.c:

 

执行命令: gcc -o echo getshell.c,再执行 ./flag01 文件就可以得到shell

 

 

 

 

 

 

转载于:https://www.cnblogs.com/iamgroot/p/9305931.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值