!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/usermin/   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:     upgrade.cgi (9.36 KB)      -rwxr-xr-x
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
#!/usr/bin/perl
# upgrade.cgi
# Upgrade usermin if possible

require './usermin-lib.pl';
$access{'upgrade'} || &error($text{'acl_ecannot'});
&foreign_require("proc", "proc-lib.pl");
&ReadParseMime();
&get_usermin_miniserv_config(\%miniserv);

&ui_print_unbuffered_header(undef, $in{'install'} ? $text{'upgrade_title2'} : $text{'upgrade_title'}, "");

if ($in{'source'} == 0) {
    # from local file
    &error_setup(&text('upgrade_err1', $in{'file'}));
    $file = $in{'file'};
    if (!(-r $file)) { &inst_error($text{'upgrade_efile'}); }
    }
elsif ($in{'source'} == 1) {
    # from uploaded file
    &error_setup($text{'upgrade_err2'});
    $file = &transname();
    $need_unlink = 1;
    if ($no_upload) {
                &inst_error($text{'upgrade_ebrowser'});
                }
    &open_tempfile(MOD, ">$file", 0, 1);
    &print_tempfile(MOD, $in{'upload'});
    &close_tempfile(MOD);
    }
elsif ($in{'source'} == 2) {
    # find latest version at www.webmin.com by looking at index page
    &error_setup($text{'upgrade_err3'});
    $file = &transname();
    &http_download('www.webmin.com', 80, '/index6.html', $file, \$error);
    $error && &inst_error($error);
    open(FILE, $file);
    while(<FILE>) {
        if (/usermin-([0-9\.]+)\.tar\.gz/) {
            $version = $1;
            last;
            }
        }
    close(FILE);
    unlink($file);
    if (!$in{'force'}) {
        if ($version == &get_usermin_version()) {
            &inst_error(&text('upgrade_elatest', $version));
            }
        elsif ($version <= &get_usermin_version()) {
            &inst_error(&text('upgrade_eversion', $version));
            }
        }

    # Work out the current Usermin type (webmail or regular)
    $product = "usermin";
    if (&has_command("rpm") && $in{'mode'} eq 'rpm' &&
        &execute_command("rpm -q usermin-webmail") == 0) {
        $product = "usermin-webmail";
        }
    elsif (&has_command("dpkg") && $in{'mode'} eq 'deb' &&
           &execute_command("dpkg --list usermin-webmail") == 0) {
        $product = "usermin-webmail";
        }

    if ($in{'mode'} eq 'rpm') {
        $progress_callback_url = &convert_osdn_url(
            "http://$webmin::osdn_host/webadmin/${product}-${version}-1.noarch.rpm");
        }
    elsif ($in{'mode'} eq 'deb') {
        $progress_callback_url = &convert_osdn_url(
            "http://$webmin::osdn_host/webadmin/${product}_${version}_all.deb");
        }
    else {
        $progress_callback_url = &convert_osdn_url(
            "http://$webmin::osdn_host/webadmin/${product}-${version}.tar.gz");
        }
    ($host, $port, $page, $ssl) = &parse_http_url($progress_callback_url);
    &http_download($host, $port, $page, $file, \$error,
               \&progress_callback, $ssl);
    $error && &inst_error($error);
    $need_unlink = 1;
    }
elsif ($in{'source'} == 5) {
    # Download from some URL
    &error_setup(&text('upgrade_err5', $in{'url'}));
    $file = &transname();
    $progress_callback_url = $in{'url'};
    if ($in{'url'} =~ /^(http|https):\/\/([^\/]+)(\/.*)$/) {
        $ssl = $1 eq 'https';
        $host = $2; $page = $3; $port = $ssl ? 443 : 80;
        if ($host =~ /^(.*):(\d+)$/) { $host = $1; $port = $2; }
        &http_download($host, $port, $page, $file, \$error,
                   \&progress_callback, $ssl);
        }
    elsif ($in{'url'} =~ /^ftp:\/\/([^\/]+)(:21)?\/(.*)$/) {
        $host = $1; $ffile = $3;
        &ftp_download($host, $ffile, $file,
                  \$error, \&progress_callback);
        }
    else { &inst_error($text{'upgrade_eurl'}); }
    $need_unlink = 1;
    $error && &inst_error($error);
    }
$qfile = quotemeta($file);

# gunzip the file if needed
open(FILE, $file);
read(FILE, $two, 2);
close(FILE);
if ($two eq "\037\213") {
    if (!&has_command("gunzip")) {
        &inst_error($text{'upgrade_egunzip'});
        }
    $newfile = &transname();
    $out = `gunzip -c $file 2>&1 >$newfile`;
    if ($?) {
        unlink($newfile);
        &inst_error(&text('upgrade_egzip', "<tt>$out</tt>"));
        }
    unlink($file) if ($need_unlink);
    $need_unlink = 1;
    $file = $newfile;
    }
$qfile = quotemeta($file);

# Get list of updates
$updatestemp = &transname();
&http_download($update_host, $update_port, $update_page, $updatestemp,
               \$updates_error);

if ($in{'mode'} eq 'rpm') {
    # Check if it is an RPM package
    $out = `rpm -qp $qfile`;
    $out =~ /^usermin-(\d+\.\d+)/ ||
        $out =~ /^usermin-webmail-(\d+\.\d+)/ ||
        &inst_error($text{'upgrade_erpm'});
    $version = $1;
    if ($version <= &get_usermin_version() && !$in{'force'}) {
        &inst_error(&text('upgrade_eversion', $version));
        }

    # Install the RPM
    if ($in{'force'}) {
        $cmd = "rpm -U --force $qfile";
        }
    else {
        $cmd = "rpm -U --ignoreos --ignorearch --nodeps $qfile";
        }
    print "<p>",&text($in{'install'} ? 'upgrade_setup2' : 'upgrade_setup',
              "<tt>$cmd</tt>"),"<br>\n";
    print "<pre>";
    &proc::safe_process_exec($cmd, 0, 0, STDOUT, undef, 1);
    print "</pre>";
    unlink($file) if ($need_unlink);
    }
elsif ($in{'mode'} eq 'deb') {
    # Check if it is a Debian package
    $out = `dpkg --info $qfile`;
    $out =~ /Package:\s+(\S+)/ &&
        ($1 eq "usermin" || $1 eq "usermin-webmail") ||
        &inst_error($text{'upgrade_edeb'});
    $out =~ /Version:\s+(\S+)/ ||
        &inst_error($text{'upgrade_edeb'});
    $version = $1;
    if ($version <= &get_usermin_version() && !$in{'force'}) {
        &inst_error(&text('upgrade_eversion', $version));
        }

    # Install the package
    $cmd = "dpkg --install $qfile";
    print "<p>",&text($in{'install'} ? 'upgrade_setup2' : 'upgrade_setup',
              "<tt>$cmd</tt>"),"<br>\n";
    print "<pre>";
    &proc::safe_process_exec($cmd, 0, 0, STDOUT, undef, 1);
    print "</pre>";
    unlink($file) if ($need_unlink);
    }
else {
    # Check if it is a usermin tarfile
    open(TAR, "tar tf $file 2>&1 |");
    while(<TAR>) {
        if (/^usermin-([0-9\.]+)\//) {
            $version = $1;
            }
        if (/^webmin-([0-9\.]+)\//) {
            $webmin_version = $1;
            }
        if (/^[^\/]+\/(\S+)$/) {
            $hasfile{$1}++;
            }
        }
    close(TAR);
    if ($webmin_version) {
        &inst_error(&text('upgrade_ewebmin', $webmin_version));
        }
    if (!$version) {
        if ($hasfile{'module.info'}) {
            &inst_error(&text('upgrade_emod', 'edit_mods.cgi'));
            }
        else {
            &inst_error($text{'upgrade_etar'});
            }
        }
    if (!$in{'force'}) {
        if ($version <= &get_usermin_version()) {
            &inst_error(&text('upgrade_eversion', $version));
            }
        }

    $| = 1;
    local $cmd;
    if ($in{'install'}) {
        # Installing .. extract it in /usr/local and run setup.sh
        local $root = "/usr/local";
        mkdir($root, 0755);
        $out = `cd $root ; tar xf $file 2>&1 >/dev/null`;
        if ($?) {
            &inst_error(&text('upgrade_euntar', "<tt>$out</tt>"));
            }
        unlink($file) if ($need_unlink);
        $ENV{'config_dir'} = $standard_usermin_dir;
        $ENV{'var_dir'} = "/var/usermin";
        $perl = &get_perl_path();
        $ENV{'perl'} = $perl;
        $ENV{'autoos'} = 3;
        $ENV{'port'} = 20000;
        $ENV{'ssl'} = 1;
        $ENV{'os_type'} = $gconfig{'os_type'};
        $ENV{'os_version'} = $gconfig{'os_version'};
        $ENV{'real_os_type'} = $gconfig{'real_os_type'};
        $ENV{'real_os_version'} = $gconfig{'real_os_version'};
        $cmd = "(cd $root/usermin-$version && ./setup.sh)";
        print "<p>",&text('upgrade_setup2', "<tt>setup.sh</tt>"),"<br>\n";
        }
    else {
        # Upgrading .. work out where to extract
        if ($in{'dir'}) {
            # Since we are currently installed in a fixed directory,
            # just extract to a temporary location
            $extract = &transname();
            mkdir($extract, 0755);
            }
        else {
            # Next to the current directory
            $extract = "$miniserv{'root'}/..";
            }

        # Extract it next to the current directory and run setup.sh
        $out = `cd $extract ; tar xf $file 2>&1 >/dev/null`;
        if ($?) {
            &inst_error(&text('upgrade_euntar', "<tt>$out</tt>"));
            }
        unlink($file) if ($need_unlink);
        $ENV{'config_dir'} = $config{'usermin_dir'};
        $ENV{'webmin_upgrade'} = 1;
        $ENV{'autothird'} = 1;
        $setup = $in{'dir'} ? "./setup.sh '$in{'dir'}'" : "./setup.sh";
        if ($in{'delete'}) {
            $ENV{'deletedold'} = 1;
            $cmd = "(cd $extract/usermin-$version && $setup && rm -rf \"$miniserv{'root'}\")";
            }
        else {
            $cmd = "(cd $extract/usermin-$version && $setup)";
            }
        print "<p>",&text('upgrade_setup', "<tt>setup.sh</tt>"),"<br>\n";
        }
    print "<pre>";
    &proc::safe_process_exec($cmd, 0, 0, STDOUT, undef, 1);
    print "</pre>";
    if ($in{'dir'}) {
        # Can delete the temporary source directory
        system("rm -rf \"$extract\"");
        }
    }

# Notify Webmin that this module might now be usable
&foreign_require("webmin", "webmin-lib.pl");
($inst, $changed) = &webmin::build_installed_modules(0, 'usermin');
if (@$changed && defined(&theme_post_change_modules)) {
    &theme_post_change_modules();
    }

&webmin_log($in{'install'} ? "uinstall" : "upgrade", undef, undef,
        { 'version' => $version, 'mode' => $in{'mode'} });

# Find out about any updates for this new version.
if ($updates_error) {
        print "<br>",&text('upgrade_eupdates', $updates_error),"<p>\n";
        }
else {
        open(UPDATES, $updatestemp);
        while(<UPDATES>) {
                if (/^([^\t]+)\t+([^\t]+)\t+([^\t]+)\t+([^\t]+)\t+(.*)/) {
                        push(@updates, [ $1, $2, $3, $4, $5 ]);
                        }
                }
        close(UPDATES);
        unlink($updatestemp);
        $bversion = &base_version($version);
        foreach $u (@updates) {
                next if ($u->[1] >= $bversion + .01 || $u->[1] <= $bversion ||
             $u->[1] <= $version);
                local $osinfo = { 'os_support' => $u->[3] };
                next if (!&check_usermin_os_support($osinfo));
                $ucount++;
                }
        if ($ucount) {
                print "<br>",&text('upgrade_updates', $ucount,
                        "update.cgi?source=0&show=0&missing=0"),"<p>\n";
                }
        }

&ui_print_footer("", $text{'index_return'});

sub inst_error
{
unlink($file) if ($need_unlink);
print "<br><b>$whatfailed : $_[0]</b> <p>\n";
&ui_print_footer("", $text{'index_return'});
exit;
}


:: 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.0069 ]--