Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Drakaris

#81
Hacking / Re: Incinera tu sitio WEB!
29 Julio 2020, 17:07 PM
Cita de: WHK en 28 Julio 2020, 21:19 PM
También intenté verificar si el formulario de correos tiene inyección de cabeceras:

Código:

asunto=test%0a%0cReply-To:%20test@demo.com&mensaje=test%0a%0a.%0a&anonimo=on


Ya que mail() de php adjunta las cabeceras de manera plana separadas por saltos de línea \r\n, pero no se si realmente funcionó porque no puedo hacer que me llegue una copia del correo, asi que podrías validar tu mismo, si realiza el filtrado de saltos de línea o no.

Sí, el formulario es vulnerable a inyeccion de cabeceras, cuando heche un vistazo a mi correo, vi un correo recibido el 28 julio 9:23pm con el asunto "test Reply-To:test@demo.com | Cleanet". Y con el cuerpo: "test".

No se te envió porque esta programado para que se me envie a mi correo. Esto lo que hace es conectarse al gmail de mi cuenta (cleanet) y lo reenvia a la propia.
#82
Hacking / Re: Incinera tu sitio WEB!
29 Julio 2020, 13:10 PM
Cita de: WHK en 28 Julio 2020, 21:19 PM
El formulario de contacto tiene un problema, actualmente para enviar un correo debes resolver un valor en AES.
Buenas no entiendo, que es un valor en AES, yo programé el envio de correo gracias a PHPMailer

Cita de: WHK
Ok, este hash de la cookie la he reutilizado varias veces y el servidor me sigue diciendo que el mensaje ha sido enviado, asi que esto puede provocar un abuso del servicio.
Con esto te refieres a que, un cliente puede escribir un mensaje enviarlo, y enviar este mensaje, sin cambiarlo, tantas veces como quiera? O a que te refieres? Y con el mismo hash AES?

Cita de: WHK
También pude ver un directory listing: https://cleanet.260mb.net/lang/ , esto no causa ningún problema, pero si puede dar problemas serios si tienes algún directorio oculto que no esté protegido, por ejemplo, alguna carpeta donde almacenes los mensajes del formulario de contacto o algún plugin de php de terceros que pueda ser llamado de manera directa, como por ejemplo: https://cleanet.260mb.net/plugins/PHPMailer-master/src/
Ok, esto ya lo solucioné, inserté en un archivo .htaccess la siguiente linea:
Options -Indexes
Así ya cuando accedes a la url https://cleanet.260mb.net/lang/ te arrojará un errro 403
#83
Hacking / Re: Incinera tu sitio WEB!
28 Julio 2020, 18:01 PM
Cita de: kub0x en 28 Julio 2020, 16:44 PM
Un .txt no es válido, sino que el DNS debe contener la palabra elhacker.net en el registro TXT. Al estar hosteado en 260MB supongo que no podrás cambiar esa información.

Saludos.
Ahh! Entiendo... En este caso no puedo porque tendría que tocar el servidor DNS... Y poner la siguiente regla por ejemplo:

cleanet        IN        TXT        elhacker

Tendría que hacer algo así?
#84
Hacking / Re: Incinera tu sitio WEB!
28 Julio 2020, 10:45 AM
Me gusta la idea! He desarrollado mi web hace un tiempo y tengo curiosidad de que vulnerabilidades tengo.

Este sitio web esta hospeado en 260MB la url es https://cleanet.260mb.net
TXT: https://cleanet.260mb.net/hackme.txt
#85
La idea es que entiendas el código, si tienes cualquier duda sobre ello, pregunta  ;-)
#86
Cita de: @XSStringManolo en 26 Julio 2020, 19:08 PM
Claro que es posible, un archivo no es más que binario. Puedes comprimirlo, descomprimirlo, cifrarlo o lo que quieras.

Busca una librería de compresión y su documentación.
O un algoritmo e implementalo.
O invéntalo tu de 0.

Como dice nuestro compañero, un archivo es un binario. Yo hace más o menos un año o por allá en primero de grado medio de FP, quiera hacer un "backdoor", con conexion socket cliente-servidor. Donde el cliente podía subir un archivo de su escritorio local al servidor y viceversa. Una pena que perdiera ese códgo...

Por suerte el codigo esta en este foro: https://foro.elhacker.net/scripting/conexion_sockets_en_python_con_ip_publica-t493988.0.html;msg2194422
#87
Citar
¿Por qué si Indice = 0 todo va bien, pero si Indice = 1, la maquina me devuelve: "lista[Indice] *= 10
IndexError= list idex out of range "?
Porque al final de la lista, el la variable indice tendrá un numero mayor del indice existente.

para mostrar un elemento en la lista sería lo siguiente.

lista = [1,2,3,4,5,6,7,8,9]
lista[0] => output: 1
lista[1] => output: 2
lista[2] => output: 3
lista[3] => output: 4
lista[4] => output: 5
lista[5] => output: 6
lista[6] => output: 7
lista[7] => output: 8
lista[8] => output: 9
lista[9] => IndexError= list idex out of range

Ya que en la posición 9 ya no hay ningun elemento

SI la lista fuera:

lista = [1,2,3,4,5,6,7,8,9,10]
lista[0] => output: 1
lista[1] => output: 2
lista[2] => output: 3
lista[3] => output: 4
lista[4] => output: 5
lista[5] => output: 6
lista[6] => output: 7
lista[7] => output: 8
lista[8] => output: 9
lista[9] => 10

La posicion 9 tendría el valor 10, si ahora en esta lista pones un numero mayor este te saltará el error IndexError= list idex out of range

Esto lo tienes claro? Una vez entiendes esto... veamos tu codigo


#Modificar una lista.
lista = [1,2,3,4,5,6,7,8,9]
Indice = 0
for recorrer in lista:
   lista[Indice] *= 10
   Indice += 1
print(lista)


Este crea una lista y en la variable Indice el valor por defecto es 0. Después leemos todos los elementos de la lista con un bucle for

for recorrer in lista:
   lista[Indice] *= 10
   Indice += 1

El bucle para cada elemento ejecutará lo que haya dentro. así que:


   1º pasada:
          lista[0] *=10 # output 10
   2º pasada:
          lista[1] *=10 # output 20
   3º pasada:
          lista[2] *=10 # output 30
   ....
   9º pasada:
         lista[8] *=10 # output 90 (9*10)


Ahora pongamos la variable Indice como valor 1 por defecto

   1º pasada:
          lista[1] *=10 # output 20
   2º pasada:
          lista[2] *=10 # output 30
   3º pasada:
          lista[3] *=10 # output 40
   ....
   9º pasada:
         lista[9] *=10 # output ERROR IndexError= list idex out of range

Y como da un error, ya no puede acabar de ejecutar el script

Citar
¿Por qué es necesario el Indice en "lista[Indice] *= 10"?
Porque si no, no estas especificando ningún número para que pueda ejecutar la operacion.

Espero que te haya podido resolver tu duda!  :). Y suerte con tus estudios.
#88
Buenas!! Cuando he hecho la parte del proxy HTTP entendí su funcionamiento y todo, pero ahora en la parte de HTTPS. no acabo de entender muy bien.... Modifiqué el código, para ver mejor lo que esta pasando...


#CODE
class Send_data_tls:
def send_data(self, site, port, conn, data, addr):
context = ssl.create_default_context()
sender = context.wrap_socket(socket.socket(socket.AF_INET, socket.SOCK_STREAM), server_hostname=site)
sender.connect((site,port))
HEAD = "HEAD / HTTP 1.1\r\nHost: "+str(site)+"\r\n\r\n"
sender.send(HEAD.encode())
print("\033[1;32m data sent\033[0m: "+str(data))
receive = sender.recv(BUFFER_RECV)
print("\n\n"+str(receive))

def get_data(conn, addr, data):
#CODE
if port == 443:
SSL = Send_data_tls()
SSL.send_data(website, int(port), conn, data, addr)
else:
send_data(website, int(port), conn, data, addr)
#CODE
#CODE


Hice varias pruebas y ninguna me surgió nada interesante... donde pueda partir de alla. Cree la clase Send_data_tls con la funcion send_data (creo una clase por que me imagino que tengo que hacer algo antes de enviar los datos a la web HTTPS).

En la funcion get_data en la condicional cargo la clase en la variable SSL y ejecuto la funcion send_data().

Cuando lo ejecuto, me encuentro con algo MUY lógico...
[IMAGE] =>  https://drive.google.com/file/d/1rdieWydRAgjcHvhZ7qdK6hrk583-V2Hl/view?usp=sharing

Lo que pasa, y cuya cosa ya me dí cuenta es que, al conectarme a la web por 443
Citar
data sent: b'CONNECT platzi.com:443 HTTP/1.1\r\nUser-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0\r\nProxy-Connection: keep-alive\r\nConnection: keep-alive\r\nHost: platzi.com:443\r\n\r\n'

Este se conecta antes con el servidor Cloudflare (creo que la CA para autenticar el certificado), y este por alguna razon me recibe el 400 Bad Request.

El problema en que no entiendo que esta pasando y que debo hacer.... El cloudflare me esta rechazando.

Puedo hacer lo que quiero hacer con unicamente el modulo ssl?

Segun @el-brujo me dijo que con ese modulo me bastava. Hay algun post o sitio donde expliquen como funciona este modulo?
Cita de: el-brujo en 20 Julio 2020, 22:45 PM
Para navegar o en tu caso, para enviar una petición con datos sólo tienes que usar la librería SSL y ya:

Código:

import ssl


https://docs.python.org/3/library/ssl.html


Gracias
#89
Este archivo PHP contiene HTML, pureba de cambiar tu archivo a:

<?php
// [...]
      
echo '<h6>Este es el dato de ajax: <script type="text/javascript">document.write("un dato");';</script></h6>
// [...]

OJO! Son comillas simples en el echo porque dentro del string utilizas comillas dobles. [en el string de write() cambie las comillas simples por las dobles ya que sino produciria un error]
      v--------- PHP               v--------- PHP
'    '  '    '                       "    "  "    "
  ^-----^------- strings        ^-----^------- strings

      v--------- string               v--------- string
'    "  "    '                       "    '  '    "
  ^-----^------- strings        ^-----^------- strings

Ahora cuando llames con AJAX, la salida será lo que tengas en el echo. Y se añadirá al #box_element con la funcion append()
#90
Buenas! He modificado el código y al detectar que el puerto es 443 he creado la funcion send_data_tls() donde le envio los mismos argumentos.

if port == 443:
send_data_tls(website, int(port), data, conn)
else:
send_data(website, int(port), conn, data, addr)


funcion send_data_tls

def send_data_tls(site, port, data, conn):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sender = ssl.wrap_socket(s, do_handshake_on_connect=False, ssl_version=ssl.PROTOCOL_TLS)
sender.connect((site,port))
print("\033[1;32m data sent\033[0m: "+str(data))
sender.send(data)
while True:
reply = sender.recv(BUFFER_RECV)
sender.send(reply)
print("\033[1;32m data sent X2\033[0m: "+str(reply))



Cuando lo ejecuto me imprime lo siguiente en la pantalla:
imagenes:https://drive.google.com/drive/folders/1S4GZBjBUziGXvo_wNpVon8EkyoEs1tue?usp=sharing

Como se puede ver en las imagenes, la salida me imprime bién los datos a enviar:
Citarb'CONNECT platzi.com:443 HTTP/1.1\r\nUser-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0\r\nProxy-Connection: keep-alive\r\nConnection: keep-alive\r\nHost: platzi.com:443\r\n\r\n'

Pero cuando recibo la respuesta, recibo un erro 400 Bad Request:
Citar
b'HTTP/1.1 400 Bad Request\r\nServer: cloudflare\r\nDate: Wed, 22 Jul 2020 09:30:08 GMT\r\nContent-Type: text/html\r\nContent-Length: 155\r\nConnection: close\r\nCF-RAY: -\r\n\r\n<html>\r\n<head><title>400 Bad Request</title></head>\r\n<body>\r\n<center><h1>400 Bad Request</h1></center>\r\n<hr><center>cloudflare</center>\r\n</body>\r\n</html>\r\n'

Además me sale el siguiente error:
Citarssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:2162)

El error 400 indica que la petición que fue enviada no a podido ser procesada por algún tipo de error. Que puede estar causando este error?

En realidad no acabo de entender porque, yo me conecto a un sitio web por el puerto 443, y envio los datos envidos con data() a otro servidor, en este caso a Cloudflare. Es aquí que yo no entiendo que datos tengo que enviar o que debo de hacer. ¿Este es el paso donde se hace el handshake antes de conectarse al sitio web?