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
![]
!![]
!{}
!!{}
!!""
!""
[]=={}
[]==""
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
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