!c99Shell v. 1.0 pre-release build #16!

Software: Apache/2.2.3 (CentOS). PHP/5.1.6 

uname -a: Linux mx-ll-110-164-51-230.static.3bb.co.th 2.6.18-194.el5PAE #1 SMP Fri Apr 2 15:37:44
EDT 2010 i686
 

uid=48(apache) gid=48(apache) groups=48(apache) 

Safe-mode: OFF (not secure)

/usr/libexec/webmin/lpadmin/   drwxr-xr-x
Free 50.94 GB of 127.8 GB (39.86%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     unixware-lib.pl (7.81 KB)      -rwxr-xr-x
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
# unixware-lib.pl
# Functions for UnixWare style printer management

$default_interface = "/usr/lib/lp/model/standard";

# list_printers()
# Returns an array of known printer names
sub list_printers
{
local(@rv, $_);
open(STAT, "lpstat -p |");
while(<STAT>) {
    if (/^printer\s+(\S+)/) { push(@rv, $1); }
    }
close(STAT);
return &unique(@rv);
}

# get_printer(name, [nostatus])
# Returns a reference to an associative array of printer details
sub get_printer
{
local($stat, @rv, $body, $avl, $con, $sys, %prn, @jobs, $_, $out);
local $esc = quotemeta($_[0]);
$out = `lpstat -l -p $esc`;
if ($out =~ /^printer\s+(\S+)\s*(.*)\s+(enabled|disabled)\s+since\s+([^\.]*)\.\s+(.*)\.\n([\000-\377]*)$/) {
    # printer exists
    $prn{'name'} = $1;
    $prn{'enabled'} = $3 eq "enabled";
    $body = $6;
    }
elsif ($out =~ /^printer\s+(\S+)\s+waiting for auto-retry.\s+(\S+)\.\n([\000-\377]*)$/) {
    # printer has some problem
    $prn{'name'} = $1;
    $prn{'enabled'} = 1;
    $body = $3;
    }
else {
    # no printer found
    return undef;
    }
if (!$prn{'enabled'} && $body =~ /^\s+(.*)/) {
    $prn{'enabled_why'} = $1 eq "unknown reason" ? "" : $1;
    }
if ($body =~ /Description: (.*)/) { $prn{'desc'} = $1; }
if ($body =~ /Printer types: (.*)/) { $prn{'ptype'} = $1; }
if ($body =~ /Interface: (.*)/) { $prn{'iface'} = $1; }
if ($body =~ /Banner not required/) { $prn{'banner'} = 0; }
else { $prn{'banner'} = 1; }
if ($body =~ /Content types: (.*)/) { $prn{'ctype'} = [ split(/[ ,]+/, $1) ]; }
if ($body =~ /Users (allowed|denied):\n((\s+\S+\n)+)/) {
    local(@l);
    @l = grep { $_ } split(/\s+/, $2);
    if ($1 eq "allowed") {
        if ($l[0] eq "(all)") { $prn{'allow_all'} = 1; }
        elsif ($l[0] eq "(none)") { $prn{'deny_all'} = 1; }
        else { $prn{'allow'} = \@l; }
        }
    else { $prn{'deny'} = \@l; }
    }

if (!$_[1]) {
    # request availability
    $avl = `lpstat -a $esc 2>&1`;
    if ($avl =~ /^\S+\s+not accepting.*\n\s+(.*)/) {
        $prn{'accepting'} = 0;
        $prn{'accepting_why'} = $1;
        if ($prn{'accepting_why'} eq "unknown reason") {
            $prn{'accepting_why'} = "";
            }
        }
    else { $prn{'accepting'} = 1; }
    }

# request connection
$con = `lpstat -v $esc 2>&1`;
if ($con =~ /^device for \S+:\s+(\S+)/) { $prn{'dev'} = $1; }
elsif ($con =~ /^system for \S+:\s+(\S+)\s+\(as printer (\S+)\)/) {
    $prn{'rhost'} = $1;
    $prn{'rqueue'} = $2;
    $sys = `lpsystem -l $prn{'rhost'} 2>&1`;
    $sys =~ /Type:\s+(\S+)/; $prn{'rtype'} = $1;
    }

# Check if this is the default printer
`lpstat -d 2>&1` =~ /destination: (\S+)/;
if ($1 eq $prn{'name'}) { $prn{'default'} = 1; }

return \%prn;
}

sub get_jobs
{
local @jobs;

# Get used lang
local $lang = $gconfig{'lang'};

# Added 'env LANG=$lang'
local $esc = quotemeta($_[0]);
open(STAT, "env LANG=$lang lpstat -o $esc |");
while(<STAT>) {
# original line which does not work
#    if (/^(\S+-\d+)\s+(\S+)\s+(\d+)\s+(\S+ \d+ \d+:\d+)\s+(.*)/) {
#

# lang=es
  if ( $lang eq 'es' ) {
    if (/^(\S+-\d+)\s+(\S+)\s+(\d+)\s+(\S+ \d+ \S+ \S+ \d+ \d+:\d+:\d+)\s+(.*)/) {
        local(%job);
        $job{'id'} = $1;
        $job{'user'} = $2;
        $job{'size'} = $3;
        $job{'when'} = $4;
        $job{'printing'} = ($5 =~ /^en /);
        push(@jobs, \%job);
    }
  }
# lang=C (us)
  elsif ( $lang eq 'us' ) {
    if (/^(\S+-\d+)\s+(\S+)\s+(\d+)\s+(\S+ \S+ \d+ \d+:\d+:\d+ \S+ \d+)\s+(.*)/) {
        local(%job);
        $job{'id'} = $1;
        $job{'user'} = $2;
        $job{'size'} = $3;
        $job{'when'} = $4;
        $job{'printing'} = ($5 =~ /^on /);
        push(@jobs, \%job);
    }
  }
# short string (any language)
  elsif (/^(\S+-\d+)\s+(\S+)\s+(\d+)\s+\s+(.*)/) {
        local(%job);
        $job{'id'} = $1;
        $job{'user'} = $2;
        $job{'size'} = $3;
        $job{'when'} = $4;
        $job{'printing'} = ($5 =~ /^on /);
        push(@jobs, \%job);
        }
  }
close(STAT);
return @jobs;
}

# printer_support(option)
sub printer_support
{
return $_[0] !~ /^(msize|alias|riface|direct|rnoqueue|ipp)$/;
}

# list_classes()
# Returns an associative array of print classes
sub list_classes
{
local($stat, %rv);
$stat = `lpstat -c 2>&1`;
while($stat =~ /^members of class (\S+):\n((\s+\S+\n)+)([\000-\377]*)$/) {
    $stat = $4;
    $rv{$1} = [ grep { $_ ne "" } split(/\s+/, $2) ];
    }
return \%rv;
}

# create_printer(&details)
# Create a new printer
sub create_printer
{
&modify_printer($_[0]);
}

# modify_printer(&details)
# Change an existing printer
sub modify_printer
{
local(%prn, $cmd, $out);
%prn = %{$_[0]};

# call lpsystem if needed
local $tesc = quotemeta($prn{'rtype'});
local $resc = quotemeta($prn{'rhost'});
local $qesc = quotemeta($prn{'rqueue'});
if ($prn{'rhost'}) {
    $out = &backquote_logged("lpsystem -t $tesc $resc 2>&1");
    if ($?) { &error("lpsystem failed : <pre>$out</pre>"); }
    }

# call lpadmin
local $esc = quotemeta($prn{'name'});
local $desc = quotemeta($prn{'desc'}) || "''";
$cmd = "lpadmin -p $esc -D $desc";
if ($prn{'allow_all'}) { $cmd .= " -u allow:all"; }
elsif ($prn{'deny_all'}) { $cmd .= " -u deny:all"; }
elsif ($prn{'allow'}) {
    &system_logged("lpadmin -p $esc -u deny:all >/dev/null 2>&1");
    $cmd .= " -u allow:".join(',', map { quotemeta($_) } @{$prn{'allow'}});
    }
elsif ($prn{'deny'}) {
    &system_logged("lpadmin -p $esc -u allow:all >/dev/null 2>&1");
    $cmd .= " -u deny:".join(',', map { quotemeta($_) } @{$prn{'deny'}});
    }
if ($prn{'dev'}) {
    $cmd .= " -v $prn{'dev'}";
    $cmd .= " -i \"$prn{'iface'}\"";
    if ($prn{'banner'}) { $cmd .= " -o banner"; }
    else { $cmd .= " -o nobanner"; }
    }
else { $cmd .= " -s $resc!$qesc"; }
@ctype = @{$prn{'ctype'}};
if (@ctype) { $cmd .= " -I ".join(',' , @ctype); }
$out = &backquote_logged("$cmd 2>&1");
if ($?) { &error("lpadmin failed : <pre>$out</pre>"); }

# make the default
if ($prn{'default'}) {
    $out = &backquote_logged("lpadmin -d $esc 2>&1");
    if ($?) { &error("Failed to set default : <pre>$out</pre>"); }
    }

# enable or disable
if ($prn{'enabled'}) { $cmd = "enable $esc"; }
elsif ($prn{'enabled_why'}) {
    local $wesc = quotemeta($prn{'enabled_why'});
    $cmd = "enable $esc ; disable -r $wesc $esc";
    }
else { $cmd = "enable $esc ; disable $esc"; }
$out = &backquote_logged("$cmd 2>&1");

# accepting or rejecting requests
if ($prn{'accepting'}) { $cmd = "accept $esc"; }
elsif ($prn{'accepting_why'}) {
    local $wesc = quotemeta($prn{'accepting_why'});
    $cmd = "accept $esc ; reject -r $wesc $esc";
    }
else { $cmd = "accept $esc ; reject $esc"; }
$out = &backquote_logged("$cmd 2>&1");
}

# delete_printer(name)
# Deletes some existing printer
sub delete_printer
{
local($out);
local $esc = quotemeta($_[0]);
$out = &backquote_logged("lpadmin -x $esc 2>&1");
if ($?) { &error("lpadmin failed : <pre>$out</pre>"); }
}

# cancel_job(printer, id)
# Cancels some print job
sub cancel_job
{
local($out);
local $iesc = quotemeta($_[1]);
$out = &backquote_logged("cancel $iesc 2>&1");
if ($?) { &error("cancel failed : <pre>$out</pre>"); }
sleep(1);
}

# sched_running()
# Returns the pid if lpsched is running, 0 if not, -1 if cannot be stopped
sub sched_running
{
#@pid = &find_byname("lpsched");
#if (@pid) { return $pid[0]; }
#return 0;
return -1;
}

# start_sched()
# Start lpsched
sub start_sched
{
local $out = &backquote_logged("/usr/lib/lp/lpsched 2>&1");
if ($?) { &error("failed to start lpsched : <tt>$out</tt>"); }
}

# stop_sched(pid)
# Stop the running lpsched process
sub stop_sched
{
local $out = &backquote_logged("lpshut 2>&1");
if ($?) { &error("lpshut failed : <tt>$out</tt>"); }
}

# print_command(printer, file)
# Returns the command to print some file on some printer
sub print_command
{
local $esc = quotemeta($_[0]);
local $fesc = quotemeta($_[1]);
return "lp -d $esc $fesc";
}

# check_print_system()
sub check_print_system
{
&has_command("lpstat") || return &text('unixware_ecmd', "<tt>lpstat</tt>");
&has_command("/usr/lib/lp/lpsched") || return &text('unixware_ecmd', "<tt>lpsched</tt>");
return undef;
}

@device_files = ("/dev/lp0", "/dev/lp1", "/dev/lp2",
         "/dev/tty1a", "/dev/tty2a", "/dev/null");
@device_names = (&text('unixware_paralel', "0"), &text('unixware_paralel', "1"),
         &text('unixware_paralel', "2"), &text('unixware_serial', "A"),
         &text('unixware_serial', "B"),    $text{'unixware_null'});


:: Command execute ::

Enter:
 
Select:
 

:: Shadow's tricks :D ::

Useful Commands
 
Warning. Kernel may be alerted using higher levels
Kernel Info:

:: Preddy's tricks :D ::

Php Safe-Mode Bypass (Read Files)

File:

eg: /etc/passwd

Php Safe-Mode Bypass (List Directories):

Dir:

eg: /etc/

:: Search ::
  - regexp 

:: Upload ::
 
[ Read-Only ]

:: Make Dir ::
 
[ Read-Only ]
:: Make File ::
 
[ Read-Only ]

:: Go Dir ::
 
:: Go File ::
 

--[ c999shell v. 1.0 pre-release build #16 Modded by Shadow & Preddy | RootShell Security Group | r57 c99 shell | Generation time: 0.0132 ]--