Tool Test Vulnerabilità Messenger Injection

Stato
Discussione chiusa ad ulteriori risposte.

Misterioso

Utente Electrum
8 Febbraio 2009
380
14
193
192
Gentili utenti,

ormai é da troppo tempo che leggo di server che vengono bucati perché i responsabili non si sono degnati di prestare un minimo di attenzione a ciò che riguarda la sicurezza della macchina e dell'infrastruttura.

È già stato parlato della vulnerabilità riguardante l'injection possibile tramite la funzione RemoveFromList, il principio é abbastanza semplice e per chi vuole un breve riassunto, può leggere qui sotto:

Lato game, viene ricevuto un pacchetto i quali parametri NON sono filtrati ed é quindi possibile riprodurlo facilmente andando a manipolare i parametri in modo da eseguire queries malevoli nel database della vittima. L'attaccante ha infatti a disposizione 24 caratteri per eseguire il suo attacco.
Mi riferisco al seguente problema:
messengerinjection.png



Ma non sono qui a parlare né di cosa sia in dettaglio, né di come fixarlo perché ci sono decine e decine di topic in giro per la rete dove si scrive sui possibili fix.
Questo non é l'unico exploit presente nelle rev. che si trovano in giro, ma il concetto di base é sempre lo stesso...

Oggi vi rilascio una piccola DLL utile a chi ha aperto o aprirà un server di Metin2 che potete usare per testare se la vostra revisione é affetta da questo problema o meno.

Ho compilato 2 versioni di DLL in modo da poterla usare sia sui client che usano Python v2.2 sia su quelli che usano Python v2.7 (premetto che ho solo testato quella per Python 2.7):
MessengerInjectionDLL_Py2.2_TEST.dll - Versione per Python 2.2
MessengerInjectionDLL_Py2.7_TEST.dll - Versione per Python 2.7


Come usarla ?
1) Creare una tabella di nome test nel database player nel server MySQL del proprio server. Non importa quante colonne abbia, é più che sufficiente un campo solo. In seguito inserita un paio di dati a caso e chiudetela.

Ad esempio:
Codice:
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
  `name` varchar(255) NOT NULL,
  PRIMARY KEY (`name`)
) ;

INSERT INTO `test` VALUES ('A');
INSERT INTO `test` VALUES ('Caso');
INSERT INTO `test` VALUES ('Parole');
INSERT INTO `test` VALUES ('Scrivendo');
INSERT INTO `test` VALUES ('Sto');

2) Aprire il client del proprio server ed effettuare l'accesso con un personaggio qualsiasi

3) Quando il login é terminato, injectare la dll nel client con un qualsiasi injector e una volta completato, vi apparirà il messaggio seguente:
dll_injected.png


4) Premere il tasto F9 con il client attivo e in caso non ci siano problemi verrete notificati che la dll ha fatto il suo lavoro:
injection_complete.png
feedback.png


5) Verificare se la tabella creata prima sul database si é svuotata usando navicat o da shell. Nell'immagine mostrata si può vedere come la tabella é vuota e quindi la vulnerabilità (volutamente) é presente nella revisione che ho usato per fare questo topic.
check_results.png

Non é detto che funziona subito al primo colpo, per sicurezza provate un paio di volte in caso non succeda nulla.
- In caso la tabella si svuota: siete vulnerabili e dovete assolutamente correggere l'errore se non volete brutte sorprese.
- In caso la tabella rimanga piena: non é detto che sia completamente fixato ma c'é buona probabilità che questo problema é risolto.


Se qualcosa non fosse chiaro, fatemi sapere e vedrò se/come posso aiutarvi. Non sviluppo mai DLL quindi é possibile che non sia perfetta ma abbiamo tutti da imparare sempre qualcosa.

Cordiali saluti,
Misterioso


Nota:
Non rilascio il sorgente della DLL per evitare che certi bimbi si mettano a giocare a fare i piccoli hacker sui server privati (già ce ne sono troppi che si divertono con poco).
 
Stato
Discussione chiusa ad ulteriori risposte.