From 94098cb2e007b3eccb12b483c9a6ec3a117e2b0e Mon Sep 17 00:00:00 2001 From: overflowerror Date: Tue, 21 Nov 2017 22:33:36 +0100 Subject: [PATCH] full cgi support. \o/ + some other stuff --- 404.html | 4 +- README.md | 1 + home/stuff/add.sh | 4 +- home/test/cgi-test-c.c | 18 ++++ home/test/cgi-test-c.cgi | Bin 0 -> 8744 bytes home/test/cgi-test-shell.cgi | 5 ++ home/test/cgi-test.c | 8 -- home/test/cgi-test.cgi | Bin 8640 -> 0 bytes index.sh | 18 ++-- response.sh | 161 +++++++++++++++++++++++++++++------ server.sh | 12 ++- 11 files changed, 185 insertions(+), 46 deletions(-) create mode 100644 home/test/cgi-test-c.c create mode 100755 home/test/cgi-test-c.cgi create mode 100755 home/test/cgi-test-shell.cgi delete mode 100644 home/test/cgi-test.c delete mode 100755 home/test/cgi-test.cgi diff --git a/404.html b/404.html index 6c51e5b..326ac61 100644 --- a/404.html +++ b/404.html @@ -5,6 +5,8 @@

Not found

- The resource [path] was not found on server [host]. + The resource [path] was not found on the server. +
+ [signature] diff --git a/README.md b/README.md index 484a341..147dc96 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@ Requirements - an up-to-date version of bash - socat (for networking) - python (for url-encoding) +- dig (for reverse lookup) - some other basic tools, like sed, grep, awk, getopt Usage diff --git a/home/stuff/add.sh b/home/stuff/add.sh index 81c87c6..76a926a 100755 --- a/home/stuff/add.sh +++ b/home/stuff/add.sh @@ -2,7 +2,7 @@ . $1 -if test "${server[query]}" == ""; then +if test "${server[queryString]}" == ""; then setStatusCode 200 cat< +#include +#include + +int main() { + + if (strlen(getenv("QUERY_STRING")) == 0) { + printf("Status: 302 Found\n"); + printf("Location: ?foo=bar\n\n"); + } else { + printf("Content-Type: text/plain\n\n"); + + printf("This Server is running %s.\n", getenv("SERVER_SOFTWARE")); + printf("The query string is %s.\n", getenv("QUERY_STRING")); + } + + return 0; +} diff --git a/home/test/cgi-test-c.cgi b/home/test/cgi-test-c.cgi new file mode 100755 index 0000000000000000000000000000000000000000..767b701685411e82d5691722fac52461d372a1a8 GIT binary patch literal 8744 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 Xx}0;nth)&+h3tDM!RMa;Zu@@&PT - -int main() { - - printf("Hello World"); - - return 0; -} diff --git a/home/test/cgi-test.cgi b/home/test/cgi-test.cgi deleted file mode 100755 index f2e944b1c6b7aa1dc31516fc10eab89b06981f86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8640 zcmeHMZ){W76~B%N2@o7Zp$)K&w+=Sw6yrci!&+85f8YfL$U-PgYj`;EOXAJ3Bm0>p zsM65VqDF-lY5l-7ZK^g^>!wO$)1>jKgHfTjA13(FiLINKP3;uAp=DxYOjF~XbKm(n z&(F?UX&?558$F+UfA{>(J@@~ge66czPfZ}85Q6ISic_a*T_lE#^@u1HQ*CM){ccpB zP)iAB)tF@a-b$wlykgd0`#k1c}d7Qwm92dmgo)P6(UT&-$6m&!Q9%Cd$g64r1klSrpd z+LUAsEAJ$7jy0A@Wt7$3zu!vQIeR3PckEpM{*H7uWA`Tp)2ux*md%K^rL27?tUl4} zNGI}nJMYq~lK1v>w|7|EBikc8wWl>oI-O)d|0#v>Qdpl_rU*YHb;A6?xIZO>a7N|{ z@R;CR!iHu7NBUZ$i?bT{JHibQ&f^7P#)D%HaNev3_pTFj9^5-m?s{;Ua=M5n@slyM z24|R4f2lX0t9^O7q0DD4IW@&==G5!;S2TxziaUQoS;fsirQgPlF^X||l(TNm6e(=} zI;DrtF~FhaR`>MvW9IZ9&8c_idi#6M*8Y&HZ=PMbLyO%FB#LVz#QA&U#!k-JJxK}k zY%Pn!=GMFB^n2#i-O!1(+bp23|uv@&pSIU{ocG2{Wb?DEAfdXxQky8B^^cRj!MdUFo>0@i#uZqGsjgt6h2+kv2y7Va)^@5d5S*Hw@Iq@ zQ22$K_E6LF!LE>Tc1e3^%b8j;6g|Dv47E+w?GMFrp|*G^8V_x04;iFK`t6~5y)V2@ z^jFA^ciyqdd*NOS+-re*EpV>|KD-5R4#T+%4B1vnXRHRvh{|C}t~shx4nylCALqOc zlE&VEYaz~idT$^d}5V@uo&_o0#89VHn!r|<3P_?)q&(;iGEGDd4;MGmJ-HkYDhD0w$q1??rE%qf>0Vi@FrLcsr3&M&9IsR8pK`ojpi z@WABfYV}f8{rgJqCFS~S6y|+7zLrk@h8NQDpt_&lQL5n&DBSle1n_?!=q2<~5hJGK1ng_2LxitZmGkS6#yy55I2O8G4Oy zZij2Kq1rvNKL@QVr)4W44tn zjEzka#gno~(M||Yn%UW>ti3%4+v7df!99Bpb@f~Q@%ElBE&`u_tguFw> zV&3P#idRT~HZ$F4M=G-X4bn>Hv({)LljQfw?t`S2Ol7P>-li%pc*j+w^k6V zY7dweJ$a%5`7N~SV`lj?YPq{AlAj!N5`!e2oGV8Wqc>PPH?AU?tYb&w?cL2zVnk9S znL=c+kfOKlR8mDaHJZqesz`D&L-t(hl;jf(a5EPdh52s~(|f zWF$*T$DW{H9&e|dB{#VKSA5Br(1Kogg9VFHX$=14vv-}i&ymW()^B<%^dES8a4p<9CynLJ! zAvZx$q@UkO_#HZvqx|y{frS6q-hJDoIzW8Bqkw-=B9NCTj{`58+)m)*KJf%$d=~&8 z=Tpe@l;;g>!yEYj5q#$WALrPT6lM4iJ;<+6KHp)GHl%?{Quu!V1y+1MVG8&$;X~dK zMU?Na|I@;67d@PxOVY#VHuLkJCyd)fwx!ZJJ1Pa@z9(k1uZXjprq9do6&|F)N}hoK zgFwDWd0zgw@FC$ZO!(8^_VKYFL;k|o;V2jOzUSlP-VTZTEA*v%kW@bqKKc*m3P^u> ze*TYr{Nr*CgM6%1k{j{!f9~VIBz#Ez|A#mD+wV=v4AF=CG|rRwf2Lm_X~?&U+vwrr zJ~JZ^AwyH_u4@F}_hQ`i0jAZ~3@K zUE@koh`OTm3qIsuDaXq%-M6Fwqr`M0;6dK?@o~O2gbzPq20WzaDZ&`)kMm+wh<<%( z4$xJQ0LG#v#EpReX&(;0S7PjYRgX&f$ED#vPMO>2gFn0$ap3s{-!&jV7w>l?JAKAc TE_7E>q#FO06yP8Ke*S*|*;7Q* diff --git a/index.sh b/index.sh index cf0f5a1..7b3eec9 100755 --- a/index.sh +++ b/index.sh @@ -8,10 +8,10 @@ cat < - Index of ${server[path]} + Index of ${server[scriptName]} -

Index of ${server[path]}

+

Index of ${server[scriptName]}


@@ -30,23 +30,23 @@ cat < EOF -for file in $(ls -a "${server[real_path]}"); do - if test "$file" = ".." -a "${server[path]}" = "/"; then +for file in $(ls -a "${server[scriptFilename]}"); do + if test "$file" = ".." -a "${server[scriptName]}" = "/"; then continue; fi cat < EOF @@ -55,7 +55,7 @@ done cat <
- ${headers[Host]} (${settings[server]}) + ${server[serverSignature]} EOF diff --git a/response.sh b/response.sh index 57458d6..6282597 100755 --- a/response.sh +++ b/response.sh @@ -8,8 +8,16 @@ eval "$(cat $settingsfile)" # declare settings array declare -A server server[remoteAddress]="$SOCAT_PEERADDR" server[remotePort]="$SOCAT_PEERPORT" -server[localAddress]="$SOCAT_SOCKADDR" -server[localPort]="$SOCAT_SOCKPORT" +server[remoteHost]="$(dig +noall +answer -x $SOCAT_PEERADDR | awk '{ print $5 }')" +server[serverAddress]="$SOCAT_SOCKADDR" +server[serverPort]="$SOCAT_SOCKPORT" +server[serverName]="${settings[name]}" +server[serverAdmin]="${settings[admin]}" +server[serverSoftware]="${settings[server]}" +server[documentRoot]="$(realpath "${settings[home]}")" +server[requestTime]="$(date +%s)" +server[requestTimeFloat]="$(($(date +%s%N)/1000))" +server[requestTimeReadable]="$(date --rfc-3339=ns)" declare -A headers first=1 @@ -19,13 +27,15 @@ while true; do break fi if test $first = 1; then - server[method]="$(echo "$header" | awk '{ print $1 }')" + server[requestMethod]="$(echo "$header" | awk '{ print $1 }')" server[http]="$(echo "$header" | awk '{ print $3 }' | awk -F/ '{ print $2} ')" - server[user_path]=$(echo "$header" | awk '{ print $2 }') - server[path]="$(realpath -sm "${server[user_path]}")" - server[query]="$(echo "${server[path]}" | awk -F? '{for (i=2; i<=NF; i++) print $i}')" - server[path]="$(echo "${server[path]}" | awk -F? '{ print $1 }')" - server[real_path]="$(realpath -sm "${settings[home]}${server[path]}")" + server[https]="off" + server[serverProtocol]="$(echo "$header" | awk '{ print $3 }')" + server[request_unchecked]=$(echo "$header" | awk '{ print $2 }') + server[requestURI]="$(realpath -sm "${server[request_unchecked]}")" + server[queryString]="$(echo "${server[requestURI]}" | awk -F? '{for (i=2; i<=NF; i++) print $i}')" + server[scriptName]="$(echo "${server[requestURI]}" | awk -F? '{ print $1 }')" + server[scriptFilename]="$(realpath -sm "${settings[home]}${server[scriptName]}")" first=0 continue fi @@ -38,11 +48,30 @@ if test "$first" = 1; then exit 1 fi +server[httpAccept]="${headers[Accept]}" +server[httpAcceptCharset]="${headers[Accept-Charset]}" +server[httpAcceptEncoding]="${headers[Accept-Encoding]}" +server[httpAcceptLanguage]="${headers[Accept-Language]}" +server[httpConnection]="${headers[Accept-Connection]}" +server[httpHost]="${headers[Host]}" +server[httpReferer]="${headers[Referer]}" +server[httpUserAgent]="${headers[User-Agent]}" + +server[remoteUser]="" # TODO not implemented +server[redirectRemoteUser]="" # TODO not implemented +server[authType]="" # TODO not implemented + +server[serverSignature]="" +if true; then # TODO add condition setting + server[serverSignature]="${server[httpHost]} (${server[serverSoftware]})" +fi + placeholder() { declare -A tokens - tokens[path]="${server[path]}" - tokens[host]="${headers[Host]}" - tokens[server]="${settings[server]}" + tokens[path]="${server[scriptName]}" + tokens[host]="${server[httpHost]}" + tokens[server]="${server[serverSoftware]}" + tokens[signature]="${server[serverSignature]}" text="$(cat)" @@ -76,13 +105,41 @@ removeStatusContainer() { rm "$container" } -isExecutable() { +isExecutableShell() { path="$1" if test ! -x "$path" -o ! -f "$path"; then return 1 fi ext="$(echo "$path" | awk -F. '{ print $NF }')" - for i in ${settings[executeable]}; do + for i in ${settings[shellExec]}; do + if test "$ext" = "$i"; then + return 0 + fi + done + return 1 +} + +isExecutableCGI() { + path="$1" + if test ! -x "$path" -o ! -f "$path"; then + return 1 + fi + ext="$(echo "$path" | awk -F. '{ print $NF }')" + for i in ${settings[cgiExec]}; do + if test "$ext" = "$i"; then + return 0 + fi + done + return 1 +} + +isExecutablePHP() { + path="$1" + if test ! -x "$path" -o ! -f "$path"; then + return 1 + fi + ext="$(echo "$path" | awk -F. '{ print $NF }')" + for i in ${settings[phpExec]}; do if test "$ext" = "$i"; then return 0 fi @@ -101,13 +158,13 @@ responseHeaders[Connection]="max=1" type="" -if test ! -e "${server[real_path]}"; then +if test ! -e "${server[scriptFilename]}"; then status=404 content="$(placeholder < ./404.html)" type="-" -elif test "${settings[index]}" = "true" -a -d "${server[real_path]}"; then +elif test "${settings[index]}" = "true" -a -d "${server[scriptFilename]}"; then container="$(addStatusContainer)" content="$(./index.sh "$baseSource" "$container" "$(declare -p settings)" "$(declare -p server)" "$(declare -p headers)")" status=$(head -n 1 "$container") @@ -121,10 +178,10 @@ elif test "${settings[index]}" = "true" -a -d "${server[real_path]}"; then removeStatusContainer "$container" type="index" -elif $(isExecutable "${server[real_path]}"); then +elif isExecutableShell "${server[scriptFilename]}"; then container="$(addStatusContainer)" - pushd "$(dirname "${server[real_path]}")" > /dev/null - content=$("${server[real_path]}" "$baseSource" "$container" "$(declare -p settings)" "$(declare -p server)" "$(declare -p headers)") + pushd "$(dirname "${server[scriptFilename]}")" > /dev/null + content=$("${server[scriptFilename]}" "$baseSource" "$container" "$(declare -p settings)" "$(declare -p server)" "$(declare -p headers)") popd > /dev/null status=$(head -n 1 "$container") if test "$status" = ""; then @@ -139,12 +196,67 @@ elif $(isExecutable "${server[real_path]}"); then removeStatusContainer "$container" - type="exec" + type="shell" +elif isExecutableCGI "${server[scriptFilename]}"; then + content="" + status=200 + headerDone=0 + while read line; do + if test $headerDone = 1; then + content="${content}${line}"$'\n' + continue + fi + if test "$(echo "$line" | grep ':')" = ""; then + headerDone=1 + continue + fi + if test "$(echo "$line" | awk -F: '{print $1}')" = "Status"; then + status="$(echo "$line" | awk '{print $2}')" + continue + fi + responseHeaders[$(echo "$line" | awk -F: '{ print $1 }')]="$(echo "$line" | awk '{for (i=2; i<=NF; i++) print $i}')" + done <<< $( # open subshell + export GATEWAY_INTERFACE="CGI/1.1" + + export AUTH_TYPE="${server[authType]}" + export DOCUMENT_ROOT="${server[documentRoot]}" + export HTTP_ACCEPT_CHARSET="${server[httpAcceptCharset]}" + export HTTP_ACCEPT_ENCODING="${server[httpAcceptEncoding]}" + export HTTP_ACCEPT_LANGUAGE="${server[httpAcceptLanguage]}" + export HTTP_ACCEPT="${server[httpAccept]}" + export HTTP_CONNECTION="${server[httpConnection]}" + export HTTP_HOST="${server[httpHost]}" + export HTTPS="${server[https]}" + export HTTP_USER_AGENT="${server[httpUserAgent]}" + export QUERY_STRING="${server[queryString]}" + export REDIRECT_REMOTE_USER="${server[redirectRemoteUser]}" + export REMOTE_ADDR="${server[remoteAddress]}" + export REMOTE_HOST="${server[remoteHost]}" + export REMOTE_PORT="${server[remotePort]}" + export REMOTE_USER="${server[remoteUser]}" + export REQUEST_METHOD="${server[requestMethod]}" + export REQUEST_TIME_FLOAT="${server[requestTimeFloat]}" + export REQUEST_TIME="${server[requestTime]}" + export REQUEST_URI="${server[requestURI]}" + export SCRIPT_FILENAME="${server[scriptFilename]}" + export SCRIPT_NAME="${server[scriptName]}" + export SERVER_ADDR="${server[serverAddress]}" + export SERVER_ADMIN="${server[serverAdmin]}" + export SERVER_NAME="${server[serverName]}" + export SERVER_PORT="${server[serverPort]}" + export SERVER_PROTOCOL="${server[serverProtocol]}" + export SERVER_SIGNATURE="${server[serverSignature]}" + export SERVER_SOFTWARE="${server[serverSoftware]}" + + ${server[scriptFilename]} + ) + + type="cgi" else status=200 - #responseHeaders['Content-Type']="$(file -b --mime-type ${server[real_path]})" - responseHeaders['Content-Type']="$(mimetype -b "${server[real_path]}")" - content="$(cat ${server[real_path]})" + #responseHeaders['Content-Type']="$(file -b --mime-type ${server[scriptFilename]})" + responseHeaders['Content-Type']="$(mimetype -b "${server[scriptFilename]}")" + content="$(cat ${server[scriptFilename]})" type="static" fi @@ -152,13 +264,14 @@ fi length=$(printf "%s" "$content" | wc -c) if test "${settings[verbose]}" -ge "0"; then - echo "$(date --rfc-3339=ns) - ${server[remoteAddress]}:${server[remotePort]} - ${headers[Host]}${server[path]} - $type - $status - $length bytes" 1>&2 + echo "$(date --rfc-3339=ns) - ${server[remoteAddress]}:${server[remotePort]} - ${headers[Host]}${server[queryURI]} - $type - $status - $length bytes" 1>&2 fi echo -en "HTTP/1.1 $status $(./statusString.sh $status)\r\n" echo -en "Content-Length: $length\r\n" for key in ${!responseHeaders[@]}; do - echo -en "$(urlencode "$key"): $(urlencode "${responseHeaders[$key]}")\r\n" + #echo -en "$(urlencode "$key"): $(urlencode "${responseHeaders[$key]}")\r\n" + echo -en "$key: ${responseHeaders[$key]}\r\n" done echo -en "\r\n" printf "%s" "$content" diff --git a/server.sh b/server.sh index 6614232..e91ce37 100755 --- a/server.sh +++ b/server.sh @@ -27,7 +27,7 @@ echoOnVerbose() { progname="$0" -OPTS=$(getopt -o "p:vqh:" -l "port:,verbose,quiet,home:" -- $@) +OPTS=$(getopt -o "p:vqh:n:" -l "port:,verbose,quiet,home:,name:admin:" -- $@) if test $? != 0; then exit $EXIT_FAILURE fi @@ -35,6 +35,8 @@ fi eval set -- "$OPTS" home="./home/" +name="localhost" +admin="admin@localhost" while true; do case "$1" in @@ -42,6 +44,8 @@ while true; do -v|--verbose) verboselevel=$(($verboselevel+1)); shift;; -q|--quiet) verboselevel=-1; shift;; -h|--home) home=$2; shift 2;; + -n|--name) name=$2; shift 2;; + --admin) admin=$2; shift 2;; --) shift; break;; esac done @@ -55,8 +59,12 @@ settingsfile="/dev/shm/wserver-$$" declare -A settings settings[serverDirectory]="$(pwd)" settings[home]="$home" +settings[name]="$name" +settings[admin]="$admin" settings[verbose]=$verboselevel -settings[executeable]="sh php py cgi" +settings[shellExec]="sh" +settings[cgiExec]="cgi" +settings[phpExec]="php" settings[server]="ShellSpider V1" settings[index]="true" declare -p settings > $settingsfile
- $file + $file - $(file -b "${server[real_path]}/$file") + $(file -b "${server[scriptFilename]}/$file") - $(if test ! -d "${server[real_path]}/$file"; then if test -x "${server[real_path]}/$file"; then echo yes; else echo no; fi; fi) + $(if test ! -d "${server[scriptFilename]}/$file"; then if test -x "${server[scriptFilename]}/$file"; then echo yes; else echo no; fi; fi) - $(if test ! -d "${server[real_path]}/$file"; then du -kh "${server[real_path]}/$file" | cut -f1; fi) + $(if test ! -d "${server[scriptFilename]}/$file"; then du -kh "${server[scriptFilename]}/$file" | cut -f1; fi)