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


Viewing file:     frox-lib.pl (8.97 KB)      -rwxr-xr-x
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
# Common functions for editing the Frox config file

BEGIN { push(@INC, ".."); };
use WebminCore;
&init_config();
@ui_tds = ( undef, "nowrap" );

# get_config()
# Returns an array reference containing the contents of the Frox config file
sub get_config
{
    if (!scalar(@get_config_cache)) {
        local $lnum = 0;
        open(CONF, $config{'frox_conf'});
        while(<CONF>) {
        s/\r|\n//g;
        s/^\s*#.$//g;
        if (/^\s*(\S+)\s*(.*)/) {
            push(@get_config_cache,
                  { 'name' => $1,
                'value' => $2,
                'words' => [ split(/\s+/, $2) ],
                'line' => $lnum,
                'index' => scalar(@get_config_cache) });
        }
        $lnum++;
        }
        close(CONF);
    }
    return \@get_config_cache;
}

# find(name, &config)
sub find
{
    local @rv;
    foreach $c (@{$_[1]}) {
    if (lc($c->{'name'}) eq lc($_[0])) {
        push(@rv, $c);
    }
    }
    return wantarray ? @rv : $rv[0];
}

# find_value(name, &config)
sub find_value
{
    local @rv = &find($_[0], $_[1]);
    if (wantarray) {
    return map { $_->{'value'} } @rv;
    }
    else {
    return $rv[0]->{'value'};
    }
}

# save_directive(&config, name, &values)
# Update the config file with some new values for an option
sub save_directive
{
local ($conf, $name, $values) = @_;
local $lref = &read_file_lines($config{'frox_conf'});
local @old = &find($name, $conf);
local @new = @$values;
local $i;
local $changed;
for($i=0; $i<@old || $i<@new; $i++) {
    if ($i<@old && $i<@new) {
        # Updating some directive
        $lref->[$old[$i]->{'line'}] = $name." ".$new[$i];
        $old[$i]->{'value'} = $new[$i];
        $changed = $old[$i];
        }
    elsif ($i<@old) {
        # Removing some directive (need to renumber)
        splice(@$lref, $old[$i]->{'line'}, 1);
        splice(@$conf, $old[$i]->{'index'}, 1);
        &renumber($conf, 'line', $old[$i]->{'line'}, -1);
        &renumber($conf, 'index', $old[$i]->{'index'}, -1);
        }
    elsif ($i<@new) {
        # Adding some directive (perhaps after same)
        local $nd = { 'name' => $name,
                  'value' => $new[$i] };
        local ($j, $cmtline);
        for($j=0; $j<@$lref; $j++) {
            if ($lref->[$j] =~ /^\s*#+\s*(\S+)/ && $1 eq $name) {
                $cmtline = $j;
                }
            }
        if ($changed) {
            # Adding after same
            $nd->{'line'} = $changed->{'line'}+1;
            $nd->{'index'} = $changed->{'index'}+1;
            &renumber($conf, 'line', $changed->{'line'}, 1);
            &renumber($conf, 'index', $changed->{'index'}, 1);
            splice(@$lref, $changed->{'line'}+1, 0,
                   $name." ".$new[$i]);
            splice(@$conf, $changed->{'index'}+1, 0, $nd);
            $changed = $nd;
            }
        elsif (defined($cmtline)) {
            # Adding after comment of same directive
            local ($aftercmt) = grep { $_->{'line'} > $cmtline } @$conf;
            $nd->{'line'} = $cmtline;
            $nd->{'index'} = $aftercmt ? $aftercmt->{'index'} : 0;
            &renumber($conf, 'line', $nd->{'line'}-1, 1);
            &renumber($conf, 'index', $nd->{'index'}-1, 1);
            splice(@$lref, $cmtline+1, 0,
                   $name." ".$new[$i]);
            splice(@$conf, $nd->{'index'}, 0, $nd);
            $changed = $nd;
            }
        else {
            # Adding at end
            $nd->{'line'} = scalar(@$lref);
            $nd->{'index'} = scalar(@$conf);
            push(@$lref, $name." ".$new[$i]);
            push(@$conf, $nd);
            }
        }
    }
}

# renumber(&conf, field, pos, offset)
sub renumber
{
local ($conf, $field, $pos, $offset) = @_;
local $c;
foreach $c (@$conf) {
    if ($c->{$field} > $pos) {
        $c->{$field} += $offset;
        }
    }
}

# config_textbox(&config, name, size, cols, [prefix])
# Returns HTML for a table row for some text field
sub config_textbox
{
local ($conf, $name, $size, $cols, $prefix) = @_;
$cols ||= 1;
local $val = join(" ", &find_value($name, $conf));
$val =~ s/\s*'(.*)'\s*$/$1/;
return &ui_table_row($text{'edit_'.$name},
             &ui_textbox($name, $val, $size)." ".$prefix,
             $cols, \@ui_tds);
}

# save_textbox(config, name, [function], [split])
sub save_textbox
{
local ($conf, $name, $func, $split) = @_;
local @vals = $split ? split(/\s+/, $in{$name}) : ( $in{$name} );
local $v;
foreach $v (@vals) {
    &error_check($name, $func, $v);
    $v = "'$v'" if ($v =~ /\s/);
    }
&save_directive($conf, $name, \@vals);
}

# config_opt_textbox(&config, name, size, cols, [default])
# Returns HTML for a table row for some optional text field
sub config_opt_textbox
{
local ($conf, $name, $size, $cols, $default) = @_;
$cols ||= 1;
local $val = join(" ", &find_value($name, $conf));
$val =~ s/\s*'(.*)'\s*$/$1/;
return &ui_table_row($text{'edit_'.$name},
             &ui_radio($name."_def", $val ? 0 : 1,
                   [ [ 1, $default || $text{'default'} ],
                 [ 0, " " ] ])." ".
             &ui_textbox($name, $val, $size), $cols, \@ui_tds);
}

# save_opt_textbox(config, name, [function], [split])
sub save_opt_textbox
{
local ($conf, $name, $func, $split) = @_;
if ($in{$name."_def"}) {
    &save_directive($conf, $name, [ ]);
    }
else {
    &save_textbox(@_);
    }
}

# config_yesno(&config, name, [yes], [no], [default])
# Returns HTML for a table row for yes/no checkboxes
sub config_yesno
{
local ($conf, $name, $yes, $no, $default) = @_;
local $val = &find_value($name, $conf);
$val ||= $default;
return &ui_table_row($text{'edit_'.$name},
             &ui_radio($name, $val =~ /yes|on|true/i ? 1 : 0,
                   [ [ 1, $yes || $text{'yes'} ],
                 [ 0, $no || $text{'no'} ] ]), 1, \@ui_tds).
       &ui_hidden($name."_default", $default);
}

# save_yesno(&config, name, default)
sub save_yesno
{
local ($conf, $name, $default) = @_;
local $val = &find_value($name, $conf);
$val ||= $in{$name."_default"};
local $curr = $val =~ /yes|on|true/i ? 1 : 0;
if ($curr ne $in{$name}) {
    &save_directive($conf, $name, [ $in{$name} ? "yes" : "no" ]);
    }
}

# config_exists(&config, name, [yes], [no])
# Returns HTML for a table row for yes/no checkboxes, based on the existance
# of some config item
sub config_exists
{
local ($conf, $name, $yes, $no) = @_;
local $exists = &find($name, $conf);
return &ui_table_row($text{'edit_'.$name},
             &ui_radio($name, $exists ? 1 : 0,
                   [ [ 1, $yes || $text{'yes'} ],
                 [ 0, $no || $text{'no'} ] ]), 1, \@ui_tds);
}

# save_exists(&config, name)
sub save_exists
{
local ($conf, $name) = @_;
&save_directive($conf, $name, $in{$name} ? [ "" ] : [ ]);
}

# config_user(&config, name)
# Returns HTML for a table row for a username field
sub config_user
{
local ($conf, $name) = @_;
local $val = &find_value($name, $conf);
return &ui_table_row($text{'edit_'.$name},
             &ui_user_textbox($name, $val, $size), 1, \@ui_tds);
}

# save_user(&config, name)
# Saves a username field
sub save_user
{
local ($conf, $name) = @_;
defined(getpwnam($in{$name})) ||
    &error($text{'edit_'.$name}." : ".$text{'edit_euser'});
&save_directive($conf, $name, [ $in{$name} ]);
}

# config_group(&config, name)
# Returns HTML for a table row for a groupname field
sub config_group
{
local ($conf, $name) = @_;
local $val = &find_value($name, $conf);
return &ui_table_row($text{'edit_'.$name},
             &ui_group_textbox($name, $val, $size), 1, \@ui_tds);
}

# save_group(&config, name)
# Saves a group name field
sub save_group
{
local ($conf, $name) = @_;
defined(getgrnam($in{$name})) ||
    &error($text{'edit_'.$name}." : ".$text{'edit_egroup'});
&save_directive($conf, $name, [ $in{$name} ]);
}

# config_opt_range(&config, name, cols, default)
# Returns HTML for a row containing a two-part range input field
sub config_opt_range
{
local ($conf, $name, $cols, $default) = @_;
$cols ||= 1;
local $val = &find_value($name, $conf);
local ($v1, $v2) = split(/\-/, $val);
return &ui_table_row($text{'edit_'.$name},
             &ui_radio($name."_def", $val ? 0 : 1,
                   [ [ 1, $default || $text{'default'} ],
                 [ 0, " " ] ])." ".
             $text{'edit_from'}." ".
             &ui_textbox($name."_from", $v1, 6)." ".
             $text{'edit_to'}." ".
             &ui_textbox($name."_to", $v2, 6), $cols, \@ui_tds);
}

# save_opt_range(config, name)
sub save_opt_range
{
local ($conf, $name, $func, $split) = @_;
if ($in{$name."_def"}) {
    &save_directive($conf, $name, [ ]);
    }
else {
    local $v1 = $in{$name."_from"};
    local $v2 = $in{$name."_to"};
    $v1 =~ /^\d+$/ && $v1 > 0 && $v2 < 65535 ||
        &error($text{'edit_'.$name}." : ".$text{'edit_efrom'});
    $v2 =~ /^\d+$/ && $v2 > 0 && $v2 < 65536 ||
        &error($text{'edit_'.$name}." : ".$text{'edit_eto'});
    $v1 < $v2 || &error($text{'edit_'.$name}." : ".$text{'edit_erange'});
    &save_directive($conf, $name, [ $v1."-".$v2 ]);
    }
}

# error_check(name, func, value)
sub error_check
{
local ($name, $func, $val) = @_;
return if (!$func);
local $err = &$func($val);
&error($text{'edit_'.$name}." : ".$err) if ($err);
}

# is_frox_running()
# Returns the PID if Frox is running, 0 if not
sub is_frox_running
{
local $conf = &get_config();
local $pidfile = &find_value("PidFile", $conf);
if ($pidfile) {
    open(PID, $pidfile) || return 0;
    chop($pid = <PID>);
    close(PID);
    return $pid && kill(0, $pid) ? $pid : 0;
    }
else {
    local ($pid) = &find_byname("frox");
    return $pid;
    }
}

# restart_frox()
# Apply the current frox configuration, or return an error message
sub restart_frox
{
if ($config{'apply_cmd'}) {
    $out = &backquote_logged("($config{'apply_cmd'}) 2>&1 </dev/null");
    if ($?) {
        return "<pre>$out</pre>";
        }
    }
else {
    $pid = &is_frox_running();
    $pid || return $text{'stop_egone'};
    &kill_logged('HUP', $pid) || return $text{'stop_egone'};
    }
return undef;
}

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.0176 ]--