Evasion Basics

Anotações e resumos dos meus estudos pessoais para a eWPTX

Base64 Encoding Evasion

A maioria dos sistemas de detecção utilizam o regex para encontrar palavras maliciosas. Imaginando que quero evadir de um sistema que procura pelas palavras: eval, alert, prompt, document.cookie

Normalmente se usa:

Ele não vai funcionar por causa do "document.cookie", uma alternativa seria:

Para esse exemplo também não vai funcionar por causa do "eval", outra possibilidade seria:

Outros métodos válidos:

URI Obfuscation Techiques

Utilizado principalmente para engenharia social, mas também pode ser usado em alguma situação que seja necessário ocultar a url, dar bypass em algum sistema ou diminuir o tamanho do payload

URL Shortening

Utilizado para encurtar a url, pode-se usar soluções prontas ou criar a sua própria solução

https://yourls.org/ -> Solução Open Source https://bitly.com/ -> Solução paga

colocando um '+' ao fim da url encurtada pelo bitly, é possível descobrir mais informações sobre o verdadeiro link

Outra forma de descobrir o link verdadeiro é realizando um cURL e analisando o header "Location" na resposta

URL Hostname Obfuscation

Referência para estudo [RFC 3986]: https://datatracker.ietf.org/doc/html/rfc3986#page-16

URL Authority Obfuscation

Obfuscating with Userinfo

Estrutura da URI segundo a rfc:

O componente Authority pode ter a seguinte estrutura:

O campo "userinfo" é usado para autenticação em aplicações, seguindo esse exemplo:

Quando o site não possui autenticação esse campo é ignorado. Isso permite usar esse campo para ofuscar informações, criando urls como a seguinte:

É possível usar caracteres unicode para deixar a url ainda mais convincente

Navegadores como o Firefox e o Opera, avisam o usuário final do redirecionamento. Já o Chrome não avisa nada

Obfuscating with Host

Um site pode ser acessado tanto por seu endereço DNS como por seu endereço IP, e esse endereço IP pode estar em diferentes formatos, como por exemplo, Dword, Hexadecimal, Octal

Como exemplo, o Google pode ser acessado usando os seguintes endereços:

Também é possível criar um endereço híbrido, mesclando dois ou mais formatos

Ferramenta para ajudar na conversão de formatos:

https://www.silisoftware.com/tools/ipconverter.php

JavaScript Obfuscation Techniques

Existem várias formas de realizar encoding com JavaScript, uma das formas mais interessantes é utilizando uma técnica chamada "Non-alphanumeric". Basicamente essa técnica consiste em utilizar encodes com caracteres não alfa numéricos

String Casting

No JavaScript é possível criar variáveis da seguinte forma:

Booleans

False
True

![]

!![]

!{}

!!{}

!!""

!""

[]=={}

[]==""

Por exemplo, para retornar a string "true" ou "false", pode-se usar os exemplos acima

Também é possível criar números, por exemplo, o 0 pode ser criado da seguinte forma:

True é igual a 1, False é igual a 0. Com isso é possível gerar o número 1 usando TRUE+FALSE e 2 usando TRUE+TRUE

Number
Non-alphanumeric representations

0

+[] , +"" , ![]+![]

1

+!![] , ![]+!"" , ![]+!![] , []*[] , ++[[]][+[]]

2

!![]+!![] , ++[++[[]][+[]]][+[]]

3

!![]+!![]+!![]

4

!![]+!![]+!![]+!![] , (!![]+!![])*(!![]+!![])

5

!![]+!![]+!![]+!![]+!![]

Generate 'alert' string

Para gerar uma palavra é preciso usar um output nativo do JavaScript e extrair o caractere desejado. por exemplo:

Então, para extrair p caractere "a" podemos usar o NaN e acessar a posição 1

O restante pode ser gerado usando as seguintes mensagens:

l

faLse

e

truE, falsE ou [objEct ObjEct]

r

tRue

t

True ou infiniTy

Existem algumas ferramentas baseadas nessas técnicas

https://utf-8.jp/public/jjencode.html https://utf-8.jp/public/aaencode.html https://jsfuck.com

JavaScript Compressing

Minifying

O processo de "minifying" no código JavaScript consiste em remover todos os caracteres desnecessários do código sem alterar a funcionalidade original. Basicamente todos os caracteres que são utilizados para deixar o código mais legível são removidos.

https://developers.google.com/closure/compiler/ https://yui.github.io/yuicompressor/ https://www.crockford.com/jsmin.html http://dean.edwards.name/packer/

Packing

O "packing" comprime o código gerado com o minifying encurtando os nomes de variáveis, funções e outras operações. A ideia é deixar o código ilegível

http://dean.edwards.name/packer/

PHP Obfuscation Techniques

Assim como o JavaScript, o PHP é uma linguagem de tipagem dinâmica. Isso permite fazer coisas como Type Juggling. Basicamente no PHP o tipo da variável é determinado pelo contexto

Numerical Data Types

Com o tipo de dado numérico é possível acessar elementos dentro de uma string ou de um array

O seguinte exemplo também é válido:

Também é possível usando números de ponto flutuante

Exemplo gerando números "exóticos"

É possível combinar o exemplo acima com as funcionalidades de casting do PHP provides:

Last updated