Need to hack my own machine ! Help !

"Alexandre Jousset@NL" <[email protected]>
Newsgroups gmane.comp.lang.perl.fun
Message-ID <[email protected]>
	Hi...

	I have a problem... I'm using RH7.1 and for some reason I don't know, 
after upgrading some packages (including sshd) and restarting sshd, this 
one do not work anymore... The problem is that I'm not at my home and I 
don't have the access to the console...

	So I investigated what could be done to have root access to my box (of 
course this is *really* my box, I have the root password) and I found 
that one of my Mason scripts has a hole in it because Mason do not run 
in tainted perl mode. So I have access to a ftp user on my box 
(anonymous is disabled) so I can upload a script in /tmp, I can run it 
with a tweaked URL on my web server and of course it runs under the 
apache user... I use it to launch a server on a high port number and I 
want to be able to launch commands like 'su' to enter my password, have 
root access and correct the problem.

	Here (below) is the script I use but I cannot manage to have it work 
well. I surely have something wrong but I don't know what. I use a 
specified pty that I know is not in use to avoir pty search and you can 
also note that I have not the IO::Pty module installed. Installing it 
from user apache did not succeed (I used CPAN module to try). The 
problem is that I progress very slowly because each time I have to enter 
a tweaked URL, redirect it to a file in /tmp and download it by ftp to 
see the result.

	The problem with the script is that I can enter commands, execute them, 
but I don't see the result. The result is sent to normal STDOUT so it is 
redirected in /tmp by the tweaked URL. Also, when I send 'su' (blindly) 
and enter the password, it says (again, in /tmp/x) that the password is 
wrong. In the file in /tmp I see 'Password:' (output of su), the good 
password I entered followed by a ^M, 2 blank lines and 'su: incorrect 
password' (again output of su)...

	Can you help me please ?

	Here is the script I use (I made it from several scripts discovered on 
the net, none of them is what I need) :

----------------------------------------------------------------------
#!/usr/bin/perl -w
use IO::Socket;
use Net::hostent;		# for OO version of gethostbyaddr
use POSIX;

$PORT = 9009;

$server = IO::Socket::INET->new( Proto     => 'tcp',
                                  LocalPort => $PORT,
                                  Listen    => SOMAXCONN,
                                  Reuse     => 1);

die "can't setup server" unless $server;
print "[Server $0 accepting clients]\n";

open(${master}, "/dev/ptycd") or die "can't open /dev/ptycd: $!";
fcntl(${master}, F_SETFL(), O_NONBLOCK());
open(SLAVE, "/dev/ttycd") or die "can't open /dev/ttycd: $!";

while ($client = $server->accept()) {
     $client->autoflush(1);
     print $client "Welcome to $0; type help for command list.\n";
     $hostinfo = gethostbyaddr($client->peeraddr);
     printf "[Connect from %s]\n", $hostinfo->name || $client->peerhost;
     print $client "Command? ";
     while (<$client>) {
         next unless /\S/;	     # blank line
         if    (/quit|exit/i)    { last; }
         elsif (/bye/i)          { exit(0);  }
         else {
	    my $pid = fork;
	    die "can't fork: $!" unless defined $pid;
	    if ($pid == 0) {
		open(STDIN, '<&'.fileno(SLAVE));
		open(STDOUT, '>&'.fileno(SLAVE));
		open(STERR, '>&'.fileno(SLAVE));
		exec($_);
		exit(0);
	    } else {
		local ($|) = (1);
		open(STDIN, '<&'.fileno(${master}));
		open(STDOUT, '>&'.fileno(${master}));
		open(STERR, '>&'.fileno(${master}));
		while(1) {
		    print $client ":";
		    $_ = <$client>;
		    last if /exit/;
		    print $client "Sending [$_]";
		    print $_;
		    sleep(1);
		    my $buf;
		    while (my $rd = sysread(STDIN, $buf, 1024)) {
			print ${client} $buf;
		    }
		}
	    }
         }
     } continue {
         print $client "Command? ";
     }
     close $client;
}
-------------------------------------------------------------

	I hope you can help me because I will go back home (in Paris) only when 
I will have a job interview. For the moment I am at my sister's in 
Almere, near Amsterdam. I am searching for an entire day without success 
and I hope you will be able to help me.

	Bye and thank you in advance !

Alexandre Jousset.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.