!C99Shell v. 1.0 pre-release build #16!

Software: Apache/2.0.54 (Fedora). PHP/5.0.4 

uname -a: Linux mina-info.me 2.6.17-1.2142_FC4smp #1 SMP Tue Jul 11 22:57:02 EDT 2006 i686 

uid=48(apache) gid=48(apache) groups=48(apache)
context=system_u:system_r:httpd_sys_script_t
 

Safe-mode: OFF (not secure)

/home/mnnews/public_html/cgi-bin/ekonnews/   drwxr-xr-x
Free 3.94 GB of 27.03 GB (14.59%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     viewnews.cgi (17.51 KB)      -rwxr-xr-x
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
#!/usr/bin/perl
# viewnews.cgi
# NewsPro User CGI
# Version: 3.7.4 build 23
# See newspro.cgi for license information.

# SCRIPT SETTINGS

# If you are using Microsoft IIS, set the following to 1. If you are
# using Unix/Apache, set it to 2. Setting it 0 tries to determine
# automatically, and usually works just fine. If you use IIS yet have
# 500 error problems, try setting the variable to 2, then try 3.

$IIS = 0;

# Set this to 1 to use flock(). Highly recommended if your server supports it (most do)

$UseFlock = 1;

# If you want to use a subroutine other than DoNewsHTML for viewnews.cgi functions,
# other than search, enter the name here. e.g. 'DoHeadlineHTML'

$VNSub = 'DoNewsHTML';

# If you want to a template other than viewnews.tmpl for viewnews.cgi functions,
# enter the name here. The template file must be in your NewsPro directory
# (the same directory that viewnews.cgi is in).

$VNTmpl = 'viewnews.tmpl';

# Set this to 1 to automatically look for and load ViewNews addons.
# Generally, enable this only if you have addons installed.
# This does slow down viewnews.cgi, as it has to scan for addons
# whenever it is run.

$EnableAddons = 0;

# END OF SETTINGS (unless you encounter problems - then fill out the next section)

# SERVER PROBLEMS WORKAROUNDS
# If the script either gets its URL wrong or produces a fatal error
# about not being able to include npconfig.pl, set the following variables.
# While it won't hurt, most users don't have to.

$abspath = '';
# Set the above to the absolute path to NewsPro's directory, without
# a trailing slash. Example:
# $abspath = '/absolute/path/to/newspro';

$scripturl = '';
# Set the above to the URL to newspro.cgi. Example:
# $scripturl = 'http://www.myserver.com/newspro/newspro.cgi';
# Once again, you only need to set the above two variables if you're
# having server problems.

# END SERVER PROBLEMS WORKAROUNDS

# The script begins...

eval { &main; };
if ($@) {
    &NPdie("Untrapped Error: $@");
}
exit;

sub main {
# Microsoft servers. Try and be compatible...
if ($IIS != 2) {
    if ($IIS == 0) {
        if ($ENV{'SERVER_SOFTWARE'} =~ m!IIS!) {
            $IIS = 1
        }
    }
    if (($IIS) && ($0 =~ m!(.*)(\\|\/)!)) {
        chdir($1);
    }
    if ($IIS == 1) {
        print "HTTP/1.0 200 OK\n";
    }
}
# That's over!

# Server problem workaround #1
if ($abspath) {
    push(@INC, $abspath);
}

require "npconfig.pl";
require "ndisplay.pl";
require "nplib.pl";
ReadForm();
SubmitFormFields();
push(@formfields, 'newstext');

# Put the script's URL into $scripturl.
# Don't if it was already set as a server problem workaround.
unless ($scripturl) {
    $scripturl = &GetScriptURL;
}

ReadConfigInfo();
if ($EnableAddons) {&LoadAddons;}
if (@Addons_ViewNews_Handler) {
    &RunAddons(@Addons_ViewNews_Handler);
}

if (query_string() eq "dispsearchform") {
    print header();
    print qq~
    <b>News Search</b><br>
    <form action="$scripturl?search" method="post">
    <input type="text" name="searchstring" value="Search String">
    Search Field: <select name="searchfield"><option selected>All fields</option>
    ~;
    foreach $i (@formfields) {
        print qq~<option value="$i">$i</option>~;
    }
    print qq~
    </select>
    <input type="submit" name="submit" value="Submit">
    </form>
    ~;
}

elsif (query_string() =~ /^search/) {
    DoSearch();
}


elsif (query_string() eq "emaillist") {
    &EmailList;
}
elsif (query_string() eq "emaillistform") {
    print header();
    print qq~
    <form action="$scripturl?emaillist" method="post">
    <input type="text" name="npemail" value="your e-mail">
    <input type="submit" name="npsubscribe" value="Subscribe">
    <input type="submit" name="npunsubscribe" value="Unsubscribe">
    </form>
    ~;
}
elsif (query_string() =~ /^news/) {
    &ShowNews;
}
elsif (query_string() =~ /^archive/) {
    &ShowArchivedNews;
}
elsif (query_string() eq "disparchiveform") {
    print header();
    print qq~
    <html><body>Below are three forms that can be used to view your archives. Cut and paste these
    forms from the page source.<hr>
    <!-- START ARCHIVE FORM #1 -->
    <form action="$scripturl?archive" method="post">
    View news from: <select name="year">
    <option value="" selected>Year</option>~;
    &PrintSelectValues('same','1999','2000','2001','2002','2003');
    print qq~
    </select><select name="month">
    <option value="" selected>Month</option>~;
    &PrintSelectValues('January','February','March','April','May','June','July','August','September','October','November','December');
    print qq~
    </select><select name="day">
    <option value="" selected>Day</option>~;
    &PrintSelectValues('same',1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31);
    print qq~
    </select><input type="submit" name="submit" value="Submit"></form>
    <!-- END ARCHIVE FORM #1 -->
    <hr>
    <!-- START ARCHIVE FORM #2 -->
    <form action="$scripturl?archive" method="post">
    View news from <select name="year1">
    <option value="" selected>Year</option>~;
    &PrintSelectValues('same','1999','2000','2001','2002','2003');
    print qq~
    </select><select name="month1">
    <option value="" selected>Month</option>~;
    &PrintSelectValues('January','February','March','April','May','June','July','August','September','October','November','December');
    print qq~
    </select><select name="day1">
    <option value="" selected>Day</option>~;
    &PrintSelectValues('same',1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31);
    print qq~
    </select> to <select name="year2">
    <option value="" selected>Year</option>~;
    &PrintSelectValues('same','1999','2000','2001','2002','2003');
    print qq~
    </select><select name="month2">
    <option value="" selected>Month</option>~;
    &PrintSelectValues('January','February','March','April','May','June','July','August','September','October','November','December');
    print qq~
    </select><select name="day2">
    <option value="" selected>Day</option>~;
    &PrintSelectValues('same',1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31);
    print qq~
    </select> <input type="submit" name="submit" value="Submit"></form>
    <!-- END ARCHIVE FORM #2 -->
    <hr>
    <!-- START ARCHIVE FORM #3 -->
    <form action="$scripturl?archive" method="post">
    View news from the past <input type="text" name="pastdays" size="4" value="7"> days. <input type="submit" name="submit" value="Submit"></form>
    <!-- END ARCHIVE FORM #3 -->
    </body></html>~;    
}
else {
    $OnlyNewNews = 1;
    print header();
    MiniGenHTML(1);
}
}
sub MiniGenHTML {
    my $printmode = shift;
    &GetCookies;
    &loadND;
    $currenttime = time;
    local ($content) = "";
    $oldtime = $currenttime - $NPConfig{'mainpagelimit'};
    $newsnum = @NewsData;
    if ($NPConfig{'NumberLimit'}) {
        $oldnum = $newsnum - $NPConfig{'NumberLimit'};
        if ($oldnum > 0) {
            $oldtime = $NewsData[$oldnum]->{'newstime'};
        } else {
            $oldtime = $NewsData[0]->{'newstime'};
        }
    }
    $newsnum--;
    NVLOOP: while ($newsnum >= 0) {
    getNDvar($newsnum);
    if ($NPConfig{'NewsArcDel'} eq "0" || $newstime >= $oldtime) {
        $BeingArchived = 0;
        $DynamicPage = 1;
        if (@Addons_ViewNews_Build) {
            &RunAddons(@Addons_ViewNews_Build);
        }
        &$VNSub;
        if ($NPConfig{'CreateAnchors'}) {$newshtml = qq~<a name="newsitem$newsid"></a>$newshtml~;}
        unless ($printmode) {
            $content .= $newshtml;
        }
        else {
            print $newshtml;
        }
    }
    $newsnum--;
    }
    if ($NPConfig{'DisplayLink'}) {
            # You can modify this link if you'd like.
            $content .= qq~ <i><small>$Messages{'DisplayLink'} <a href="http://amphibian.gagames.com/newspro/" target="_top">$Messages{'NewsPro'}</a>.</small></i><br> ~;
    }
    unless ($printmode) {
        return $content;
    }
}


sub ShowArchivedNews {
    print header();
    my $content = '';
    my $startdate;
    my $enddate;
    if (query_string() =~ /^archive(\d{4})-(\d{1,2})-(\d{1,2})to(\d{4})-(\d{1,2})-(\d{1,2})/) {
        my ($year1, $month1, $day1, $year2, $month2, $day2) = ($1, $2, $3, $4, $5, $6);
        $startdate = &YMDtoUNIX($year1, $month1, $day1);
        $enddate = &YMDtoUNIX($year2, $month2, $day2);
        $enddate = $enddate + 86399;
    } elsif (query_string() =~ /^archivepast(\d+)days/) {
        ($startdate, $enddate) = &PastDaysTime($1);
    } elsif ($in{'pastdays'}) {
        ($startdate, $enddate) = &PastDaysTime($in{'pastdays'});
    } elsif ($in{'year'} && $in{'day'} && $in{'month'}) {
        $startdate = &YMDtoUNIX($in{'year'}, $in{'month'}, $in{'day'});
        $enddate = $startdate + 86399;
    } elsif ($in{'year1'} && $in{'year2'} && $in{'day1'} && $in{'day2'} && $in{'month1'} && $in{'month2'}) {
        $startdate = &YMDtoUNIX($in{'year1'}, $in{'month1'}, $in{'day1'});
        $enddate = &YMDtoUNIX($in{'year2'}, $in{'month2'}, $in{'day2'});
        $enddate = $enddate + 86399;
    } else {
        &NPdie($Messages{'Viewnews_Error_1'});
    }
    my @NewNewsData;
    &loadND;
    foreach $i (@NewsData) {
        if ($i->{'newstime'} >= $startdate && $i->{'newstime'} <= $enddate) {
            push(@NewNewsData, $i);
        }
    }
    @NewsData = @NewNewsData;
    $newsnum = @NewsData;
    if ($newsnum == 0) {
        &NPdie($Messages{'Viewnews_Error_1'});
    }
    $newsnum--;
    NVLOOP: while ($newsnum >= 0) {
        &getNDvar($newsnum);
        if (@Addons_ViewNews_Archive) {
            &RunAddons(@Addons_ViewNews_Archive);
        }
        &{$VNSub};
        if ($NPConfig{'CreateAnchors'}) {$newshtml = qq~<a name="newsitem$newsid"></a>$newshtml~;}
        $content .= $newshtml;
        $newsnum--;
    }
    my $date1 = GetTheDate($startdate);
    my $date2 = GetTheDate($enddate);
    &GenPage("$Messages{'Viewnews_From'} $date1 $Messages{'Viewnews_To'} $date2", $content);
}
    
    
    

sub ShowNews {
    print header();
    local ($content) = "";
    $OnlyNewNews = 0;
    query_string() =~ /^news(\S+)/;
    $newsparam = $1;
    if ($newsparam ne "") {
        &loadND;
        $newsnum = @NewsData;
        if (@Addons_ViewNews_Show3) {
            &RunAddons(@Addons_ViewNews_Show3);
        }
        if ($newsparam eq "all") {
            $newsstart = 0;
            $newsend = $newsnum - 1;
        } elsif ($newsparam =~ /item(\d+)/) {
            $newsstart = $1;
            $newsend = $newsstart;
        } elsif ($newsparam =~ /id(\S+)/) {
            $nid = $1;
            $nid =~ s/\_/\,/g;
            $nid =~ s/[^\d,]//g;
            $newsstart = $NewsID{$nid};
            $newsend = $newsstart;
        } else {
            $newsparam =~ /start(\d+)end(\d+)/;
            $newsstart = $1;
            $newsend = $2;
        }
        if (($newsstart < 0) || ($newsstart >= $newsnum) || ($newsend < $newsstart) || ($newsend >= $newsnum) || !defined $newsstart) {
            &NPdie($Messages{'Viewnews_Error_3'});
        }
        $newscount = $newsend;
        while ($newscount >= $newsstart) {
            &getNDvar($newscount);
            $newsnum = $newscount;
            $DynamicPage = 1;
            if (@Addons_ViewNews_Show) {
                &RunAddons(@Addons_ViewNews_Show);
            }
            &{$VNSub};
            if ($NPConfig{'CreateAnchors'}) {$newshtml = qq~<a name="newsitem$newsid"></a>$newshtml~;}
            $content .= $newshtml;
            $newscount--;
        }
        if ($newsstart == $newsend) { $gptitle = $newssubject; }
        else { $gptitle = "$Messages{'Viewnews_Items'} $newsstart-$newsend"; }
        if (@Addons_ViewNews_Show2) {
            &RunAddons(@Addons_ViewNews_Show2);
        }
        &GenPage($gptitle, $content);
    } else {
        $content = MiniGenHTML();
        &GenPage($Messages{'Viewnews_Latest'}, $content);
    }
}

sub EmailList {
    @emaillist = split(/~/, $NPConfig{'emaillist'});
    if ($in{'npsubscribe'}) {
        $in{'npemail'} = lc $in{'npemail'};
        $in{'npemail'} =~ s/\n//g;
        $in{'npemail'} =~ s/\r//g;
        $in{'npemail'} =~ s/~//g;
        $in{'npemail'} =~ s/``x//g;
        $in{'npemail'} =~ s/,//g;
        my $IsDuplicate = 0;
        if ($in{'npemail'} =~ m/^(\S+)\@(\S+).(\S+)/) {
            foreach $i (@emaillist) {
                if ($in{'npemail'} eq $i) {
                    $IsDuplicate = 1;
                    last;
                }
            }
            unless ($IsDuplicate) {
                $NPConfig{'emaillist'} .= "~$in{'npemail'}";
                &WriteConfigInfo;
            }
            &ELPage(1, $Messages{'Viewnews_EmailAdd'});
        } else {
            &ELPage(0, "$in{'npemail'} $Messages{'Viewnews_EmailFail'}");
        }
    }
    elsif ($in{'npunsubscribe'}) {
        foreach $i (@emaillist) {
            if ($i =~ /^\Q$in{'npemail'}\E$/i) {
                $UnsubscribeSuccess = 1;
            } else {
                push(@newemaillist, $i);
            }
        }
        if ($UnsubscribeSuccess) {
            $NPConfig{'emaillist'} = join('~', @newemaillist);
            &WriteConfigInfo;
            &ELPage(1, "$in{'npemail'} $Messages{'Viewnews_EmailUnsubSuccess'}");
        } else {
            &ELPage(0, "$in{'npemail'} $Messages{'Viewnews_EmailUnsubFail'}");
        }
    } else {
        &ELPage(0, $Messages{'Viewnews_EmailIncomplete'});
    }
}
sub ELPage {
    local ($statuscode, $statusmsg) = @_;
    if ($in{'successredirect'} && $statuscode == 1) {
        print "Location: $in{'successredirect'}\n\n";
        exit;
    }
    if ($in{'failureredirect'} && $statuscode == 0) {
        print "Location: $in{'failureredirect'}\n\n";
        exit;
    }
    print header();
    if ($statuscode) {
        &GenPage("$Messages{'Viewnews_Mailing'}: $Messages{'Viewnews_Success'}", $statusmsg);
    } else {
        &GenPage("$Messages{'Viewnews_Mailing'}: $Messages{'Viewnews_Failure'}", $statusmsg);
    }
}
sub NPdie {
    unless ($HeaderPrinted) {
        print header();
    }
    my $error = shift;
    my $content = "<p><b>Error: $error</b></p>";
    if ($NPdied == 1) {
        print $content;
    } else {
        $NPdied = 1;
        &GenPage("$NPConfig{'SiteTitle'} $Messages{'Error'}", $content);
    }
    exit;
}    
sub DoSearch {
        print header();
        $content = '';
        my %SearchScore;
        &loadND;
        unless ($in{'searchstring'}) {
            query_string() =~ /^search(.*)/;
            $in{'searchstring'} = $1;
            $in{'searchstring'} =~ tr/+/ /;
            $in{'searchstring'} =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
        }
        if ($in{'searchfield'}) {
            foreach $field (@formfields) {
                if ($field eq $in{'searchfield'}) {
                    $FieldMatched = 1;
                    last;
                }
            }
            unless ($FieldMatched) {
                $in{'searchfield'} = "";
            }
        }
        require Text::ParseWords;
        @searchstring = &Text::ParseWords::quotewords('\s+', 0, $in{'searchstring'});
        if (@Addons_ViewNews_DoSearch) {
            &RunAddons(@Addons_ViewNews_DoSearch);
        }
        $newsnum = 0;
        VNLOOP: while ($newsnum < @NewsData) {
            if (@Addons_ViewNews_DoSearch2) {
                &RunAddons(@Addons_ViewNews_DoSearch2)
            }
            if ($in{'searchfield'}) {
                &getNDvar($newsnum);
                $searchData = ${$in{'searchfield'}};
            } else {
                $searchData = join(' ', $NewsData[$newsnum]->{'newstext'}, $NewsData[$newsnum]->{'newssubject'}, $NewsData[$newsnum]->{'newsname'});
            }
            foreach $j (@searchstring) {
                if ($searchData =~ /\Q$j/i) {
                    if ($SearchScore{$newsnum}) {
                        $SearchScore{$newsnum}++;
                    }
                    else {
                        push(@searchresults, $newsnum);
                        push(@searchdates, $NewsData[$newsnum]->{'newstime'});
                        $SearchScore{$newsnum} = 1;
                    }                    
                }
            }
            $newsnum++;
        }
        if (@searchresults > 0) {
            # We have results. Start sorting!
            # Build an array of search scores.
            foreach $key (sort {$a <=> $b} keys %SearchScore) {
                push(@searchscores, $SearchScore{$key});
            }
            # Array built. Now, sort by score, then date.
            @resultssorted = @searchresults [ sort { $searchdates[$a] <=> $searchdates[$b] } 0 .. $#searchdates];
            @resultssorted = @resultssorted [ sort { $searchscores[$a] <=> $searchscores[$b] } 0 .. $#searchscores];
            @resultssorted = reverse(@resultssorted);
            # Sorting is finished. Cut off number of results...
            my $maxsearch = $NPConfig{'MaxSearchResults'} - 1;
            if ($maxsearch < 0) {
                $maxsearch = 0;
            }
            my $rstotal = @resultssorted - 1;
            if ($maxsearch > $rstotal) {
                $maxsearch = $rstotal;
            }
            @resultssorted = @resultssorted[0 .. $maxsearch];
            # ... and display.
            foreach $newsnum (@resultssorted) {
                &getNDvar($newsnum);
                $SearchResult = 1;
                &DoSearchHTML;
                $content .= $newshtml;
            }
        } else {
            $content .= "<b>$Messages{'Viewnews_NoResults'}</b>";
        }
        &GenPage($Messages{'Viewnews_Results'}, $content);
}
sub GenPage {
    my $title = shift;
    my $content = shift;
    $HTTP_REFERER = $ENV{'HTTP_REFERER'};
    if ($abspath) {
        NPopen(TMPL, "$abspath/$VNTmpl");
    }
    else {
        NPopen(TMPL, $VNTmpl);
    }
    @tmpl = <TMPL>;
    close(TMPL);
    $tmpl = join('', @tmpl);
    $tmpl =~ s/<!--INSTRUCTIONS[\s\S]+?END INSTRUCTIONS-->//g;
    $tmpl =~ s/<TextField\: ([^\s\>\{\[]+)>/${\(HTMLtoText(${$1}))}/g;
    $tmpl =~ s/<TextField\: ([^\s\>\{]+)\{[\'\"]([^\s\>\}\'\"]+)[\'\"]\}>/${\(HTMLtoText(${$1}{$2}))}/g;
    $tmpl =~ s/<TextField\: ([^\s\>\[]+)\[(\d+)\]>/${\(HTMLtoText(${$1}[$2]))}/g;
    $tmpl =~ s/<Field\: ([^\s\>\{\[]+)>/${$1}/gi;
    $tmpl =~ s/<Field\: ([^\s\>\{]+)\{[\'\"]([^\s\>\}\'\"]+)[\'\"]\}>/${$1}{$2}/g;
    $tmpl =~ s/<Field\: ([^\s\>\[]+)\[(\d+)\]>/${$1}[$2]/g;    
    $tmpl =~ s/<\!--#include file\s*?=\s*?"(\S+?)"\s*?-->/${\(VNFileLoad($1))}/gi;
    $tmpl =~ s/<InsertTitle>/$title/g;
    $tmpl =~ s/<InsertContent>/$content/;
    $tmpl =~ s/<InsertTextContent>/${\(HTMLtoText($content))}/g;
    if (@Addons_ViewNews_GenPage) {
        &RunAddons(@Addons_ViewNews_GenPage);
    }
    print $tmpl;
}

sub VNFileLoad {
    my $fname = shift;
    my $file;
    $fname =~ s/([\&;\`'\|\"*\?\~\^\(\)\[\]\{\}\$\n\r])//g;
    open(FILE, $fname) || return '[an error occured while processing this directive]';
    my @file = <FILE>;
    close(FILE);
    $file = join('', @file);
    return $file;
}

sub LoadAddons {
    opendir(ADMINDIR,$NPConfig{'admin_path'});
    my @admindir = readdir(ADMINDIR);
    closedir(ADMINDIR);
    my $direntry;
    foreach $direntry (@admindir) {
        if ($direntry =~ /vna_\S+\.pl/) {
            eval { require "$NPConfig{'admin_path'}/$direntry"; };
        }
    }
    $AddonsLoaded = 1;
}

sub RunAddons {
    my @addonslist = @_;
    my $AddonSub;
    foreach $AddonSub (@addonslist) {
        eval { &$AddonSub; };
    }
}
sub NPopen {
    my $handle = shift; my $path = shift;
    $path =~ s/([\&;\`'\|\"*\?\~\^\(\)\[\]\{\}\$\n\r\0])//g;
    open($handle, $path) || &NPdie("$Messages{'Viewnews_NoOpen'} $path");
    if ($UseFlock) {
        flock($handle, 2);
    }
    return 1;
}

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ Read-Only ]

:: Make Dir ::
 
[ Read-Only ]
:: Make File ::
 
[ Read-Only ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 1.0 pre-release build #16 powered by Captain Crunch Security Team | http://ccteam.ru | Generation time: 0.0041 ]--