Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: 0x5d en 24 Abril 2013, 15:55 pm



Título: Tools Python CGI + Source | JaAViEr::0x5d
Publicado por: 0x5d en 24 Abril 2013, 15:55 pm
Hola, buen día damas y caballeros :P.

En esta ocasión vengo a mostrar el código de fuente de unas aplicaciones que pasé a Python CGI , para poder ejecutarlas en el servidor y no depender de una maquina con Python instalado...

Sin más preámbulos, los enlaces son los siguientes:
   
  • De/Codificar Base64 (http://vodale.com/tools/base_encode.py)
  • Cifrado Rot13/AtBash (Original 11Sep) (http://vodale.com/tools/cifrar_rotatbash.py)
  • Enviar peticiones POST a Url (http://vodale.com/tools/send_post.py)
Sus respectivos códigos de fuente...
De/Codificador Base64:
Código
  1. #!/usr/bin/python
  2. #Autor: 0x5d::JaAViEr
  3. #Twitter: @0x5d
  4. import cgi, os, base64
  5.  
  6. def form_inicial():
  7. form_html = '''
  8. <form action="" method="POST">
  9. <textarea name="content"></textarea><br />
  10. <select name="option">
  11. <option value="encode">Codificar</option>
  12. <option value="decode">Decodificar</option>
  13. </select><br />
  14. <input type="Submit" value="Enviar"><br />
  15. Creado bajo Python CGI.<br />
  16. Autor : JaAViEr (0x5d)
  17. </form>'''
  18. return base("De/Codificar Base64", form_html)
  19.  
  20. def base(title, content):
  21. code = '''
  22. <div class="ui-widget-content">
  23. <div class="ui-widget-header">%s</div>
  24. %s
  25. </div>
  26. '''%(title, content)
  27. return code
  28.  
  29. print "content-type:text/html\r\n\r\n"
  30.  
  31. print '''
  32. <title>De/Codificador Base64</title>
  33. <script src="http://code.jquery.com/jquery-latest.js"></script>
  34. <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.1/themes/cupertino/jquery-ui.css" />
  35. <script src="http://code.jquery.com/ui/1.9.1/jquery-ui.js"></script>
  36. <link rel="stylesheet" href="http://jqueryui.com/resources/demos/style.css" />
  37. <style>
  38. div {
  39. text-align:center;
  40. font-size:0.5cm;
  41. }
  42. input, select {
  43. height:0.7cm;
  44. font-size:0.4cm;
  45. }
  46. </style>
  47. '''
  48.  
  49. form = cgi.FieldStorage()
  50. opcion = form.getvalue("option")
  51. texto = form.getvalue("content")
  52. method = os.environ['REQUEST_METHOD']
  53. if method == "POST":
  54. if opcion:
  55. if opcion == "encode":
  56. print form_inicial()
  57. print base("Salida", "<textarea>"+cgi.escape(base64.b64encode(texto))+"</textarea>")
  58. elif opcion == "decode":
  59. print form_inicial()
  60. print base("Salida", "<textarea>"+cgi.escape(base64.b64decode(texto))+"</textarea>")
  61. else:
  62. print form_inicial()
  63. print base("Error", "Opción incorrecta")
  64. else:
  65. print form_inicial()
  66. print base("Error", "Por favor selecciona una opción")
  67. else:
  68. print form_inicial()
  69.  
  70.  
Cifrar Rot13 / Atbash:
Código
  1. #!/usr/bin/python
  2. #Autor: 11Sep
  3. #To CGI: 0x5d::JaAViEr
  4. #Twitter: @0x5d
  5. import cgi, os
  6.  
  7. def  formulario_inicial():
  8. form_html = '''
  9. <form action="" method="POST">
  10. Data: <br/>
  11. <textarea name="contenido"></textarea><br />
  12. <select name="opcion">
  13. <option value="rot13">ROT13</option>
  14. <option value="atbash">Atbash</option>
  15. </select><br />
  16. <input type="Submit"><br/>
  17. Programado por <b>11Sep</b><br />
  18. Programado en CGI por <b>JaAViEr::0x5d</b>
  19. </form>
  20. '''
  21. return base("Cifrar Rot13/Atbash", form_html)
  22.  
  23. def base(title, content):
  24. code = '''
  25. <div class="ui-widget-content">
  26. <div class="ui-widget-header">%s</div>
  27. %s
  28. </div>
  29. '''%(title, content)
  30. return code
  31.  
  32. def rot13(palabra):
  33.    Cifrado = ''
  34.    for i in palabra:
  35.        buff = ord(i)
  36.        if (buff >= 65 and buff <= 90) or (buff >= 97 and buff <= 122):
  37.            if ((buff + 13 > 90 and buff + 13 <= 103) or (buff + 13 > 122 and buff + 13 <= 135)):
  38.                Cifrado += chr(buff -13)
  39.            else:
  40.                Cifrado += chr(buff + 13)
  41.    return Cifrado
  42.  
  43. def atbash(palabra):
  44.    V1 = "abcdefghijklm"
  45.    V2 = "zyxwvutsrqpon"
  46.  
  47.    Buff = ""
  48.  
  49.    for i in range(len(palabra)):
  50.        for a in range(len(V1)):
  51.            if V1[a] == palabra[i]:
  52.                Buff += V2[a]
  53.            elif V2[a] == palabra[i]:
  54.                Buff += V1[a]
  55.    return Buff
  56.  
  57. print "content-type:text/html\r\n\r\n"
  58. print '''
  59. <title>Cifrar Rot13/Atbash 11Sep::JaAViEr</title>
  60. <script src="http://code.jquery.com/jquery-latest.js"></script>
  61. <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.1/themes/blitzer/jquery-ui.css" />
  62. <script src="http://code.jquery.com/ui/1.9.1/jquery-ui.js"></script>
  63. <link rel="stylesheet" href="http://jqueryui.com/resources/demos/style.css" />
  64. <style>
  65. div {
  66. text-align:center;
  67. font-size:0.5cm;
  68. }
  69. input, select {
  70. height:0.7cm;
  71. font-size:0.4cm;
  72. }
  73. </style>
  74. '''
  75. form = cgi.FieldStorage()
  76. method = os.environ['REQUEST_METHOD']
  77. contenido = form.getvalue("contenido")
  78. opcion = form.getvalue("opcion")
  79. if method == "POST":
  80. if opcion:
  81. if opcion == "rot13":
  82. print formulario_inicial()
  83. print base("Salida", "<textarea>"+rot13(contenido)+"</textarea>")
  84. elif opcion == "atbash":
  85. print formulario_inicial()
  86. print base("Salida", "<textarea>"+atbash(contenido)+"</textarea>")
  87. else:
  88. print formulario_inicial()
  89. print base("ERROR","Opción inválida")
  90. else:
  91. print formulario_inicial()
Enviar peticiones POST:
Código
  1. #!/usr/bin/python
  2. #Autor: 0x5d::JaAViEr
  3. #Twitter: @0x5d
  4. import cgi, os, urllib, sys
  5.  
  6. def base(title, content):
  7. code = '''
  8. <div class="ui-widget-content">
  9. <div class="ui-widget-header">%s</div>
  10. %s
  11. </div>
  12. '''%(title, content)
  13. return code
  14.  
  15. print "content-type:text/html\r\n\r\n"
  16. print '''
  17. <title>Enviar datos POST online :: JaAViEr(0x5d)</title>
  18. <script src="http://code.jquery.com/jquery-latest.js"></script>
  19. <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.1/themes/cupertino/jquery-ui.css" />
  20. <script src="http://code.jquery.com/ui/1.9.1/jquery-ui.js"></script>
  21. <link rel="stylesheet" href="http://jqueryui.com/resources/demos/style.css" />
  22. <style>
  23. div {
  24. text-align:center;
  25. font-size:0.5cm;
  26. }
  27. input, select {
  28. height:0.7cm;
  29. font-size:0.4cm;
  30. }
  31. </style>
  32. '''
  33. form = cgi.FieldStorage()
  34. method = os.environ['REQUEST_METHOD']
  35. campos = form.getvalue("campos")
  36. valores = form.getvalue("valores")
  37. url = form.getvalue("url")
  38. if method == "POST":
  39. dic = {}
  40. if not "http://" in url:
  41.  print base("ERROR!","No se puede conectar a %s<br/><a href='send_post.py'>Volver</a>"%cgi.escape(url))
  42.  sys.exit(1)
  43. if len(campos)>0 and len(valores)>0:
  44. for d,i in zip(campos.split(),valores.split(":-:")):
  45. dic['%s'%d] = i
  46. try:
  47. print urllib.urlopen(url, urllib.urlencode(dic)).read()
  48. except:
  49. print "No se puede conectar a", cgi.escape(url)
  50. else:
  51. form_html = '''
  52. <form action="" method="POST">
  53. URL: <input type="Text" name="url" value="http://"><br />
  54. Campos (separados por un espacio): <input type="Text" name="campos"><br />
  55. Campos (separados por ":-:"): <input type="Text" name="valores"><br />
  56. <input type="Submit"><br/>
  57. Funcionando bajo Python CGI<br />
  58. Author: <u>JaAViEr::0x5d</u>
  59. </form>
  60. '''
  61. print base("ENVIAR DATOS POR POST", form_html)
  62. form_example = '''
  63. URL: <input type="Text" name="url" value="http://web.com/login.php" disabled><br />
  64. Campos (separados por un espacio): <input type="Text" name="campos" value="user password" disabled><br />
  65. Campos (separados por ":-:"): <input type="Text" name="valores" value="0x5d:-:miclave123" disabled><br />
  66. <input type="Submit" onclick=alert("TEST");><br/>
  67. '''
  68. print base("Ejemplo de uso", form_example)

Fuente: http://www.vodale.com/blog/tools-python-cgi-source-jaavier0x5d/
   
Saludos , Javier.


Título: Re: Tools Python CGI + Source | JaAViEr::0x5d
Publicado por: Shell Root en 24 Abril 2013, 22:12 pm
Que tiene de diferente esto mismo en php, lo digo por el "servidor"!  :silbar:


Título: Re: Tools Python CGI + Source | JaAViEr::0x5d
Publicado por: 0x5d en 25 Abril 2013, 20:00 pm
Que tiene de diferente esto mismo en php, lo digo por el "servidor"!  :silbar:
La verdad no sé si sea mejor o peor, he visto tablas comparativas en la red.

Lo que me impulsa a programar a mi en Python CGI, es que es mi lenguaje favorito, llevo tiempo con él, por ende, se me es mucho más fácil programar una aplicación web con Python, que con PHP.

Saludos.