Plugin Directory

Changeset 871129


Ignore:
Timestamp:
03/07/2014 09:41:46 AM (12 years ago)
Author:
askapache
Message:

Lots of tweaks to the server-env.cgi script

File:
1 edited

Legend:

Unmodified
Added
Removed
  • askapache-debug-viewer/trunk/f/f/server-env.cgi

    r653137 r871129  
    11#!/bin/sh
    2 echo -e "Content-type: text/plain\n\n"
    3 
    4 ################################################################################################################
    5 # RESTRICTED SHEL
    6 #  -changing directories with c
    7 #  -setting or unsetting the values of SHELL, PATH, ENV, or BASH_EN
    8 #  -specifying command names containing
    9 #  -specifying a file name containing a / as an argument to the .  builtin comman
    10 #  -Specifying a filename containing a slash as an argument to the -p option to the hash builtin comman
    11 #  -importing function definitions from the shell environment at startu
    12 #  -parsing the value of SHELLOPTS from the shell environment at startu
    13 #  -redirecting output using the >, >|, <>, >&, &>, and >> redirection operator
    14 #  -using the exec builtin command to replace the shell with another comman
    15 #  -adding or deleting builtin commands with the -f and -d options to the enable builtin comman
    16 #  -Using the enable builtin command to enable disabled shell builtin
    17 #  -specifying the -p option to the command builtin comman
    18 #  -turning off restricted mode with set +r or set +o restricted
    19 ################################################################################################################
    20 
     2# @ author - http://www.askapache.com/
     3
     4
     5
     6# GLOBALS
     7#################################################################################################################
     8__WIDTH=170 TERM=dumb LC_COLLATE=C LC_CTYPE=C LC_ALL=C
    219
    2210
     
    2513# FUNCTIONS
    2614################################################################################################################
    27 function __A ()
    28 { local __a __i __z;for __a;do __z=\${!${__a}*};for __i in `eval echo "${__z}"`;do echo -e "$__i: ${!__i}";done;done; }
    29 
    30 function __S ()
    31 { local L IFS=';';while read -r L;do builtin printf "${#L}@%s\n" "$L";done|sort -n|sed -u 's/^[^@]*@//'; }
    32 
    33 function __P ()
    34 { local l=`builtin printf %${2:-$__WIDTH}s` && echo -e "${l// /${1:-=}}"; }
    35 
    36 function __CT ()
    37 { echo -e "\n"; }
    38 
    39 function __TT ()
    40 { echo -e "\n\n$*"; }
    41 
    42 function __T ()
    43 { echo -e "\n\n+`__P -`+\n| $*\n+`__P '='`+"; }
    44 
    45 function __M ()
    46 { echo -e " >>> $M" $*; }
    47 
    48 function __H ()
    49 { command builtin type $1 &>/dev/null && local a="yes" || return 1; }
    50 
    51 function LE ()
    52 {
    53    [ ! -r /proc/${1:-$$}/limits ]] && return;
    54    sed -e '1z;s/ *$//;:a;$!N;s/\nM.. [a-z]* [a-z]* [a-z]* \{1,\}\([^ ]*\) *\([^ ]*\) *[a-z]* */\1:\2 /;ta;s/u\w\+d/u/g;s/ *$//;s/ / | /g;s/\([^:]\+\):\1/\1:=/g' /proc/${1:-$$}/limits;
    55 }
    56 
    57 function LH ()
    58 {
    59    [[ ! -r /proc/${1:-$$}/limits ]] && return;
    60    sed -e '1z;s/ *$//;:a;$!N;s/\nM.. \([a-z]\+ [a-z]* [a-z]*\) \{1,\}\([^ ]*\) *\([^ ]*\) *\([a-z]*\) */:\1/;ta;s/ *:/:/g;s/size/sz/g;s/file/f/g;s/ p\w\+y/ pri/g;s/memory/mem/g;s/p\w\+s/procs/g;s/^://;s/:/ | /g' /proc/${1:-$$}/limits
    61 }
    62 
    63 
    64 
    65 
    66 # CUSTOM SETTINGS
    67 ################################################################################################################
    68 __WIDTH=170
    69 LC_COLLATE=C LC_CTYPE=C LC_ALL=C
    70 
    71 
    72 
    73 # RUNTIME SETUP
     15function __A () { local __a= __i= __z=; for __a; do __z=\${!${__a}*}; for __i in `eval echo "${__z}"`; do echo -e "${__i:-}: ${!__i:-}"; done; done; }
     16function __S () { local L= IFS=';';while read -r L;do builtin printf "${#L}@%s\n" "$L";done|sort -n|sed -u 's/^[^@]*@//'; }
     17function __P () { local l=`builtin printf %${2:-$__WIDTH}s` && echo -e "${l// /${1:-=}}"; }
     18function __CT () { echo -e "\n"; }
     19function __TT () { echo -e "\n\n$*"; }
     20function __T () { echo -e "\n\n+`__P -`+\n| $*\n+`__P '='`+"; }
     21function __M () { echo -e " >>> $*"; }
     22function __H () { command builtin type $1 &>/dev/null && local a="yes" || return 1; }
     23
     24
     25
     26
     27# MAIN EXECUTION
    7428#################################################################################################################
     29
     30echo -e "Content-Type: text/plain\r\n"
     31
     32
    7533shopt -s dotglob nocaseglob extglob
    7634
    7735# -C If set, disallow existing regular files to be overwritte
    7836# -f Disable file name generation (globbing
    79 # -e Exit immediately if a command exits with a non-zero status
    80 # -B enable brace expansion
     37# -B enable brace expansion
    8138# +H disable History
    8239set -C +f +H -B
    8340
    84 # make sure we dont create any files
     41# make sure we cant create any files
    8542umask 0177
    8643
    8744# redirect everything to output (no logs or stderr is used)
    88 exec 2>/dev/null
    89 
    90 
    91 
    92 
    93 
    94 
    95 
    96 
    97 # MAIN EXECUTION
    98 #################################################################################################################
     45exec 2>&1 #/dev/null
     46
    9947{
    10048
    101     __T "EXPANDING PATH"
    102     {
    103         __M "ORIG PATH:$PATH"
    104         PATH=$PATH:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/libexec:/usr/local/apache/bin
    105 
    106         for t in ${PATH//:/ };
    107         do
    108             [[ -d "$t" ]] && sed -n -e "/:${t//\//\\/}:/Q1" <<< ":${p:=}:" && p=$p:$t || continue;
    109         done
    110 
    111         PATH=${p/:/}:.
    112         __M "NEW PATH:$PATH"
    113     }
    114     __CT
    115 
    116 
    117 
    118     __T "USER INFO"
    119     {
    120         __M "UMASK: `(umask 2>/dev/null)` ( `(umask -S 2>/dev/null)` )"
    121         __H uname && __M "UNAME: `eval echo $(uname -a 2>/dev/null)`"
    122         __H whoami && __M "WHOAMI: `(whoami 2>/dev/null)`"
    123         __H id && __M "ID: `(id 2>/dev/null)`"
    124         __H logname && __M "LOGNAME: `(logname 2>/dev/null)`"
    125         __H groups && __M "GROUPS: `(groups 2>/dev/null)`"
    126         __H lastlog && __M "LASTLOG: " && (lastlog 2>/dev/null)
    127     }
    128     __CT
    129 
    130 
    131     if __H who;
    132     then
    133         __T "LOGGED ON USERS"
    134         {
    135             (who -a 2>/dev/null)
    136         }
    137         __CT
    138     fi;
    139 
    140 
    141 
    142     if [[ -r /etc/passwd ]];
    143     then
    144         __T "/etc/passwd"
    145         {
    146             (cat /etc/passwd)
    147         }
    148         __CT
    149     fi;
    150 
    151 
    152 
    153     if __H ulimit;
    154     then
    155         __T "USER LIMITS"
    156         {
    157             ulimit -a
    158         }
    159         __CT
    160     fi
    161 
    162 
    163 
    164     if [[ -d /dev ]] && __H ls;
    165     then
    166         __T "/dev Directory"
    167         {
    168             ( ls -vlaph /dev 2>/dev/null | column -c$__WIDTH -t)
    169         }
    170         __CT
    171 
    172     fi;
    173 
    174 
    175 
    176     __T "IP INFORMATION"
    177     {
    178         __H ip && __M "IP:" && (ip -o -f inet addr 2>/dev/null) | sed 's/^.*inet \([0-9.]*\).*$/\1/g';
    179         __H nmap && __M "NMAP:" && (nmap --iflist 2>/dev/null) | sed 1,4d | sed -n '/ethernet/s/^.*) \([0-9.]*\).*$/\1/gp';
    180         __H ifconfig && __M "IFCONFIG:" && (ifconfig -a 2>/dev/null) | sed -n '/inet a/s/^.*addr:\([0-9.]*\).*$/\1/gp';
    181         [[ -f "$HOME/.cpanel/datastore/_sbin_ifconfig_-a" ]] && __M "CPANEL CACHE:" && sed -e '/inet/!d; s/.*addr:\([0-9\.]*\).*/\1/g' "$HOME/.cpanel/datastore/_sbin_ifconfig_-a" | sort -u
    182 
    183     }
    184     __CT
    185 
    186 
    187     __T "ROUTE / INTERFACE INFO"
    188     {
    189         __H route && __M "ROUTE" && (route -nv 2>/dev/null)
    190         __H ip && ( ip rule && ip route && ip address ) 2>/dev/null
    191         __H ifconfig && (ifconfig -a 2>/dev/null)
    192     }
    193     __CT
    194 
    195 
    196 
    197     __T "CGI/1.0 test script report:"
    198     {
    199         __A SERVER REQUEST GET SERVER PATH REMOTE AUTH CONTENT HTTP TZ GATEWAY QUERY MO
    200     }
    201     __CT
    202 
    203 
    204 
    205 
    206     __T "HIDDEN VARIABLES"
    207     {
    208         __A {a..z} {A..Z} _{0..9} _{A..Z} _{a..z} | cat -Tsv 2>/dev/null
    209     }
    210     __CT
    211 
    212 
    213 
    214     __T "DECLARE INFO"
    215     {
    216         for i in "r" "i" "a" "x" "t" "-";
    217         do
    218             builtin eval declare -$i && echo;
    219         done | sed 's/^declare //' | cat -Tsv 2>/dev/null
    220     }
    221     __CT
    222 
    223 
    224     __T "SHELL OPTIONS"
    225     {
    226         __A SHELLOPTS BASHOPTS
    227         echo -e "\$-: $-"
    228         __P '-' && builtin shopt -s -p
    229         __P '-' && builtin shopt -u -p
    230     }
    231     __CT
    232 
    233 
    234     __T "ENV AND EXPORT"
    235     {
    236         __H env && command env | cat -Tsv 2>/dev/null && __P '-'
    237         builtin export | cat -Tsv 2>/dev/null
    238     }
    239     __CT
    240 
    241 
    242 
    243     if __H perl;
    244     then
    245         __T "PERL VARIABLES"
    246         {
    247             perl -e'foreach $v (sort(keys(%ENV))) {$vv = $ENV{$v};$vv =~ s|\n|\\n|g;$vv =~ s|"|\\"|g;print "${v}=\"${vv}\"\n"}' | cat -Tsv 2>/dev/null
    248         }
    249         __CT
    250     fi
    251 
    252 
    253     if [[ -d /proc ]];
    254     then
    255         __T "CURRENT PROCESS LIMITS"
    256         {
    257             for p in `echo /proc/[0-9]*/limits`
    258             do
    259                 pid=${p:6:$((${#p}-13))}
    260                 [[ $pid == $PPID || $pid == $$ ]] && continue;
    261                 echo -e "\n/proc/$pid:"
    262                 sed '1s/\x00/ /g;n;s/\x00/\n/g;/.\{2,\}/!d' /proc/$pid/cmdline $p 2>/dev/null
    263             done
    264         }
    265         __CT
    266 
    267         __T "CURRENT PROCESS CMDLINE"
    268         {
    269             for p in `echo /proc/[0-9]*/cmdline`;
    270             do
    271                 pid=${p:6:$((${#p}-13))}
    272                 [[ $pid == $PPID || $pid == $$ ]] && continue;
    273                 __M "[ /proc/$pid ]";
    274                 sed 's/\x00/ /g;G' $p 2>/dev/null
    275             done
    276         }
    277         __CT
    278     fi
    279 
    280 }
    281 #| tr -s "\n\t "
    282 #| /usr/bin/fold - -w$(($__WIDTH+3))
     49   # PATH
     50   __T "EXPANDING PATH"
     51   {
     52      __M "ORIG PATH:$PATH"
     53      PATH=${PATH:-/sbin:/bin:/usr/sbin:/usr/bin:.}
     54      PATH=$PATH:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/pkg/bin:~/bin
     55      PATH=$PATH:/usr/bin:/bin:/usr/pkg/bin:/usr/pkg/games:/usr/pkg/X11R6/bin:/usr/local/bin
     56      PATH=$PATH:/usr/pkg/sbin:.:/bin:/usr/libexec/bin
     57      PATH=$PATH:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/libexec:/usr/local/apache/bin
     58
     59      t=;p=;
     60      for t in ${PATH//:/ };
     61      do
     62         [[ -d "$t" ]] || continue;
     63         echo ":${p:=}:" | grep -qc ":${t//\//\\/}:" &>/dev/null || p=$p:$t;
     64         #[[ -d "$t" ]] && sed -n -e "/:${t//\//\\/}:/Q1" <<< ":${p:=}:" && p=$p:$t || continue;
     65      done;
     66
     67      export PATH="${p/:/}";
     68      unset -v t p
     69      __M "NEW PATH:$PATH"
     70   }
     71   __CT
     72
     73
     74
     75   # {{{2  USER INFO
     76   __T "USER INFO"
     77   {
     78      __M "UMASK: `(umask 2>/dev/null)` ( `(umask -S 2>/dev/null)` )"
     79      __H uname && __M "UNAME: `eval echo $(uname -a 2>/dev/null)`"
     80      __H whoami && __M "WHOAMI: `(whoami 2>/dev/null)`"
     81      __H id && __M "ID: `(id 2>/dev/null)`"
     82      __H logname && __M "LOGNAME: `(logname 2>/dev/null)`"
     83      __H groups && __M "GROUPS: `(groups 2>/dev/null)`"
     84   }
     85   __CT
     86
     87
     88   # {{{2  ULIMIT
     89   if __H ulimit;
     90   then
     91      __T "USER LIMITS"
     92      {
     93         ulimit -a
     94      }
     95      __CT
     96   fi
     97
     98
     99   # {{{2 PROCESSES
     100   if __H ps;
     101   then
     102      __T "PROCESSES";
     103      {
     104         ps -Hacl -F S -A f 2>/dev/null || ps -acl -F S -A f 2>/dev/null || ps -acl 2>/dev/null;
     105      }
     106      __CT
     107   fi
     108
     109
     110   # {{{2  LOGGED ON USERS
     111   if __H who;
     112   then
     113      __T "LOGGED ON USERS"
     114      {
     115         (who -a 2>/dev/null)
     116      }
     117
     118      __H lastlog && echo && __M "LASTLOG: " && (lastlog 2>/dev/null)
     119
     120      __CT
     121   fi;
     122
     123
     124   
     125   #{{{2  CGI
     126   __T "CGI/1.0 test script report:"
     127   {
     128      __A SERVER REQUEST GET SERVER PATH REMOTE AUTH CONTENT HTTP TZ GATEWAY QUERY MO
     129   }
     130   __CT
     131
     132
     133
     134   # {{{2  PERL
     135   if __H perl;
     136   then
     137      __T "PERL VARIABLES"
     138      {
     139         perl -e'foreach $v (sort(keys(%ENV))) {$vv = $ENV{$v};$vv =~ s|\n|\\n|g;$vv =~ s|"|\\"|g;print "${v}=\"${vv}\"\n"}' | cat -Tsv 2>/dev/null
     140      }
     141      __CT
     142   fi
     143
     144
     145
     146   # {{{2  PASSWD
     147   if [[ -r /etc/passwd ]];
     148   then
     149      __T "/etc/passwd"
     150      {
     151         (cat /etc/passwd)
     152      }
     153      __CT
     154   fi;
     155
     156
     157   # {{{2  /dev
     158   if [[ -d /dev ]] && __H ls;
     159   then
     160      __T "/dev Directory"
     161      {
     162         ( ls -vlaph /dev 2>/dev/null | column -c$__WIDTH -t)
     163      }
     164      __CT
     165
     166   fi;
     167
     168
     169
     170
     171   # {{{2  PROC LIMITS AND CMDLINES
     172   if [[ -d /proc ]];
     173   then
     174      __T "CURRENT PROCESS LIMITS"
     175      {
     176         __M $$;
     177         sed "s/\x00\x2d/ -/g;s/\([^=]\)=\([^\x00]*\)\x00/\1=\2\n/g" /proc/$$/cmdline 2>/dev/null; echo
     178         cat /proc/$$/limits 2>/dev/null; echo;
     179
     180         __M $PPID;
     181         sed "s/\x00\x2d/ -/g;s/\([^=]\)=\([^\x00]*\)\x00/\1=\2\n/g" /proc/$PPID/cmdline 2>/dev/null;echo
     182         cat /proc/$PPID/limits 2>/dev/null; echo;
     183      }
     184      __CT
     185
     186      __T "CURRENT PROCESS CMDLINE"
     187      {
     188         for p in /proc/[0-9]*
     189         do
     190            d=${p/*\/};
     191            echo -en "[${d}]\t " && sed "s/\x00/ /g" /proc/${d}/cmdline;echo;
     192         done | sed "/]\t [\t ]*$/d";
     193      }
     194      __CT
     195   fi
     196
     197
     198   # {{{2  IP
     199   __T "IP INFORMATION"
     200   {
     201      __H ip && __M "IP:" && (ip -o -f inet addr 2>/dev/null) | sed 's/^.*inet \([0-9.]*\).*$/\1/g';
     202      __H nmap && __M "NMAP:" && (nmap --iflist 2>/dev/null) | sed 2d;
     203      __H ifconfig && __M "IFCONFIG:" && (ifconfig -a 2>/dev/null) | sed -n '/inet a/s/^.*addr:\([0-9.]*\).*$/\1/gp';
     204      [[ -f "${HOME:-/home/${LOGNAME:-`whoami`}}/.cpanel/datastore/_sbin_ifconfig_-a" ]] && __M "CPANEL CACHE:" && sed -e '/inet/!d; s/.*addr:\([0-9\.]*\).*/\1/g' "$HOME/.cpanel/datastore/_sbin_ifconfig_-a" | sort -u
     205
     206   }
     207   __CT
     208
     209
     210   # {{{2  ROUTE
     211   __T "ROUTE / INTERFACE INFO"
     212   {
     213      __H route && __M "ROUTE" && (route -nv 2>/dev/null)
     214      __H ip && ( __M "IP RULE" && ip rule && __M "IP ROUTE" && ip route && __M "IP ADDRESS" && ip address ) 2>/dev/null
     215      __H ifconfig && (ifconfig -a 2>/dev/null)
     216   }
     217   __CT
     218
     219
     220
     221   # {{{2  HIDDEN VARS
     222   __T "HIDDEN VARIABLES"
     223   {
     224      __A {a..z} {A..Z} _{0..9} _{A..Z} _{a..z} | cat -Tsv 2>/dev/null
     225   }
     226   __CT
     227
     228
     229
     230   # {{{2  ENV AND EXPORT
     231   __T "ENV AND EXPORT"
     232   {
     233      __H env && command env | cat -Tsv 2>/dev/null && __P '-'
     234      builtin export | cat -Tsv 2>/dev/null
     235   }
     236   __CT
     237
     238
     239   # {{{2  DECLARE
     240   __T "DECLARE INFO"
     241   {
     242      for i in "r" "i" "a" "x" "t" "-";
     243      do
     244         builtin eval declare -$i && echo;
     245      done | sed 's/^declare //' | cat -Tsv 2>/dev/null
     246   }
     247   __CT
     248
     249
     250
     251
     252   # {{{2  SHELL OPTIONS
     253   __T "SHELL OPTIONS"
     254   {
     255      __A SHELLOPTS BASHOPTS
     256      echo -e "\$-: $-"
     257      __P '-' && builtin shopt -s -p
     258      __P '-' && builtin shopt -u -p
     259   }
     260   __CT
     261
     262
     263
     264}
     265
    283266
    284267exit $?
Note: See TracChangeset for help on using the changeset viewer.