#!/usr/bin/python # 07-07-04 # v1.0.0 # cgi-shell.py # A simple CGI that executes arbitrary shell commands. # Copyright Michael Foord # You are free to modify, use and relicense this code. # No warranty express or implied for the accuracy, fitness to purpose or otherwise for this code.... # Use at your own risk !!! # E-mail michael AT foord DOT me DOT uk # Maintained at www.voidspace.org.uk/atlantibots/pythonutils.html """ A simple CGI script to execute shell commands via CGI. """ ################################################################ # Imports try: import cgitb; cgitb.enable() except: pass import sys, cgi, os sys.stderr = sys.stdout from time import strftime import traceback from StringIO import StringIO from traceback import print_exc ################################################################ # constants fontline = '' versionstring = 'Version 1.0.0 7th July 2004' if os.environ.has_key("SCRIPT_NAME"): scriptname = os.environ["SCRIPT_NAME"] else: scriptname = "" METHOD = '"POST"' ################################################################ # Private functions and variables def getform(valuelist, theform, notpresent=''): """This function, given a CGI form, extracts the data from it, based on valuelist passed in. Any non-present values are set to '' - although this can be changed. (e.g. to return None so you can test for missing keywords - where '' is a valid answer but to have the field missing isn't.)""" data = {} for field in valuelist: if not theform.has_key(field): data[field] = notpresent else: if type(theform[field]) != type([]): data[field] = theform[field].value else: values = map(lambda x: x.value, theform[field]) # allows for list type values data[field] = values return data theformhead = """cgi-shell.py - a CGI by Fuzzyman

Welcome to cgi-shell.py -
a Python CGI

By Fuzzyman
"""+fontline +"Version : " + versionstring + """, Running on : """ + strftime('%I:%M %p, %A %d %B, %Y')+'.

' theform = """

Enter Command





""" bodyend = '' errormess = '

Something Went Wrong


'

################################################################
# main body of the script

if __name__ == '__main__':
    print "Content-type: text/html"         # this is the header to the server
    print                                   # so is this blank line
    form = cgi.FieldStorage()
    data = getform(['cmd'],form)
    thecmd = data['cmd']
    print theformhead
    print theform
    if thecmd:
        print '


' print 'Command : ', thecmd, '

' print 'Result :

' try: child_stdin, child_stdout = os.popen2(thecmd) child_stdin.close() result = child_stdout.read() child_stdout.close() print result.replace('\n', '
') except Exception, e: # an error in executing the command print errormess f = StringIO() print_exc(file=f) a = f.getvalue().splitlines() for line in a: print line print bodyend """ TODO/ISSUES CHANGELOG 07-07-04 Version 1.0.0 A very basic system for executing shell commands. I may expand it into a proper 'environment' with session persistence... """