!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/dhcpd/   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:     edit_options.cgi (9.55 KB)      -rwxr-xr-x
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
#!/usr/bin/perl
# edit_options.cgi
# Edit client options for some subnet, shared net, group, host or global

require './dhcpd-lib.pl';
require './params-lib.pl';
&ReadParse();
$conf = &get_config();

%access = &get_module_acl();
&error_setup($text{'eacl_aviol'});

$client = &get_parent_config();
push(@parents, $client);
foreach $i ($in{'sidx'}, $in{'uidx'}, $in{'gidx'}, $in{'idx'}) {
    $client = $client->{'members'}->[$i] if ($i ne '');
    push(@parents, $client);
    }

if ($client->{'name'} eq 'subnet') {
    $title = &text('eopt_subtitle',$client->{'values'}->[0]);
    $back = $text{'eopt_returnsub'};
    $backlink = "edit_subnet.cgi";
    &error("$text{'eacl_np'} $text{'eacl_pss'}") if !&can('r',\%access,$client);
    }
elsif ($client->{'name'} eq 'shared-network') {
    $title = &text('eopt_snettitle',$client->{'values'}->[0]);
    $back = $text{'eopt_returnshsub'};
    $backlink = "edit_shared.cgi";
    &error("$text{'eacl_np'} $text{'eacl_psn'}") if !&can('r',\%access,$client);
    }
elsif ($client->{'name'} eq 'host') {
    $title = &text('eopt_hosttitle',$client->{'values'}->[0]);
    $back = $text{'eopt_returnhost'};
    $backlink = "edit_host.cgi";
    &error("$text{'eacl_np'} $text{'eacl_psh'}") if !&can('r',\%access,$client);
    }
elsif ($client->{'name'} eq 'group') {
    @mc = &find("host", $client->{'members'});
    $title = &text('eopt_grouptitle',scalar(@mc));
    $back = $text{'eopt_returngroup'};
    $backlink = "edit_group.cgi";
    &error("$text{'eacl_np'} $text{'eacl_psg'}") if !&can('r',\%access,$client);
    }
else {
    $title = $text{'eopt_alltitle'};
    $back = $text{'eopt_returnindex'};
    $backlink = "";
    &error("$text{'eacl_np'} $text{'eacl_pglob'}") if !$access{'global'};
    }

# display
$backlink .= "?idx=".$in{'idx'}."&gidx=".$in{'gidx'}."&uidx=".$in{'uidx'}.
         "&sidx=".$in{'sidx'} if (backlink);
&ui_print_header($title, $text{'eopt_header'}, "");

print "<form action=save_options.cgi method=post>\n";
printf "<input type=hidden name=level value='%s'>\n",
    $in{'global'} ? "global" : $client->{'name'};
print "<input type=hidden name=idx value='$in{'idx'}'>\n";
print "<input type=hidden name=gidx value='$in{'gidx'}'>\n";
print "<input type=hidden name=uidx value='$in{'uidx'}'>\n";
print "<input type=hidden name=sidx value='$in{'sidx'}'>\n";
print "<table border width=100%>\n";
print "<tr $tb> <td><b>$text{'eopt_tabhdr'}</b></td> </tr>\n";
print "<tr $cb> <td><table width=100%>\n";
@opts = &find("option", $client->{'members'});

print "<tr>\n";
print &option_input($text{'eopt_chost'}, "host-name", \@opts, 3);
print &option_input($text{'eopt_defrouters'}, "routers", \@opts, 2);
print "</tr>\n";

print "<tr>\n";
print &option_input($text{'eopt_smask'}, "subnet-mask", \@opts, 0);
print &option_input($text{'eopt_baddr'}, "broadcast-address", \@opts, 0);
print "</tr>\n";

print "<tr>\n";
print &option_input($text{'eopt_domname'}, "domain-name", \@opts, 3);
print &option_input($text{'eopt_dnsserv'}, "domain-name-servers", \@opts, 2);
print "</tr>\n";

print "<tr>\n";
print &option_input($text{'eopt_domsearch'}, "domain-search", \@opts, 6);
print "</tr>\n";

print "<tr>\n";
print &option_input($text{'eopt_timeserv'}, "time-servers", \@opts, 2);
print &option_input($text{'eopt_logserv'}, "log-servers", \@opts, 2);
print "</tr>\n";

print "<tr>\n";
print &option_input($text{'eopt_swapserv'}, "swap-server", \@opts, 2);
print &option_input($text{'eopt_rdpath'}, "root-path", \@opts, 3);
print "</tr>\n";

print "<tr>\n";
print &option_input($text{'eopt_nisdom'}, "nis-domain", \@opts, 3);
print &option_input($text{'eopt_nisserv'}, "nis-servers", \@opts, 2);
print "</tr>\n";

print "<tr>\n";
print &option_input($text{'eopt_fontserv'}, "font-servers", \@opts, 2);
print &option_input($text{'eopt_xdmserv'}, "x-display-manager", \@opts, 2);
print "</tr>\n";

print "<tr>\n";
print &option_input($text{'eopt_statrouters'}, "static-routes", \@opts, 5);
print "</tr>\n";

print "<tr>\n";
print &option_input($text{'eopt_ntpserv'}, "ntp-servers", \@opts, 2);
print &option_input($text{'eopt_nbns'}, "netbios-name-servers", \@opts, 2);
print "</tr>\n";

print "<tr>\n";
print &option_input($text{'eopt_nbs'}, "netbios-scope", \@opts, 3);
print &option_input($text{'eopt_nbntype'}, "netbios-node-type", \@opts, 1);
print "</tr>\n";

print "<tr>\n";
print &option_input($text{'eopt_toffset'}, "time-offset", \@opts, 1);
print &option_input($text{'plib_serverid'}, "dhcp-server-identifier", \@opts, 3);
print "</tr>\n";

print "<tr>\n";
print &option_input($text{'eopt_slpa'}, "slp-directory-agent", \@opts, 2,
            $text{'eopt_slpaips'});
print "</tr>\n";

print "<tr>\n";
print &option_input($text{'eopt_slps'}, "slp-service-scope", \@opts, 3,
            $text{'eopt_slpsonly'});
print "</tr>\n";

if ($config{'dhcpd_version'} >= 3) {
    # Show option definitions
    print "<tr> <td colspan=4><hr></td> </tr>\n";
    @defs = grep { $_->{'values'}->[1] eq 'code' &&
               $_->{'values'}->[3] eq '=' } @opts;
    push(@defs, undef);
    for($i=0; $i<@defs; $i++) {
        $o = $defs[$i];
        print "<tr>\n";
        print "<td><b>$text{'eopt_def'}</b></td> <td nowrap colspan=3>\n";
        print "$text{'eopt_dname'}\n";
        printf "<input name=dname_$i size=15 value='%s'>\n",
            $o->{'values'}->[0];
        print "$text{'eopt_dnum'}\n";
        printf "<input name=dnum_$i size=4 value='%s'>\n",
            $o->{'values'}->[2];
        print "$text{'eopt_dtype'}\n";
        my $a=scalar(@{$o->{'values'}})-1;
        printf "<input name=dtype_$i size=40 value='%s'>\n",
            join(" ",@{$o->{'values'}}[4..$a]);
        print "</td> </tr>\n";
        }

    # Find option definitions at higher levels
    %optdef = ( );
    foreach $p (@parents) {
        @popts = &find("option", $p->{'members'});
        @pdefs = grep { $_->{'values'}->[1] eq 'code' &&
                    $_->{'values'}->[3] eq '=' } @popts;
        foreach $o (@pdefs) {
            $optdef{$o->{'values'}->[0]} = $o
                if ($o->{'values'}->[0]);
            }
        }

    # Show values for custom options
    if (keys %optdef) {
        @custom = grep { $optdef{$_->{'values'}->[0]} &&
                 $_->{'values'}->[1] ne 'code' } @opts;
        push(@custom, undef);
        push(@custom, undef) if (@custom%2 == 1);
        for($i=0; $i<@custom; $i++) {
            $o = $custom[$i];
            print "<tr> <td><b>$text{'eopt_custom'}</b></td>\n";
            print "<td nowrap colspan=3>$text{'eopt_cname'}\n";
            local ($ov, @v) = @{$o->{'values'}};
            print &ui_select("cname_$i", $ov,
                [ [ "", "&nbsp;" ],
                  sort { $a cmp $b } keys %optdef ],
                1, 0, $ov ? 1 : 0);
            print "$text{'eopt_cval'}\n";
            print &ui_textbox("cval_$i", join(" ", @v), 40);
            print "</td> </tr>\n";
            }
        }
    }
else {
    # Show custom numeric options
    print "<tr> <td colspan=4><hr></td> </tr>\n";
    @custom = grep { $_->{'values'}->[0] =~ /^option-(\S+)$/ &&
             $_->{'values'}->[1] ne 'code' } @opts;
    push(@custom, undef);
    push(@custom, undef) if (@custom%2 == 1);
    for($i=0; $i<@custom; $i++) {
        $o = $custom[$i];
        print "<tr>\n" if ($i%2 == 0);
        print "<td><b>$text{'eopt_custom'}</b></td>\n";
        print "<td nowrap>$text{'eopt_cnum'}\n";
        local ($ov, @v) = @{$o->{'values'}};
        printf "<input name=cnum_$i size=4 value='%s'>\n",
            $ov =~ /^option-(\S+)$/ ? $1 : '';
        print "$text{'eopt_cval'}\n";
        printf "<input name=cval_$i size=15 value='%s'></td>\n",
            join(" ", @v);
        print "</tr>\n" if ($i%2 != 0);
        }
    }

if ($in{'global'}) {
    # Display options for subnets and hosts too
    print "<tr> <td colspan=4><hr></td> </tr>\n";
    print "<tr>\n";
    print &choice_input($text{'egroup_nchoice'}, "use-host-decl-names",
                $conf, $text{'yes'}, "on", $text{'no'}, "off",
                $text{'default'}, "");
    &display_params($conf, "global");
    }

print "</table></td></tr></table>\n";
print "<input type=submit value=\"$text{'save'}\"></form>\n"
    if &can('rw',\%access,$client);
&ui_print_footer($backlink, $back);

# option_input(text, name, &config, type, [initial-boolean])
# types values:    0  - IP address
#        1  - Integer
#        2  - IP address list
#        3  - String
#        4  - Yes/no flag
#        5  - IP address pairs
#        6  - String list
sub option_input
{
local($rv, $v, $i);
for($i=0; $i<@{$_[2]}; $i++) {
    if ($_[2]->[$i]->{'values'}->[0] eq $_[1]) {
        $v = $_[2]->[$i];
        last;
        }
    }
$rv = "<td><b>$_[0]</b></td>\n";
if ($_[3] == 5 || $_[3] == 6 || $_[4]) { $rv .= "<td colspan=3 nowrap>"; }
else { $rv .= "<td nowrap>"; }
$rv .= sprintf "<input type=radio name=$_[1]_def value=1 %s> $text{'default'}\n",
    $v ? "" : "checked";
$rv .= sprintf "<input type=radio name=$_[1]_def value=0 %s> ",
    $v ? "checked" : "";
local @vl = $v ? @{$v->{'values'}} : ();
@vl = @vl[1..$#vl];
local $bool;
if ($_[4]) {
    $bool = shift(@vl);
    }
if ($_[3] == 0) {
    $rv .= "<input name=$_[1] size=15 value=\"$vl[0]\">\n";
    }
elsif ($_[3] == 1) {
    $rv .= "<input name=$_[1] size=4 value=\"$vl[0]\">\n";
    }
elsif ($_[3] == 2) {
    @vl = map { s/,//g; $_ } grep { $_ ne "," } @vl;
    $rv .= "<input name=$_[1] size=20 value=\"".join(" ", @vl)."\">\n";
    }
elsif ($_[3] == 3) {
    local $str = &oct_to_string($vl[0]);
    $rv .= "<input name=$_[1] size=20 value=\"$str\">\n";
    }
elsif ($_[3] == 4) {
    $rv .= sprintf "<input name=$_[1] value=1 %s> Yes\n",
            $vl[0] eq "1" ? "checked" : "";
    $rv .= sprintf "<input name=$_[1] value=0 %s> No\n",
            $vl[0] eq "0" ? "checked" : "";
    }
elsif ($_[3] == 5) {
    @vl = grep { $_ ne "," } @vl;
    $rv .= "<input name=$_[1] size=50 value=\"";
    for($i=0; $i<@vl; $i+=2) {
        $rv .= " " if ($i);
        $rv .= $vl[$i].",".$vl[$i+1];
        }
    $rv .= "\">\n";
    }
elsif ($_[3] == 6) {
    @vl = map { s/,//g; $_ } grep { $_ ne "," } @vl;
    $rv .= "<input name=$_[1] size=50 value=\"".join(" ", @vl)."\">\n";
    }
if ($_[4]) {
    $rv .= &ui_checkbox($_[1]."_bool", 1, $_[4], lc($bool) eq "true");
    }
$rv .= "</td>\n";
return $rv;
}

sub oct_to_string
{
local @b = split(/:/, $_[0]);
local $rv;
foreach $b (@b) {
    if ($b !~ /^[A-z0-9]{1,2}$/) {
        # Wasn't actually in octet format after all.
        return $_[0];
        }
    $rv .= chr(hex($b));
    }
return $rv;
}


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