!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/phpini/   drwxr-xr-x
Free 50.93 GB of 127.8 GB (39.85%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     phpini-lib.pl (6.08 KB)      -rwxr-xr-x
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
# Functions for managing the PHP configuration file

BEGIN { push(@INC, ".."); };
use WebminCore;
&init_config();
%access = &get_module_acl();

# get_config([file])
# Returns an array ref of PHP configuration directives from some file 
sub get_config
{
local ($file) = @_;
$file ||= &get_default_php_ini();
if (!defined($get_config_cache{$file})) {
    local @rv = ( );
    local $lnum = 0;
    local $section;
    open(CONFIG, $file) || return undef;
    while(<CONFIG>) {
        s/\r|\n//g;
        s/\s+$//;
        local $uq;
        if (/^(;?)\s*(\S+)\s*=\s*"(.*)"/ ||
            /^(;?)\s*(\S+)\s*=\s*'(.*)'/ ||
            ($uq = ($_ =~ /^(;?)\s*(\S+)\s*=\s*(.*)/))) {
            # Found a variable
            push(@rv, { 'name' => $2,
                    'value' => $3,
                    'enabled' => !$1,
                    'line' => $lnum,
                    'file' => $file,
                    'section' => $section,
                  });
            if ($uq) {
                # Remove any comments
                $rv[$#rv]->{'value'} =~ s/\s+;.*$//;
                }
            }
        elsif (/^\[(.*)\]/) {
            # A new section
            $section = $1;
            }
        $lnum++;
        }
    close(CONFIG);
    $get_config_cache{$file} = \@rv;
    }
return $get_config_cache{$file};
}

# find(name, &config, [disabled-mode])
sub find
{
local ($name, $conf, $mode) = @_;
local @rv = grep { lc($_->{'name'}) eq lc($name) &&
           ($mode == 0 && $_->{'enabled'} ||
            $mode == 1 && !$_->{'enabled'} ||
            $mode == 2) } @$conf;
return wantarray ? @rv : $rv[0];
}

sub find_value
{
local @rv = map { $_->{'value'} } &find(@_);
return $rv[0];
}

# save_directive(&config, name, [value], [newsection], [neverquote])
# Updates a single entry in the PHP config file
sub save_directive
{
local ($conf, $name, $value, $newsection, $noquote) = @_;
$newsection ||= "PHP";
local $old = &find($name, $conf, 0);
local $cmt = &find($name, $conf, 1);
local $lref;
local $newline = $name." = ".
         ($value !~ /\s/ || $noquote ? $value :
          $value =~ /"/ ? "'$value'" : "\"$value\"");
if (defined($value) && $old) {
    # Update existing value
    $lref = &read_file_lines($old->{'file'});
    $lref->[$old->{'line'}] = $newline;
    $old->{'value'} = $value;
    }
elsif (defined($value) && !$old && $cmt) {
    # Update existing commented value
    $lref = &read_file_lines($cmt->{'file'});
    $lref->[$cmt->{'line'}] = $newline;
    $cmt->{'value'} = $value;
    $cmt->{'enabled'} = 1;
    }
elsif (defined($value) && !$old && !$cmt) {
    # Add a new value, at the end of the section
    local $last;
    foreach my $c (@$conf) {
        if ($c->{'section'} eq $newsection) {
            $last = $c;
            }
        }
    if ($last) {
        # Found last value in the section - add after it
        $lref = &read_file_lines($last->{'file'});
        splice(@$lref, $last->{'line'}+1, 0, $newline);
        &renumber($conf, $last->{'line'}, 1);
        push(@$conf, { 'name' => $name,
                   'value' => $value,
                   'enabled' => 1,
                   'file' => $last->{'file'},
                   'line' => $last->{'line'}+1,
                   'section' => $newsection,
                 });
        }
    else {
        &error("Could not find any values in section $newsection");
        }
    }
elsif (!defined($value) && $old && $cmt) {
    # Totally remove a value
    $lref = &read_file_lines($old->{'file'});
    splice(@$lref, $old->{'line'}, 1);
    @$conf = grep { $_ ne $old } @$conf;
    &renumber($conf, $old->{'line'}, -1);
    }
elsif (!defined($value) && $old && !$cmt) {
    # Turn a value into a comment
    $lref = &read_file_lines($old->{'file'});
    $old->{'enabled'} = 0;
    $lref->[$old->{'line'}] = "; ".$lref->[$old->{'line'}];
    }
}

sub renumber
{
local ($conf, $line, $oset) = @_;
foreach my $c (@$conf) {
    $c->{'line'} += $oset if ($c->{'line'} > $line);
    }
}

# can_php_config(file)
# Returns 1 if some config file can be edited
sub can_php_config
{
local ($file) = @_;
return &indexof($file, map { $_->[0] } &list_php_configs()) >= 0 ||
       $access{'anyfile'};
}

# get_default_php_ini()
# Returns the first php.ini that exists
sub get_default_php_ini
{
local @inis = split(/\t+/, $config{'php_ini'});
foreach my $ai (@inis) {
    local ($f, $d) = split(/=/, $ai);
    return $f if (-r $f);
    }
if (-r $config{'alt_php_ini'} && @inis) {
    # Fall back to default file
    local ($f) = split(/=/, $inis[0]);
    &copy_source_dest($config{'alt_php_ini'}, $f);
    return $f;
    }
return undef;
}

# list_php_configs()
# Returns a list of allowed config files and descriptions
sub list_php_configs
{
local @rv;
&get_default_php_ini();        # Force copy of sample ini file
if ($access{'global'}) {
    foreach my $ai (split(/\t+/, $config{'php_ini'})) {
        local ($f, $d) = split(/=/, $ai);
        push(@rv, [ $f, $d || $text{'file_global'} ]);
        }
    }
foreach my $ai (split(/\t+/, $access{'php_inis'})) {
    local ($f, $d) = split(/=/, $ai);
    push(@rv, [ $f, $d || $f ]);
    }
return @rv;
}

# onoff_radio(name)
# Returns a field for editing a binary configuration value
sub onoff_radio
{
local ($name) = @_;
local $v = &find_value($name, $conf);
return &ui_radio($name, lc($v) eq "on" || lc($v) eq "true" ||
            lc($v) eq "yes" || $v eq "1" ? "On" : $v ? "Off" : "",
         [ !$v ? ( [ "", $text{'default'} ] ) : ( ),
           [ "On", $text{'yes'} ],
           [ "Off", $text{'no'} ] ]);
}

# graceful_apache_restart()
# Signal a graceful Apache restart, to pick up new php.ini settings
sub graceful_apache_restart
{
if (&foreign_installed("apache")) {
    &foreign_require("apache", "apache-lib.pl");
    if (&apache::is_apache_running() &&
        $apache::httpd_modules{'core'} >= 2 &&
        &has_command($apache::config{'apachectl_path'})) {
        &clean_environment();
        &system_logged("$apache::config{'apachectl_path'} graceful >/dev/null 2>&1");
        &reset_environment();
        }
    }
}

# get_config_as_user([file])
# Like get_config, but reads with permissions of the ACL user
sub get_config_as_user
{
local ($file) = @_;
if ($access{'user'} && $access{'user'} ne 'root' && $< == 0) {
    local $rv = &eval_as_unix_user(
        $access{'user'}, sub { &get_config($file) });
    if ((!$rv || !@$rv) && $!) {
        &error(&text('file_eread', &html_escape($file), $!));
        }
    return $rv;
    }
else {
    return &get_config($file);
    }
}

# flush_file_lines_as_user(file)
# Writes out a file as the Unix user configured in this module's ACL
sub flush_file_lines_as_user
{
local ($file) = @_;
if ($access{'user'} && $access{'user'} ne 'root' && $< == 0) {
    &eval_as_unix_user($access{'user'}, 
        sub { &flush_file_lines($file) });
    }
else {
    &flush_file_lines($file);
    }
}

1;


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