!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/dnsadmin/   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:     dns-lib.pl (5.17 KB)      -rwxr-xr-x
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
# dnsadmin common functions

BEGIN { push(@INC, ".."); };
use WebminCore;
&init_config();
&foreign_require("bind8", "bind8-lib.pl");
do "$bind8::module_root_directory/records-lib.pl";

# mapping between record types and names
%code_map = ("A", "Address", "NS", "Name Server", "CNAME", "Name Alias",
         "MX", "Mail Server", "HINFO", "Host Information", "TXT", "Text",
         "WKS", "Well Known Service", "RP", "Responsible Person",
         "PTR", "Reverse Address");

# get_config()
# Returns the current bind4 configuration
sub get_config
{
if (!@get_config_cache) {
        @get_config_cache = &read_config_file($config{'named_boot_file'});
        }
return \@get_config_cache;
}

# read_config_file(filename, [dont expand includes])
# Read and parse a BIND4 format config file
sub read_config_file
{
# read primary config file
local $lnum = 0;
local $n = 0;
local($i, $j, @rv);
open(CONF, $_[0]);
while(<CONF>) {
    s/\r|\n//g;    # strip newline
    s/;.*$//g;    # strip comments
    s/\s+$//g;    # strip trailing spaces
    if (/^(\S+)\s*(.*)$/) {
        local(%dir);
        $dir{'name'} = $1;
        $dir{'value'} = $2;
        $dir{'values'} = [ split(/\s+/, $2) ];
        $dir{'line'} = $lnum;
        $dir{'file'} = $_[0];
        $dir{'index'} = $n++;
        push(@rv, \%dir);
        }
    $lnum++;
    }
close(CONF);

# expand include directives
for($i=0; $i<@rv; $i++) {
    if ($rv[$i]->{'name'} eq "include" && !$_[1]) {
        # replace this include directive
        $inc = $rv[$i]->{'value'};
        if ($inc !~ /^\//) {
            $inc = &base_directory(\@rv)."/".$inc;
            }
        @inc = &read_config_file($inc, 1);

        # update index of included structures
        for($j=0; $j<@inc; $j++) {
            $inc[$j]->{'index'} += $rv[$i]->{'index'};
            }

        # update index of directives after include
        for($j=$i+1; $j<@rv; $j++) {
            $rv[$j]->{'index'} += scalar(@inc) - 1;
            }

        splice(@rv, $i--, 1, @inc);
        }
    }
return @rv;
}

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

# base_directory([&config])
# Returns the base directory for include and domain files
sub base_directory
{
$conf = @_ ? $_[0] : &get_config();
$dir = &find_config("directory", $conf);
if ($dir) { return $dir->{'values'}->[0]; }
$config{'named_boot_file'} =~ /^(.*)\/[^\/]+$/;
return $1;
}

# create_zone(&details)
sub create_zone
{
local(@v) = @{$_[0]->{'values'}};
open(ZONE, ">> $config{'named_boot_file'}");
print ZONE $_[0]->{'name'}.(@v ? " ".join(" ", @v) : "")."\n";
close(ZONE);
}

# modify_zone(&old, &details)
sub modify_zone
{
local(@v) = @{$_[1]->{'values'}};
&replace_file_line($_[0]->{'file'}, $_[0]->{'line'},
           $_[1]->{'name'}.(@v ? " ".join(" ", @v) : "")."\n");
}

# delete_zone(&old)
sub delete_zone
{
&replace_file_line($_[0]->{'file'}, $_[0]->{'line'});
}

# find_reverse(address)
# Returns the zone and record structures for the PTR record for some address
sub find_reverse
{
local($conf, @zl, $rev, $z, $revconf, $revfile, $revrec, @revrecs, @octs, $rr);

# find reverse domain
$conf = &get_config();
@zl = &find_config("primary", $conf);
@octs = split(/\./, $_[0]);
for($i=2; $i>=0; $i--) {
    $rev = &ip_to_arpa(join('.', @octs[0..$i]));
    $rev =~ s/\.$//g;
    foreach $z (@zl) {
        if (lc($z->{'values'}->[0]) eq $rev) {
            # found the reverse master domain
            $revconf = $z;
            last;
            }
        }
    }

# find reverse record
if ($revconf) {
        $revfile = $revconf->{'values'}->[1];
        @revrecs = &read_zone_file($revfile, $revconf->{'values'}->[0]);
        local $addr = &ip_to_arpa($_[0]);
        foreach $rr (@revrecs) {
                if ($rr->{'type'} eq "PTR" &&
                    lc($rr->{'name'}) eq lc($addr)) {
                        # found the reverse record
                        $revrec = $rr;
                        last;
                        }
                }
        }
return ($revconf, $revfile, $revrec);
}

# find_forward(address)
# Returns the zone and record structures for the A record for some address
sub find_forward
{
local($conf, @zl, $fwd, $z, $fwdconf, $fwdfile, $fwdrec, @fwdrecs, @octs, $rr);

# find reverse domain
local $host = $_[0]; $host =~ s/\.$//;
$conf = &get_config();
@zl = &find_config("primary", $conf);
local @parts = split(/\./, $host);
DOMAIN: for($i=1; $i<@parts; $i++) {
    local $fwd = join(".", @parts[$i .. @parts-1]);
    foreach $z (@zl) {
        local $typed;
        if (lc($z->{'values'}->[0]) eq $fwd) {
            # Found the forward master!
            $fwdconf = $z;
            last DOMAIN;
            }
        }
    }

# find forward record
if ($fwdconf) {
        $fwdfile = $fwdconf->{'values'}->[1];
        local @fwdrecs = &read_zone_file($fwdfile, $fwdconf->{'values'}->[0]);
        foreach $fr (@fwdrecs) {
                if ($fr->{'type'} eq 'A' &&
                    $fr->{'name'} eq $_[0]) {
                        # found the forward record
                        $fwdrec = $fr;
                        last;
                        }
                }
        }
return ($fwdconf, $fwdfile, $fwdrec);
}

# can_edit_zone(&access, zone)
sub can_edit_zone
{
local %zcan;
return 1 if ($access{'zones'} eq '*');
foreach (split(/\s+/, $access{'zones'})) {
        return 1 if ($_ eq $_[1]);
        }
return 0;
}

sub make_chroot
{
return $_[0];
}

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